标题 | 一种基于HLS的移动流封装与切片部署架构 |
范文 | 王文轩 胡晓晨 田响 陈志伟 摘要:介绍利用HLS协议实现移动流媒体视频系统的部署架构,提出除了采用ffmpeg和segmenter工具外,还可以选择tsMuxerGUI开发工具,通过适当参数配置实现TS快速流封装和切片功能。利用网络分析仪测试并记录服务器和客户端流传输交互过程,解决移动播放过程中简单性、灵活性、可扩展问题,可以广泛地用于移动互联网络环境。 关键词:HLS;TS;流封装;切片 中图分类号:TN919.85 文献标识码:A DOI:10.3969/j.issn.1003-6970.2015.02.007 0 引言 HTTP Live Streaming是Apple公司针对iPhone,iPad等移动终端设备开发的一种基于HTTP的自适应流媒体协议,将媒体源编码为不同编码速率的多个流,客户端根据网络带宽状况的变化选择不同编码速率的替换流,实现带宽波动时的流媒体自适应切换。 由于数据通过HTTP协议传输,所以完全不用考虑UDP套接字、防火墙或者代理的问题,而且分片文件的时长很短,一般长为几秒至十几秒,前后的分片之间没有依赖关系,以线性方式从服务器获取,再以线性的顺序组合播放。HLS支持通过普通Web服务器提供接近实时的音视频流媒体服务,包括直播和点播。目前得益于Apple终端的市场占有率,HLS点播系统尤其成为各大视频网站的移动流媒体客户端的主流技术。 本文根据HLS协议原理,设计一种基于HLS流封装和切片系统,在WiFi和3G网络环境下都具有较好的播放体验。文中对TS流封装和切片过程进行详细研究,描述服务器与客户端之间的交互传输过程。 1 HLS协议原理及系统结构 HLS移动流媒体视频点播系统由3部分组成:服务组建、视频分布存储和客户端软件部分,服务组建由编码器和流分割器组成。首先对视频数据进行存储、编码和流封装,然后服务器软件的流切片程序将媒体视频流分解成一系列简短的流媒体文件和索引文件,索引文件的URL发布到Web服务器上,客户端软件即可读取索引,请求媒体文件,并将其显示出来。点播系统中,流文件和索引文件固定不变。 1.1 编码器 TS码流的组成过程是将原始的音频和视频信息按照合适尺寸划分成ES流,之后附加信息形成PES包,再按照一定规则将PES包附上系统信息而成为TS包,进而组成完整的Ts码流。MPEG-2复用结构见图1。 多路ES流的复用和多路节目传输流的复用均采用时分复用(TDM)方式,图像、声音的ES流和辅助数据被分配在不同的Ts包内,TS包的长度为188个字节(188×8=1504比特)时隙,具体的码流、包结构如图2所示。 TS包头中负载单元起始指示符用于指示该TS包中带有PES包或PES数据的情况,PID指示TS包中净荷的数据类型,调整字段控制(AF控制)表示在包头后面是否有调整字段、净荷,连续性计数器用于在解码端检测包是否丢失。净荷中的调整字段(AF)主要用于包对齐(不足188Byte)和插入一些扩展信息。调整字段中PCR的插入至关重要,该字段用于系统解码过程中进行系统时钟恢复。系统时基的同步可以通过在传送流包中间断地插入PCR来实现。 TS包中净荷所传输的信息包括两种类型:1)视频、音频的PES包以及辅助数据;2)描述节目复用信息的节目映射表(PAT)和节目映射表(PMT)、其他PSI表格和sI表格。 1.2 流分割器 流分割器将编码器输出的MPEG-2 TS流分割为一系列连续的、长度均等的小TS文件,并依次发送至Web服务器进行存储。流分割器同时还创建一个索引文件,该索引文件包含元数据以及一个.m3u8媒体文件的列表,如表1所示。 之所以采用MPEG-2 TS格式对编码后的媒体流进行统一封装,是因为能够将音视频媒体流严格按照时序进行交织复用,任意截取和分段后,每一个分片都不依赖与之前的分片而独立进行解码和播放。为此,TS文件中必须仅包含一个MPEG-2节目,在每个文件的开头应包含一个节目关联表(PAT)和一个节目映射表(PMT),包含视频的文件中还必须含有至少一个关键帧和其他足够信息(如序列头)用以完成解码器的初始化。与直播不同,视频点播(VOD)的索引文件是一个不随时间而更新的静态文件,其中包含一个节目从头到尾所有分段文件的URL列表,并以#EXT-X-ENDLIST标签结尾。 1.3 视频分布存储 视频分布存储任务由Web服务器或者是Web缓存系统组成。HTTP客户端读取页面文件中的URL,指向了.m3u8文件位置,几乎不需要对Web服务器做任何特殊配置。推荐配置仅限于对.m3u8和.ts文件的MIME类型关联,如表1所示。 1.4 客户端软件 客户端软件要求是必须支持HLS协议,一般是iOS3.0、Safari4.0及其以后版本自带的软件,也可以在Android移动操作系统上进行开发。首先根据提供的URL获取索引文件,解析其中的媒体文件已经加密的密钥信息,然后按顺序请求索引文件中的TS文件。客户端需要下载一个完整的Ts文件后才能开始播放,因此这将带来客户端相对于服务器的时延。 2 TS流封装与切片 MPEG-2中定义了两种复用信息流:传输流(Transport Stream,Ts)和节目流(Program Stream,PS)。TS流采用固定长度的包结构,可以从视频流的任一片段进行独立解码,非常适合基于网络传输的节目,具有动态带宽分配、可分级、可扩展、抗干扰以及接收机成本低等优点。 2.1 TS流封装 实现TS流封装即编码器功能,可以通过两种方式。一是ffmpeg命令行工具,它是一个开源跨平台的视音频流方案,支持超过90种解码器和协议,提供了录制、转换以及流化视音频的完整解决方案。调用格式是:ffmpeg-<命令1><参数1>…-<命令N><参数N>。其主要命令的含义如表2。 第二种方式是通过已有软件工具转换,本例中采用tsMuxerGUI。打开软件界面,图3加载要进行混流的文件,配置适当参数,可以得到转码以后的文件。这种方式简单方便,非常适合于大批量文件的转码流操作。 2.2 TS流切片 经过流封装操作仍没有完成构建HTTP Streaming的过程,需要将视频文件切成小片,这里要通过流分割器,本例中使用苹果的segmenter命令行工具。创建HTTP Streaming命令格式为:segmenter 下面是一个使用的例子,从视频文件创建一个流,每个切片文件10秒:segmenter sample low.ts 10 sam-ple low stream low.m3u8 http:∥www.hlstest.com/。 3 服务器与客户端传输过程 经过上述的流封装和流切片,已经产生多个视频流的切片文件,这些文件需要上传至Web服务器。本例为方便验证传输过程,采用简易Web服务器即EasyWebSvr。在EasyWebSvr设置好主目录文件夹、端口号、网络连接数等参数,便可以使用HTML5的video标签。例子如下,
下面以服务器和客户端之间的交互传输为例详细分析其过程,在这里采用网络数据分析仪来实现分析和检测。 如图4所示,客户端首先向服务器发送一个请求html页面,服务器立刻发出回应并把html页面文件发.送客户端。客户端会申请包含.ts视频流索引的m3u8文件,服务器给出回应并把.m3u8索引文件发给客户端,此时若需要传输序列号为1的.ts视频流片段,那么客户端就会再次发送申请,服务器回应并给出其播放地址,从而可以播放该序列号的视频段内容,上述过程如图5所示。 图5所示是“192.168.2.111”地址的客户端向“192.168.2.101”地址的服务器申请.m3u8索引文件,并读取索引文件中指向的序号为1的.ts片段,加载几帧后,重新申请第26个.ts片段。这是针对用户在退出视频后,短期内又重新点播该视频,系统默认将从退出点继续播放。 4 结论 HLS是基于HTTP的系统,协议特性决定了它能更好地支持复杂的网络环境,服务部署和网络扩展简单,还可以方便地制定缓存策略提高服务性能。随着移动互联网、新兴4G业务的发展以及移动设备的普及,对多媒体信息的需求会越来越多,简单又易部署的移动流媒体服务器点播系统方案还是非常具有可行性,将有很广泛的应用前景。
|
随便看 |
|
科学优质学术资源、百科知识分享平台,免费提供知识科普、生活经验分享、中外学术论文、各类范文、学术文献、教学资料、学术期刊、会议、报纸、杂志、工具书等各类资源检索、在线阅读和软件app下载服务。