PTS PCR DTS 详解
PTS PCR DTS 详解 MPEG-2 TS/PS同步原理2010-08-11 19:47 一、引言 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)。在节目流PS包头中加入SCR,它的作用与PCR域相似。标准规定在原始音频和视频流中,PTS的间隔不能超过0.7s,而出现在TS包头的PCR间隔不能超过0.1s。
我们知道,MPEG-2对视频的压缩产生I帧、P帧、B帧。把帧顺序I1帧-P4帧-B2帧-B3帧-P7帧-B5帧-B6帧的编码ES,通过打包并在每个帧中插入PTS/DTS标志,变成PES。在插入PTS/DTS标志时,由于在B帧PTS和DTS是相等的,所以无须在B帧多插入DTS(参见图1)。而对于I帧和P帧,由于经过复用后数据包的顺序会发生变化,显示前一定要存储于视频解码器的从新排序缓存器中,经过从新排序后再显示,所以一定要同时插入PTS和DTS作为从新排序的依据。 二、同步机制 编码器中有一个系统时钟STC(其频率是27MHz),此时钟用来产生指示音视频的正确显示和解码的时间标签,同时可用来指示在采样过程中系统时钟本身的瞬时值。指示音视频显示时间的时间标签称为显示时间标签(PTS),指示音视频的解码时间标签称为解码时间标签(DTS),指示系统时钟本身的瞬时值的时间标签称为节目参考时钟标签(PCR)。解码器通过VBV_delay(视频流延时值,在解码时利用视频流缓冲区把视频流缓存到相应的vbv_delay时间后,再启动解码器解码、显示、实现音视频的同步。vbv_delay存在于视频ES的头部,长度为16bit)的数值来确定解码的开始,用解码时间标签(DTS)和显示时间标签
名人堂:众名人带你感受他们的驱动人生
马云任志强李嘉诚柳传志史玉柱
(PTS)来确定解码和显示的次序,用PCR来获得系统时钟的同步。解码器中的系统时钟及其同步就是依靠这些时间标签来进行恢复和修正的。 PCR的插入必须在PCR字段的最后离开复用器的那一时刻,同时把27MHz系统时钟的采样瞬时值作为PCR字段插入到相应的PCR域。是放在TS包头的自适应区中传送。27 MHz时钟经波形整理后分两路,一路是由27MHz脉冲直接触发计数器生成扩展域PCR_ext,长度为9bits。另一路经一个300分频器后的90 kHz脉冲送入一个33位计数器生成90KHZ基值,列入PCR_base(基值域),长度33bits,用于和PTS/DTS比较,产生解码和显示所需要的同步信号。这两部分被置入PCR域,共同组成了42位的PCR。 PTS域为33bits,它也是一个33b的计数值,也是对系统时钟的300分频的时钟的计数值。被编码成为3个独立的字段,表示此分组中第一个访问单元在系统目标解码器中的预定显示时间。 DTS域也为33bits,编码成为3个独立的字段,表示此分组中第一个访问单元在系统目标解码器中的预定解码时间。DTS就视频来说,因为视频编码的时候用到了双向预测,一个图像单元被解出,并非马上就被显示,可能在存储器中留一段时间,作为其余图像单元的解码参考,在被参考完毕后,才被显示。针对视频的显示,Mpeg还提出了一个视频PTS。针对音频和视频的同步显示,又提出了一个音频PTS。由于声音没有用到双向预测,它的解码次序就是它的显示次序,故对它只提出PTS的概念。 解码器在解码时,首先利用PCR重建和编码器同步的27 MHz系统时钟,恢复27 MHz系统时钟后,再利用PES流中的DTS,PTS进行音频与视频间的同步,同时利用VBV_Delay设置解码器的缓冲时长,后启动初始解码。下图是利用PCR恢复STC的原理图。
图2 用PCR恢复本地STC时钟 PCR-Base的作用是在解码器切换节目时,提供对解码器PCR计数器的初始值,以让该PCR值与PTS、DTS最大可能地达到相同的时间起点。PCR-ext的作用是通过解码器端的锁相环电路修正解码器的系统时钟,使其达到和编码器一致的27MHz。 在PCR域的33 bits中的90 kHz部分(即PCR-Base域)用于与PTS和DTS作比较,当二者相同时,相应的单元被显示或者解码。但按照MPEG-2标准的规定,PTS/DTS位于PES包的包头中,而解复用器所解出的PES包头的字节不被送入到任何基本流解码器的输入缓冲区,仅用于控制各解码器工作。每当解复用器解到一个PTS/DTS时,PTS/DTS就作为其后送入各个基本流解码器的输入缓冲器中的数据的显示/解码时间,但此时送入信道缓冲器中的基本流并不一定立即被解码,因此基本流解码器必须记录当前这个PTS/DTS及所对应的码流位置,以利于后面的解码和显示同步。 针对以上分析,我们采用如下方法来达到解码与显示的同步:在每一个基本流解码器中建立一个33 bits的PTS/DTS先入先出存储器(FIFO),用以存放PTS/DTS值,同时在解复用器中加入一个检测电路,每当码流开始新的一帧图像时,则产生一个信号,用来通知基本流解码器,并将该帧图像的PTS/DTS写入到FIFO中。每当解码器解到一帧图像时,就从FIFO中读出相应的PTS/DTS,此PTS/DTS与STC进行比较,当两者相等时,当前图像就开始显示/解码。 在MPEG-2标准中,并非每一个PES包或每一帧图像均有PTS和DTS,一般PS流中每两个PTS之间的间隔是0.7 s,而TS流中每两个PTS之间的间隔是0.1 s,所以在没有PTS和DTS
的一帧图像出现时,我们可以在前一PTS/DTS的基础上加一增量得到对应该帧图像的PTS/DTS,并将计算出来的新的PTS/DTS插入到存放PTS/DTS的FIFO中去,即:PTSn=PTSn-1+ΔPTS(n为第n帧图像)。 解码器同步算法总结如下: (1)解码器从输入码流的包头中解出时间信息PCR送入到系统时间时钟恢复电路;系统时间时钟恢复电路在接收到每一个新的PCR时,进行本地系统时间时钟恢复和锁相。 (2)解复用器后,从PES包头中解出显示时间标签PTS和解码时间标签DTS,并送入到基本流解码器中。 (3)基本流解码器在接收到新的PTS/DTS后,存入对应的FIFO(先进先处存储器)中进行管理;对于没有PTS/DTS的显示单元,需要对其时间标签进行插值,并送入到FIFO中管理。 (4)每一显示单元开始解码前,用其对应的DTS与STC进行比较,当STC与DTS相等时开始解码; (5)每一显示单元开始显示前,用其对应的PTS与STC进行比较,当STC与PTS相等时开始显示。 三、失同步处理 27 MHz系统时钟经过300分频后,得到本地的33 bits PCR_Base,该时钟与寄存器中当前图像的PTS/DTS进行比较,系统软件根据比较结果做出相应的处理: (1)若当前的PTS/DTS比PCR计数器的值小于半帧以上,即PTS_Base≤-ΔPTS/2,此时说明系统解码过慢,解码器处于失步状态,应根据该帧的结构做出相应的同步调整; (2)若当前的PTS/DTS比PCR计数器的值在半帧时间以内,我们认为此时系统解码正常,立即显示/解码当前帧; (3)若当前的PTS/DTS大于PCR计数器的值,则此时解码器稍快,在这种情况下,只需等到PCR与PTS/DTS相等时,就可显示/解码。
PTS PCR DTS 详解相关推荐
- javacv开发详解补充篇:解决转流后视频画面快进慢放,时间跳动过大,监控视频时间戳重新计算pts和dts
javacv实战专栏目录: JavaCV实战专栏文章目录(JavaCV速查手册) 前言 本篇文章主要用于javacv重新计算pts和dts时间戳. 解决由于没有pts和dts时间戳或者pts和dts时 ...
- PES包的PTS详解
PES包的PTS详解 之前做ts转flv用的是osmf框架,那个东东略复杂,和自己的代码结合后想调整某个地方有些困难,所以还是打算自己来解ts并进行封装. 其中的pts的获取上网查了下,结构图差点没看 ...
- MPEG2-TS音视频同步原理(PCR dts pts)
一.引言 MPEG2系统用于视音频同步以及系统时钟恢复的时间标签分别在ES,PES和TS这3个层次中. 在TS 层, TS头信息包含了节目时钟参考PCR(Program Clock Referen ...
- Android 驱动(12)---Linux DTS(Device Tree Source)设备树详解
Linux DTS(Device Tree Source)设备树详解 Linux DTS(Device Tree Source)设备树详解之一(背景基础知识篇) Linux DTS(Device Tr ...
- 高通平台msm8953 Linux DTS(Device Tree Source)设备树详解之二(DTS设备树匹配过程)
本系列导航: 高通平台8953 Linux DTS(Device Tree Source)设备树详解之一(背景基础知识篇) 高通平台8953 Linux DTS(Device Tree Source ...
- 高通平台8953 Linux DTS(Device Tree Source)设备树详解之一(背景基础知识篇)
本系列导航: 高通平台8953 Linux DTS(Device Tree Source)设备树详解之一(背景基础知识篇) 高通平台8953 Linux DTS(Device Tree Source ...
- DTS文件详解,DTS文件解析
一.什么是DTS?为什么要引入DTS? DTS即Device Tree Source 设备树源码, Device Tree是一种描述硬件的数据结构,它起源于 OpenFirmware (OF). 在L ...
- 说清楚什么是 PCR,PTS,DTS
时间戳是容器层的基础概念,很多人还搞不清楚 PCR,PTS,DTS 到底什么关系,对于刚入门的朋友来说,确认让人感到迷惑. 搞清楚三者的区别,本质上就一句话:PCR 是时钟,PTS,DTS 是时刻.是 ...
- Linux下的tty和pts详解
Linux下的tty和pts详解 今天在在使用who和ps命令的时候,出现tty1或者pts/0,因为不太懂就查了一下: 使用tty命令可以查看现在使用的终端标识: 使用ctrl+alt+[F1~F8 ...
最新文章
- 实现大数据可视化的10个技巧
- UIProgressView(进度条控件)
- ansys18安装以后打不开_【偷偷告诉你】在微信里直接安装apk.1
- 广色域图片Android,Android Q将支持广色域照片
- Java阶乘中数值溢出
- python--查询PG数据库
- 中国分省、分城市地形起伏度数据
- 安装office2013报安装程序找不到OneNote.zh-cn、安装源不存在
- 《程序员的职业素养》读书笔记万字总结【建议收藏】
- C++面向对象程序设计:银行储蓄管理系统
- java 流读取图片供前台显示
- windows连接蓝牙失败
- 开发也可以如此简单!华为云发布两款开发工具
- 打听别人工资的7个话题,让你薪水更高
- windows编程中wParam和lParam消息
- 触发器原理与使用方法
- 【PaperReading】The permutation testing approach: a review
- word list 1
- <RTL设计的艺术> DDR带宽计算公式
- #2016全球微服务架构高峰论坛
热门文章
- JAVA中常用英文单词简写释义)
- 当“疯子”遇上“儒生”:李彦宏儒雅应对,一如既往
- PCB板“ESD保护电路设计”9大措施,拿来吧你!
- 如何换键盘皮肤(恩不错哦,快来试试)
- CLEARTEXT communication to v.juhe.cn not permitted by network security polic
- 支持批量图片转文字的免费【OCR】文字识别工具,支持截图识别和批量图片识别,开源工具,速度快,准确度高,免费OCR,开源软件
- 工具分享丨手把手教你视频消音
- 04 Geometry几何体
- geoserver 安装
- 【GANs学习笔记】(六)JS Divergence不是最好的Divergence