基于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