Mobile data is a precious resource, and nobody wants to be the one stuck maxing out their plan for the sake of playing some tasty jams. Why not let your friend help you out with the data so everyone can reap the benefits.
What it does
SplitStreamr harnesses mesh networking to distribute the streaming of songs between connected devices, splitting the data cost of downloading the music evenly. One device acts as the music playing device, where a user work with a standard music playing interface to choose songs to listen to. Other devices can join the network as Nodes, lending their data connections to the common good. The more devices in the mesh, the lower the data required by each device to stream a song and the happier your crew is.
How we built it
The SplitStreamr iOS app was built natively in Swift, and the backend was written in Node.js communicating with a MongoDB server.
Challenges we ran into
Properly encoding/decoding data over the mesh network and the WebSocket that interfaced between the front and backend was a source of major headaches. Apple's Multipeer Connectivity API is undocumented at best and buggy at worst, but after many hours of trial and error and several powwows with the Apple engineers (who were as frustrated as we were) we managed to tame the beast and make it work for us. Rate limiting the read and write streams over the mesh network proved to be necessary for unknown reasons, but it works!
Accomplishments that we're proud of
The hack is pretty insane technically, but we managed to get it working. We got to use some fairly cutting edge iOS tech. The Multipeer Connectivity API is extremely hard to use, but is also very cool. It's also an excellent real-world app that could be applied to countless tasks!
What we learned
We learned a great deal about using mesh networks and WebSockets on iOS. We also got very familiar with debugging encoded NSData (against our will)
What's next for SplitStreamr
We have a bunch of features we want to add to the tech demo, such as file upload and caching of songs. And Profit!