STC,PCR,DTS,PTS

PTS和DTS是时标,每秒增加90k

这个在MPEG2文档中可以查到

ThePTS/DTS flags in the packet header are set to indicate the presenceof PTS alone or both PTS and DTS time stamp. Audio packets maycontain several access units and the packet header contains a PTS.Because audio packets are never trans-mitted out of sequence, thereis no DTS in an audio packet.

视频流中的DTS/PTS到底是什么

DTS(解码时间戳)和PTS(显示时间戳)分别是解码器进行解码和显示帧时相对于SCR(系统参考)的时间戳。
SCR可以理解为解码器应该开始从磁盘读取数据时的时间。

mpeg文件中的每一个包都有一个SCR时间戳并且这个时间戳就是读取这个数据包时的系统时间。通常情况下,解码器会在它开始读取mpeg流时启动系统时钟(系统时钟的初始值是第一个数据包的SCR值,通常为0但也可以不从0开始)。

DTS时间戳决定了解码器在SCR时间等于DTS时间时进行解码,PTS时间戳也是类似的。
通常, DTS/PTS时间戳指示的是晚于音视频包中的SCR的一个时间。例如,如果一个视频数据包的SCR是100ms(意味着此包是播放100ms以后从磁盘中读取的),那么DTS/PTS值就差不多是200/280ms,表明当SCR到200ms时这个视频数据应该被解码并在80ms以后被显示出来(视频数据在一个buffer中一直保存到开始解码)

下溢通常发生在 设置的视频数据流相关mux率太高。如果mux率是1000000bits/sec(意味着解码器要以1000000bits/sec的速率读取文件),可是视频速率是2000000bits/sec(意味着需要以2000000bits/sec的速率显示视频数据),从磁盘中读取视频数据时速度不够快以至于1秒钟内不能够读取足够的视频数据
。这种情况下 DTS/PTS时间戳就会指示视频在从硬盘中读出来之前进行解码或显示(DTS/PTS时间戳就要比包含它们的数据包中的SCR时间要早了)。

如今依靠解码器,着基本已经不是什么问题了(尽管MPEG文件因为应该没有下溢而并不完全符合MPEG标准)。一些解码器(很多著名的基于PC的播放器)尽可能快的读取文件以便显示视频,可以的话直接忽略SCR。

注意在你提供的列表中,平均的视频流速率为~3Mbps(3000000bits/sec)但是它的峰值达到了14Mbps(相当大,DVD限制在9.8Mbps内)。这意味着mux率需要调整足够大以处理14Mbps的部分,bbMPEG计算出来的mux率有时候太低而导致下溢。

你计划让视频流速率这么高么?这已经超过了DVD的说明了,而且很可能在大多数独立播放其中都不能播放。如果你不是这么计划,我会从1增加mquant的值并且在视频设置中将最大码流设置为9Mbps以保持一个小一点的码流。

如果你确实想让视频码率那么高,你需要增大 mux率。从提供的列表可以得出bbMPEG使用14706800bits/sec或者1838350bytes/sec的mux率(总数据速率为:1838350bytes/sec(14706800bits/sec)行)。你在强制mux率字段设置的值应该是以bytes/sec为单位并被50整除。所以我会从36767(1838350/50)开始,一直增加直到不会再出现下溢错误为止。



基本概念

|---------------------------------------------------------------|
TS/PS: Transportstream                                                                                  |
|                                PacketizedStream                                                                              |
|        |-------------------------------------------------------|    |
|        |  PES: Packetized Elementary Stream              |      |
|        |      |-----------------------------------------------|      |        |
|     |      |    ES:Elementarystream                                        |     |      |
|      |      |      |------------------------------------|                  |        |      |
|     |      |      |                                                                  |                  |        |      |
|     |      |      |  GOP:Group of pictures            |                  |        |      |
|     |      |      |------------------------------------|                  |        |      |
|     |      |                                                                                |        |      |
|      |      |------------------------------------------------|    |      |
|      |                                                                                        |      |
|     |--------------------------------------------------------|      |
|                                                                                                                                                   |
|----------------------------------------------------------------|               

TS: DVB
PS:DVD


PTS
:Presentation Time Stamp
DTS:Decoding Time Stamp
PCR:Program Clock Reference
STC:System Time Clock

1. SCR
SCR是存在于 PS中的,即PS的pack里面的一个field。他用来指定这个PS的pack期望的 到达decoder的时间。

2. ESCR
ESCR是位于 PES里面的,即PES的header里面可能会有,当PES的packet要表示一个PESstream的时候,PES packet里面的ESCR就表示这个PES packet的所期望的到达decoder的时间。

3. PCR
PCR是 TS里面的,即TSpacket的header里面可能会有,他用来指定所期望的该 tspacket到达decoder的时间,他的作用于SCR类似。

4.DTS, PTS
对于一个 ES来说,比如视频,他又许多I,P,B帧,而P,B帧都是以I,P帧作为参考。由于B帧是前向后向参考,因此要对B帧作decode的话,就必须先decode该B帧后面的P,或者I帧,于是, decode的时间与帧的真正的present的时间就不一致了,按照 DTS一次对各个帧进行decode,然后再按照 PTS对各个帧进行展现

有时候 PES包头里面也会有DTS,PTS,对于PTS来说,他代表了这个PES包得 payload里面的第一个完整地audioaccess unit或者video access unit的PTS时间(并不是每个audio/videoaccess unit都带有PTS/DTS,因此,你可以在PES里面指定一个,作为开始)。

PES包头的DTS也是这个原理,只不过注意的是:对于 video来说他的DTS和PTS是可以不一样的,因为B帧的存在使其顺序可以倒置。而对于audio来说, audio没有双向的预测,他的DTS和PTS可以看成是一个顺序的,因此可一直采用一个,即 可只采用PTS




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

关键字:STC,PCR,DTS,PTS

一、引言

Mpeg-2用于视音频同步以及系统时钟恢复的时间标签分别在ES,PES和TS这3个层次中。在ES层,与同步有关的主要是视频缓冲验证VBV(Video BufferVerifier),用以防止解码器的缓冲器出现上溢或者下溢;在PES层,主要是在PES头信息里出现的显示时间标签PTS(PresentationTime Stamp)和解码时间标签DTS(Decoding TimeStamp);在TS层中,TS头信息包含了节目时钟参考PCR(Program ClockReference),用于恢复出与编码端一致的系统时序时钟STC(System Time Clock)。

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

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

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

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

二、STC与PCR

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

PCR是由对系统时钟脉冲触发的计数器状态抽样而来,是放在TS包头的自适应区中传送。PCR共占6Bytes,其中6bits预留,42bits有效位。42bits的PCR分为两部分:33bits的PCR-Base和9bits的PCR-Ext。PCR-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)×300+PCR-Ext(i)

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

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

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

    图略

图1 用PCR重建远地27MHz时钟

三、DTS和PTS

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

PTS是编码器定义的,为解码器规定某个单元的显示时间。它也是一个33b的计数值,也是对系统时钟的300分频的时钟的计数值。要注意的是,PCR、DTS、PTS应该具有相同的时间起点,选在模拟图像的场同步处开始计时是很好的办法。一个单元解码后被显示,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是在复用器输出端直接测量的数值,不过它在网络中的运行监视常会使人迷惑不解,因为按照定义,它应当消除一切传输损伤。

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

你可能感兴趣的:(视频,pts,stc,DTS,PCR)