在程序流中,我得到了第一个PTS值为“4295626096”且值为648000的pes包,下一个包的pts值比第一个包小得多。有些PES包值如下: 瘟packet1:分4295626096 DTS 648000. 瘟packet2:分651600. 瘟packet3:分655200. 瘟packet4:分4295636896和DTS 658800. 瘟packet5:分662400. 瘟packet6 :分666000. 瘟packet7:分4295647696和DTS 669600. 瘟packet8:分673200. 瘟packet9:分676800. 瘟packet10:分429565896和DTS 680400. 和下一包点是684000,687600,702000,694800, 698400 ......现在看起来不错。如何处理程序流中的PTS/DTS/SCR值的溢出情况
当我对此进行搜索时,发现如果SCR/PTS/DTS的33位值为1,这是溢出的情况,但我在标准中找不到相同的值。
任何人都可以解释发生溢出情况时的情况以及如何处理溢出情况(以获得正确的时间戳)以获得正确的PTS值。
感谢szatmary。我对你的代码有两个疑问。 1.您想通过将可能的pts/dts max_value 0x1FFFFFFFF除以2 [if((0x1FFFFFFFF/2)<-diff)]来检查什么? 2.什么是[int64_t diff = timestamp - current;]代码段的时间戳。 – Vivek
您缺少的边缘情况是非单调输入。如果previous和2是1,那么它不是一个溢出,它是一个非单调的时间戳。在这种情况下,此代码将返回-1,从而允许您处理该错误。我们正在检查的是,当它从X到Y时,它覆盖了超过50%的数字线。如果是这样,这是一个错误,而不是翻转(这是时间戳的标准做法) – szatmary
对不起。 (我在通勤列车上写的这个)固定。 – szatmary