文章目录
我们常在技术文章中看到“h264中的pts”这种描述,实际上H.264或H.265的定义中并没有包含PTS、DTS,因此裸流数据中也没有PTS、DTS值,那么PTS是从哪里来的?为什么在PTS与时间的转换转换中总会出现一个90000?由于PTS和DTS的定义类似,所以下面就以PTS为例,追根溯源介绍一下
PTS来源
PTS——Present timestamp,显示时间戳,定义在MEPG制定的“影音压缩及传输”标准中,也就是我们常说的MPEG-1、MPEG-2等。具体可以参考MPEG-2标准文档的第一部分ISO/IEC13818-1
实际上在MPEG-2标准文档的第一部分还没有涉及到编码,因此PTS也就跟h264没有直接关系,“h264中的pts”这种描述是不严谨的
那么PTS是怎么定义的呢?这里要深挖一下上古时期的技术,还记得直播/点播协议HLS中使用的TS分片么,TS格式全称是MPEG2-TS,就是在MPEG-2标准文档中定义的封装格式,MPEG-2于1994年发布
MPEG-2通常用来为广播信号提供视频和音频编码,包括卫星电视、有线电视等。MPEG-2经过少量修改后,也成为DVD产品的核心技术。
那个时候的直播还是数字电视为主,因此使用条件也有所不同
MPEG-2是一种多媒体传输、复用技术,在数字电视广播中可提供数百个节目频道。复用的含义是,可以同时传输多层节目。MPEG-2标准中,有两种不同的码流输出到信道,一种是节目码流(PS: Program Stream ,节目流),适用于没有传输误差的场景;一种是传送流(TS : Transport Stream ,传输流),适用于有信道噪声的传输场景。
节目码流是用于稳定可靠的媒体,如光盘(如DVD / CD),而传输流是用于不太稳定的传输,例如地面或卫星广播。此外,传输流可以传输多个节目。它们两者之间之间不具有层级关系。在逻辑上,其中它们都是都是PES(Packetized Elementary Stream,包基本流)包组成的,所以可以很方便地实现相互转换。
说句题外话,由于TS太古老,所以苹果使用fMP4替换了TS
回到正题,在数字电视系统中,要求编码器和解码器保持同步,因此需要时钟同步。为了实现各种不同应用状态下的编码器,解码器之间的同步,在MPEG系统中引入了系统时钟(STC)、节目时钟基准(PCR)、显示时间标记(PTS)的概念(划重点)。
在数字音、视频编码器中,信号的抽样、处理都是以一个27MHz的参考时钟为基础来进行的。对一个显示单元(如一帧图像),打上用系统时钟对应的参考显示时间,叫显示时间标记,该信息随同码流一起传输。同时,时钟信息也被抽样加入到码流中一起传输。
以上就是PTS最早的定义。用途倒是与现在没有区别,都是用于视频同步、重排序(b帧)和音画同步(音视频交错到达)
参考时钟
了解了PTS的来源,