TS流详解

目录

TS流结构

PSI

节目关联表(PAT Program Association Table)

 条件接收表(CAT Conditional Access Table)

节目映射表(PMT Program Map Table)

网络信息表(NIT Nerwork Information Table)

传输流描述表(TSDT Transport Stream Description Table)

专用段(private_section)

描述符(Descripter)

PES包格式说明

TS码流实例分析


       TS流(Transport Stream)基于MPEG2标准开发的,是一种将视频、音频和其他数据打包成固定长度包(一般为188或204字节)的实时传输流(PS节目流用于存储)。这些包通过PID(Packet ID)进行标识,每个包包含一个包头和负载数据。

       传送流由一道或多道节目组成,每道节目由一个或多个原始流和一些其他流复合在一起,包括视频流,音频流,节目特殊信息流PSI和其他数据包。其中PSI表有4种类型:节目关联表(PAT)、节目映射表(PMT)、网络信息表和条件访问表。

TS流结构

TS包的长度是固定的,为188字节。包括同步字节(sync_byte)0x47和数据包识别号PID等。PID为13位字段,指示存储于分组有效负载中数据的类型,PID值0x0000为程序关联表保留,而0x0001为条件访问表保留,0x1FFF为空分组保留。从PID可以判断其后面负载的数据类型是视频流音频流PSI还是其他数据包。

PSI

在MPEG-II中定义了节目特定信息(PSI),PSI用来描述传送流的组成结构,在MPEG-II系统中担任极其重要的角色,在多路复用中尤为重要的是PAT表和PMT表。PAT表给出了一路MPEG-II码流中有多少套节目,以及它与PMT表PID之间的对应关系;PMT表给出了一套节目的具体组成情况与其视频、音频等PID对应关系。PSI提供了使接收机能够自动配置的信息,用于对复用流中的不同节目流进行解复用和解码。PSI信息由以下几种类型表组成:

节目关联表(PAT Program Association Table)

PAT表用MPEG指定的PID(00)标明,通常用PID=0表示。它的主要作用是针对复用的每一路传输流,提供传输流中包含哪些节目、节目的编号以及对应节目的节目映射表(PMT)的位置,即PMT的TS包的包标识符(PID)的值,同时还提供网络信息表(NIT)的位置,即NIT的TS包的包标识符(PID)的值。

 条件接收表(CAT Conditional Access Table)

CAT表用MPEG指定的PID(01)标明,通常用PID=1表示。它提供了在复用流中条件接收系统的有关信息,指定CA系统与它们相应的授权管理信息(EMM)之间的联系,指定EMM的PID,以及相关的参数。

节目映射表(PMT Program Map Table)

节目映射表指明该节目包含的内容,即该节目由哪些流组成,这些流的类型(音频、视频、数据),以及组成该节目的流的位置,即对应的TS包的PID值,每路节目的节目时钟参考(PCR)字段的位置。

网络信息表(NIT Nerwork Information Table)

网络信息表提供关于多组传输流和传输网络相关的信息,其中包含传输流描述符、通道频率、卫星发射器号码、调制特性等信息。

传输流描述表(TSDT Transport Stream Description Table)

传输流描述表由PID为2的TS包传送,提供传输流的一些主要参数。

专用段(private_section)

MPEG-2还定义了一种专用段用于传送用户自己定义的专用数据。

描述符(Descripter)

除了上述的表述之外,MPEG-2还定义了许多描述符,这些描述符提供关于视频流音频流、语言、层次、系统时钟码率等多方面的信息,在PSI的表中可以灵活的采用这些描述符进一步为接收机提供更多的信息。

在解码时,接收机首先根据PID值找到PAT表,找出相应节目的PMT表的PID,再由该PID找到该PMT表,再在PMT表中找到相应的码流,然后开始解码。

PES包格式说明

经过视音频压缩来的数码流称为ES流,ES流经过打包器输出PES流。PES包是非定长的,音频PES包不超过64K字节,视频一般一帧一个PES包。为实现解码的同步,还需插入相关的标志信息,多个打包后的数码流再经过复用器成为传送流(TS流)。

TS码流实例分析

搜索TS数据流从包同步字0x47开始,由于该同步头字节并不是唯一的,数据包中可能有码字也恰为其值。因此,要准确检测同步,必须首先找到输入缓冲区中第一个0x47,然后将其指针向后推187个字节的位置再检测是否为0x47,如果是,则输出包同步信号;接着每隔187字节检测一次,如是0x47,则继续输出包同步信号,如不是,则重新开始搜索0x47。

ection_number=0x00,last_ section_number=0x0000;program_number=0x0001;0xE0中的E的高三位是保留位,E的最低位和其后的4位0以及其后的8位都是program_map_PID字段内容,所以program_map_PID=0x032,即PMT的PID为0x32;CRC是0xbcf11595。其后的0xff为填充字节。

参考文章

TS 数据流分析学习 - doscho - 博客园

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

步基

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

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

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

打赏作者

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

抵扣说明:

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

余额充值