mpeg-ts封装对时间戮循环到头的处理

    在对H.264/H.265视频流进行mpeg-ts封装时,需要填写pcr/dts/pts信息,但这三个字段均有长度限制,在进行相关时间戮赋值时,需要考虑循环溢出问题。

    ts流中的三个时间戮,pts(33bit)、dts(33bit)、pcr(42bit)

    当时间戮增加到语法无法容纳时,产生时间戮循环,时间线开始变小,循环点计算方法是:将要设置的值减去时间戮最大值,将差值写入语法结构。实际在编码时,可以将要设置时间戮值对时间戮最大值进行取余,将余数写入语法结构。

    编码器设置时钟,以及解码器自己的系统在达到最大值后,都根据此方式计算,不会产生时钟的不连续。


    那么,PCR能表示多长时间?

    PCR最大值是多少,多长时间会循环一次,这是个非常简单的问题,算法如下:

    PCR(i) = PCR_base(i) * 300 + PCR_ext(i)

    PCR_base 33位,最大值为:0x1FFFFFFFF

    PCR_ext 9位,根据定义,取值 0-299

    因此,PCR最大值为:0x1FFFFFFFF * 300 + 299

    可表示的小时数:(0x1FFFFFFFF * 300 + 299) / 27000000 / 3600. 约为 26.5 小时

作者:Lory | 时间:2017-10-25 21:38:52 | 分类:编程经验 | 浏览:88 | 评论:0