我需要从示例 MPEG-TS 文件中获取 PIDS

I need to get PIDS from a sample MPEG-TS file

我需要从示例 MPEG-TS 文件中获取 PIDS,我尝试使用 fopen() 读取文件并获取十六进制格式的数据。现在我一直在寻找整个数据中的 PID 字节。谁能帮帮我?

我使用了下面的代码:

#include <stdio.h>
#include <string.h>

void main()
{

FILE *myfile;

FILE *output;

int i=0,j;

unsigned int buffer;

 int o;
 myfile=fopen("screen.ts","rb");
 output = fopen("output2.txt","w");
 do{
     o=fread(&buffer, 2, 1, myfile);
    if(o!=1)
    break;         
    printf("%d: ",i);     
    printf("%x\n",buffer);
    fprintf(output,"%x ",buffer);
    i++;
   }while(1);

   }

我从文件中获取了数据,现在我需要定位数据中的 "PID" 个字节。

我建议看两件事:

  1. MPEG-2 TS规范,应该是this one。这应该会提示您如何打包此信息。

  2. FFMPEG 源代码来自 github。他们有一个 MPEG TS 解析器,这应该会提示您如何开始。

考虑指向 TS 数据包开头的指针 p。检查同步字节 p[0] == 0x47.

PID 是一个 13 位无符号整数,您可以将其存储在 uint16_t 中,等于 ((p[1] & 0x1f) << 8) | p[2].

将指针增加 TS 数据包的大小,通常为 188 字节。

重复。