应该说真正了解TS,还是看了朋友推荐的《数字电视业务信息及其编码》一书之后,MPEG2 TS和数字电视是紧密不可分割的,值得总结一下其中的一些关系。

ISO/IEC-13818-1:系统部分;
ISO/IEC-13818-2:视频;
ISO/IEC-13818-3:音频;
ISO/IEC-13818-4:一致性测试;
ISO/IEC-13818-5:软件部分;
ISO/IEC-13818-6:数字存储媒体命令与控制;
ISO/IEC-13818-7:高级音频编码;
ISO/IEC-13818-8:系统解码实时接口;

MPEG2系统任务包括:
1. 规定以包传输数据的协议;
2. 规定收发两端数据流同步的协议;
3. 提供多个数据流的复用和解复用协议;
4. 提供数据流加密的协议。以包形式存储和传送数据流是MPEG2系统之要点。

ES是直接从编码器出来的数据流,可以是编码过的视频数据流,音频数据流,或其他编码数据流的统称。ES流经过PES打包器之后,被转换成PES包。PES包由包头和payload组成,具体格式摘录如下:

可以看到PTS/DTS是打在PES包里面的,这两个parameters是解决视音频同步显示,防止解码器输入缓存上溢或下溢的关键。PTS表示 显示单元出现在系统目标解码器(STD: system target decoder)的时间,DTS表示将存取单元全部字节从STD的ES解码缓存器移走的时刻。每个I、P、B帧的包头都有一个PTS和DTS,但PTS与DTS对B帧都是一样的,无须标出B帧的DTS。对I帧和P帧,显示前一定要存储于视频解码器的重新排序缓存器中,经过延迟(重新排序)后再显示,一定要分别标明PTS和DTS。

上面介绍过,ES首先需打包成PES流包,然后PES根据需要打包成PS或TS包进行存储或传输。其每路ES只包含一路信源的编码数据流,所以每路PES也只包含相对应信源的数据流。

对PS流而言,每个PES包头含有PTS和DTS,流识别码,用于区别不同性质ES。然后通过PS复用器将PES包复用成PS包。实际上是将PES 包分解为更细小的PS包。在解码的时候,解复用器将PS分解成一个个PES包,拆包器然后将PES包拆成视频和音频的ES,最后输入至各自解码器进行解 码。一个问题是:各个ES在解码时,如何保证视音频的同步呢?除了PTS和DTS的配合工作外,还有一个重要的参数是SCR(system clock reference)。在编码的时候,PTS,DTS和SCR都是由STC(system time clock)生成的,在解码时,STC会再生,并通过锁相环路(PLL-phase lock loop),用本地SCR相位与输入的瞬时SCR相位锁相比较,以确定解码过程是否同步,若不同步,则用这个瞬时SCR调整27MHz的本地时钟频率。最 后,PTS,DTS和SCR一起配合,解决视音频同步播放的问题。PS格式摘录如下:

PS包的长度比较长且可变,主要用于无误码环境里,因为越长的话,同步越困难,且在丢包的情况下,重组也越困难。所以,PS适合于节目信息的编辑和本地内容应用的application。

TS流也是由一个或多个PES组合而来的,他们可以具有相同的时间基准,也可以不同。其基本的复用思想是,对具有相同时间基准的多个PES现进行节目复用,然后再对相互有独立时间基准的各个PS进行传输复用,最终产生出TS

TS包由包头和包数据2部分组成,其中包头还可以包括扩展的自适用区。包头长度占4bytes,自使用区和包数据共占184bytes,整个TS包长度相当于4个ATM包长。TS包的包头由如下图摘录所示的同步字节、传输误码指示符、有效载荷单元起始指示符、传输优先、包识别(PID-Packet Identification)、传输加扰控制、自适应区控制和连续计数器8个部分组成。


其中,可用同步字节位串的自动相关特性,检测数据流中的包限制,建立包同步;传输误码指示符,是指有不能消除误码时,采用误码校正解码器可表示1bit 的误码,但无法校正;有效载荷单元起始指示符,表示该数据包是否存在确定的起始信息;传输优先,是给TS包分配优先权;PID值是由用户确定的,解码器根据PID将TS上从不同ES来的TS包区别出来,以重建原来的ES;传输加扰控制,可指示数据包内容是否加扰,但包头和自适应区永远不加扰;自适应区控制,用2 bit表示有否自适应区,即(01)表示有有用信息无自适应区,(10)表示无有用信息有自适应区,(11)表示有有用信息有自适应区,(00)无定义;连续计数器可对PID包传送顺序计数,据计数器读数,接收端可判断是否有包丢失及包传送顺序错误。显然,包头对TS包具有同步、识别、检错及加密功能。

TS包自适应区由自适应区长、各种标志指示符、与插入标志有关的信息和填充数据4部分组成。其中标志部分由间断指示符、随机存取指示符、ES优化指示符、PCR标志、接点标志、传输专用数据标志、原始PCR标志、自适应区扩展标志8个部分组成。重要的是标志部分的PCR字段,可给编解码器的27MHz时钟提供同步资料,进行同步。其过程是,通过PLL,用解码时本地用PCR相位与输入的瞬时PCR相位锁相比较,确定解码过程是否同步,若不同步,则用这个瞬时PCR调整时钟频率。因为,数字图像采用了复杂而不同的压缩编码算法,造成每幅图像的数据各不相同,使直接从压缩编码图像数据的开始部分获取时钟信息成为不可能。为此,选择了某些(而非全部)TS包的自适应区来传送定时信息。于是,被选中的TS包的自适应区,可用于测定包信息的控制bit和重要的控制信息。自适应区无须伴随每个包都发送,发送多少主要由选中的TS包的传输专用时标参数决定。标志中的随机存取指示符和接点标志,在节目变动时,为随机进入I帧压缩的数据流提供随机进入点,也为插入当地节目提供方便。自适应区中的填充数据是由于PES包长不可能正好转为TS包的整数倍,最后的TS包保留一小部分有用容量,通过填充字节加以填补,这样可以防止缓存器下溢,保持总码率恒定不变。

前面3节总结了MPEG2 TS的基本格式,其中包括PES,PS和TS,以及相关字段的介绍。那么作为一种传输流,TS将内容进行打包/复用,让其媒体内容变成TS传输,并最终在解码端解码。简单来看,TS是一个传输层的协议栈,它可以承载各种内容的传输,比如MPEG,WMV,H264,甚至是IP,那么其中的传输规范是如何定义的呢?这个即是PSI(节目特定信息)要做的事情。

PSI由四张表构成:PAT,PMT,CAT和NIT,这四张表分别描述了一个TS所包括的所有ES流的传输结构。首先的一个概念是,TS是以包形式传播,在编解码端都需要以一定的包ID来标识TS流里承载的内容,比如,PAT表会存在于一个或多个TS包里,所以要用一个特别的包ID来表示,另外,不同的ES流也需要不同的包ID来标识。我们有了PAT和PMT这两种表,解码器就可以根据 PID,将TS上从不同ES来的TS包区分出来进行解码。

TS的解码分两步进行,其一,是从PID为0 的TS包里,解析出PAT表,然后从PAT表里找到各个节目源的PID,一般此类节目源都由若干个ES流组成,并描述在PMT表里面,然后通过节目源的 PID,就可以在PMT表里检索到各个ES的PID。其二,解码器根据PMT表里的ES流的PID,将TS流上的包进行区分,并按不同的ES流进行解码。所以,TS是经过节目复用和传输复用两层完成的,即在节目复用时,加入了PMT,在传输复用时,加入了PAT。同样在节目解复用时,可以得到PMT,在传输解复用时,可以得到PAT。下图很好地概述了其思想。

TS是支持多路复用的,所以它可用来传输经复用后的多层节目。在复用过程中,要注意的是,解码过程中所需要面对的时间参考和同步问题,因为解复用是需要各种信息同步进行的,所以在复用过程中,就需要插入相关的时间信息:PTS,DTS,PCR。

TS形成过程中,PTS和DTS是在ES打包成PES时,根据STC的参考,将其时钟信息注入PES包中的,而之后在PES切成TS时,再将 PID和PCR信息注入到TS包中,当多路TS再进行复用的时候,各路TS的PCR将会被提取出来,再进行分析,然后再根据统一的STC参考,将新的 PCR生成并注入到TS中去,最后,因为原来PAT表信息不在适用,所以新的PAT表需要再生成,并附加到新的TS流中去。经过这多层的复用之后,新的 TS流即可以进入调制,传输阶段。过程可参见下图:

解码过程要面对的问题是:解复用,视音频的同步,解码缓存器无上下溢。解复用即是将TS在同一信道里不同时序进行传输的节目分离出来;视音频同步由 DTS, PTS和PCR三者协调完成,并且PCR是重建系统时间基准的绝对时标,而DTS和PTS是解码和重现时刻的相对时标;对解码缓存器无上下溢的问题,必须 借助于系统目标解码器(STD)模型来对其进行实现,基本思想如下:

  1. TS流进入解码器后,首先由换向器,按照一定的时序关系,将各种ES流分解出来(其中也包括PSI信息流)。
  2. 分解过后的ES流会进入各自的传输缓存器,通过之后,其PES流进入各自的主存储器,注意的是:PSI信息流会进入系统缓存器,最后也到达主存储器。
  3. 最后,解码器根据DTS信息,从各个主存储器分别提取媒体或系统信息,进行解码,并根据PTS信息,将媒体内容进行显示处理。

其过程可参见下图:

TS 188字节流结构图相关推荐

  1. 20221122非累加的m3u8的ts切片列表的补全步骤

    20221122非累加的m3u8的ts切片列表的补全步骤 2022/11/22 19:07 https://apppy87xs3b3950.h5.xiaoeknow.com/v2/course/ali ...

  2. Angular 入门教程系列:37:使用ng-alain快速开发

    ng-alain在ng-zorro-antd上再封一程,可以更快加速开发速度,目前在github上已经超过1800个star.这篇文章来简单看一下如何使用. 创建应用框架 因为alain缺省使用使用l ...

  3. 自动控制原理_卢京潮_线性系统的时域分析与校正_学习笔记

    总目录: 第一章自动控制的一般概念+第二章控制系统的数学模型学习笔记: https://blog.csdn.net/mahoon411/article/details/112555468 第三章线性系 ...

  4. 20220707拖把更名器的正则表达式的使用

    20220707拖把更名器的正则表达式的使用 2022/7/7 11:34 在网上看到某一个视频讲座,通过猫抓找到视频切片的链接,然后让迅雷成组下载! 下载之后傻眼了!一个一个ts切片貌似很没有规律. ...

  5. sequelize V5 升级记录

    最近把项目中的 sequelize 由 4.38.0 升级到了 5.8.7,以下是升级记录 本文地址: shanyue.tech/post/sequel- 01 删包 从 package.json 中 ...

  6. 如何打造支撑多种视频播放诉求的大前端播放器?

    VideoX 是内容前端团队基于电商业务(以下简称大淘宝)背景打造的面向大终端场景的前端播放器.这篇文章谈谈我对播放器领域问题的认识,以及当下解决这些问题的思路. 大淘宝视频播放的场景有哪些? 大淘宝 ...

  7. TS流包长的简单判断(188/204B)

    1.按照TS流标准:一个TS流文件连续5个包步进188Byte,第一个字节都是0x47同步字节开头的,那么包长188B:同理为204B. 那么,如果文件大小 < 5*188B(约1kB)是否就不 ...

  8. 【科普】TS文件格式:什么是TS?如何打开,编辑和转换它?

    概要 对于TS文件,相信很多人都对它很陌生,它并不像MP4格式那么流行.为了让大家进一步了解TS文件,本文将围绕TS文件格式,详细介绍它的来源.适用范围.打开方式以及如何编辑转换等. 什么是TS文件格 ...

  9. DVB中TS流数据解析

    引  言 数字生活方式是现代文明的一个重要标志.在与人们工作生活密切相关的电脑.手机和电视三大信息平台中,电脑和手机已实现了数字化和网络化,为人们带来了多姿多彩的资讯和娱乐服务,也为相关企业带来了巨额 ...

最新文章

  1. MailMail、RegeX等程序的云端版
  2. 东北全面放开生育,数据揭秘人口和GDP和房价间联系
  3. 让程序员不再苦逼的四大神器
  4. 反思前进路上碰到困难时 应有的应对方法
  5. 前端学习(1902)vue之电商管理系统电商系统之渲实现添加用户前的预先校验
  6. 简单、有效、全面的Kubernetes监控方案
  7. 怎样在log4j.xml配置文件中引入变量:小公司经验较多的我和阿里UC等大公司经验较多的Boss,一些技术交流和探讨...
  8. python小波分解与重构_python - 使用pyWavelets进行多级局部小波重构 - 堆栈内存溢出...
  9. 滇西应用技术大学有没有计算机专业,学校介绍
  10. wpe封包修改服务器数据,WPE修改基础第三课:封包的基本知识
  11. 我是如何拿到蚂蚁金服实习 offer 的
  12. 我们是龙的传人还是狼的传人? 《狼图腾》--- 绝对值得一读的书
  13. Java后台埋点统计
  14. app中常见的测试点
  15. FrameMaker 格式的本地化流程(续1)
  16. 武汉大学计算机学院周维,周维勋
  17. 程序员进阶神器,ProcessOn绘制时序图
  18. CTF常用脚本工具(附下载地址)
  19. 微信小程序 --- 不在以下合法域名列表中请参考文档
  20. React脚手架搭建项目

热门文章

  1. c#中常用集合类和集合接口之接口系列【转】
  2. c语言中指数优化,西藏东财中证医药卫生指数C净值下跌1.96% 请保持关注
  3. 【JS 逆向百例】反混淆入门,某鹏教育 JS 混淆还原
  4. PWN-PRACTICE-BUUCTF-22
  5. mysql mybatis类型对应_Mybatis与数据库的类型对应
  6. 【CodeForces - 632B】Alice, Bob, Two Teams (预处理,思维,前缀和后缀和)
  7. 3.Booleans and Conditionals
  8. Idea自带的工具打jar包和Maven打Jar包(SpringBoot工程)
  9. linux桌面变成黑白,用虚拟机装了linux后开启为什么界面是黑色的呢?
  10. es 映射 mysql_ElasticSearch系列02:ES基础概念详解