iPhone上的HTTP自适应比特率流媒体是如何工作的?

9

苹果在iPhone OS 3.0中包含了HTTP自适应比特率流媒体技术,Safari可以自动处理。

我希望以低成本的方式体验一下这项技术,但最坏的情况可能需要一个定制的HTTP服务器,而最好的情况则需要使用PHP等脚本语言。

但首先我需要知道协议的差异或标准是什么。HTTP作为协议相对简单,但自适应比特率意味着文件大小不同,在不同比特率下块的位置也不同等。例如,客户端是否在下载时向服务器传递有关流的任何特殊信息,还是全部由服务器端处理?

消除用户端的缓冲暂停对于直播和预录视频流来说非常有吸引力,而通过HTTP同时实现两者更加理想,因为许多网络和政府都限制非80端口的流量。

  • HTTP自适应比特率流媒体技术的技术细节是什么,尤其是苹果的实现方式?
  • 最好在哪里实施 - 在HTTP服务器本身的一部分、在模块的一部分、在脚本中...?
  • 如果要在应用程序中实现此功能,客户端需要进行哪些更改?
3个回答

21

更新

看起来苹果公司提出了一项IETF草案,并且一些人已经开始开发分段器:

HTTP Live Streaming - 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://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

然后其他文件分别是:

hi/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>

还有许多未解答的问题,但这应该足以开始了。


3

2

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接