I’ve been researching how to encode video for adaptive bitrate streaming, specifically the encoding parameters for the different files streamed in the process. Here’s what I found for Adobe’s Dynamic Streaming, Apple’s HTTP Live Streaming and Microsoft’s Smooth Streaming.
Adobe’s Dynamic Streaming
For Dynamic Streaming, I found an excellent article by Larry Bouthillier on the StreamingMedia web site. Entitled How to do Dynamic Streaming with Flash Media Server, the article covers how to encode multiple files (with a link back to Adobe’s recommended encoding settings), tests the streaming switching capabilities of three different Flash Players and provides the necessary code for dynamic streaming in each player. Regarding the encoding side, Larry conluded that:
Here are the parameters that Larry tested with, using a key frame interval of two seconds for all files:
Here’s what he found:
The three most crucial success factors turned out to be:
- the keyframe interval of your encodings,
- the bufferlength configuration of your player, and
- the bitrate spacing and quantity of your media files.
I’ll let you jump back over to his article for more detail on Larry’s conclusions.
HTTP Live Streaming
For Apple’s HTTP Live Streaming,you can refer to Apple’s own white paper on the subject.
What settings are recommended for a typical HTTP stream, with alternates, for use with the media segmenter from Apple?
Your encoder should produce MPEG-2 transport stream (.ts) files with the following characteristics for the Apple segmenter:
H.264 Baseline 3.0 video
Keyframes every 3 seconds
HE-AAC (version 1) stereo audio at 44.1 kHz
Cellular Fallback—Audio only or audio with still image, 64 Kbps
Low—96 Kbps video, 64 Kbps audio
Medium—256 Kbps video, 64 Kbps audio
High—800 Kbps video, 64 Kbps audio
I wrote an article on streaming to the iPhone for Digital Content Producer, and Turner Broadcasting was kind enough to share the encoding parameters that they used for the PGA Championship. Here they are:
Microsoft’s Smooth Streaming
For Smooth Streaming, the best reference I could find was Ben Waggoner’s post here. Here are the parameters that Ben recommended encoding to: