解析TS流是一个很复杂的过程,首先需要解析TS包头的数据。这里不将分188字节和204字节分开说明,我解析的包为204字节的,188的包解析过程是一样的。
首先我们要定义头文件,头文件的作用为定义一些结构体和函数的申明。
这里给出头文件的源码(我命名为ts_head,h):
#include "define.h"
#ifndef TS_HEAD_H
#define TS_HEAD_H
//.....................结构体的定义..................
typedef struct //定义包头结构体
{
unsigned int continuity_counter : 4;//连续计数器
unsigned int adaptation_field_control : 2;//附加域控制
unsigned int transport_scambling_control : 2;//加密标志
unsigned int PID : 13; //packet ID号
unsigned int transport_priority : 1;//优先级标志
unsigned int payload_uint_start_indicator : 1;//开始标志
unsigned int transport_error_indicator : 1; //错误指示信息
unsigned int sync_byte : 8;//8bit的同步字节
}Pack_hd_st;
typedef struct
{
Pack_hd_st pack_head;//包头的数据
unsigned char *buff;//指向包头后面的200字节数据
int counter;//用来判定文件是否读到尾
}Pac