Our inspiration for this project all began from a discussion about the current state of the music and entertainment industry. We observed that streaming services such as Spotify, SoundCloud, and YouTube are all services that aren’t profitable, despite their widespread popularity. One major factor that is responsible for the loss-making nature of streaming services is the sheer cost of running the servers. Streaming-based applications must use servers to store data, receive data, and send data. Given the magnitude of data that is being passed through these servers, one can only imagine how expensive the costs to operate this server will be. Our solution to this problem is to use a decentralized, peer-to-peer network that can make use of connected devices to collectively stream data to the client’s device.
What it does
The bit.wav application essentially makes use of pre-existing media files that are stored on devices connected to its network. When the client requests to play an audio or video file, the application will search for other connected devices that already have stored the file that the client has requested to view. Once these devices are found, they will then concurrently stream segments of the requested file to the user by using peer-to-peer networks. By taking advantage of peer-to-peer networks, this greatly reduces the amount of data that the server must directly send to the user. As a result, server costs will experience a drastic decrease. However, in case there are no connected devices that have the file that the client has requested, then the file must be sent directly from the server.
How we built it
We programmed the main app in Java. The user app has a simple GUI that will allow the user to play songs, and add more to their library. The app sends a message to the server, built in node.js with the express framework, the downloaded songs on the client device. Then, when another user wants to obtain the same file, it is downloaded from other users that have it on their device through a p2p network.
Challenges we ran into
- Figuring out how to run a stateless relational database.
- Synchronizing the file transfers between multiple hosts to facilitate efficient download speeds.
- Finding ways to efficiently package data so that it can be assembled easily once it has reached the destination.
Accomplishments that we are proud of
- Being able to learn and apply the concepts of networks and servers with limited prior knowledge of this concept.
- Finding an effective way to disassemble media files into small packets, stream them across networks, and reassemble back into proper order, while using minimal system resources.
- Getting a Node.js Express server running for the first time!
What we learned
- There are certain issues that occur when collaborating on a project of this scale, especially problems that involve version control.
- How Node.js works.
- Sleep is a luxury that we could not afford :(
What's next for bit.wav
Currently, artists and content creators are paid only a fraction of the amount they truly deserve for the content they put out on traditional streaming services. This is due to all the additional costs that stem from using the streaming service. Examples of these costs would include royalties, server costs, and marketing expenses.
Given the decentralized nature of bit.wav, our future plans would be to make use of the Ethereum Smart Contracts to work directly with the artists and content creators. This would effectively eliminate all the additional costs that incur from the use of a traditional streaming service.