有一些音视频初学者想要了解TS码流结构,但网上资料不全或者讲得不够清楚,使得学习过程变得异常艰难。这一篇内容将对TS码流结构做详尽解析,争取做到通俗易懂,成为最好的TS码流解析文章。
本篇TS码流解析将会参照Android的ATSParser代码。
首先我们要知道一个标准的TS包一般有188字节,但是也有TS包是192字节或者204字节的情况。同一路TS流中,每个TS包大小是一致的,不会同时出现188字节和192字节的TS包。接下来的文章中,我们只解析标准188字节的TS包。
标准TS包包括一个4
字节的包头、n
字节自适应域(可选)和184-n
字节的负载(可选),可选的意思是它可能在TS包中存在,也可能不存在。TS包的结构如图:
图中橙色部分是包头(header),蓝色部分是自适应域(adaptation field),黄色部分是负载(payload)。
1、TS Header解析
4字节包头共包含有8个字段,接下来依次解析包头字段:
sync_byte
:同步字节,值为0x47
,关于同步字节有以下几点需要了解:- 同步字节表示一个新的TS包的开