C++ 我需要从示例MPEG-TS文件中获取PID

C++ 我需要从示例MPEG-TS文件中获取PID,c++,c,ffmpeg,multimedia,C++,C,Ffmpeg,Multimedia,我需要从一个示例MPEG-TS文件中获取PID,我尝试使用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("s

我需要从一个示例MPEG-TS文件中获取PID,我尝试使用
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);

   }
#包括
#包括
void main()
{
文件*myfile;
文件*输出;
int i=0,j;
无符号整数缓冲区;
INTO;
myfile=fopen(“screen.ts”、“rb”);
输出=fopen(“output2.txt”,“w”);
做{
o=fread(&buffer,2,1,myfile);
如果(o!=1)
打破
printf(“%d:,i”);
printf(“%x\n”,缓冲区);
fprintf(输出,“%x”,缓冲区);
i++;
}而(1),;
}

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

我建议看两件事:

  • MPEG-2 TS规范,应该是。这将提示您如何打包这些信息

  • FFMPEG源代码。他们有一个MPEG TS解析器,这应该给你一个如何开始的提示

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


    PID是一个13位无符号整数,可以存储在
    uint16\u t
    中,它等于
    ((p[1]&0x1f)你真的需要详细说明你的问题。你完全不清楚你想要什么。@MichaelWalz现在我已经编辑了这个问题,你能回答吗?你至少需要显示你代码的相关部分。并且详细说明,写更多的文本,解释更多。@MichaelWalz现在请…你为什么认为你的平台上
    int
    有2个字节长?我试着从Github编译“MPEG TS parser”的代码,我得到了很多错误,比如“未知类型名称”,请帮助我。不要尝试编译它,看看源代码,特别是mpegts。c这里:这对我有帮助,我还需要PID类型,你有什么想法吗?@SaiRaghuramKaligotla只使用lib。