天天看点

制作mpeg2ts流时PCR_base和PCR_ext的计算方法

参考《数字电视业务信息及其编码》一文中提到的PCR计算方法,

系统时钟频率以Hz为单位并需要满足一下条件

27 000 000 - 540 <= 系统时钟频率 <= 27 000 000 000 + 540

这里我们取系统时钟的理想值27 000 000 Hz

PCR分两部分编码:一个以系统时钟频率的 1/300 为单位,称PCR_base;另一个以系统时钟频率为单位,成为PCR_ext。

具体规定如下:

PCR_base(i) = ((系统时钟频率 x t(i)) div 300) % 2^33

PCR_ext(i) = ((系统时钟频率 x t(i)) div 1) % 300

uint32_t mp2ts_pcr_base_us(uint64_t ti_us) 
 { 
 uint32_t pcr_base = (27 * ti_us) / 300; 
 return pcr_base; 
 }uint32_t mp2ts_pcr_ext_us(uint64_t ti_us) 
 { 
 uint32_t pcr_ext = (27 * ti_us) % 300; 
 return pcr_ext; 
 }uint32_t mp2ts_pcr_base_s(uint32_t ti_s) 
 { 
 uint32_t pcr_base = (27000000 / 300) * ti_s; 
 return pcr_base; 
 }uint32_t mp2ts_pcr_ext_s(uint32_t ti_s) 
 { 
 uint32_t pcr_ext = ti_s % 300; 
 return pcr_ext; 
 }      

继续阅读