HTTP自适应比特率流如何在iPhone上运行?

Ada*_*vis 9 iphone video streaming http http-live-streaming

Apple已在iPhone OS 3.0中包含HTTP Adaptive Bitrate Streaming,特别是Safari会自动处理此问题.

我想以低成本的方式使用它,但我希望在最坏的情况下它需要一个自定义HTTP服务器,并且在最好的情况下需要有趣的PHP/etc脚本.

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

消除最终用户的缓冲暂停对于实时和预先录制的视频流都非常有吸引力,并且由于许多网络和政府限制非端口80流量,因此通过HTTP进行这两种操作甚至更好.

  • HTTP自适应比特率流的技术细节是什么,特别是Apple的实现?
  • 这是最好的实现 - HTTP服务器本身的一部分,一个mod的一部分,在脚本中......?

  • 如果要在应用程序中实现这一点,客户端需要进行哪些更改?

Ada*_*vis 21

更新

看起来Apple制定了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 Streaming
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-2TS格式(.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
Run Code Online (Sandbox Code Playgroud)

然后每个其他文件是:

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
Run Code Online (Sandbox Code Playgroud)

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
Run Code Online (Sandbox Code Playgroud)

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
Run Code Online (Sandbox Code Playgroud)

这适用于HTML 5视频标记:

<video width="640" height="480">
   <source src="content1/content1.m3u8" />
</video>
Run Code Online (Sandbox Code Playgroud)

仍然有很多未解决的问题,但这可能足以开始.