本技术说明讨论了为 iPhone 和 iPad 创建和部署 HTTP Live 媒体流的一些最佳实践。 |
|
- 介绍
- 推荐的HTTP Live媒体流编码设置
- 如何使用QuickTime以推荐的设置创建视频
- 对应用程序的要求
- 媒体分段
- 多版本播放列表
- 媒体部署
- 媒体流的验证
- 参考
- 文档修订历史
|
|
介绍 HTTP Live媒体流允许您通过普通的Web服务器将实时的或者预先录制好的音频和视频发送到iPhone,iPad,以及其他设备,包括桌面计算机。播放媒体流需要设备运行iOS 3.0或以上版本,桌面计算机则要求安装QuickTime X以上版本。更多信息请参考HTTP Live媒体流概述。 本技术说明提供了为iPhone和iPad应用程序以及iOS上的Safari创建HTTP Live媒体流时合适的编码设置,同时也提供了创建多版本播放列表的技巧,着重说明了部署媒体内容到Web服务器时一些需要特别考虑的方面,并讨论了如何验证媒体流的有效。
重要: 本文档经常更新。请将本页加入书签,并在您每次开始下一个项目前重新参考最新的推荐设置。
回到顶部 推荐的HTTP Live媒体流编码设置 图 1包含了创建HTTP Live媒体流推荐的编码设置。
重要:这些是推荐的设置,不是必须的。例如,如果您的视频有非常快速的动作(如运动项目),或者您比较担心带宽问题,您可能需要对视频进行额外的压缩以保证达到您需要的效果。在这种情况下,您可以使用推荐的设置作为一个初步设定,然后重新压缩直到您对最后的效果满意。
这些编码设置可以同时应用于实时的和预先录制(视频点播,VOD)的视频。推荐的设置是按照视频是在蜂窝网络还是Wi-Fi网络传输,是针对iPhone/iPod Touch还是iPad,视频内容的长宽比是4:3还是16:9来分类组织的。 支持如下音频和视频格式:
-
视频:H.264 Baseline Profile Level 3.0 (iPhone/iPod Touch),Main Profile Level 3.1 (iPad)
-
音频:HE-AAC或AAC-LC,最高48 kHz,立体声或 MP3(MPEG-1 Audio Layer 3),8 kHz到48 kHz,立体声
注意:iPhone 3G支持H.264 Baseline Profile Level 3.1。如果您的程序需要在更老的iPhone上运行,为兼容性考虑,您需要使用H.264 Baseline Profile 3.0。
图 1:推荐的HTTP Live媒体流编码设置 如何使用QuickTime以推荐的设置创建视频 关于如何使用QuickTime以推荐的编码设置导出视频文件,请查看技术说明TN2218,‘为Web压缩QuickTime视频’ 回到顶部 对应用程序的要求 如果您是在iPhone和iPad应用程序中使用HTTP Live媒体流,则您必须遵守一些要求,具体细节请参考HTTP Live媒体流概述。 回到顶部 媒体分段 HTTP Live媒体流要求媒体流或者文件被分成一系列相等的时间段。这通常是使用分段工具和创建播放列表的工具来完成的。 这种架构允许一个已经分好时间段的实时的媒体流能够通过更新播放列表快速转换为一个视频点播的流。 Apple提供了两个进行HTTP Live媒体流分段的命令行工具:
-
Media Stream Segmenter
-
Media File Segmenter
重要:这两个工具都经常更新。如果您是iOS开发者计划的会员,或者是ADC的Select会员和Premier会员,您可以从Apple开发者联盟的网站上下载其最新版本。您可以从http://connect.apple.com页面,点击“下载”链接,然后选择“QuickTime”,下拉到到“HTTP Live媒体流工具”,下载并安装“HTTP Live 媒体流工具”。
媒体流分段器 您可以使用媒体流分段器(mediastreamsegmenter )来部署HTTP Live媒体流。 Mac OS X 10.6及以后的版本中内置了mediastreamsegmenter ,其路径是/usr/bin/mediastreamsegmenter 。(/usr/bin 目录在Finder中是隐藏的,但是您可以使用实用工具文件夹中的终端应用程序来访问它。) 该工具从UDP网络连接或标准输入stdin 接收MPEG-2 TS流,并把它分成一系列相等的小时间片段,然后创建一个包含各时间段引用的索引。索引文件和媒体段可以使用任意Web服务器架构来部署。mediastreamsegmenter 可以同时支持实时流和视频点播(VOD)。 mediastreamsegmenter 工具支持不同的命令行参数(您可以通过在终端中输入man mediastreamsegmenter 或者查看在线的man page获得命令行参数的列表及其具体含义) 。如果您指定了如下参数,则该工具只会产生音频流: -a | -audio-only 这会抽取基本的音频流(AAC/ADTS或者MP3)并写入到媒体文件中。例如,您可以对一个现有的媒体流(包含音频和视频)运行mediastreamsegmenter ,从而得到一个只有音频的媒体流。 下面是一个怎样使用mediastreamsegmenter 来捕获和创建未加密的实时流的例子: mediastreamsegmenter -s 3 -D -f /Library/WebServer/Documents/stream 239.4.1.5:20103 选项-s 定义了索引文件中媒体文件条目的数量。默认值是5。选项-D (在实时流中)表示不在索引文件中的媒体文件将在一定时间后被删除。选项-f 指定了保存媒体文件和索引文件的文件夹。 在这个例子中,索引文件将包含3个文件条目。媒体文件将在过期后被删除。媒体文件和索引文件保存在/Library/WebServer/Documents/stream 中。 回到顶部 媒体文件分段器 媒体文件分段器(mediafilesegmenter )是一个命令行工具,可以将媒体文件分段,从而部署成HTTP Live媒体流。mediafilesegmenter 从指定的文件中获得媒体信息,如果需要的话复用成MPEG-2 TS流,然后切分成大概相等的时间片段。
注意:mediafilesegmenter 是从文件中读取媒体内容。媒体流分段器是从网络连接或者标准输入stdin 读取媒体信息。
mediafilesegmenter 同时还创建了包含各个媒体段引用的索引文件。索引文件和媒体文件可以在通用的Web服务器架构上以视频点播的形式部署。 mediafilesegmenter 支持很多命令行参数(您可以在终端中输入man mediafilesegmenter 来获得命令行参数的列表及其含义)。
注意:该工具以前版本要求您指定-O 或者-optimize 选项以打开优化,否则默认是关闭的。在新版本中,优化默认是开的,您现在必须指定yes 或者no ,如下所示:
[-O | -optimize [yes | no]]
回到顶部 多版本播放列表 多媒体流的展现是由播放列表决定的。播放列表是一系列媒体文件的列表,每一项都指向一段单独的连续的流。在HTTP Live媒体流中,服务器可能会为同一视频提供不同编码率的多个播放列表,这时,服务器必须提供一个多版本播放列表文件,从而提供不同的播放流以允许客户端根据带宽变化在不同的编码率之间动态切换。 关于多版本播放列表的更多信息,请参考HTTP Live媒体流和HTTP Live媒体流协议规范。 多版本播放列表创建器 多版本播放列表创建器(variantplaylistcreator )是为mediafilesegmenter 创建的HTTP Live媒体流时间段以m3u8格式创建多版本播放列表的命令行工具。iOS开发者计划的会员和ADC的Select或Premier会员可以作为媒体分段小节中描述的HTTP Live媒体流工具包的一部分下载。 variantplaylistcreator 接收成对的URL和plist文件为参数生成多版本播放列表,URL和plist文件由mediafilesegmenter 加上参数-generate-variant-info 生成。您可以在终端中输入man variantplaylistcreator 获得所有的命令行参数列表及其含义。 回到顶部 创建多版本播放列表时需要考虑的 下面是创建您的多版本播放列表时需要着重考虑的几点:
-
选择播放的初始版本 多版本播放列表中的第一个条目将会在视频流开始时播放,并且作为决定那一个视频流更合适的一部分。其他视频流的顺序将不会考虑。 您应该为同一组视频流创建多个播放列表,但针对不同的目标网络,每一个都具有不同的入口条目。这将保证用户在视频流第一次播放时获得良好体验。 我们推荐您为蜂窝网络提供150Kbps的视频流。 我们推荐您为Wi-Fi多版本播放列表提供240Kbps或440Kbps的视频流。 请参考推荐的HTTP Live媒体流编码设置。
-
尽可能的提供足够多的编码,从而为不同的连接速度提供质量最高的媒体流 例如,编码版本有150Kbps,350Kbps,550Kbps,900Kbps,1500Kbps。
-
尽可能的在多版本播放列表中和单独的.m3u8播放列表文件中使用相对路径
-
音频/视频流的注意事项 音频流都要绝对一致。 视频的长宽比必须一致,但是可以是不同的大小。 16:9的内容我们推荐大小为400x224,4:3的内容我们推荐大小为400x300(请参考推荐的HTTP Live媒体流编码设置)。
注意;在不同的VOD流文件间同步的一个简单方法就是将一个多版本播放表单的音频文件拷贝到所有其他的每个流。
回到顶部 媒体部署 HTML5 Video元素 我们推荐您使用HTML5的video 元素来在iOS的Safari中显示视频。关于video 元素的更多信息,请参考Safari关于HTML5音频和视频的指南和Safari DOM扩展参考中HTMLMediaElement ,HTMLVideoElement ,HTMLAudioElement 部分。 表单 1中的源代码例子展示了如何使用video 元素在网页中显示HTTP Live媒体流视频。 表单 1:HTML5 Video元素示例。 <video src="http://devimages.apple.com/iphone/samples/bipbop/bipbopall.m3u8">
This browser does not support HTML5 video.
</video> 请参考技术说明TN2262,‘为iPad准备您的Web内容’,该技术说明描述了在iOS设备上的Safari中和平台相关的注意事项,特别是为iPad。 回到顶部 Web服务器配置 HTTP Live媒体流的分发系统是基于HTTP发布媒体文件和索引文件的Web服务器或者Web缓存系统(更多信息请参考HTTP Live媒体流概述)。不需要定制的服务器模块,只需要很少的服务器配置。 推荐的配置通常是为.M3U8 文件和.ts 指定MIME类型关联。 表格 1:.M3U8 和.ts 的MIME类型关联。
文件扩展名 |
MIME类型 |
.M3U8 |
vnd.apple.mpegURL或者application/x-mpegURL |
.ts |
video/MP2T |
为兼容性考虑,服务器也接受MIME类型是audio/mpegURL 的.m3u 文件。 调整.M3U8 文件的存活时间属性(Time-to-Live)对于下载流的Web缓存机制来说可能是必须的,因为这些文件会被频繁的覆盖,每个请求下载的应该是最新版本。和您的服务提供商联系以获得推荐设置。 回到顶部 媒体流的验证 媒体流验证器 媒体流验证器(mediastreamvalidator )是用来验证HTTP Live媒体流和服务器的一个命令行工具。iOS开发者计划的会员和ADC的Select或Premier会员可以作为媒体分段中描述的HTTP Live媒体流工具包的一部分下载。 这个工具模拟了一次HTTP Live媒体流的会话,验证索引文件和媒体段符合HTTP Live媒体流的规范,并进行多次检查以确保媒体流的可靠。如果发现了任何问题,将会显示一份详细的分析报告。
重要:您应该总是在您的媒体流上运行mediastreamvalidator 工具来确保它符合HTTP Live媒体流规范。
下面是mediastreamvalidator 工具的一个输出样例。 表单 2:验证工具的输出样例。 Validating http://devimages.apple.com/iphone/samples/bipbop/gear3/prog_index.m3u8 against iPhone OS 3.1.0
Average segment duration: 8.77 seconds
Average segment bitrate: 510.05 kbit/s
Average segment structural overhead: 96.37 kbit/s (18.89 %)
Video codec: avc1
Video resolution: 480x360 pixels
Video frame rate: 29.97 fps
Average video bitrate: 407.76 kbit/s
H.264 profile: Baseline
H.264 level: 2.1
Audio codec: aac
Audio sample rate: 22050 Hz
Average audio bitrate: 5.93 kbit/s
注意: mediastreamvalidator 将首先显示您提供的媒体流列表,然后再是每个媒体流的结果。当然,mediastreamvalidator 计算实际时间会需要几分钟。
对于多版本播放列表来说,在播放列表中指定的码率是否和实际测试的码率非常接近很重要。否则mediastreamvalidator 将会产生警告。码率是在EXT-X-STREAM INF 标签中的BANDWIDTH 属性中指定的。 表单 3:设置了BANDWIDTH属性的多版本播放列表示例 #EXTM3U
#EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=1280000
http://example.com/low.m3u8
#EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=2560000
http://example.com/mid.m3u8
#EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=7680000
http://example.com/hi.m3u8 关于BANDWIDTH 属性的更多信息请参考HTTP Live媒体流协议规范。 回到顶部 参考
-
HTTP Live媒体流概述
-
IETF关于HTTP Live媒体流协议规范的互联网草案
-
技术说明TN2218, ‘为Web压缩QuickTime视频’
-
技术说明TN2262,‘为iPad准备Web内容’
-
Safari关于HTML5音频和视频的指南
-
Safari DOM扩展参考
回到顶部 文档修订历史
日期 |
Notes |
2010-04-19 |
为iPad更新了推荐编码设置。 |
2010-03-19 |
新建本文档,讨论了为iPhone和iPad创建和部署HTTP Live媒体流的最佳实践 |
|