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

时间:2017-08-29 08:44:42

标签: c++ c ffmpeg multimedia

我需要从示例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);

   }

我从文件中获取了数据,现在我需要找到&#34; PID&#34;数据中的字节。

2 个答案:

答案 0 :(得分:3)

enter image description here

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

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

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

重复。

答案 1 :(得分:2)

我建议看两件事:

  1. MPEG-2 TS规范应为this one。这应该会为您提供有关如何打包此信息的提示。

  2. 通过github的FFMPEG源代码。他们有一个MPEG TS解析器,这可以给你一个如何开始的提示。