PCR正常跳变的处理


在一个TS流之中,不同节目的PCR常常是不同的,也就是不连续的。

比如,在电视剧播放的当中,插播一段广告。由于电视剧和广告的PCR常常是不连续的,并且可能存在巨大跳跃。

于是这个时候,如果当前系统仍然使用PCR进行同步本地STC, 此时,STC会有一次明显的跳跃.

可能产生的后果:
由于电视剧节目一部分原始数据还在TS BUFFER里面,等待和STC时间相等后再进行解码;
还有一部分解码后数据在video显存里面,等待和时间STC时间相等后再进行显示.
根据PCR同步的原理: 将使用PCR直接同步本地STC. 这个时候,一旦用广告的PCR同步本地STC,那么上面提到的两部分数据,所等待的解码和显示的时间将不会来临。
结果就是: 电视剧后面的一点尾巴没有播放出来。至于尾巴具体长度,取决于两个BUFFER中数据量的多少。
当没有其他STB来做对比的情况下,客户没感觉到任何差别;一旦有另外的处理完善的STB作为对比,此问题将浮出水面。

如何解决?
使用两个STC来处理这种case。
当PCR产生突变后,电视剧仍然使用之前的STC,直到所有数据被解码和显示,但广告将使用新的STC来解码和显示。


关于STC的一些说明:
可以只有一个硬件STC,再次基础上,可虚拟出若干逻辑软件STC.
软件STC计数器数值 = 硬件STC计数器数值 + OFFSET
所谓同步本地STC,其实就是修改软件STC的OFFSET的过程。

你可能感兴趣的:(video,buffer)