TS流解析-提取PSI信息等
代码加注释如下:
- #include <iostream>
- #include <fstream>
- using namespace std;
- struct programs //封装节目信息的结构体
- {
- int programID;//节目编号
- int pmtPID;//所属PMT的pid
- int videoPID;//视频pid
- int audioPID1;//音频pid
- int audioPID2;//音频pid
- }myProg[20];
- bool FindAndParsePAT(unsigned char *buffer,int pID,int curPack);//传入BUF和PID的值
- bool FindAndParsePMT(unsigned char *buffer,int pID,int curPack);
- int program=0;
- int prog_count=0;
- void main()
- {
- unsigned char *buffer=new unsigned char[500];
- int startPos=0;//第一个TS分组在流中的位置序号
- int packageLen=0;//分组长度
- int pmtCount=-1;//PMT表序号
- int pID=0;
- int nullpack=0;
- //0.以二进制方式打开TS文件
- ifstream myFile("test.ts",ios::binary|ios::in);
- //1.读入文件的前500个字节,找同步头、确定包长
- myFile.read((char *)buffer,500);
- for(int i=0;i<500;i++)
- { //判断有无压缩
- if(buffer[i]==0x47&&buffer[i+188]==0x47)
- {
- startPos=i;//第一个TS分组在流中的位置序号
- packageLen=188;//分组长度
- break;
- }
- else if(buffer[i]==0x47&&buffer[i+204]==0x47)
- {
- startPos=i;
- packageLen=204;
- break;