TS协议之PAT(节目关联表)
TS协议之PMT(节目映射表)
TS协议之PES(ES数据包)
概要
TS协议是一种媒体流封装协议,类似于MP4,FLV等,可以将编码好的视频流(H164,H265等)和音频流(AAC,MP3等)封装为TS数据流进行传输。
TS数据包规定为188字节,数据包有多种类型:
- PAT包:节目关联表,与PMT成对出现,包含所有的节目编号;是解析ts数据的起点。
- PMT包:节目映射表,与PAT成对出现,包含所有的节目元素编号,是获取媒体流的关键。
- PES包:就是媒体流数据包,包含了视频帧,音频帧的数据。
在TS协议中会经常见到ES这个词,ES包含在PES中,就是指需要传输的视频流(H164,H265等),音频流(AAC,MP3等)的原始流。
专业名词
ES:是指需要传输的视频流(H164,H265等),音频流(AAC,MP3等)的原始流。
PID:包含在TS头中,标识特定的媒体流或TS包(PMT)。通过该字段找到需要的PMT和媒体流。
PCR:用于同步音视频的传输和播放,与PTS时间说可以互相转化。
PTS/DTS:媒体流的时间戳。在PES包中包含。
PSI:是指节目专用信息表。它由节目关联表(PAT)、条件接收表(CAT)和节目映射表(PMT)组成
TS传输流程
在TS包中可能包含很多种媒体流,那么如何TS在传输的过程中是如何找到想要的媒体流进而进行播放的呢?TS的传输流程如下:
TS数据包的数据结构:TS头+PAT/PMT/PES;因此各类型数据的寻找就需要解析TS头,在TS头中有一个PID字段,通过查找对应的PID字段进行数据的筛选;PAT的PID字段固定为0x0,也是TS解析的起点,解析ts流需要先找到PID为0x0的PAT包,PAT包中又包含了很多PMT的PID,PMT中包含了该节目的视频流PID和音频流PID,通过节目编号获取PMT编号,再通过PMT获取节目对应的媒体流PID,从TS流中找到对应PID的媒体流即可。
举个例子:PAT里面包含了河南卫视,cctv-1等,河南卫视就是一个PMT;进入河南卫视就会获取河南卫视的媒体流数据,该媒体流数据包括音频,视频,字幕等,就是获取TS中的获取河南卫视媒体流的PES包,进而播放媒体流。
TS流相较于PS流的区别就是:PS适用于固定长度的媒体流,如果某一部分数据丢失就导致 媒体流无法播放;而TS的媒体流,无论什么时候都能进行编解码播放,如果某部分数据损坏,等待下一个PAT,PMT包即可继续播放。
因此TS流在传输过程中是这样的结构:
在传输过程中固定间隔在TS数据流中插入PAT,PMT信息包,便于随时播放媒体流;该固定间隔可以自定义,可以是固定时间,可以是固定帧数等。因此可以在传输过程中改变流媒体信息(增加或者减少)。