
几天前,我写了一份有关HLS的学习笔记,并记录了HLS和m3u8文件的格式参数. 在m3u8文件中,有一个关于视频文件的索引. 这个视频文件是我在这里所说的TS文件. 今天,我将了解TS文件的特征和格式.
首先看一下基本概念:
ES流(基本流): 基本代码流,可以理解为编码的裸数据;
PES流: 拆分并打包ES流,添加PES标头. PES分组的长度是可变的. PES标头中最重要的部分是显示时间戳(Presentation Time Stamp,PTS)和解码时间戳(Decode Time Stamp,DTS). 借助PTS和DTS,再加上节目时钟参考PCR,可以从TS流中重建视频流;
TS流(传输流): 传输流. 固定包的长度为188B. TS流的固定数据包长度的优点是易于找到帧的开始位置,并且易于从数据包丢失中恢复. 它适用于具有误码的环境.
因此,基于TS流的稳定特性,在传输介质中传输的MPEG-2码流基本上采用TS码流的包.
以TS流具有188B的固定数据包长度的概念编写. 但是我看TS文件,它更大. 因此,我从互联网上找到了一个TS文件并进行了解析:

在这里我们看到文件大小为1546112字节,其中包含8224个数据包,8224 * 188 = 1546112. 说明此文件由许多TS程序包组成.
TS格式也有很多介绍. TS的开头是一个4字节的数据包头,随后的部分是数据包数据.
数据包头信息大小意义

sync_byte
8位
同步字节(0x47固定值)
transport_error_indicator
1bit
错误指示信息(1: 数据包至少具有1位传输错误)
payload_unit_start_indicator
1bit
加载单元开始标记(当数据包小于188个字节时需要填充)
transport_priority
1bit

传输优先级标记(1: 高优先级)
PID
13bits
数据包ID号,该唯一号对应于不同的数据包
transport_scrambling_control
2bits
加密徽标(00: 未加密;其他表示加密)
adaptation_field_control
2bits
其他区域控制
continuity_counter

4位
数据包增量计数器
我将找到一个TS包进行比较:

与描述中的信息基本一致. 在这里,请注意PID,这是一个更为关键的领域. PID是TS流中唯一的标识标记,而哪些数据包数据由PID确定.
一些固定点:
PID含义
0x0000
PAT
0x0001
CAT

0x0002
TSDT
0x0002
EIT,ST
PID是唯一标识符,用于将当前TS数据包与其他数据包类型区分开. PAT表定义当前TS流中的所有程序,并且是根节点. 要搜索程序,必须从PAT表开始搜索. PAT表的PID为0x0000. 在这里ts文件解析,我们寻找PAT的pcaket标头.

PID: 0x0表示这是一个PAT表,并且可以从PAT表的分组数据中获取PMT表的PID. 如果有多个程序,则有多个具有不同PID的PMT表.
PMT表中包含的数据:
1. 当前频道中包含的所有视频数据的PID
2. 当前频道中包含的所有音频数据的PID
3. 与当前频道关联的其他数据的PID(例如数字广播ts文件解析,数据通信等中使用的PID)

上图显示了PMT的标题信息.
从PMT表中,我们可以获取通道中的PID信息. 我们只需要保存需要监视的程序的PID并过滤数据包即可.
本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/bofangqi/article-240150-1.html
饮料不饮料酒不像酒的玩意
愚者图虚名