18 comments

[ 4.3 ms ] story [ 56.7 ms ] thread
I had the privilege of leading the team that created this app, and wrote a fair amount of the code myself. If you have any questions about the app, its development, or just anything at all relating to justin.tv on the iPhone, please feel free to ask.
This is really, really badass - amazing work guys!
What iDevices support this (video 'broadcasting')?

What H.264 encoding is used (profile, level)?

What bitrate do you aim for? Is it different for 3G vs 802.11g/n?

What framerate/resolution?

Thanks for the opportunity to ask!

What iDevices support this (video 'broadcasting')?

iPhone 4 and 3GS. The iPhone 3G didn't have a hardware video encoder, if I recall correctly, so we disabled broadcasting on it and anything lower (though viewing works just fine!).

I think we also tested on the latest iPod Touch and found everything worked. I'd have to check my notes to be certain though (sorry, not in front of my work laptop, looking after my 1-month-old daughter right now!).

What H.264 encoding is used (profile, level)?

Would definitely have to check my notes for this. I'll follow up.

What bitrate do you aim for? Is it different for 3G vs 802.11g/n?

The OS gives us a limited degree of control on this one. We get to specify the bitrate as "high", "medium" or "low" and it appears to be completely undocumented what each one maps to, if they're the same for each device, etc. In practice it looks like "low" is always around 80-120kbps, "medium" is about 800kbps-1.5mbps and "high" is somewhere north of 4mbps. We use "low" and "medium" depending on how much actual network bandwidth we think is available.

What framerate/resolution?

Resolution depends on the camera - we don't modify it away from the native resolution. So far, either 480x360 or 192x144 depending on device and selected camera.

Same is basically true for framerate. So far every camera I've tested has given us 26fps.

> we don't modify it away from the native resolution ... 480x360 or 192x144

The iPhone 4's camera is 1280 × 720 though . . .?

Yes, sorry - I should have said those resolutions are what comes out of the hardware video encoder, rather than the camera.
Is 480x360 a hardware imposed limit, or was that your guy's decision?
What H.264 encoding is used (profile, level)?

Would definitely have to check my notes for this. I'll follow up.

Baseline profile, 1.3.

Did you use HTTP Live Streeming?

I've been looking into writing a live streaming app, and came across the warning "Important: iPhone and iPad apps that send large amounts of audio or video data over cellular networks are required to use HTTP Live Streaming." (http://developer.apple.com/library/ios/#documentation/networ...).

However, it also says "Typical latency with recommended settings is in the neighborhood of 30 seconds" in the FAQ.

So... I'm not really sure how to proceed.

Isn't broadcasting live video expressly forbidden by AT&T's 3G TOS?
justin.tv didn't sign the AT&T TOS.
Actually, since they are US-based iPhone developers, they did, but that's not even the issue. Users of the app would be breaking the TOS.

I don't know about you, but as a consumer I don't like it when companies insert BS clauses they have no intention of enforcing (or worse, selectively enforcing) in their TOS. Not that anyone here needs more convincing that AT&T sucks...

Shoot first, ask questions later.
Does/Could this app locate or detect a user is at a particular event?

If Justin.tv could sort by event, other users could watch events like outsidelands music festival and flip through all the different view angles of the concert.

I understand event based results can be found by searching, but the idea of a collection of event streams intrigues me. Just an idea..

This is a really cool idea!

Especially, if you have justin.tv sponsor an event, and get the majority of users to download the app and start broadcasting.

The app should be able to send approx. GPS position, and the server can create an event "channel" with all the related streams (based on GPS).

App should have a location-disable option too.

This is another step closer a device I have been thinking about for many years. Imagine having a silent witness to any incident one gets involved in where it is one person or group's word against another. This device would record audio/video/time/location and send that data, real time, to a remote server that can timestamp and saved it. Police brutality, a bar fight, war crimes, an auto accident? Even if the cameras/phones are confiscated, stolen, or destroyed, the truth has already been set free and there is no way to cover it up.