前言
最近刚入职,公司是做机顶盒业务的,首要任务是要解TS码流,特意前来记录下编写的步骤,留些脚印来证明自己从事过该行业!!!!对于什么是TS流以及其他的相关知识,我这里就不赘述了。
任务一
给你一个TS流的文件,让你判断该包长是188字节还是204字节。一般来说,TS码流都是由一个个TS包组成的,每个包都是以0x47开始,204字节的是在188字节的基础多了16个字节的校验码。
思路
1.读取文件
2.读取字节
3.判断读取到的字节是否为0x47,是,记录当前位置save_position,执行4,否,执行2
4.读取下一个188或204包长的头字节,头字节是否为0x47,是,累计次数++,次数>10,执行5,次数<10,执行4,否,移动到save_position,执行3
5.返回包长长度
代码
//用于对0x47的判断次数,进入之前保存位置,出来之后重置读取的位置
static int check_times(FILE *ts_file, const int package_length, long int *offset)
{
int loop = 1;
int return_value = 1;
*offset = ftell(ts_file);
/*---------------------------------------------------------*/
/* Starting at 0x47 is there enough size to check 10 times?*/
/*---------------------------------------------------------*/
if (fseek(ts_file, package_length * 10 -