Mpeg-2的同步及时间恢复--STC,PCR,DTS,PTS
http://blog.csdn.net/hice1226/article/details/6717354
Mpeg-2的同步及时间恢复--STC,PCR,DTS,PTS
摘要:Mpeg-2同步及时间恢复在编码、传输和解码中占有重要的地位,它不仅直接影响视音频的解码质量,还是衡量整个传输网络优劣的重要指标。本文将从原理上介绍Mpeg-2同步及时间恢复方法,并给出PCR测量的几个项目。
关键字:STC,PCR,DTS,PTS
一、引言
Mpeg-2用于视音频同步以及系统时钟恢复的时间标签分别在ES,PES和TS这3个层次 中。在ES层,与同步有关的主要是视频缓冲验证VBV(Video Buffer Verifier),用以防止解码器的缓冲器出现上溢或者下溢;在PES层,主要是在PES头信息里出现的显示时间标签PTS(Presentation Time Stamp)和解码时间标签DTS(Decoding
Time Stamp);在TS层中,TS头信息包含了节目时钟参考PCR(Program Clock Reference),用于恢复出与编码端一致的系统时序时钟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 时钟的频率偏置,测量时以某一稳定的外部基准作为参考
备注:
1. SCR
SCR是存在于PS中的,即PS的pack里面的一个field。他用来指定这个PS的pack期望的到达decoder的时间。
2. ESCR
ESCR是位于PES里面的,即PES的header里面可能会有,当PES的packet要表示一个PES stream的时候,PES packet里面的ESCR就表示这个PES packet的所期望的到达decoder的时间。
3.PCR
PCR是TS里面的,即TS packet的header里面可能会有,他用来指定所期望的该ts packet到达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里面的第一个完整地audio access unit或者video access unit的PTS时间(并不是每个audio/video access unit都带有PTS/DTS,因此,你可以在PES里面指定一个,作为开始)。
PES包头的DTS也是这个原理,只不过注意的是:对于video来说他的DTS和PTS是可以不一样的,因为B帧的存在使其顺序可以倒置。而对于audio来说,audio没有双向的预测,他的DTS和PTS可以看成是一个顺序的,因此可一直采用一个,即可只采用PTS。
Mpeg-2的同步及时间恢复--STC,PCR,DTS,PTS的更多相关文章
- Linux 自动同步服务器时间
200 ? "200px" : this.width)!important;} --> 介绍 Linux服务器运行久时,系统时间就会存在一定的误差,本篇文章就来介绍怎样使服务 ...
- javascript小技巧:同步服务器时间、同步倒计时
之前在网上看到有人提问,如何在页面上同步显示服务器的时间,其实实现方法有几种,可能一般人立马就想到可以使用Ajax每隔一秒去请求服务器,然后将服务器获取到时间显示在页面上,这样虽然能够实现,但存在一个 ...
- centos 7.2 同步北京时间 ,多台机器同步时间
linux 系统没有北京时间,同步的是上海时间 linux 系统有两个时钟:一个是硬件时钟,即BIOS时间:另一个是系统时钟,是linux系统Kernel(内核)时间. 系统开启时,系统会读取硬件时间 ...
- linux同步Internet时间
输入ntpdate time.nist.gov同步网络时间 如果未安装:yum install ntpdate 结果:3 Jun 15:42:39 ntpdate[4721]: adjust time ...
- Linux服务器同步Intetnet时间
Linux服务器同步Intetnet时间 在使用linux服务器(虚拟机)的过程中,经常会发现使用一段时间后,linux服务器的时间和我的宿主机的时间不一致,而宿主机的时间确实是internet时间, ...
- linux 设置与网络同步的时间
#设置linux时间 与网络时间同步安装命令yum install -y ntp同步网络时间ntpdate ntp1.aliyun.com
- NTP同步网络时间
为什么要同步网络时间呢,这是由于树莓派没有RTC和后备电池,不能像PC机那样关机之后仍可以走时. NTP对时步骤: 1 安装ntpdate sudo apt-get install ntpdate s ...
- centos 同步网络时间
centos 同步网络时间 # yum -y install ntp ntpdate # ntpdate cn.pool.ntp.org # date
- 使用ntp协议同步本地时间(C语言)
使用ntp协议同步本地时间 同步服务器使用的东北大学网络授时服务:ntp.neu.edu.cn更多ntp服务器 http://www.ntp.org.cn/ 源代码来自网络,经本人精简ntp部分,供大 ...
随机推荐
- C# String 前面不足位数补零的方法 PadLeft
PadLeft(int totalWidth, char paddingChar) //在字符串左边用 paddingChar 补足 totalWidth 长度PadLeft(int totalWid ...
- JobControl管理多job依赖完整示例
处理 复杂的要求的时候,有时一个mapreduce程序是完成不了的,往往需要多个mapreduce程序,这个时候就要牵扯到各个任务之间的依赖关系,所谓 依赖就是一个MR Job 的处理结果是另外的MR ...
- DropdownListFor无法正确绑定值-同名问题
DropdownListFor无法正确绑定值 如果以下面的方式进行绑定: <%: Html.DropDownListFor(model => model.subType, ViewBag ...
- 仿战旗tv
模仿战旗tv做的一个小项目,还需继续完善. 以下为链接地址: https://github.com/NearMilk/ZhanqiTV
- 三分钟学会CSS3中的FLEXBOX布局
原文地址,保护版权,请勿转载:http://page.factj.com/blog/p/2574 这篇文章里我们将学习CSS里flexbox布局的几个最重要的概念,通过学习flexbox布局,你会发现 ...
- bzoj2287:[POJ Challenge]消失之物
思路:首先先背包预处理出f[x]表示所有物品背出体积为x的方案数.然后统计答案,利用dp. C[i][j]表示不用物品i,组成体积j的方案数. 转移公式:C[i][j]=f[j]-C[i][j-w[i ...
- Redis和Memcache的区别分析 [转]
1. Redis中,并不是所有的数据都一直存储在内存中的,这是和Memcached相比一个最大的区别. 2. Redis不仅仅支持简单的k/v类型的数据,同时还提供list,set,hash等数据结构 ...
- QtSQL学习笔记(1)- 概述
Qt SQL是Qt提供的核心模块,用以支持SQL数据库.Qt SQL的API被分为不同的层: ■ 驱动层 (Driver layer) ■ API层 (SQL API layer) ■ 用户接口层 ( ...
- 用EPPlus导入导出数据到excel
项目上中要用到将数据库中所有表导出为Excel,以及将Excel数据导入数据库中的操作,使用EPPlus组件,编写以下两个函数. using OfficeOpenXml;using OfficeOpe ...
- 正确理解javascript的this关键字
javascript有this关键字,它和javascript的执行上下文有着密切的关系,就是说this具体指代什么要根据它的上下文来判断. 一.this和对象的关系 var Person={ ...