基于ts的pcr控制发送,基本思路如下
1)解析切片的pcr信息,计算前后两个pcr的差值及ts包数,动态给区间内每个ts包赋值pcr值差值;
2)建立绝对时间与PCR映射关系,t0 t1 t2 t3 .... ↔pcr0 pcr1 pcr2 pcr3 ....,某个发送间隔t1-t0 ↔ pcr1-pcr0,即从t0时刻(pcr0)的ts包开始到t1时刻(pcr1)的ts包结束;
3)这样可以保证每个发送间隔内发送的数据贴近真实编码器输出时的时间轴;
相关换算公式:
PCR_base(i) = ((system_clock_frequency * t(i)) / 300) % 2^33
PCR_ext(i) = ((system_clock_frequency * t(i)) / 1 ) % 300
pcr = ((system_clock_frequency * t(i)) / 300) % 2^33 + ((system_clock_frequency * t(i)) / 1 ) % 300
pcr1 = ((system_clock_frequency * t(1)) / 300) % 2^33 + ((system_clock_frequency * t(1)) / 1 ) % 300
pcr0 = ((system_clock_frequency * t(0)) / 300) % 2^33 + ((system_clock_frequency * t(0)) / 1 ) % 300
delta = pcr1 - pcr0
= ((system_clock_frequency * t(1)) / 300) % 2^33 + ((system_clock_frequency * t(1)) / 1 ) % 300 - ((system_clock_frequency * t(0)) / 300) % 2^33 - ((system_clock_frequency * t(0)) / 1 ) % 300
= ((system_clock_frequency * t(1)) / 300) % 2^33 - ((system_clock_frequency * t(0)) / 300) % 2^33 + ((system_clock_frequency * t(1)) / 1 ) % 300 - ((system_clock_frequency * t(0)) / 1 ) % 300