CMMB码流解复用及同步播放的研究与实现

2013-08-23 10:46蔡青春喻金科
计算机与现代化 2013年8期
关键词:视音频码流解码

吴 伟,蔡青春,喻金科

(1.南昌航空大学信息工程学院,江西 南昌 330063;2.中科院上海高等研究院新媒体中心,上海 201210;3.南昌航空大学信息中心,江西 南昌 330063)

0 引言

随着数字广播电视技术的迅速发展,移动多媒体广播已成为当代信息科学的热点领域之一[1]。移动多媒体广播通过无线电视广播覆盖网,向各种便携式终端提供数字电视节目和信息服务。针对多种类型的移动终端,国际各标准组织或公司都相继提出了系统方案,例如欧洲的DVB-H、韩国的T-DMB以及美国高通公司的MediaFLO等[2]。我国则提出了具有自主知识产权的中国移动多媒体广播(China Mobile Multimedia Broadcasting,CMMB),它是由国家广播电影电视总局主导开发的移动电视标准,是广电网参与三网融合(即电信网、广播电视网和互联网融合)的重要平台之一。

CMMB复用处在移动多媒体广播系统的前端,属于系统中的数据链路层协议。在广播业务的频率覆盖范围内,CMMB标准规定了系统信道上传输的帧结构、信道编码调制方法、复用语法、电视节目指南以及数据广播等。

本文基于CMMB系统接收端的需求分析,在理解复用协议的基础上对CMMB码流进行解复用研究,并针对某个频道的电视业务进行视频流和音频流解析,实现对解析出的视音频流的解码和同步播放。

1CMMB复用结构

在CMMB复用系统中,复用器首先对电视广播、声音广播、紧急广播、电子业务指南、数据广播和加密授权等输入业务进行封装、排列,形成了匹配信道时隙结构的复用帧流(MFS流),再将复用帧流打包成固定长度(188字节)的传输流(PMS流)。

组成CMMB复用协议的基本元素包括复用帧、复用子帧、视频段、音频段和数据段,如图1所示。在1个CMMB广播信道帧(时域上占1S)中最多可以包含40个复用帧,即每个复用帧至少占据1个时隙(25ms)[3]。复用帧由起始码(0x00000001)分隔,用帧标识号(MF_ID)唯一标识。根据其承载内容的不同,复用帧可分为2种类型:广播信道帧中第一个复用帧(帧标识MF_ID=0)称为控制帧,其余复用帧称为业务帧。控制帧的净荷为各类控制信息表,为接收端提供相应的控制信息。业务帧的净荷为若干复用子帧(最多15个),每个复用子帧承载视音频或者数据信息(称之为业务)。

图1 复用层次结构

1.1 复用子帧

复用子帧是复用帧的基本组成元素,承载了一个控制信息表或者一个业务应用。控制帧中的复用子帧对应控制信息表,其中网络信息表(NIT)存储本网中心频率、带宽以及邻区网络参数,持续业务/短时间业务复用配置表(CMCT/SMCT)存储各复用帧调制方式、时隙数量和各复用子帧业务标识等信息,持续业务/短时间业务配置表(CSCT/SSCT)存储业务与载频之间的关系。业务帧中的复用子帧由子帧头、视频段、音频段和数据段组成,CMMB复用码流中的数字多媒体流(视频流、音频流)业务就对应业务复用子帧中的视频段和音频段。

1.2 视音频段

业务复用子帧中的基本组成元素有视频段、音频段和数据段。视频段承载业务的视频数据,音频段承载业务的音频数据,数据段承载其他数据。获取到这些视音频数据正是后续码流解复用的关键。

视频段由视频段头和若干视频单元组成。其中视频段头描述了自身长度(以字节为单位)和各个视频单元的参数,视频单元的参数包括单元长度、承载的图像帧类型、视频流编号、图像帧结束指示、相对播放时间指示和相对播放时间,如图2所示。一个图像帧可以封装在一个或者多个视频单元中,其中图像帧类型(占3bit)代表图像的3种类型:I帧、P帧和B帧。I帧称为关键帧,是一幅完整压缩的图像,不依赖其他任何图像即可自行解码显示;P帧(前向预测编码帧)和B帧(双向预测编码帧)都非完整的图像帧,而是要参考其他的图像帧才能解码。当相对播放时间指示(占1bit)为逻辑1时则存在相对播放时间,相对播放时间(占16bit)和复用子帧头中的起始播放时间(占32bit)为一对时间组合,用于计算视频单元显示的绝对时间值。

音频段和视频段的结构类似,它由音频段头和若干音频单元组成。音频单元的参数包含单元长度、音频流编号、保留位以及相对播放时间。在视音频播放的同步过程中,起始播放时间和视音频的相对播放时间起着至关重要的作用。

图2 视音频单元的参数

2CMMB码流解复用

复用器输出的复用帧流(MFS流)采用PMS包承载为复用码流(PMS流),复用码流经过无线电视广播网进行分发,为覆盖范围内的移动终端或者接收机提供数字电视节目和其他服务。在接收端,经过解调、信道译码等操作后得到了复用码流。复用码流中的各个PMS包为188字节固定长度的传输包,其中包括16字节包头、n字节包净荷和172-n字节的填充块。PMS包只是复用帧流传输的载体,必须提取出n字节包净荷中的复用帧数据重新构造出复用帧才能进行解复用。

CMMB复用码流的解析主要涉及复用帧流提取、复用帧头分析、控制帧和业务帧分析、视音频段解封装。本文使用MFS离线文件(cmmb.mfs)针对上述关键过程参照CMMB复用协议进行解复用。

2.1 复用帧解析

依据CMMB复用协议规定的语法结构[4],复用帧解析完成复用帧头的分析、各类控制信息表的分析和各业务数据的提取。首先检测复用帧头的起始码(0x00000001)定位一个复用帧的开始,根据复用帧头中的帧标识(MF_ID),复用帧分为控制帧(MF_ID=0)和业务帧(MF_ID≠0);然后分别对控制帧和业务帧按照图3的流程进行解析。

图3 复用帧解析流程

2.1.1 控制帧解析

在CMMB解复用器的实现中,必须先获取所有的控制信息,然后再依据控制信息指导其他业务帧的解复用。

控制帧中包含了多种控制信息表,占用广播信道帧的第0个时隙。本文用于分析的MFS码流文件控制帧中的表标识号(TABLE_ID)仅有 1、2、3、6、16,分为对应网络信息表(NIT)、持续业务复用配置表(CMCT)、持续业务配置表(CSCT)、电子业务指南(ESG)基本描述表、紧急广播表。解析这些表格得到的控制信息为占用剩余时隙的业务帧提供了CMMB系统级别参数(复用帧占用时隙数量、业务标识等),如表1所示。

表1 业务基本信息

2.1.2 业务帧解析

业务帧的净荷最多包含15个复用子帧,每个复用子帧承载了电视业务的视音频和节目提示信息(可选项)。业务帧解析的主要目的是要将视音频数据从复用数据流中分离出来。由之前控制帧解析的数据得知,在一个广播信道帧中存在1个控制帧和8个业务帧,通过时分复用技术共占用了30个时隙,剩余的10个时隙保留。

在对业务数据解复用时,对广播信道帧中的业务帧依次解析。对每一个业务帧,首先解析帧头,其次解析帧净荷中的各个子帧。当子帧对应一个数字电视业务时,分析子帧头内部的视频流参数集和音频流参数集。通过这些参数集合,可以获取视音频流的主要参数。本文参考的MFS码流中,视频流压缩算法为 H.264、帧频为25FPS、分辨率为320×240,音频流压缩算法为AAC、采样率为48kHz。最后从复用数据流中抽取出子帧中的视频段、音频段和数据段。根据容错能力的不同,这些段数据存在两种封装模式:封装模式1和封装模式2,解复用时必须加以区分。模式1封装的视音频段在复用时将相同时间戳的视频/音频基本流(ES流)封装在同一个视频/音频单元中;模式2提供更强大的容错能力,它将视频/音频单元划分为若干复用块,复用块由复用块头和复用块净荷组成。在CMMB系统中,复用封装默认采用模式2。

2.2 视音频段解析

在复用子帧头中用3bit的“视频压缩算法”和4bit的“音频压缩算法”指示了视音频段中数据的压缩格式。CMMB中默认视频编码采用 H.264标准[5],音频编码采用 AAC 标准[6]。在 H.264 标准中,视频编码数据在分组交换网络中的传输是以NAL(Network Abstract Layer,网络提取层)中的NALU(NAL Unit)为单元的[7]。AAC音频采用MPEG-4中关于音频部分的LATM(低开销音频传输复用)格式。封装过程中输入的H.264视频流打包格式符合IETF RFC 3984[8],输入的AAC音频流打包格式符合IETF RFC 3016[9]。当视音频段的封装模式为1时,视频单元存储Annex B(字节流)格式NALU,音频单元存储LATM打包格式的AAC帧,这些单元中的数据可直接用于解码产生图像和声音。当为CMMB默认的模式2时,视音频单元被进一步划分为复用块[10],如图4所示。这时的NALU单元和AAC帧映射在复用块的净荷部分,被复用块头隔离开而不能直接用于解码。

图4 复用块结构

针对模式2,一个单元数据可能发生分片映射到若干连续的复用块中,所以复用块为解析的基本对象。首先定位复用块头的起始码(0×55),根据起始标记和结束标记判断该复用块是单元数据的第一个分片还是最后一个分片;然后根据类型字段和净荷长度提取复用块净荷。重复执行上述过程还原得到NALU单元和AAC帧。但此时NALU为原始打包格式而非Annex B打包格式,需要进行格式转换,而音频AAC帧则不需要。依据文献[5]中H.264规定的语法结构,NALU由NALU Header(NALU头,占1字节)和 NALU Payload(NALU载荷)构成。NALU Header的低五位代表 NALU的类型 NalUnitType,NALU转换为Annex B格式分为以下几种情况:

(1)0<NalUnitType<24,单个 NALU,在 NALU Header前插入3字节起始码(0x000001)。

(2)NalUnitType=24,STAP-A(Single-time aggregation packet)类型的单一时间聚合包。即一个复用块净荷中含有多个NALU,要为每个NALU插入起始码。

(3)NalUnitType=28,FU-A(Fragmention uint)类型的分片NALU。当一个NALU的长度超过MTU(Maximum Transmission Unit,最大传输单元),NALU单元被分片封装在多个复用块的净荷中。此时,仅在第一个分片首字节插入起始码,其他分片不予处理。

(4)NalUnitType为其他值时,这些类型的NALU不支持处理。

符合MPEG-4标准的AAC音频传输使用了双层机制:复用层和同步层。复用层机制管理MPEG-4音频载荷和特定配置元素并形成LATM包。在文献[6]中同步层指定了传输流的自同步语法LOAS,为LATM包的传输提供了同步保护机制。解复用器已经将传输流解析为复用帧流,因此AAC帧中的音频载荷存在于LATM包中。LATM包由长度信息(LengthInfo)和复用载荷(PayloadMux)组成,其中LengthInfo以字节为单位指示载荷长度。根据LengthInfo的大小就可获得对应的复用载荷,这些复用载荷可以交给解码器直接解码[11]。

3 电视业务同步播放

3.1 解码播放

CMMB码流解复用后,获取到可用于解码的NALU(视频解码元素)和PayloadMux(音频解码元素)。针对功能的实现,本文采用基于FFMPEG+SDL的解码播放方案[12]。FFMPEG是一个开源跨平台的视频和音频流解决方案,可以用来记录和转换数字音频、视频的开源 C程序。SDL(Simple Direct Media Layer,简易直控媒体层)是一套开放源代码的多媒体库,也是由C语言开发而成,用于直接控制底层的多媒体硬件接口实现图像和声音的呈现。基于FFMPEG+SDL的处理方案如图5所示。

图5 解码播放方案

由于视频和音频是两种不同性质的媒体,借助FFMPEG和SDL的开源代码及SDK分别予以处理。FFMPEG解码之前需要初始化,首先调用avcodec_register_all注册可能的解码器,利用avcodec_find_decoder找到H.264解码器(标识为CODEC_ID_H264)和AAC解码器(CODEC_ID_AAC_LATM),并使用avcodec_open打开上述解码器。然后用avcodec_alloc_context、avcodec_alloc_frame完成解码上下文和数据缓存帧的分配。在FFMPEG实际解码的时候,通过avcodec_decode_video解码 H.264 NALU得到YUV420图像,通过avcodec_decode_audio解码AAC PayloadMux得到PCM数据。对于视频捕获和编解码应用来说,通常使用YUV[13]颜色空间替代RGB颜色空间。以YUV420格式为例,图像中平均一个像素可以比RGB格式节省一半的数据量,只需占用极少的带宽。PCM(脉冲编码调制)格式数据直接由音频驱动程序根据采样率恢复为人耳可辨的模拟音频信号。

其次,使用SDL对YUV420图像和PCM数据进行处理。SDL处理前同样得初始化:调用SDL_Init装载支持视频和音频的链接库并初始化子系统,设置分辨率和图像格式后使用SDL_CreateYUVOverlay创建YUV覆盖层,同时设置好解码音频的采样率(48kHz)、通道数(2)、缓存等参数。最后调用SDL提供的底层接口驱动显示设备和音频设备来呈现图像和声音。

3.2 同步处理

视频和音频的播放不是完全独立的2个过程,因为就视频信息和音频信息而言这两种媒体在时间上有很强的相关性,必须保证两者的同步才能为接收端的用户带来良好的播放效果。视音频同步即实现每一帧图像显示的同时,对应的声音信号能够进行回放。视音频同步的概念由来已久,但真正做到同步又能保证播放质量却不简单。同步的方法有很多种,如基于缓存区数据控制的媒体内同步、基于时间戳的媒体间同步、基于实时通信协议的同步和音频嵌入视频的同步等[14]。CMMB中视音频单元的相对播放时间共用一个起始播放时间,所以系统适合采用基于相对播放时间的媒体间同步方法。

基于时间戳媒体间同步的原理是:将媒体数据按照时间先后顺序作时间戳,相同时间戳的数据同时表现。时间戳(Time-Stamp)相当于时间标记,记录着某个媒体的时间属性。这种方法的优点是不需要附加信道,不需要额外的同步信息且不改变媒体流数据。

人的听觉敏感度要大于视觉敏感度,所以允许少许画面不流畅而绝不允许声音的断断续续。同步处理中以音频为时间主导,音频流为主媒体流,视频流为从媒体流。利用基于相同时间基点的媒体单元的时间戳属性,音频保持采样率速率连续回放,调整视频的播放帧率来实现媒体间同步。根据视音频同步的感觉特性指标,要求数字电视的视频和音频显示时间差在-120~+45毫秒之间人才感觉不到视听质量的变化[15]。基于上述因素,本文的视音频同步控制算法如下:

(1)获得当前音频单元解码后的音频帧相对播放时间TSaudio,音频帧直接由SDL驱动回放。

(2)获得当前视频单元解码后的视频帧相对播放时间 TSvideo,计算时间差△T(△T=TSvideo-TSaudio,单位毫秒)分3种情况控制:

①-120≤△T≤+45,视频帧由SDL驱动显示;

②△T<-120,当前视频帧滞后作丢弃处理;

③△T>+45,当前视频帧超前音频帧,重复播放当前视频帧,等待下一个音频帧的处理。

(3)重复上述①、②过程直到业务处理完毕。

图6 视音频同步的控制机制

同步处理的控制机制如图6所示,而且程序实现过程中采用了多线程技术应用于视频和音频的并发处理。由于解码速率与播放速率的不匹配,两者之间还需要建立反馈机制来保证合适的解码缓冲量。

4 实验结果与分析

在对CMMB复用码流解复用时,针对同一复用子帧中的视音频计算并记录各个单元的实际播放时间,在播放处理时用于做基于时间戳的媒体间同步。针对本文使用的cmmb.mfs码流,提取其中CCTV1电视业务的时间戳信息并绘制成图7,提取视音频流解码并同步播放,效果如图8所示。

图7 CCTV1频道的时间戳信息

图8 解复用播放效果图

在图7中,CCTV1频道的节目持续了约6秒,其中单元编号与播放时间呈线性递增关系。由于视音频这2种媒体的帧率不同,相同时间内单元数目的不一致导致图7中2条数据线不完全重合,但使用基于时间戳的媒体间同步方法完全可以实现节目内容的同步播放。如图8所示,CCTV1对应广播信道帧中MF_ID为2的复用帧中的一个业务,控制帧承载的控制信息由左侧列表框显示,业务所承载的视频由右侧小窗口显示,承载的音频交给音频驱动程序回放。

5 结束语

随着移动终端和网络技术的不断发展,移动多媒体业务的推行也日渐成熟。本文在分析CMMB复用结构的基础上,在PC平台下设计并实现了码流解复用和同步播放的方案,且实际播放的效果较好地验证了该方案的可行性和可靠性。该方案中的核心功能使用C语言开发,由于C语言具有良好的可移植性,本设计为下一步在嵌入式平台上的方案应用奠定了基础。

[1]解伟.移动多媒体广播系统与标准[J].现代电信科技,2008,38(6):22-29.

[2]解伟.移动多媒体广播(CMMB)技术与发展[J].电视技术,2008,32(4):4-7,22.

[3]GY/T220.1-2006,移动多媒体广播第1部分:广播信道帧结构、信道编码和调制[S].

[4]GY/T220.2-2006,移动多媒体广播第2部分:复用[S].

[5]Joint Video Team of ITU-T and ISO/IEC JTC 1,Draft ITUT Recommendation and Final Draft International Standard of Joint Video Specification(ITU-T Rec.H.264|ISO/IEC 14496-10 AVC)[S].

[6]ISO/IEC 14496-3,MPEG-4 Part3:Audio[S].

[7]毕厚杰.新一代视频压缩编码标准:H.264/AVC[M].北京:人民邮电出版社,2009:190-206.

[8]RFC 3984,RTP Payload Format for H.264 Video[S].

[9]RFC 3016,RTP Payload Format for MPEG-4 Audio/Visual Streams[S].

[10]GY/Z 234-2008,移动多媒体广播复用实施指南[S].

[11]王立炜.MPEG-4 AAC音频解码器的优化与实现[D].武汉:华中科技大学,2010.

[12]Martin Bohme.An ffmpeg and SDL Tutorial[EB/OL].http://dranger.com/ffmpeg/,2012-11-25.

[13]刘云粼,王树东.基于SSE2的YUV与RGB色彩空间转换[J].中国图象图形学报,2010,15(1):45-49.

[14]齐成明.音视频同步问题的研究与实现[D].哈尔滨:哈尔滨工业大学,2009.

[15]徐康兴.音频与视频信号时间差及其测量[J].电视技术,2009,33(2):85-87.

猜你喜欢
视音频码流解码
《解码万吨站》
分布式码流实时监控与录制系统的设计与实现
数字电视TS码流协议简要分析
我国首个超高清视音频国家重点实验室在沪启动建设
解码eUCP2.0
中央广播电视总台启动建设国家重点实验室
NAD C368解码/放大器一体机
Quad(国都)Vena解码/放大器一体机
基于内容结构特征的Flash电影视音频特征的提取研究
电视台视音频资料数字化存储