视频封装格式篇(TS)

 


什么是TS?

TS(Transport Stream,传输流),一种常见的视频封装格式,是基于MPEG-2的封装格式(所以也叫MPEG-TS),后缀为.ts

TS的分层

TS文件分为三层,如下所示(可以倒序更好理解)

  • TS层(Transport Stream):在PES层基础上加入了数据流识别信息和传输信息

  • PES层(Packet Elemental Stream):在ES层基础上加入时间戳(PTS/DTS)等信息。

  • ES层(Elementary Stream):压缩编码后的音视频数据。

TS层

ts包大小固定为188字节,ts层分为三个部分:ts header、adaption field、payload。

  • ts header固定4个字节

  • adaption field可能存在也可能不存在,主要作用是给不足188字节的数据做填充。

  • payload是PES数据,或者PAT,PMT等。

  • ts Header+adaption field格式如下:

    pid决定了负载内容的类型,主要包括:PAT表,PMT表,视频流,音频流。常用的PID值:

调整字段

PAT表结构(指明PMT表的PID值)

typedef struct TS_PAT{
unsigned table_id :8//固定为0x00,表示该表是PAT
unsigned section_syntax_indicator:1//段语法标志,固定为1
unsigned zero                    :1//固定为0
unsigned reserved_1              :2//第一个保留位
unsigned section_length          :12//表示这个字节之后有用的字节数,包括CR0
unsigned transport_stream_id     :16//传输流的ID,区别于一个网络中其他多路
unsigned reserved_2              :2//第二个保留位
unsigned version_number          :5//表示PAT的版本号
unsigned current_next_indicator  :1//表示发送的PAT是当前有效还是下一个有效
unsigned section_number          :8//如果PAT分段传输,那么此值每次递增1
unsigned last_section_number      :8//最后一个分段的号码
for(int i = 0;i < N; i++)
{
  unsigned Program_number          :16//节目号
  unsigned Reversed_3              :3//保留位
  if(Program_number == 0)
  {
    Network_id                    :13//网络信息表NIT的PID
  }
  else
    Program_MAP_PID                :13//节目映射表的PID,每个 节目都有一个
  }
  unsigned CRC_32                :32//CRC32校验码
}TS_PAT

PMT指明音视频流的PID值

补充说明

  • 打包ts流时PAT和PMT表是没有调整字段的,不够的长度直接补0xff即可
  • 视频流和音频流都需要加adaptation field,通常加在一个帧的第一个ts包和最后一个ts包里,中间的ts包不加。

PES层

  • PES(Packetized Elementary Stream,打包的ES),在ES层的基础上加入了时间戳(PTS/TDS)等信息。
  • ES数据包比较大,加入PES头时需将ES进行分割,只在第一个分割的ES上加PES头,如下图所示
  • PES packet length一指示PES包中跟随该字段最后字节的字节数。0值指示PES包长度 既末指示也未限定并且仅在这样的PES包中才被允许,该PES包的有效载荷由来自传输流包中所包含的视频基本流的字节组成。
  • PES结构如下:

本文作者:不会笑的孩子

本文链接:https://www.cnblogs.com/doubleconquer/p/18101176

版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。

posted @   不会笑的孩子  阅读(365)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· 单线程的Redis速度为什么快?
· 展开说说关于C#中ORM框架的用法!
· Pantheons:用 TypeScript 打造主流大模型对话的一站式集成库
点击右上角即可分享
微信分享提示
💬
评论
📌
收藏
💗
关注
👍
推荐
🚀
回顶
收起
  1. 1 404 not found REOL
404 not found - REOL
00:00 / 00:00
An audio error has occurred.