如何推广软件,怎么优化自己的网站,外链是什么,专业餐饮vi设计公司本篇介绍下TS的封装格式。
1.什么是TS#xff1f; TS#xff08;Transport Stream#xff0c;传输流#xff09;#xff0c;一种常见的视频封装格式#xff0c;是基于MPEG-2的封装格式#xff08;所以也叫MPEG-TS#xff09;#xff0c;后缀为.ts。 2.TS的分层结构
…本篇介绍下TS的封装格式。
1.什么是TS TSTransport Stream传输流一种常见的视频封装格式是基于MPEG-2的封装格式所以也叫MPEG-TS后缀为.ts。 2.TS的分层结构
TS文件分为三层如下所示可以倒序看更好理解
◆ TS层Transport Stream在PES层基础上加入了数据流识别信息和传输信息。一个ts视频文件含有多个ts单元包。
◆ PES层Packet Elemental Stream在ES层基础上加入时间戳PTS/DTS等信息。每个ts单元含有一个pes头多个es包。
◆ ES层Elementary Stream压缩编码后的音视频数据。 xB表示字节数不确定4B表示字节数为4个。 2.1 TS层 TS传输流是由固定⻓度的包组成含有独⽴时间基准的⼀个或多个节⽬适⽤于误码较多的环境并且从流的任意⼀段开始都可以独⽴解码。PS(Program Stream):节⽬流PS流与TS流的区别在于PS流的包结构是可变⻓度⽽TS流的包结构是固定⻓度。
◆ ts包大小固定为188字节ts层分为三个部分ts header、adaptation field、payload。
◆ ts header固定4个字节每188字节单元就有一个ts header。
◆ adaptation field可能存在也可能不存在主要作用是给不足188字节的数据做填充。
◆ payload是 PES 数据或者PATPMT等。PAT、PMT是解析ts寻找音视频流很重要的表。
◆ ts Header adaptation field 格式如下 2.1.1 TS Header
◆ TS Header格式如下 ◆ PID信息非常关键它直接表征本次TS包的用途。比较重要的是PAT和PMT。常用的PID值 如果PID为0x0那么此ts的payload为PAT如果为表中未列出的值那么为分配给此ts包的一个唯一标识用来区分ts包属于哪个节目。一个节目包含多个ts包。 PID取值 PID值使用描述 0x0000 节目关联表program association table, PAT 0x0001 条件访问表conditional access table, CAT 0x0002 传送流描述表transport stream description table, TSDT 0x0003~0x000F 保留 0x0010~0x1FFE 可以分配为network PID, Program map PID, elementary PID, 或其它 0x1FFF 空包8191
2.1.2 Adaptation field 在MPEG-2 TS中为了传送打包后长度不足188B的不完整TS或者为了在系统层插入节目时钟参考program clock reference PCR需要在TS包中插入可变字节的调整字段。调整字段其中一个重要作用是解决编解码器的音视频同步问题。一般在视频帧中的TS包的调整字段中每隔一定传输时间传送系统时钟27MHz的一个抽样值给接收机作为解码器解码时的时钟参考信息PCR。PCR通常每隔100ms至少被传输一次。PCR的数值所表示的是解码器在读完这个抽样值的最后那个字节时解码器本地时钟所应处的状态。通常情况下PCR不直接改变解码器的本地时钟而是作为参考基准来调整本地时钟使之与PCR趋于一致。 2.1.3 payload 前边提到了PAT和PMT它们都是PSI之一节目专用信息Program Special Information PSI。MPEG-2 TS传送的TS包携带两类信息已压缩的音视频PES和与之相关的符号化表PSI由传送包PES的PID来标识。如果是PSI那么payload内容为PAT表结构、PMT表结构如果为音视频那么payload内容为PES包。 如下为ts文件的PAT和PMT。PAT表指定节目列表以及节目对应的PIDPMT指定某节目的所有音视频流及其对应的PID。由下图右侧可知PAT指出只有一个节目0x001且此节目对应的PMT的PID为256PMT指出0x001节目所有视频流PID为258音频PID为257左侧是ts文件的PAT PMT PID的统计。 1PAT表结构 指明PMT表的PID值 节目关联表Program Association Table PAT得出所有节目的PID。N loop为一个数组是节目列表及其对应的pid每个节目就是指一段视频具有唯一id。 2PMT表指明音视频流的PID值 PMT提供一路节目包含的所有原始码流的PID映射表。原始码流的PID从ts header的pid读取。 程序在读取N环的时候会读取该节目所有的码流列表及其PID解析的时候可以根据PID来分离。N环描述符包括的信息如下图所示。节目时钟参考PCR的PID和视频的PID是相等的。由PAT得出所有的节目列表选定收看的节目后筛选出等于该节目PID的TS包就可以得到该节目的所有码流的PID映射表这样接收机就可以只接收PID等于该节目的码流的TS包即可收看该节目。 3补充说明
◆ 打包ts流时PAT和PMT表是没有调整字段的不够的长度直接补0xFF即可。
◆ 视频流和音频流都需要加adaptation field通常加在一个帧的第一个ts包和最后一个ts包里中间的ts包不加。
2.2 PES 层 分组的原始码流将原始码流ES流根据需要分成⻓度不等的数据包并加上包头就形成了打包的基本码流PES流。是⽤来传输ES的⼀种数据结构。
◆ PESPacketized Elementary Stream打包的ES在 ES 层的基础上加入了时间戳PTS/TDS等信息。
◆ ES数据包比较大加入PES头时需将ES进行分割只在第一个分割的ES上加PES头如下图所示 ◆ PES packet length — 指示PES 包中跟随该字段最后字节的字节数。0 值指示PES 包长度既未指示也未限定并且仅在这样的PES 包中才被允许该PES 包的有效载荷由来自传输流包中所包含的视频基本流的字节组成。
◆ PES结构如下 ◆ PES 关键字段说明 PES包的第5个字节标识一整个PES包的长度一般来说一个PES包包含一帧图像获取了PES的包长度Len当接收到Len个字节后将接收到的字节组成一个block放入FIFO中等待解码线程解码。DTS和PTS也在PES包中传送。 2.3 ES 层
◆ ESElementary Stream基本码流就是不分组的⾳频、视频或其他信息的连续码流比如视频H.264音频AAC。
◆ 一个 ES 流中只包含一种类型的数据视频或音频或字幕。 3. MPEGTS 动态静态分析工具 --- easyice下载
easyice下载 两种方式都可以 1 https://www.easyice.cn/archives/85 2链接https://pan.baidu.com/s/1N3SA4UBjfL0KD67dN52qww 提取码1234 ts视频下载 http://devimages.apple.com/iphone/samples/bipbop/bipbopall.m3u8 m3u8播放地址 打开可查看是否可用 1打开网址找到m3u8文件 发现文件里面还是m3u8文件 2拼接地址 将文件中的m3u8地址替换掉url中的最后一个m3u8文件名然后继续访问。 3此时可看见ts文件 4拼接ts下载地址 用ts文件名替换掉url中的m3u8文件名。获得ts下载地址 5ts下载地址使用迅雷下载或者直接输入Google浏览器即可下载。 4. ts视频流分析 1使用EasyICE打开ts文件 可以看到ts文件的十六进制流。然后换算成二进制对比协议即可得出数据含义。FF是填充为因为不满180字节所以填充。 每行 为一个ts单元包都包括ts、adaption field、payload。 2对照协议 左边为协议解释右边浅蓝低为抓包到的十六进制数据。十六进制转换为二进制时需要一位一位转化不能够两位十六进制转化。