HTTP 媒体流架构
HTTP Live媒体流允许您通过普通的Web服务器将实时的或者预先录制的视频和音频发送到运行iOS 3.0及以上版本的设备或者安装了QuickTime X及以后版本的桌面计算机上,并支持加密和用户验证。
概述
HTTP Live媒体流由三部分组成:服务器组件,分发组件和客户端。
服务器组件负责将输入的媒体流进行数字编码,并且以适合发布的格式进行封装,然后准备发布。
分发组件由标准的Web服务器组成,负责接受客户端的请求并将准备好的媒体内容和相关资源发送到客户端。对于大规模部署,Edge网络或者其他内容分发网络可能会被使用。
客户端负责请求合适的媒体内容,下载媒体资源,并将媒体内容重新组装,以连续的媒体流形式展现给用户。在iOS 3.0及以后版本的设备,安装了QuickTime X及以后版本的桌面计算机中已经内置了客户端。
在一个典型的配置中,硬件编码器接受音频–视频输入,并使用MPEG-4编码,输出MPEG-2 TS流,然后被分段软件划分为一系列简短的时间段并保存为媒体文件。这些媒体文件部署在Web服务器上。分段软件同时还创建并维护包含这些媒体文件引用的索引文件。索引文件的URL在Web服务器上发布。客户端读取索引文件,然后按顺序向服务器请求媒体文件并无停顿的显示它们。
一个简单的HTTP Live媒体流配置示例如图1-1所示。
图 1-1 基本配置![](http://www.apple.com.cn/developer/library/ios/documentation/NetworkingInternet/Conceptual/StreamingMediaGuide/art/trasnsport_stream.jpg)
输入可以是实时的或者预先录制的内容,通常会被现有的硬件编码成MPEG-2 TS流。MPEG2 TS流然后被划分成一系列时间段,并保存为.ts
媒体文件。这一步通常由软件工具完成,如Apple的媒体流分段器。
仅有音频的媒体流可以是一系列简单的MPEG文件,编码格式或者是MP3,或者是带有ADTS头部的AAC。
分段器同时会创建索引文件,其包含媒体文件的列表以及一些元数据。索引文件的格式是.M3U8
。客户端会访问索引文件的URL,然后按顺序向服务器请求索引里面的媒体文件。
服务器组件
服务器要求一个媒体编码器,这可以是现有的硬件,然后还需要一个将编码好的媒体内容分段并保存成文件的方法,这可以是软件如Apple提供的媒体流分段器。
媒体编码器
媒体编码器从音频视频设备接收实时信息,进行编码和封装。编码应该是客户端设备支持的编码集合之一,例如视频的H.264和音频的HE-AAC。目前,支持的发布格式是音频和视频的MPEG-2 TS流,或者只有音频的MPEG基本流。
编码器在本地网络上将MPEG-2 TS流发布到媒体流分段器。
注意:不要将MPEG-2 TS流和MPEG-2视频压缩混淆。TS流是一种打包格式,可以使用多种压缩技术。目前只支持视频H.264和音频AAC的MPEG-2 TS流。只有音频的媒体内容可以是MPEG-2 TS流,也可以是MPEG-2基本流,要么是带ADTS头的AAC格式,要么是MP3格式。
媒体流分段器
媒体流分段器通常是一个软件,从本地网络读入TS流并将它分成一系列相等时间的媒体文件。即使每段都是一个单独的文件,从连续媒体流中生成的视频文件仍然可以被无缝的重构。
分段器同时会创建一个包含各媒体文件引用的索引文件。每当分段器完成一个新的媒体文件,索引文件就会被更新。索引文件被用来确认媒体文件的可用性和位置。分段器也可以加密每个媒体段并创建一个密钥文件。
媒体分段被保存为.ts
文件(MPEG-2媒体流),索引文件被保存为.M3U8
文件,这是保存MP3播放列表的.m3u
格式的一种扩展。
下面是一个非常简单的.M3U8
文件示例,该示例包含三个未加密10秒钟媒体文件:
#EXTM3U |
#EXT-X-MEDIA-SEQUENCE:0 |
#EXT-X-TARGETDURATION:10 |
#EXTINF:10, |
http://media.example.com/segment1.ts |
#EXTINF:10, |
http://media.example.com/segment2.ts |
#EXTINF:10, |
http://media.example.com/segment3.ts |
#EXT-X-ENDLIST |
索引文件可能会包含密钥文件的URL和可切换的索引文件以支持不同的带宽。关于索引文件格式的更多细节,请参考HTTP Live媒体流规范的IETF互联网草案。
文件分段器
如果您已经有媒体文件,且该媒体文件使用了支持的编解码器编码,您可以使用文件分段器来将它封装成MPEG媒体流并划分成相等长度的时间段(如果文件已经封装在MPEG-2 TS流中,文件分段器将会略过这步)。文件分段器允许您使用利用现有的视频和音频通过HTTP Live媒体流来提供视频点播。文件分段器完成媒体流分段器同样的任务,但是是以文件而不是媒体流为输入。
媒体分段文件
媒体分段文件通常由媒体流分段器基于编码器的输出产生,由一系列视频编码是H.264以及音频编码是AAC的MPEG-2 TS流的.ts
文件组成。对于只有音频的广播来说,分段器可以输出MPEG基本语音流,语音编码可以是带有ADTS头部的AAC,也可以是MP3。
或者,单独的创建.M3U8
文件和媒体分段文件并遵守发布的规范也是可以的。例如,对于只有音频的广播来说,您可以创建使用文本编辑器创建.M38U
文件,并列出一系列现有的.MP3
文件。
分发组件
分发系统可以是一个Web服务器或者Web缓存系统,基于HTTP协议发布媒体文件和索引文件。不需要定制的服务器模块,只需要对Web服务器进行很少的配置。
推荐的配置通常只限于指定.M3U8
文件和.ts
文件的MIME类型关联。
文件扩展名 | MIME类型 |
| application/x-mpegURL或者vnd.apple.mpegURL |
.ts | video/MP2T |
调整.M3U8
文件的存活时间属性(Time-to-Live)对于下载流的Web缓存机制来说可能是必须的,因为这些文件会被频繁的覆盖,每个请求下载的应该是最新版本。
客户端
客户端从获取索引文件开始,并基于URL来标识一个媒体流。索引文件指定了可用媒体文件的位置,解密的密钥,以及可切换的媒体流。对于选定的媒体流,客户端按顺序下载每个可用的媒体文件。每个文件包含媒体流的一个连续的段。一旦足够的数据下载完毕,客户端开始向用户播放重新组合的媒体流。
客户端负责获取解密密钥,验证用户,或者按需要显示用户验证和解密媒体文件的用户界面。
这个过程将一直重复直到遇到索引文件中的#EXT-X-ENDLIST
标签。如果没有遇到#EXT-X-ENDLIST
标签,则认为该索引文件是正在进行的广播的一部分,客户端会周期性的重新加载新的索引文件。客户端会在更新后的索引文件中查找新的媒体文件以及加密密钥并将这些URL加到播放列表中。