The Verizon-sponsored challenge was to take advantage of the high bandwidth and low latency of upcoming 5G technology. 5G seems best suited for scenarios where there are many people/nodes with large amounts of data moving and some degree of a realtime requirement. And we wanted to do something fun. After him-hawwing over ideas about crowdsourced 3D mapping or some time of massive realtime game, we decided on the idea behind EventMux (which gets its name from being a sort of "event multiplexer"). Initially we started at some kind of crowdsourced video editing, and it ended up evolving to what is described below.
What it does
Users go to eventmux.com and immediately are met with the video stream from someone else's phone. If the person streaming is doing cool stuff, the viewer might stick around and keep watching. Alternatively, if the user wants to share what he/she is up to, he/she can opt to start streaming him/herself.
The backend tracks the people whose streams are retaining the most viewers, and offers a sort of master feed which switches automatically between the most-viewed/voted-on people. This master feed could be put up on a jumbotron or projector to give people at these types of events a chance in the spotlight.
How we built it
The front ended was built in React.js, and took care of delegating state with the backend server while opening a video stream. WebRTC was used to stream one person's video directly to another client's device.
A backend server in Go was written to delegate viewers to a stream using web sockets. Backend hosted on Google Cloud Platform
Challenges we ran into
Maintaining state across the application proved more challenging than we anticipated, and we ended up spending some amount of time spinning our wheels on how to do things "right" until we decided something that "worked" was most important.
Also WebRTC and React are a painful combination, which may have hindered our completion.
Accomplishments that we're proud of
- A working streamer/viewer state management server
- Streaming of a video feed directly from one phone to another
- Maybe multiplexing one stream to many phones??
What we learned
WebRTC is annoying. React is annoying. Basically the internet is annoying.
What's next for EventMux
Sleep! And maybe sharing the link with the rest of Brick hack for testing.