Like most great ideas, the concept behind Justin.tv is simple: a video stream, anytime, anywhere. But the hardware behind it all wasn't so easy to make, so Justin called up a friend, Kyle Vogt, to hand-build version 1.0 from some off-the-shelf parts, a grip of EVDO cards and some "borrowed" equipment from MIT. How did you meet up with these guys? Justin Kan and Emmett Shear recently created Kiko.com, one of the first AJAX based Web calendars. Google calendar came out a couple months later and snatched away many of their users, so they sold Kiko on eBay for a quarter million bucks. They recruited their friend Michael Seibel from Yale and came to MIT to look for a hardware hacker [to help them build a 24/7 portable live video streaming system] . I was convinced these guys were on to something, so I dropped out of MIT and joined Justin.tv.
What were some of the camera specs in terms of battery requirements and network? It had to send video to our website from wherever Justin went during his day-to-day life, and it had to last most of the day without being recharged. I needed some type of wireless network to transmit the video data, but WiFi and satellite Internet were out of the question. Fortunately, Sprint rolled out a high-speed EVDO Rev. A network just in time (and an unlimited data plan), so I bought a USB modem and focused my efforts on building a camera.
How about the camera itself? Anything special? The camera setup included a Viosport analog headcam, an MPEG4 video encoder, a small Linux computer, and a huge lithium-polymer battery. I picked low power components when possible so that everything would work for 8 hours on a single battery charge. A friend and I snuck into the basement of the MIT Media lab and used a laser cutter to build an enclosure to hold the electronics. I bolted the electronics in place and stuffed everything in a backpack. After a couple weeks of hacking in my apartment in Boston, I mailed the functional camera prototype to Justin.tv headquarters in San Francisco. It was a good start, and our investors were pleased.
It worked first try? The team was pretty happy to finally have a camera in their hands, but the video was choppy and cut out quite a bit. I didn't want to let the team down, so I promised TV quality video within a couple weeks. My plan was to stripe the video data over several Sprint data modems. That didn't work out as well as I had hoped.
How'd you fix it? I moved San Francisco so I could be closer to the rest of the team. I mean really close. The four of us lived and worked out of a small two-bedroom apartment. I spent my time becoming an expert in Linux socket programming, cellphone data networks and realtime data protocols. Four data modems in close proximity just don't work well together, so packet loss was as high as 50%. I fought with these modems for weeks but finally managed to wrestle them into a single 1.2mbps video uplink. The new camera emerged from the pile of Radio Shack parts, computer guts and hacked-up cellphones that had accumulated on my messy desk. It uses thousands of lines of Python code, a custom realtime protocol, connection load balancing and several other funky hacks.
Pretty cool. What are you improving now? Version 1.0 was the state of the art camera with 4x bandwidth, but it was really expensive. We're working on using more standardized equipment like UMPCs (w/ built-in EVDO) and webcams, better codecs, all running on Windows. This is so Justin and all the lifecasters can easily get geared up.
Hardware info for Version 1.0
Computer: VIA EPIA MII6000 Mini-ITX Mainboard Battery: 14.8v 20.8 Ah Li-Ion pack, wired with diodes for hot swapping Camera: Viosport Adventure CAM II Video Encoder: AXIS 241SA