袁金保,黄化吉,杨雪松
(伟乐视讯科技股份有限公司,广东 惠州 516003)
在数字电视前端的转码系统中,经常存在3种需要扩展音频升级的场景:场景1,新发布的音频格式,随着计算机技术的快速发展,不断有新的音频编码格式与标准出现,如我国的DRA音频标准;场景2,客户希望保持转码前的音频输出而不做任何修改;场景3,转码系统规格限制,无法实现某些音频格式的转码。为解决这3种场景的转码系统音频问题,本文设计一种直通音频方案,对音频实施直通,并与转码后的音视频进行重同步,从而使原转码系统轻松实现音频格式的扩展升级。
图像和声音数字化后,数据量巨大,随之出现了各种压缩标准和算法。目前使用最广泛的压缩标准是MPEG2,压缩后的数据通常用TS流(Transport Stream)格式传送。整个音视频系统按照处理先后顺序大致可以分为编码、传输及解码3个部分。如把传输部分理想化,则可忽略掉传输部分的影响,将系统进一步简化为编码和解码2个部分。
MPEG2协议规定,编码端定期将本端的时间信息插入到TS流的固定位置,起到为解码端报时的作用,需要接收端“对表”同步。如图1所示,编码器中有一个27 MHz的系统时钟,用该时钟产生一个PCR计数器,计数器由PCR_Ext和PCR_Bas组成。PCR_Ext为27 MHz时钟进行模300计数分频,即计数器从0累加299,再回到0,获得9位二进制值。PCR_Ext每计数到299时,进行模233计数,获得33位计数值PCR_Bas。在每个新编码的PES分组中,在其头信息里插入当前的PCR_Bas作为PTS/DTS值,表示该包数据是在x点x分x秒打包;除了在PES头中插入PTS/DTS,按照协议要求,通常每隔10~100 ms需要把PCR_Bas值插入到TS数据流中一次。
图1 编码端插入PTS和PCR时戳
解码端也有一个和发送端类似的PCR时钟计数系统,如图2所示。接收端从接收到的流中解析出PCR包,与本地的PCR计数比较。如果有偏差,就会调整本地的27 MHz时钟,从而使本地PCR去同步跟踪编码端(信源端)的PCR,以此保证解码端27 MHz时钟与编码端的27 MHz时钟一直保持在一定的偏差内。解码器根据本地的PCR与数据包中的时间标签PTS对比,就可在正确的时间进行播出。
图2 解码端PCR时戳对表
解码器根据本地时钟的PCR计数值与待解码TS流中的PCR比对,根据比对结果动态调节本地时钟,以此达到解码端时钟与TS流源端(编码端)时钟同步。因此对于这种机制的解码器,解码端时钟会跟踪编码端时钟,其输入时钟无需特殊处理。
为了简化设计,市面上很多解码器并没有根据PCR来动态调节时钟以跟踪编码端,而是以音频作为参考进行音视频解码。由于未跟踪源端PCR来调节本地时钟,解码器长时间运行后,就会出现视频Buffer上溢或下溢。对此,当Buffer上溢时,解码器进行丢帧处理;而当Buffer下溢时,则进行帧重读处理,以此保证解码的正常运行。利用人眼视觉的不敏感性,长时间内丢一帧/重读一帧处理,并不会影响观看效果。但从实际项目运行来看,该种方案在运行一段时间后会出现音视频解码异常的情况,停止几分钟之后自动恢复。为保持系统长时间稳定运行,需要采用解码端跟踪编码端时钟的根本性解决方案。
如图3所示,采用IDT高精度可编程时钟芯片IDT5P49V5901实现解码器时钟跟踪信源时钟,其实现原理实际如图2所述。具体过程为:TS_PCR_EXACT模块提取待解码TS流的PCR,LOCAL_PCR_CNT模块为解码时钟进行本地PCR计数。ADJUST_CTRL模块负责比较TS流的PCR和本地PCR计数,得到偏差。之后通过I2C总线控制IDT5P49V5901进行时钟高精度调整。
图3 时钟跟踪调整框图
解码端实现跟踪源端时钟后,即可保证转码系统长时间不偏离源端时钟稳定运行,才具备直通音频实施的系统基础。直通音频设计实现如下图4所示,主要包含2部分:Transcode System为原来的转码系统;BypAud_System为直通音频部分。
图4 直通音频设计实现
该设计中主要模块功能如下。
(1)TS_SRC为待转码的TS流,整个TS流会送给原有转码系统实施转码,转码后的输出TS流为TS_ENC。
(2)Tbase_Gen模块是一个时基产生模块,从TS_SRC中获取节目PCR包并取出其PCR值作为计数器的初始值,以27 MHz时钟按照PCR计数器的规则进行实时计数,此处计为T1。
(3)Aud_Filte模块负责从TS_SRC中过滤出需要直通的音频TS包。
(4)Aud_Add_Tbase模块负责将Tbase_Gen模块产生的计数值标记到直通音频包的自定义包头中,以此作为该直通音频包缓存入BUF的时间点,此处计为T2。
(5)Byp_Aud_Buf负责缓存直通音频。
(6)Aud_Out_Ctl负责控制直通音频的输出。假设TS_SRC进入原转码系统,转码完成后到从TS_ENC输出,其延时为Tdelay。在设计中,预先从Byp_Aud_Buf中读取直通音频的包头,获取包头中标记的存入缓存的时间点T2,并在获取T2的时刻,锁存Tbase_Gen当前的时刻值T1_byp。当T1_byp-T2≥Tdelay,表示直通音频包在缓存中滞留的时间已达到Tdelay,此时该直通音频包可以输出,从而保证直通音频包的物理到达时间和编码后的音视频包匹配。
(7)Pcr_Pts_Dts_Adj模块负责修改编码后TS流的PCR、PTS及DTS,从而保证音视频同步。因为直通音频的PTS是未做修改的,所以TS_ENC需要与TS_SRC建立关系。
当TS_ENC中的PCR包到达时刻,锁存Tbase_Gen当前的计数值,即当前时刻值T1_enc,同时以PCR_enc为计数器初始值,以27 MHz时钟按照PCR计数器的规则进行实时计数,此处计为T3。由于直通音频的PTS未做修改,PCR修正按照如下公式:
由式(1)可知,TS_ENC修正后的PCR值为TS_SRC的PCR作为时基参考计数减去Tdelay得到,其关系可以保证PCR和PTS的同步关系。
当TS_ENC中的PTS、DTS到达时刻,分别将T1和T3的计数值锁存下来,计为T1_pts/T3_pts和T1_dts/T3_dts。则PTS和DTS修正按照如下公式:
由前文可知,本系统唯一不确定的参数值为Tdelay,该值为转码系统的延迟值。在不同的转码系统中,其值是不一样的。为此,在调试时,可以在终端连接分析仪,根据分析仪上报的PCR/PTS/DTS之间的关系,调试Tdelay值,直到满足标准要求;如果不具备分析仪,则可以通过终端解码,根据听觉,动态调整Tdelay值,直至音视频同步。
本文分析了音视频同步的关键技术点,并详细介绍用FPGA实现解码端跟踪信源时钟的方案以及直通音频的设计实现。所述方案已成功应用到伟乐公司DMP等媒体平台设备中。实践证明该系统长时间稳定运行,均能保证音视频同步,为原转码系统实现音频规格的扩展升级提供了很好的解决方案。