Apple 已在 iPhone OS 3.0 中包含 HTTP 自适应比特率流,特别是 Safari 会自动处理此问题。
我想以低成本的方式使用它,但我预计它在最坏的情况下需要自定义 HTTP 服务器,在最好的情况下需要有趣的 PHP/etc 脚本。
但首先我需要知道协议(protocol)差异或标准是什么。 HTTP 作为一种协议(protocol)相当简单,但自适应比特率意味着文件大小不同, block 位置在不同比特率下也不同等。例如,客户端在下载时是否告诉服务器有关流的任何特殊信息,或者它是否全部在服务器端处理?
消除最终用户的缓冲暂停对于直播和预录视频流都非常有吸引力,并且考虑到许多网络和政府正在限制非端口 80 流量,通过 HTTP 实现这两项效果更好。
- HTTP 自适应比特率流式传输的技术细节是什么,尤其是 Apple 的实现?
最好在哪里实现它 - HTTP 服务器本身的一部分,mod 的一部分,在脚本中......?
如果要在应用程序中实现这一点,客户端需要进行哪些更改?
最佳答案
更新
看起来 Apple 提出了 IETF 提案草案,有些人已经在研究分段器了:
HTTP 直播 - draft-pantos-http-live-streaming-01
http://tools.ietf.org/id/draft-pantos-http-live-streaming-01.txt
使用 FFMpeg 和开源分段器的 iPhone HTTP 流
http://www.ioncannon.net/programming/452/iphone-http-streaming-with-ffmpeg-and-an-open-source-segmenter/
看起来 HTTP 服务器只是作为一个愚蠢的 HTTP 服务器。浏览 Akamai 提供的示例网站为我提供了足够的信息来开始使用静态内容流。
白皮书 ( http://www.akamai.com/dl/akamai/iphone_wp.pdf ) 提供了有关传输流编码的信息,因此 .ts 流很简单。
The encoder (or a separate segmenter process) will produce H.264/AAC content in a sequence of small content segments, in MPEG-2 TS format (.ts). There is also an M3U8 index file that references the segments; in the case of live content the M3U8 is continuously updated to reflect the latest content.
H.264 Encoding should be single-pass Baseline Profile, frame re-ordering disabled. Key frames are suggested every 5 seconds, ideally an even divisor of the chosen segment length.
该网站提供了一个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
医学/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>
还有很多 Unresolved 问题,但这可能足以开始。
关于iphone - HTTP 自适应比特率流式传输如何在 iPhone 上工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1070800/