概念
TS协议是一种媒体流封装协议,类似于MP4
TS有三种类型包,其长度固定为188字节
- PAT包:节目关联表,包含所有的节目编号,是解析TS数据的七点
- PMT包:节目映射表,包含所有的节目元素编号,是获取媒体流的关键
- PES包:就是媒体流数据包,包含了视频帧,音频帧的数据
PS补充:
ES:是指需要传输的视频流(H164,H265等),音频流(AAC,MP3等)的原始流。
PID:包含在TS头中,标识特定的媒体流或TS包(PMT)。通过该字段找到需要的PMT和媒体流。
PCR:用于同步音视频的传输和播放,与PTS时间说可以互相转化。
PTS/DTS:媒体流的时间戳。在PES包中包含。
PSI:是指节目专用信息表。它由节目关联表(PAT)、条件接收表(CAT)和节目映射表(PMT)组成
PAT格式
PMT格式:
TS传输流程
PAT->PMT->…PMT->PES->…->PAT->PMT->…->PMT->PES
首先解析PAT包,获取PID字段,其中PAT的PID字段固定为0x0, 在PAT中包含了各个PMT的PID,解析即可获得视频流或者音频流的PID,并且查找其PMT编号, 再继续收包获取对应想要的PMT流,即可找到对应媒体流的PID,从而收取数据包PES
TS文件
TS文件为传输流文件
文件分为三层
TS层:在PES层的基础上加入数据流和识别传输的必要信息
PES层:在音视频基础上加入了时间戳等对数据帧的说明信息
ES层: 音视频数据
ts 包⼤⼩固定为 188 字节,ts 层分为三个部分:ts header、adaptation field、payload。
ts header固定 4 个字节;adaptation field 可能存在也可能不存在,主要作⽤是给不⾜ 188 字节的数据做填充;
payload 是 pes 数据
ts header
ts 层的内容是通过 PID 值来标识的,主要内容包括:PAT 表、PMT 表、⾳频流、视频流。解析 ts 流要先找到 PAT 表,只要找到 PAT 就可以找到 PMT,然后就可以找到⾳视频流了。PAT 表的和 PMT 表需要定期插⼊ ts 流,因为⽤户随时可能加⼊ ts 流,这个间隔⽐较⼩,通常每隔⼏个视频帧就要加⼊ PAT和 PMT。PAT 和 PMT 表是必须的,还可以加⼊其它表如 SDT(业务描述表)等,不过 hls 流只要有PAT 和 PMT 就可以播放了。
PAT 表:主要的作⽤就是指明了 PMT 表的 PID 值。
PMT 表:主要的作⽤就是指明了⾳视频流的 PID 值。
⾳频流/视频流:承载⾳视频内容
adapation field
pcr 是节⽬时钟参考,pcr、dts、pts 都是对同⼀个系统时钟的采样值,pcr 是递增的,因此可以将其设置为 dts 值,⾳频数据不需要 pcr
pes 层:Packet Elemental Stream
Pes Header
pts 是显示时间戳、dts 是解码时间戳,视频数据两种时间戳都需要
es 层
直接填充H264/AAC
问题 如何进行切包到188字节传输
用payload_unit_start_indicator 来标记新数据的开始 值为1代表一个帧的开始