HTTP 自适应比特率流

HTTP 自适应比特率流

Apple 已在 iPhone OS 3.0 中加入了 HTTP 自适应比特率流功能,特别是 Safari 可以自动处理此功能。

我想以低成本的方式来玩这个,但我预计在最坏的情况下它将需要一个自定义的 HTTP 服务器,而在最好的情况下它将需要有趣的 PHP/等脚本。

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

对于最终用户来说,消除缓冲暂停对于实时和预先录制的视频流都非常有吸引力,并且由于许多网络和政府都在限制非端口 80 流量,通过 HTTP 实现这两项功能就更好了。

  • HTTP 自适应比特率流的技术细节是什么,尤其是 Apple 的实现?

-亚当

答案1

更新

看起来 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://iphone.akamai.com/

白皮书 (http://www.akamai.com/dl/akamai/iphone_wp.pdf) 提供有关传输流编码的信息,因此 .ts 流很简单。

编码器(或单独的分段器进程)将以 MPEG-2 TS 格式 (.ts) 生成一系列小内容片段中的 H.264/AAC 内容。还有一个引用片段的 M3U8 索引文件;对于直播内容,M3U8 会不断更新以反映最新内容。

H.264 编码应为单通道 Baseline Profile,禁用帧重新排序。建议每 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>

仍有许多问题尚未解答,但这可能足以开始了。

-亚当

答案2

阿卡迈对此的描述如下:

从 iPhone OS 3.0 版和 QuickTime X 开始,您可以通过 HTTP 从普通的 Web 服务器发送流式音频和视频,以便在 iPhone、iPod touch 或其他设备(如台式电脑)上播放,而不受渐进式下载的限制。

新的流媒体协议支持多种比特率,并根据网络状况自动切换到最佳比特率,以获得流畅的高质量播放体验。此实现还通过 HTTPS 提供媒体加密和用户身份验证,使发布者能够保护其作品。直播和点播内容均可使用 3.0 规范交付。

iPhone 的 HTTP 流由三部分组成:服务器组件、Akamai 网络和客户端软件。

在典型配置中,硬件编码器接收音频视频输入并将其转换为包含 H.264 视频和 AAC 或 HE-AAC 音频的 MPEG-2 传输流。然后,编码流由流分段器分割成一系列短媒体文件。分段器还会创建并维护一个索引文件,其中包含已创建的短媒体文件列表。这些文件放置在 Web 服务器上。

iPhone OS 内置的媒体播放器会提供索引文件的链接,然后按顺序请求媒体文件并播放,各个片段之间不会有任何停顿或间隙

因此,您显然需要流分段器才能正确创建内容。HTTP 服务器是此技术中的通用服务器。

答案3

没有 Windows 分段器 - iPhone 分段器由于未知原因无法正常工作。您必须是注册的 iPhone 开发人员才能下载分段器

答案4

Svitoch,你有雪豹吗?它带有苹果流分段器。只需输入 man mediastreamsegmenter 即可查看手册。

相关内容