多媒体文件格式(四):TS格式

多媒体⽂件格式(四):TS格式
⼀、TS 格式标准介绍
洗水
TS是⼀种⾳视频封装格式,全称为MPEG2-TS。其中TS即"Transport Stream"的缩写。
先简要介绍⼀下什么是MPEG2-TS:
DVD的⾳视频格式为MPEG2-PS,全称是Program Stream。⽽TS的全称则是Transport Stream。MPEG2-PS主要应⽤于存储的具有固定时长的节⽬,如DVD电影,⽽MPEG-TS则主要应⽤于实时传送的节⽬,⽐如实时⼴播的电视节⽬。这两种格式的主要区别是什么呢?简单地打个⽐喻说,你将DVD上的VOB⽂件的前⾯⼀截cut掉(或者⼲脆就是数据损坏),那么就会导致整个⽂件⽆法解码了,⽽电视节⽬是你任何时候打开电视机都能解码(收看)的。
新型化粪池所以,MPEG2-TS格式的特点就是要求从视频流的任⼀⽚段开始都是可以独⽴解码的。
我们可以看出,TS格式是主要⽤于直播的码流结构,具有很好的容错能⼒。通常TS流的后缀是.ts、.mpg或者.mpeg,多数播放器直接⽀持这种格式的播放。TS流中不包含快速seek的机制,只能通过协议层实现seek。HLS协议基于TS流实现的。
TS格式分析⼯具:链接: 提取码: je5m
⼆、TS 格式详解
TS⽂件(流)可以分为三层:TS层(Transport Stream)、PES层(Packet Elemental Stream)、ES层(Elementary Stream)。
ES层就是⾳视频数据,PES层是在⾳视频数据上加了时间戳等对数据帧的说明信息,TS层是在PES层上加⼊了数据流识别和传输的必要信息。TS⽂件(码流)由多个TS Packet组成的。
下图是TS⽂件(码流)的分层结构图:
原图可以在:查看。
三、TS层
TS包⼤⼩固定为188字节,TS层分为三个部分:TS Header、Adaptation Field、Payload。
TS Header固定4个字节;Adaptation Field可能存在也可能不存在,主要作⽤是给不⾜188字节的数据做填充;Payload是PES数据。1. TS Header
TS包的包头提供关于传输⽅⾯的信息。
TS包的包头长度不固定,前4个字节是固定的,后⾯可能跟有⾃适应字段(适配域)。4个字节是最⼩包头。
包头的结构体字段如下:
sync_byte(同步字节):固定为0x47;该字节由解码器识别,使包头和有效负载可相互分离。
transport_error_indicator(传输错误标志):‘1’表⽰在相关的传输包中⾄少有⼀个不可纠正的错误位。当被置1后,在错误被纠正之前不能重置为0。
payload_unit_start_indicator(负载起始标志):为1时,表⽰当前TS包的有效载荷中包含PES或者PSI的起始位置;在前4个字节之后会有⼀个调整字节,其的数值为后⾯调整字段的长度length。因此有效载荷开始的位置应再偏移1+[length]个字节。
transport_priority(传输优先级标志):‘1’表明当前TS包的优先级⽐其他具有相同PID,但此位没有被置‘1’的TS包⾼。
PID:指⽰存储与分组有效负载中数据的类型。
transport_scrambling_control(加扰控制标志):表⽰TS流分组有效负载的加密模式。空包为‘00’,如果传输包包头中包括调整字段,不应被加密。其他取值含义是⽤户⾃定义的。
adaptation_field_control(适配域控制标志):表⽰包头是否有调整字段或有效负载。‘00’为ISO/IEC未来使⽤保留;‘01’仅含有效载荷,⽆调整字段;‘10’ ⽆有效载荷,仅含调整字段;‘11’ 调整字段后为有效载荷,调整字段中的前⼀个字节表⽰调整字段的长度length,有效载荷开始的位置应再偏移[length]个字节。空包应为‘10’。
continuity_counter(连续性计数器):随着每⼀个具有相同PID的TS流分组⽽增加,当它达到最⼤值后⼜回复到0。范围为0~15。2. TS Adaptation Field
超级电容器充电
Adaptation Field的长度要包含传输错误指⽰符标识的⼀个字节。
PCR是节⽬时钟参考,PCR、DTS、PTS都是对同⼀个系统时钟的采样值,PCR是递增的,因此可以将其设置为DTS值,⾳频数据不需要PCR。
打包TS流时PAT和PMT表是没有Adaptation Field的,不够的长度直接补0xff即可。
视频流和⾳频流都需要加adaptation field,通常加在⼀个帧的第⼀个ts包和最后⼀个ts包⾥,中间的ts包不加。
二波罗蜜3. TS Payload
TS包中Payload所传输的信息包括两种类型:视频、⾳频的PES包以及辅助数据;节⽬专⽤信息PSI。
TS包也可以是空包。空包⽤来填充TS流,可能在重新进⾏多路复⽤时被插⼊或删除。
视频、⾳频的ES流需进⾏打包形成视频、⾳频的 PES流。辅助数据(如图⽂电视信息)不需要打成PES包。
四、PES层 & ES 层
1. PES层
PES结构如图:
从上⾯的结构图可以看出,PES层是在每⼀个视频/⾳频帧上加⼊了时间戳等信息,PES包内容很多,下⾯我们说明⼀下最常⽤的字段:pes start code:开始码,固定为0x000001。
stream id:⾳频取值(0xc0-0xdf),通常为0xc0;视频取值(0xe0-0xef),通常为0xe0。
pes packet length:后⾯pes数据的长度,0表⽰长度不限制,只有视频数据长度会超过0xffff。
pes data length:后⾯数据的长度,取值5或10。
pts:33bit值
dts:33bit值
关于时间戳PTS和DTS的说明:
1. PTS是显⽰时间戳、DTS是解码时间戳。
2. 视频数据两种时间戳都需要,⾳频数据的PTS和DTS相同,所以只需要PTS。
有PTS和DTS两种时间戳是B帧引起的,I帧和P帧的PTS等于DTS。如果⼀个视频没有B帧,则PTS永远和DTS相同。
从⽂件中顺序读取视频帧,取出的帧顺序和DTS顺序相同。DTS算法⽐较简单,初始值 + 增量即可,PTS计算⽐较复杂,需要在DTS的基础上加偏移量。
⾳频的PES中只有PTS(同DTS),视频的I、P帧两种时间戳都要有,视频B帧只要PTS(同DTS)。
2. ES 层
ES层指的就是⾳视频数据。
⼀般的,视频为H.264视频,⾳频为AAC⾳频。
u盘制造五、TS流⽣成及解析流程
1. TS 流⽣成流程
将原始⾳视频数据压缩之后,压缩结果组成⼀个基本码流(ES)。
对ES(基本码流)进⾏打包形成PES。
在PES包中加⼊时间戳信息(PTS/DTS)。
将PES包内容分配到⼀系列固定长度的传输包(TS Packet)中。
在传输包中加⼊定时信息(PCR)。
在传输包中加⼊节⽬专⽤信息(PSI) 。
连续输出传输包形成具有恒定⽐特率的MPEG-TS流。
2. TS 流解析流程srvcc
复⽤的MPEG-TS流中解析出TS包;
从TS包中获取PAT及对应的PMT;
从⽽获取特定节⽬的⾳视频PID;
通过PID筛选出特定⾳视频相关的TS包,并解析出PES;
从PES中读取到PTS/DTS,并从PES中解析出基本码流ES;
将ES交给解码器,获得压缩前的原始⾳视频数据。

本文发布于:2024-09-24 13:12:08,感谢您对本站的认可!

本文链接:https://www.17tex.com/tex/1/138561.html

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

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