HTTP自适应比特率stream

苹果在iPhone OS 3.0中包含了HTTP Adaptive Bitrate Streaming,特别是Safari自动处理。

我想以低成本的方式来玩这个游戏,但是我希望在最坏的情况下需要一个自定义的HTTP服务器,最好的情况是有趣的PHP脚本。

但首先我需要知道协议的差异或标准是什么。 作为协议,HTTP是相当简单的,但是自适应比特率意味着文件大小不同,大块位置在不同比特率下是不同的。例如,客户端是否告诉服务器关于正在下载的stream特别的东西,还是所有在服务器端处理?

消除terminal用户的缓冲暂停对现场和预先录制的videostream非常有吸引力,并且由于许多networking和政府正在限制非端口80stream量,所以通过HTTP执行这两个操作甚至更好。

  • 什么是HTTP自适应比特率stream的技术细节,特别是苹果的实施?

-亚当

更新

看起来苹果公司提出了一个IETF草案,有些人已经在研究分段器:

HTTP直播stream – 草稿 – pantos-http-live-streaming-01
http://tools.ietf.org/id/draft-pantos-http-live-streaming-01.txt

使用FFMpeg和开放源码分段器的iPhone HTTPstream式传输
http://www.ioncannon.net/programming/452/iphone-http-streaming-with-ffmpeg-and-an-open-source-segmenter/


好吧,看起来像HTTP服务器只是作为一个愚蠢的HTTP服务器。 围绕由Akamai提供的示例网站给我足够的信息,开始静态内容stream。

http://iphone.akamai.com/

白皮书( http://www.akamai.com/dl/akamai/iphone_wp.pdf )提供了关于传输stream编码的信息,所以.tsstream是直接的。

编码器(或单独的分段器处理)将以MPEG-2 TS格式(.ts)以小内容段的序列产生H.264 / AAC内容。 还有一个引用段的M3U8索引文件; 在实况内容的情况下,M3U8不断更新,以反映最新的内容。

H.264编码应该是单通基线configuration文件,禁用帧重新sorting。 关键帧每5秒build议一次,理想情况下是所选段长度的一个平均除数。

该网站提供了一个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 5video标签:

 <video width=”640” height=”480” > <source src=”content1/content1.m3u8” /> </video> 

还有很多没有答案的问题,但是这可能足以开始。

-亚当

Akamai如此描述:

从iPhone OS 3.0和QuickTime X开始,您可以从普通Web服务器上通过HTTP发送stream式audio和video,以在iPhone,iPod touch或其他设备(如台式计算机)上播放,而不受Progressive Downloads的限制。

新的stream媒体协议支持多比特率,并根据networking条件自动切换到最佳比特率,以获得stream畅的高质量播放体验。 此实现还通过HTTPS提供媒体encryption和用户authentication,允许发布者保护他们的工作。 Live和On Demand内容可以使用3.0规范提供。

HTTP Streaming to iPhone由三部分组成:服务器组件,Akamainetworking和客户端软件。

在典型configuration中,硬件编码器将音videoinput转换为包含H.264video和AAC或HE-AACaudio的MPEG-2传输stream。 编码stream然后被stream分割器分成一系列短的媒体文件。 分段器还创build并维护包含创build的短媒体文件列表的索引文件。 这些文件被放置在Web服务器上。

内置在iPhone OS中的媒体播放器提供到索引文件的链接,然后按顺序请求媒体文件并播放它们,而没有任何暂停或段之间的间隙

所以你显然需要stream分割器才能正确创build内容。 HTTP服务器在这项技术中是通用的。

没有窗分段器 – iPhone分段器不能正常工作,原因不明。 您必须注册iPhone开发者才能下载分段器

Svitoch,你有雪豹吗? 它来与苹果stream分段器。 只需inputman mediastreamsegmenter即可查看手册。