TS码流解析(一)TS Header

全新系列文章已更新:


有一些音视频初学者想要了解TS码流结构,但网上资料不全或者讲得不够清楚,使得学习过程变得异常艰难。这一篇内容将对TS码流结构做详尽解析,争取做到通俗易懂,成为最好的TS码流解析文章。

本篇TS码流解析将会参照Android的ATSParser代码。

首先我们要知道一个标准的TS包一般有188字节,但是也有TS包是192字节或者204字节的情况。同一路TS流中,每个TS包大小是一致的,不会同时出现188字节和192字节的TS包。接下来的文章中,我们只解析标准188字节的TS包。

标准TS包包括一个4字节的包头、n字节自适应域(可选)和184-n字节的负载(可选),可选的意思是它可能在TS包中存在,也可能不存在。TS包的结构如图:

在这里插入图片描述

图中橙色部分是包头(header),蓝色部分是自适应域(adaptation field),黄色部分是负载(payload)。

1、TS Header解析

4字节包头共包含有8个字段,接下来依次解析包头字段:

  1. sync_byte:同步字节,值为0x47,关于同步字节有以下几点需要了解:
    • 同步字节表示一个新的TS包的开始,从同步字节开始往后的188字节为一个完整的TS包;
    • 根据以上特点,可以通过检查一个流的188个字节的整数倍位置是否为0x47来判断流是否为TS流;
    • 如果一段码流中间丢了一部分数据(丢失同步),可以利用同步字节重新找回同步,但是要注意,码流本身可能包含0x47的数据,所以当找到一个0x47时,需要向前和向后各跳跃188个字节,如果这些位置仍然时0x47,那么就可以确定这个0x47是同步字节,TS流已经对齐成功。
  2. transport_error_indicator:传输误差标志,该数据包在传输过程中是否出现错误,如果该位为1,说明应该立即丢弃该TS包;
  3. payload_unit_start_indicator:有效负载单元起始标志,

2、Adaptation Field解析

继续往后解析,需要先看自适应字段控制的值,值为1011时TS Header后会跟有一个(自适应域)adaptation field,接下来对这个部分做解析:

adaptation field的结构如图:

在这里插入图片描述

结构图中的橙色部分是必选(肯定存在)的控制字段,绿色部分是可选,绿色部分的内容由控制字段的值所决定。接下来先看控制字段有哪些:

  1. adaptation Field Length:自适应域的长度,不包含这个字段本身;
  2. discontinuity indicator:非连续指示符,标记当前TS包的数据流在此处是否有间断,我们要注意的是discontinuity indicator和continuity counter是两个不同的概念,前者关注的是数据的连续性,后者关注的是TS包本身的连续性;

关注公众号《青山渺渺》阅读完整内容; 如有问题可在公众号后台私信,也可进入音视频开发技术分享群一起讨论!

在这里插入图片描述

  • 24
    点赞
  • 26
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

青山渺渺

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值