TS流解析-提取PSI信息

该博客详细介绍了如何解析TS流中的PSI(节目关联信息)数据,包括PAT和PMT表的提取过程。通过读取TS文件,查找PAT分组并解析PMT表,获取节目编号、PMT PID、视频PID和音频PID等关键信息。
摘要由CSDN通过智能技术生成

TS流解析-提取PSI信息等

代码加注释如下:

 

[cpp]   view plain copy
  1. #include <iostream>  
  2. #include <fstream>  
  3. using namespace std;  
  4. struct programs //封装节目信息的结构体  
  5. {  
  6.     int programID;//节目编号  
  7.     int pmtPID;//所属PMT的pid  
  8.     int videoPID;//视频pid  
  9.     int audioPID1;//音频pid  
  10.     int audioPID2;//音频pid  
  11. }myProg[20];  
  12.   
  13. bool FindAndParsePAT(unsigned char *buffer,int pID,int curPack);//传入BUF和PID的值  
  14. bool FindAndParsePMT(unsigned char *buffer,int pID,int curPack);  
  15. int program=0;  
  16. int prog_count=0;  
  17. void main()  
  18. {  
  19.       
  20.     unsigned    char *buffer=new unsigned char[500];  
  21.     int  startPos=0;//第一个TS分组在流中的位置序号  
  22.     int  packageLen=0;//分组长度  
  23.     int  pmtCount=-1;//PMT表序号  
  24.     int  pID=0;  
  25.     int  nullpack=0;  
  26.     //0.以二进制方式打开TS文件  
  27.     ifstream myFile("test.ts",ios::binary|ios::in);  
  28.           
  29.     //1.读入文件的前500个字节,找同步头、确定包长  
  30.     myFile.read((char *)buffer,500);  
  31.     for(int i=0;i<500;i++)  
  32.     {    //判断有无压缩  
  33.         if(buffer[i]==0x47&&buffer[i+188]==0x47)  
  34.         {  
  35.             startPos=i;//第一个TS分组在流中的位置序号  
  36.             packageLen=188;//分组长度  
  37.             break;  
  38.         }  
  39.         else if(buffer[i]==0x47&&buffer[i+204]==0x47)  
  40.         {  
  41.             startPos=i;  
  42.             packageLen=204;  
  43.             break;  
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值