王 涛
(绵阳叁吉网络科技有限公司,四川 绵阳 621000)
数字电视在我国经过十多年的发展,目前已经形成了从卫星到有线再到地面无线的全方位多方面的发展态势,同时随着国务院关于推进三网融合试点工作的进一步开展,IPTV,OTT等网络新媒体也在各地大力发展了起来。在卫星、地面和有线数字电视广播领域,通常为了节约宝贵的信号带宽和频率资源,都会将编码好的单个数字电视节目复用成多节目传输流(MPTS)的形式再传输到终端用户。IPTV和OTT网络新媒体通常也会采用卫星、地面或有线数字电视网络中传输的这些信号作为直播源。但是,由于IP网络的带宽是共享带宽,而且往往都非常有限,如果将MPTS通过IP传送到用户终端将会非常浪费带宽并且会产生拥塞,同时也不便于IPTV核心设备对节目的管理,不利于实现节目点播和节目的时移、快进快退等功能。因此,就需要一种将复用的多节目传输流中的多个节目分别输出到不同IP端口的设备,本文介绍了实现这种MPTS转多路SPTS(单节目传输流)的IP输出的方法。
多节目传输流(MPTS)由多个节目复用而成,它包含了多套节目的音视频PES和相应的PSI、SI信息,如节目关联表(PAT)、节目映射表(PMT)、服务描述表(SDT)、网络信息表(NIT)等。为了获得每个节目的音视频PID、PCR PID等信息,首先需要解析MPTS的PSI、SI信息,在得到每一路节目的PID信息之后,只需要分别进行简单的PID过滤就可以把每路节目的音视频传输小包分别开来,同时由于原来的PSI、SI信息已经不能直接用于SPTS中,所以也一起被过滤掉。单节目的传输流要让终端能正确解码至少必须要具备PAT表和PMT表,因此作为最简系统,必须要实现PAT和PMT的重构。
从MPTS中通过PID过滤和重构PAT/PMT表以后得到SPTS,经过IP输出,虽然通过VLC播放器等工具完全可以正常播放,但是由于其传输包减少等变化,造成原来的PCR字段相对位置发生变化,从而必然引起了PCR的抖动,因此必须对PCR字段进行相应修正。然而,由于单个节目的传输流小包在原来MPTS中位置的随机性和突发性,使得过滤后的SPTS在传输速率上变得突发和不均匀,这样就无法对PCR进行修正。因此,需要采用FIFO和插空包的机制来平滑码率,使得在匀速传输的SPTS上实现PCR修正成为可能。
多个独立的SPTS传输流分别进入帧缓存,同时FEC发生器产生FEC包,它们一道经过通道选择逻辑被分时送往RTP/UDP/IP封包,然后经过千兆以太网MAC送PHY输出。整个系统实现的逻辑框图如图1所示。
图1 系统框图
对于完成MPTS到SPTS的功能来说,有两种方法可以实现。一是采用解复用的方法,把输入的传送流解复用为PES流,同时记录时序信息,然后在保持原来时序关系的基础上重新组合各路PES流。二是直接利用原传送流小包结构的方法,由于输入的传送流为已经打好的188 byte长的小包,因此考虑直接利用原打好的小包结构,扔掉原传送流中其他节目的各小包和全部空包及无关包,并修改其中需要修改的PSI信息(主要是重构PAT和PMT表)来保证码流语法结构的正确。第一种方法在理论上可以实现,但在系统实现上非常繁琐。在这里采用了第二种方法。
在整个系统的输入端应该包括一个传送流包解析功能,根据码流中的节目特殊信息表和PID值分离复用在一起的视频、音频、辅助数据等,但这个过程和传送流解复用不同。解复用需要把传送流解码到PES甚至ES层,解码器解复用时还必须利用PCR进行时钟的恢复。在这里称为解传送流包,而不称为解复用,因为只需要把每个节目的音频视频及PCR小包保留不动,其他的包过滤掉即可。解传送流包的过程实际上是一个PSI信息处理器对码流中PSI信息的处理。首先从输入节目中获得PID为0x0000的PAT表,根据PAT表找到PMT表的PID值,然后根据PMT找到节目中音视频和辅助数据等的PID值,然后根据PID从输入的传送流中分离出不同的数据流。同时根据PMT表中的PCR_PID值确定携带有PCR的PID号。PSI信息解析以后被丢弃,同时为了对带有自适应域的传送流包处理方便,解传送流包后暂时保留原来的自适应域,而不是完全解成PES流,这样在重打传送流包时只要直接引用原来的传输流包即可,而不必再考虑PES包的对齐等工作,从而大大加快处理的速度。图2显示了如上所述的PSI解析过程[1]。
图2 TS流的PSI解析
根据图2所示关系,分别解析出个节目的音频、视频和PCR PID等信息,就可以根据标准语法重构PAT和PMT表了。动态生成的节目特殊信息表PAT,PMT等要满足MPEG-2及DVB标准语法的规范,并且32位的CRC需要动态地在线生成。关于PAT,PMT表的具体语法在ISO13818-1(MPEG-2系统层标准)中有详细叙述,篇幅有限,本文不再赘述。
本部分的功能由ST公司的嵌入式解码控制芯片STi7105实现。
针对单节目码流的突发性和间歇性,采用FIFO缓存和插空包的机制来平滑码率,使得在匀速传输的SPTS上实现PCR修正成为可能。由于之前的MPTS中所有空包和无用信息都已经被过滤掉了,所以必须采用码率上变换的方法把SPTS的输出匀速码率调整到比平均码率稍大一些的速率,具体大小需要根据FIFO缓存的深度和SPTS最大突发码率的大小来确定,前提是保证FIFO不发生向上溢出,而在FIFO下溢读空时则填以空包。
由SPTS生成策略可以看出,由于PSI信息的更新必然造成本节目PCR字段到达解码器时间的变化,因此必须将此时间抖动转化为PCR值的修正,即
式中:PCRnew为新的PCR,替换原来的PCR值;ΔPCR表示多余节目过滤和PSI信息修改引入的PCR抖动值。这样经过了校正后的PCR不再有抖动。注意式(1)中的校正通常应该为负数,因为由于空包和PSI及多余包的丢弃将导致PCR的超前,所以本质上应为减,在实际设计中,可能会发生如图3所示的PCR抖动的极端情况。由于PCR最大的超前是在原两个PCR之间全为空包时的情况下发生的,所以其PCR的校正应为30 ms×90000=2700 s(假设PCR插入间隔为30 ms)。由于PCR只对相对值有效,故而对每一个PCR加减一个常数不产生任何其他影响,dconst即为该常数。采用PCR修正的优点是处理较为简单,但是需要消耗的硬件资源较大,并且有一定的误差,因为PCR修正以后虽然基本上消除了传送流包变化引起的PCR抖动,但是相对于每一路节目而言,抖动除了在需要插入PSI信息和极少量空包时发生,另外引起PCR的抖动误差是在单传送流缓存中,而PCR的修正则正好消除了该误差[2]。本部分的功能由FPGA实现。
图3 PCR改变的一种极端情况
TS OVER IP是一种将数字音视频传输流加以一定的协议封装后在IP网络媒介上传输的技术。由于视频传输的特性,传输过程中丢失个别包被允许,故通常采用面向非连接的UDP协议,在需要FEC前向纠错的时候也采用RTP协议(Real-time Transport Protocol,实时传输协议)来传输。RTP协议提供包序列的检测、排序等UDP协议不能完成的功能。同时,Pro-MPEG Code of Practice#3是设计用来提供FEC纠错编码的国际标准,用以保证实时传输的可靠性。
在TS OVER IP中,TS流最终被封装为IP帧,按照以太网协议,默认的最大传输单元(MTU)为1500,为了保证含有TS包的IP帧不被分片传输,就需要每个IP帧传输的TS字节数少于1500,因此每个IP帧传输的TS包个数为1~7个TS包(7×204=1428<1500)。具体封包个数可以根据需要而定,每个IP帧封装的TS包个数越多,载荷效率就越高,只是万一丢包后丢失的TS包个数更多。在IP封装以前按先后顺序需要进行FEC包头(如果需要FEC功能)、RTP包头及UDP包头的封装,具体封装示意图见图4 所示[3]。
图4 TS OVER IP封装示意图
RTP是在RFC3550中规定的。RTP协议建立在UDP用户数据报协议之上,详细规定了在互联网上传递音频和视频的标准数据包格式。如果要对包进行FEC纠错编码,就需要用到RTP协议,实现FEC纠错编码的原理框图如图5所示。
图5 RTP协议封装
FEC包是基于矩阵运算产生的。矩阵的大小由参数L和D决定。L是用于产生帧的非连续TS包的长度,D是矩阵深度。通常情况下,含TS包的帧和含行、列FEC包的帧用不同的目的端口区分开来,分别为m,m+1和m+2[4]。
UDP协议的传输过程不需要来回确认,当它和RTP协议一起使用时特别适合传输高带宽的音视频数据。
UDP/IP模块对RTP模块封装后的数据包加上相应的UDP头部和IP头部,并送往MAC模块,原理框图如图6所示。同时,该模块还要对接收到的帧进行解析,以响应ARP协议等,用以获取目的IP的MAC地址。
图6 UDP/IP模块
MAC层实现IP层和PHY层的互连,本例使用FPGA器件厂家提供的IP核,在此不再赘述。本部分的TS OVER IP功能全部由FPGA实现。
本文所述技术过程全部在Xilinx公司的FPGA芯片XC6SLX16-2FTG256C上实现,结合ST公司的嵌入式解码控制芯片STi7105实现了6路IP输出的接收解码器。该产品已经成功应用于湖北省网络电视台,并被以色列、泰国等地IPTV集成商选用。
[1]钟玉琢.MPEG-2运动图像压缩编码国际标准及MPEG的新进展[M].北京:清华大学出版社,2002.
[2]金盛.数字电视系统层传送流复用及相关问题研究[D].上海:上海交通大学,2002.
[3]Xilinx.UG463:Video Over IP User Guide[EB/OL].[2012-05-10].http://wenku.baidu.com/view/f3a1564d2b160b4e767fcffa.html.
[4]Pro-MPEG Code of Practice#3 release 2,Transmission of professional MPEG-2 transport streams over IP networks[S].2004.