制作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

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;
}


 

你可能感兴趣的:(ts,ts,MPEG,PCR)