原文地址:https://www.xuebuyuan.com/1946444.html
参考《数字电视业务信息及其编码》一文中提到的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
PCR(i) = PCR_base(i) x 300 + PCR_ext(i)
以后为对应上述公式的C/C++函数接口,有输入时间为微秒(us)和秒(s)两套接口:
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;
}