一个简单的从指定MPEG2/TS文件中获取PCR PID的函数,
PMT的头结构中有PCR PID,我们首先得到PMT PID,然后分析PMT包,就可以得到PCR PID了。
GetPmtPid函数的实现见:http://blog.csdn.net/myaccella/article/details/6982596
MAKE_PID:
#define MAKE_PID(p) (((p[0]<<8) + p[1]) & 0x1fff)
ushort GetPcrPid(const char* filename)
{
#define TSPACKET_SIZE 188
ushort pid, pmtpid, pcrpid = 0;
uchar buf[TSPACKET_SIZE];
uchar* p = buf;
FILE* fp;
pmtpid = GetPmtPid(filename);
if (pmtpid == 0) {
fprintf(stderr, "Unable to get PMT PID!\n");
return 0;
}
fp = fopen(filename, "rb");
if (fp == NULL) {
fprintf(stderr, "Failed to open the file %s: %s\n", filename, strerror(errno));
return 0;
}
while (fread(buf, 1, TSPACKET_SIZE, fp) == TSPACKET_SIZE) {
if (buf[0] !&