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://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 即可查看手册。