Chinaunix首页 | 论坛 | 博客
  • 博客访问: 379864
  • 博文数量: 35
  • 博客积分: 2500
  • 博客等级: 少校
  • 技术积分: 797
  • 用 户 组: 普通用户
  • 注册时间: 2007-03-02 08:51
文章分类

全部博文(35)

文章存档

2011年(1)

2010年(3)

2009年(3)

2008年(28)

我的朋友

分类: WINDOWS

2008-05-23 09:52:20

2008年04月29日 星期二 17:41

蔡新国

广州市广播电视网络有限公司 (广东广州 510010)

摘要:Mpeg-2同步及时间恢复在编码、传输和解码中占有重要的地位,它不仅直接影响视音频的解码质量,还是衡量整个传输网络优劣的重要指标。本文将从原理上介绍Mpeg-2同步及时间恢复方法,并给出PCR测量的几个项目。

关键字:STCPCRDTSPTS

一、引言

Mpeg-2用于视音频同步以及系统时钟恢复的时间标签分别在ESPESTS3个层次中。在ES层,与同步有关的主要是视频缓冲验证VBVVideo Buffer Verifier,用以防止解码器的缓冲器出现上溢或者下溢;在PES层,主要是在PES头信息里出现的显示时间标签PTSPresentation Time Stamp)和解码时间标签DTSDecoding Time Stamp);在TS层中,TS头信息包含了节目时钟参考PCRProgram Clock Reference),用于恢复出与编码端一致的系统时序时钟STCSystem Time Clock)。

通常的视频压缩算法都采用了可变长编码,编码生成 的视频码流是可变码率的。为了能够在实际的固定码率信道或者可变码率信道上传输,需要引入缓冲区缓存视频码流数据。因此,视频编码算法必须提供一个有效的 缓冲区管理策略,确保缓冲区不会发生上溢和下溢。编码器通过码率控制算法,调整生成的视频码流满足既定的缓冲区管理策略;同时在码率控制算法中使用自适应 量化方法,确保压缩视频的质量。

缓冲区管理策略通常都是建立在一个假想的解码器模型上,该解码器模型直接和编码器的输出相连接,缓冲区管理策略通过控制编码视频数据流移入和移出解码器缓冲区的时间以保证解码器模型的数据缓冲区不上溢也不下溢。在Mpeg标准中,该解码器模型称为VBVVBVES层中定义。

Mpeg-2编码器中有单一的共同系统时钟,此时钟用来产生指示音频和视频的正确显示和解码时序的时间标签,同时可用来指示在抽样瞬间系统时钟时间的瞬时值。正是编码器中共同系统时钟的出现,以及解码器中时钟的重新生成和时间标签的正确使用,才为解码器中操作的正确同步提供了基准。

Mpeg-2规定的系统时钟频率为27MHz,传输流中的PCRPTS/DTS等均为对该共同系统时钟的采样值。解码端捕获PCR,恢复出本地的STC,作为音视频同步控制的基准,并依据PTSDTS)时间标签来安排解码和显示时间表,使音视频分别同步于STC,以实现音视频之间的同步。标准规定在原始音频和视频流中,PTS的间隔不能超过0.7s,而出现在TS包头的PCR间隔不能超过0.1s

二、STCPCR

STC是视音频同步控制的基准,它是一串频率为27MHz的脉冲,触发计数器而形成一个二进制表示的时间基准,再通过对该时间基准SCT进行取样得到PCRPTSDTS等时间标签。在编码和解码端,系统时钟脉冲是由振荡器等硬件产生,在解码端STC通过在码流中定时传送的PCR利用锁相环(PLL)技术来与编码端STC保持一致。

PCR是由对系统时钟脉冲触发的计数器状态抽样而来,是放在TS包头的自适应区中传送。PCR共占6Bytes,其中6bits预留,42bits有效位。42bitsPCR分为两部分:33bitsPCR-Base9bitsPCR-ExtPCR-Base是由27MHz脉冲经300分频后的90kHz脉冲触发计数器,再对计数器状态进行取样得到的。PCR-Ext是由27MHz脉冲直接触发计数器,再对计数器状态进行取样得到的。PCR的具体编码方式如下(编码在PCR(i)中的数值代表了t(i)i指包含PCR-Base字段的最后一位的字节):

PCR-Base(i)=90kHz×t(i),    mod(233)

PCR-Ext(i)=27MHz×t(i),    mod(300)

PCR(i)=PCR-Base(i)×300PCR-Ext(i)

当新节目的PCR到达解码器时,需要更新时间基点,STC就被置位。通常第一个从解复用器中解出的PCR被直接装入到STC计数器,其后PLL闭环操作。每当一个新节目的PCR到达解码器时,此值被认为是锁相环的参考频率,用来与STC的当前值比较,产生的差值e经过脉宽调制后被输入低通滤波器并经放大,输出控制信号f,用来控制振荡器(VCO)的瞬时频率,VCO输出的频率是在27MHz左右振荡的信号,作为解码器的系统时钟。27MHz时钟经过波形整理后输入到计数器中,产生当前的STC值,其33bits90kHz部分用于和PTS/DTS比较,产生解码和显示的同步信号。

PCR-Base的作用是在解码器切换节目时,提供对解码器PCR计数器的初始值,以让该PCR值与PTSDTS最大可能地达到相同的时间起点。PCR-ext的作用是通过解码器端的锁相环电路修正解码器的系统时钟,使其达到和编码器一致的27MHz

1显示了解码器如何用PCR 来重建每个节目的远地27MHz时钟。

1 PCR重建远地27MHz时钟

三、DTSPTS

DTS是编码器在编码时定义的,为解码器预定的解码时间。该时间标记出现在PES层,在PES头部时间域中存在。它也是一个33bits的计数值,也是对系统时钟的300分频的时钟的计数值。由于它和PCR有相同的起点,在PCR值连续的情况下,可以起到时间定时的作用,当本机PCR值(连续)和DTS值相等时,表示它们计算了同样的时钟,也即它们经过了相同的时间。本机PCR起到的是连续计数的功能,DTS则是在等待这个时间,一旦等到这个时间,就表明它的解码次序排好了,因为这个解码次序是在编码的时候规定的,对编码的具体细节我们可以不做了解,我们只要查询到DTS就可以进行下一步的工作。这个也有利于编码器和解码器研发的独立性,少了一些捆绑,多了一些兼容。DTS就视频来说,因为视频编码的时候用到了双向预测,一个图像单元被解出,并非马上就被显示,可能在存储器中留一段时间,作为其余图像单元的解码参考,在被参考完毕后,才被显示。针对视频的显示,Mpeg还提出了一个视频PTS。针对音频和视频的同步显示,又提出了一个音频PTS。由于声音没有用到双向预测,它的解码次序就是它的显示次序,故对它只提出PTS的概念。

PTS是编码器定义的,为解码器规定某个单元的显示时间。它也是一个33b的计数值,也是对系统时钟的300分频的时钟的计数值。要注意的是,PCRDTSPTS应该具有相同的时间起点,选在模拟图像的场同步处开始计时是很好的办法。一个单元解码后被显示,PCR计数器重新计数,开始下一个单元的工作。

四、PCR测量

PCR 精度(PCR_AC):接收PCR中所含27MHz时钟的不准确度,但不包含任何传输定时损伤。测量时传输码流中PCR字节位置作为起点,计算出PCR 到达时间。

PCR 漂移率(PCR_DR):PCR漂移率测量指的是PCR中的低频误差并计入了由PCR发生和再生引起的误差以及由传输损伤所引起的到达时间误差。即PCR内所含27MHz时钟的低频变化速率,测量时以某一稳定外部基准作为参考,因此包含了任何传输定时变化。下面的例子可用来说明PCR 漂移率的重要性:

我们来看一下由PLL控制的本地时钟再生器。再生器输出端的信号频率应当跟踪输入信号频率,随着输入信号频率的变化,PLL也随之作出响应,本地再生器将跟踪输入信号,随着输入信号变化速率的增加,PLL的跟踪能力会有所降低,最后将导致本地发生信号失锁而丢失节目。PCR 漂移率的测量给出了一种测定方法,即如何更好地使去复用器/ 解码器或再复用器的节目时钟锁定于输入TS中所包含的PCR(注意这里指的是漂移率的测量而不是绝对频率的测量,接收机端的PLL电路可以锁定于系统时钟,该时钟有着固定的频率误差-如果是快速变化或漂移率大,则会出现问题)

PCR 总抖动(PCR_OJ):PCR内所含27MHz时钟的高频变化,测量时以某一稳定外部基准作为参考,因此包含了任何传输定时变化。它是PCR测量中最重要的一项,是PCR中高频误差的总体测量并且还包括来自PCR发生和PCR 再生的误差以及由传输损伤引起的到达时间误差。例如该项传输损伤可能会引入到接收机中的RF解调器中。接收机内再生的TS时钟以及去复用器/解码器所使用的TS时钟可能包含有基本高频变化,它会对PCR的恢复带来直接影响。在这种情形下,解码器在复原PCR 中所发现的PCR 到达时间误差可能是±500ns容限的许多倍,给PCR精度带来不利。任何解码器均靠接收PCR以准确再生其节目时钟并提供稳定的视频输出。与此相同,任何再复用器均靠接收PCR以在其输出端精确地重新作出PCR标记。PCR的到达时间是严格的;因此,测量包含有到达时间误差和精度误差的总抖动(PCR_OJ)就是非常必要的。

在理想运行系统中,传输损伤应当是可以设计的。然而在目前典型的分配网络中,包含有再复用器、ATM 层等各级链路,它们均会引入误差。PCR_AC是在复用器输出端直接测量的数值,不过它在网络中的运行监视常会使人迷惑不解,因为按照定义,它应当消除一切传输损伤。


temporal_reference中获得这个序号(定义为Ref_Order)。根据MPEG-2的时序模型(见图3),我们知道视频的DTS值始终 具有逐帧递增的特点,而PTS和DTS之间具有一定的差值关系。差值同帧速率、帧在帧所在图像组(GOP-Group of pictures)中的解码顺序以及帧在(GOP-Group of pictures)的帧序号(定义为GopFrameOrder)有关。因而,我们根据DTS确定PTS值。

图3、MPEG-2的时序模型

  首先,根据ES的frame_rate_code字段来视 频帧的帧速率frame_rate。每一帧的帧历时为:frame_time=(1/frame_rate)*90000。MPEG-2视频压缩采用双向 和单向两种预测编码,视频帧的编码顺序和显示顺序不同,视频帧的DTS和PTS的计算需要结合picture_header()中的参数得到。这些参数包 括了:当前视频帧在码流中的帧数序号、在当前GOP中的视频帧序号、当前帧的类型。算法实现如下:
  1)、如果当前帧是I帧,并且是整个码流第一帧。
(PtsIni指编码时设定的PTS初值)
  2)、如果当前帧是I帧或者P帧或者B帧,但不是第一帧,解码时间比显示时间的差值有恒定关系。应该注意,B帧的DTS并不显示在编码后的PES包中。

3.1.2  音频PES时间信息的重建

  将音频帧打包成一个PES分组,只需要读取合适长度的音频帧数据,在具有音频帧帧头标识的PES包上加上包头,如PTS,PES长度等字段的内容。其中PTS的算法如下:
  其中,AudioFrmOrder,当前音频帧的在完整码流的音频帧中的序号;AudioSamp,音频帧的样本点,与采样率有关;Sequence,时钟频率,90KHz;Sampling,音频采样率。

3. 2  PS时间信息重建

  为了使PS的码流具有良好的能控性,我们将每一个PES包的长度定为一个合适而固定的长度。在完成PES包的编码之后,我们需要将一个个视频PES包和音频PES包交织成PS包。
  在PS流中,时间同步信息是指SCR。SCR表示了系统的时间基准,其频率是27MHz。SCR是为了解决压缩编码图像同步而 产生的。PTS、DTS以90KHz为单位。在PS包头插入42bit的SCR,从PS包头的第5到第10字节,表明SCR字段最后一个字节离开编码器的 时间。MPEG-2编解码的时序也表明在解码端解码时,用本地SCR相位和输入的瞬时SCR相位锁相比较确定解码的同步。SCR的值由复用数据率和统一系 统时钟的27MHz频率确定。采用时间标志PTS、DTS和SCR是解决音视频同步、帧正确显示、防止系统目标解码器缓存器上溢或下溢的好。
  SCR编码的时候被分成两个部分,一部分以系统时钟的1/300为单位,称为SCR_Base;一部分以系统时钟为单位,称为SCR_Ext。SCR的计算方法如下:
  令i=0,即可以得到当前i'字节编码的SCR值的计算公式,从而得到:
      
      
  第一个PS包定义SCR初值、PS平均码率,其系统头规定了比特率范围和音视频缓冲区的大小。我们以GOP为单位,在一定范围内修正其码率,再根据该码率计算SCR,确保SCR与PTS、DTS不发生翻转。

PCR频率偏置(PCR_FO):PCR中所含27MHz 时钟的频率偏置,测量时以某一稳定的外部基准作为参考。

参考文献

[1] ISO/IEC 13818-1(1996):Coding of moving pictures and associated Audio, Part 1: system.

[2] 卢官明 宗昉 编著 [M]《数字电视原理》 北京:机械工业出版社,2004.1.1

[3] 刘文开 刘远航 主编 [M]《有线广播数字电视技术》北京:人民邮电出版社,2003.10

[4] 刘修文 编著 [M]《数字电视有线传输技术》 北京:电子工业出版社,2002.9

阅读(2330) | 评论(0) | 转发(0) |
0

上一篇:心目中的编程高手

下一篇:apache&花生壳

给主人留下些什么吧!~~