更新
看起来 Apple 提出了 IETF 草案提案,并且有些人已经在研究分段器:
HTTP 直播流 - draft-pantos-http-live-streaming-01
http://tools.ietf.org/id/draft-pantos-http-live-streaming-01.txt
iPhone HTTP 流与 FFMpeg 和开源分段器
http://www.ioncannon.net/programming/452/iphone-http-streaming-with-ffmpeg-and-an-open-source-segmenter/
看起来 HTTP 服务器只是充当一个愚蠢的 HTTP 服务器。浏览 Akamai 提供的示例网站为我提供了足够的信息来开始使用静态内容流。
http://iphone.akamai.com/
白皮书 ( http://www.akamai.com/dl/akamai/iphone_wp.pdf ) 提供了有关传输流编码的信息,因此 .ts 流很简单。
编码器(或单独的分段器进程)将以 MPEG-2 TS 格式 (.ts) 的小内容片段序列生成 H.264/AAC 内容。还有一个引用段的 M3U8 索引文件;对于实时内容,M3U8 会不断更新以反映最新内容。
H.264 编码应该是单通道基线配置文件,帧重新排序禁用。每 5 秒建议关键帧,理想情况下是所选片段长度的偶数除数。
该网站提供了一个 M3U8 文件,它只是一个 M3U 播放列表,但采用 UTF-8 字符编码格式。
然后该文件链接到每个比特率的 M3U8 文件。我假设他们必须在相同的位置都有剪辑(例如,每 2 或 10 秒),以便可以无缝切换。它似乎完全是客户端驱动的——客户端决定如何测量带宽以及它将获得哪个版本。
主文件的内容是:
#EXTM3U
#EXT-X-STREAM-INF:PROGRAM-ID=1, BANDWIDTH=860000
hi/prog_index.m3u8
#EXT-X-STREAM-INF:PROGRAM-ID=1, BANDWIDTH=512000
med/prog_index.m3u8
#EXT-X-STREAM-INF:PROGRAM-ID=1, BANDWIDTH=160000
lo/prog_index.m3u8
然后每个其他文件是:
嗨/prog_index.m3u8
#EXTM3U
#EXT-X-TARGETDURATION:10
#EXT-X-MEDIA-SEQUENCE:0
#EXTINF:10,
fileSequence0.ts
#EXTINF:10,
fileSequence1.ts
#EXTINF:10,
fileSequence2.ts
#EXTINF:10,
fileSequence3.ts
#EXTINF:1,
fileSequence4.ts
#EXT-X-ENDLIST
med/prog_index.m3u8
#EXTM3U
#EXT-X-TARGETDURATION:10
#EXT-X-MEDIA-SEQUENCE:0
#EXTINF:10,
fileSequence0.ts
#EXTINF:10,
fileSequence1.ts
#EXTINF:10,
fileSequence2.ts
#EXTINF:10,
fileSequence3.ts
#EXTINF:1,
fileSequence4.ts
#EXT-X-ENDLIST
lo/prog_index.m3u8
#EXTM3U
#EXT-X-TARGETDURATION:10
#EXT-X-MEDIA-SEQUENCE:0
#EXTINF:10,
fileSequence0.ts
#EXTINF:10,
fileSequence1.ts
#EXTINF:10,
fileSequence2.ts
#EXTINF:10,
fileSequence3.ts
#EXTINF:1,
fileSequence4.ts
#EXT-X-ENDLIST
这适用于 HTML 5 视频标签:
<video width="640" height="480">
<source src="content1/content1.m3u8" />
</video>
还有很多未解决的问题,但这可能足以开始。