常见视频封装格式(2)—TS

常见视频封装格式(2)—TS
概述
⽇常⽣活中,看到的视频⽂件的后缀名如 .mp4、.avi、.rmvb 都是属于视频⽂件的封装格式。所谓封装格式,就是以怎样的⽅式将视频轨、⾳频轨、字幕轨等信息组合在⼀起。说得通俗点,视频轨相当于饭,⽽⾳频轨相当于菜,封装格式就是⼀个碗或者⼀个锅,是⽤来盛放饭菜的容器。
视频⽂件的封装格式并不影响视频的画质,影响视频画⾯质量的是视频的编码格式。
下⾯介绍常见的视频封装格式 - TS。
1 TS 简述
TS 全称是 MPEG2-TS,MPEG2-TS 是⼀种标准容器格式,传输与存储⾳视频、节⽬与系统信息协议数据,⼴泛应⽤于数字⼴播系统,我们⽇常数字机顶盒接收到的就是 TS(Transport Stream,传输流)流。
⾸先需要先分辨 TS 传输流中⼏个基本概念
磁性材料液压机
1. ES(Elementary Stream):基本流,直接从编码器出来的数据流,可以是编码过的⾳频、视频或其他连续码流
2. PES(Packetized Elementary Streams):PES 流是 ES 流经过 PES 打包器处理后形成的数据流,在这个过程中完成了将 ES 流
分组、加⼊包头信息 (PTS、DTS 等)操作。PES 流的基本单位是 PES 包,PES 包由包头和 payload 组成
节能转轮除湿机3. PS 流(Program Stream):节⽬流,PS 流由 PS 包组成,⽽⼀个 PS 包⼜由若⼲个 PES 包组成。⼀个 PS 包由具有同⼀时间基
准的⼀个或多个 PES 包复合合成。
4. TS 流(Transport Stream):传输流,TS 流由固定长度(188 字节)的 TS 包组成,TS 包是对 PES 包的另⼀种封装⽅式,同样
由具有同⼀时间基准的⼀个或多个 PES 包复合合成。PS 包是不固定长度,⽽ TS 包为固定长度。
为便于传输,实现时分复⽤,基本流 ES 必须打包,就是将顺序连续、连续传输的数据流按⼀定的时间长度进⾏分割,分割的⼩段叫做包,因此打包也被称为分组。
MPEG-2 标准中,有两种不同的码流可以输出到信号,⼀种是节⽬码流(PS Program Stream),⼀种是传输流(TS Transport Stream)。
PS 流包结构长度可变,⼀旦某⼀ PS 包的同步信息丢失,接收机就⽆法确认下⼀包的同步位置,导致信息丢失,因此 PS 流适⽤于合理可靠的媒体,如光盘(DVD),PS 流的后缀名⼀般为 vob 或 evo。⽽ TS 传输流不同,TS 流的包结构为固定长度(⼀般为 188 字节),当传输误码破坏了某⼀ TS 包的同步信息时,接收机可在固定的位置检测它后⾯包中的同步信息,从⽽恢复同步,避免信息丢失,因此 TS 可适⽤于不太可靠的传输,即地⾯或卫星传播,TS 流的后缀⼀般为 ts、mpg、mpeg。
由于 TS 码流具有较强的抵抗传输误码的能⼒,因此⽬前在传输媒体中进⾏传输的 MPEG-2 码流基本上都采⽤了 TS
2 基本流程
2.1 TS 流形成过程
对路网以电视数字信号为例:
1) 原始⾳视频数据经过压缩编码得到基本流 ES 流
⽣成的 ES 基本流⽐较⼤,并且只是 I、P、B 这些视频帧或⾳频取样信息。
2) 对 ES 基本流进⾏打包⽣成 PES 流
通过 PES 打包器,⾸先对 ES 基本流进⾏分组打包,在每⼀个包前加上包头就构成了 PES 流的基本单位 —— PES 包,对视频 PES 来说,⼀般是⼀帧⼀个包,⾳频 PES ⼀般⼀个包不超过 64KB。
PES 包头信息中加⼊了 PTS、DTS 信息,⽤与⾳视频的同步。
3) 同⼀时间基准的 PES 包经过 TS 复⽤器⽣成 TS 传输包
PES 包的长度通常都是远⼤于 TS 包的长度,⼀个 PES 包必须由整数个 TS 包来传送,没装满的 TS 包由填充字节填充。PES 包进⾏ TS 复⽤时,往往⼀个 PES 包会分存到多个 TS 包中
将 PES 包内容分配到⼀系列固定长度的传输包(TS Packet)中。TS 流中 TS 传输包头加⼊了 PCR(节⽬参考时钟)与 PSI(节⽬专⽤信息),其中 PCR ⽤于解码器的系统时钟恢复。
PCR 时钟作⽤:我们知道,编码器中有⼀个系统时钟,⽤于产⽣指⽰⾳视频正确显⽰和解码的时间标签(DTS、PTS)。解码器在解码时⾸先利⽤ PCR 时钟重建与编码器同步的系统时钟,再利⽤ PES
流中的 DTS、PTS 进⾏⾳视频的同步。
4) 连续输出传输包形成具有恒定⽐特率的 MPEG-TS 流电动抽气机
2.2 TS 流解析过程
1) 从复⽤的 MPEG-TS 流中解析出 TS 包
2) 从 TS 包中获取 PAT 及节⽬对应的 PMT,解析获取⾳视频
⾸先简单了解⼀下什么是 PSI,后⾯会通过例⼦更详细的介绍。
PSI 是节⽬特定信息,该表格信息⽤来描述传送流的组成结构。PSI 信息由四种类型的表组成,包括节⽬关联表(PAT,Program Association Table)、节⽬映射表(PMT,Program Map Table)、条件接收表(CAT)、⽹络信息表(NIT)。PAT 与 PMT 两张表帮助我们到该传送流中的所有节⽬与流,PAT 告诉我们,TS 流是由哪些节⽬组成,每个节⽬的节⽬映射表 PMT 的 PID 是什么,⽽PMT 告诉我们,该节⽬由哪些流组成,每⼀路流的类型与 PID 是什么。CAT 与 NIT 暂时不考虑。
从图中 PAT 表中可以获取该 TS 流中包含哪些节⽬,并通过 PAT 表中具体节⽬的 PMT 表 PID 值(如节⽬ 0 对应 17 PMT PID),到该节⽬对应的 PMT 表,⽽有了 PMT 表我们就知道该节⽬有哪些流以及流的类型(视频、⾳频等),进⽽获取到⾳视频流对应的 PID。
3) 通过 PID 筛选出特定⾳视频流的 TS 包,并解析出 PES
自动折边机
4) 从 PES 中读取到 PTS/DTS,并从 PES 中解析出基本码流 ES
5) 将 ES 交给解码器解码
3 TS 格式
3.1 TS 包格式
TS 包主要由两部分组成,⼀个是 4 字节的包头信息,⼆是有效负载,另外由于每个包固定需要 188 字节,所以中间有可能需要插⼊⾃适应调整字段。其中有效负载包括 PSI(节⽬专⽤信息)、PES(打包后的基本流)及其他业务信息。
TS 包头 4 个字节(32 bit)语法结构如下:
序号数据占⽤ bit说明
1sync_byte8 bit同步字节
2transport_error_indicator  1 bit传输错误标识,1 表⽰错误则丢弃该包
序号数据占⽤ bit说明
3payload_unit_start_indicator  1 bit负载单元开始标志(packet不满188字节时需填充)4transport_priority  1 bit优先级,1 表⽰优先级⾼
5pid13 bit Packet ID,包的标识,⾮常重要
6transport_scrambling_control  2 bit加密标志(00:未加密;其他表⽰已加密)
7adaptation_field_control  2 bit⾃适应控制
8continuity_counter  4 bit包递增计数器,范围 0 ~ 15
其中:
❤ . payload_unit_start_indicator> 负载单元开始标志:
对于有效负载为 PES 包或 PSI 数据的传输流包,它标识 PES 包头以及包含 PSI 特定信息表的头是否包含在该包中,具有含义如下:1. ⼀个 PES 包经过 TS 复⽤器会拆分成多个定长的 TS 包,那么怎么知道 PES 包从哪个 TS 包开始
呢?payload_unit_start_indicator 的作⽤就在此,当 TS 包有效载荷包含 PES 包数据时,payload_unit_start_indicator 具有以下意义:1 指⽰此 TS 包的有效载荷随着 PES 包的⾸字节开始,0 指⽰在此 TS 包中⽆任何 PES 包将开始。
2. 当 TS 包有效载荷包含 PSI 数据时,payload_unit_start_indicator 具有以下意义:若 TS 包承载 PSI 分段的⾸字节,则
payload_unit_start_indicator 值必为 1,指⽰此 TS 包的有效载荷的⾸字节承载 pointer_field。若 TS 包不承载 PSI 分段的⾸字节,则 payload_unit_start_indicator 值为 0,指⽰在此有效载荷中不存在 pointer_field
与 PES 包传输⼀样,通过 TS 包传送 PSI 表时,因为 TS 包的数据负载能⼒是有限的,即每个 TS 包的长度有限,所有当 PSI 表⽐较⼤时,PSI 被分成多段(section),再由多个 TS 包传输段。每⼀个段的长度不⼀,⼀个段的开始由 TS 包的有效负载中的payload_unit_start_indicator 来标识
<7.pid > 包标识
PID 是识别 TS 包的重要参数,⽤来识别 TS 包承载的数据类型。下⾯是⼏种常见 PID 值代表的含义:
值描述
0x0000PAT,节⽬关联表
0x0001CAT,条件访问表
0x0002TSDT,传输流描述表
可以看到 PAT 表的 PID 值为 0x0000,⽽ PMT 节⽬映射表的的 PID 在 PAT 表中指定。
adaptation_field_control ⾃适应控制域
⾃适应控制,⽤来指⽰ TS 包 payload 是否跟随调整字段或有效净荷
调整字段值描述
00保留
01没有调整字段,仅含 184 字节的有效净荷
10没有有效净荷,仅含 183 字节的调整字段
110~182 字节调整字段后为有效净荷
3.2 PAT
PAT,Program Association Table 节⽬关联表,每个 TS 流对应⼀张,⽤来描述该 TS 流中有多少个节⽬。
TS 流中中,PAT 包重复实现,⼤约 0.5 秒出现⼀个,保证实时解码性
表⽰ PAT 表的 TS 包 PID 值为 0,便于识别
PAT 的 payload 中传送特殊 PID 的列表,每个 PID 对应⼀个节⽬(对应⼀张 PMT 表)
PAT 表是 TS 流的基础,任何⼀个 TS 流解析寻节⽬都是从 PAT 表开始查
使⽤ UltraEdit 编辑器或 MPEG-TS anlyser 随便打开⼀个 ts 视频⽂件分析,第⼀个 TS 包就是 PAT 表:
取包头前 4 个字节分析:
0x47 0x40 0x00 0x30
根据前⾯的 TS 包头数据属性描述可以得到:
–值描述
sync_byte0x47固定同步字节
transport_error_indicator‘0’没有传输错误
payload_unit_start_indicator‘1’PID 为 0,所以标识 PAT 表的开始
transport_priority‘0’传输优先级低
PID0x0000PAT 表
键盘防尘罩transport_scrambling_control‘00’未加密
adaptation_field_control‘11’⾃适应控制,‘11’ 表⽰若⼲调整字节后为有效净荷
continuity_counte‘0000’包递增控制器
字使⽤控制域 ‘11’ 可知 payload 184 字节中⾸先跟若⼲调整字节后才是有效净荷。payload 184 字节如下:
Payload:
A6 00 FF .. FF 00 00 B0 0D 19
4D F7 00 00 00 01 E0 20 4F 8A E4 1E
当 PAT 表 payload 包含调整字段时,payload 第⼀个字节为调整字节数,因此调整字节个数为 0xA6 = 166 字节,所以有效净荷如下(17 bytes):

本文发布于:2024-09-23 11:22:08,感谢您对本站的认可!

本文链接:https://www.17tex.com/tex/2/137299.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:信息   视频   传输   字节   调整   数据
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2024 Comsenz Inc.Powered by © 易纺专利技术学习网 豫ICP备2022007602号 豫公网安备41160202000603 站长QQ:729038198 关于我们 投诉建议