DTV 数字电视(一,预备知识)

对于目前我们常见的数字电视,无论是数字电视机顶盒或者常见的Android TV,接收到的都是一段段码流,我们一般简称为TS(Transport Stream,传输流),每个TS都会携带一些信息,如Video、Audio以及我们需要学习的PAT、PMT等信息。所以我们需要了解TS的定义、形成以及结构。

绝大多数信息来自spec ISO/IEC 13818-1

下载地址如下:

https://download.csdn.net/download/weixin_43195281/88184762

1.什么是ES、PES、PS、TS

ES(Elementary Stream):基本码流,不分段的音频、视频或其他信息的连续码流。

PES(Packetized Elementary Stream):PES流是ES流经过PES打包器处理后形成的数据流,将ES分组,打包,并加上相应的头文件打包形成PES流,这是对ES的第一次打包。

ES你可以理解为一段音频或者视频的数据,ES流可能会很大,所以要拆分成PES包,PES包的长度是有限制的,64KB。所以并不是一个ES对应一个PES。

PS(Program Stream):节目流,PS流是一种多路复用数字音频、视频等的封装容器,它由一个或多个具有共同的节目时间基准(PCR)的PES流合并成一个整体流,主要用于节目存储。其包长不固定,且较长,PS流适用于误码小、信道较好的环境,主要用于相对无错的环境下的传输与存储,如DVD、演播室、家庭环境和存储介质中。

TS(Transport Stream):传输流,将具有共同节目时间基准或独立节目时间基准的一个或多个PES组合复合而成的单一数据流(用于数据传输),TS包是对PES包的一个重新封装(到这里,ES经过了两层的封装)。其基本单位是TS包,长度固定188字节。日本的DVB-S广播系统采用192个字节的TS包,美国采用204个字节的TS包,多加了16个字节的前向纠错校验码(FEC)。主要用于相对有错的环境下的传输与存储,如DVB。

PS流与ES流的区别:

<1>:TS流的包结构是长度是固定的;PS流的包结构是可变长度的。 这导致了 TS流的抵抗传输误码的能力强于PS流 (TS码流由于采用了固定长度的包结构, 当传输误码破坏了某一TS包的同步信息时,接收机可在固定的位置检测它后面包中的同步信息,从而恢复同步,避免了信息丢失。 而PS包由于长度是变化的,一旦某一 PS包的同步信息丢失, 接收机无法确定下一包的同步位置,就会造成失步,导致严重的信息丢失。 因此,在信道环境较为恶劣,传输误码较高时,一般采用TS码流;而在信道环境较好,传输误码较低时,一般采用PS码流。)

<2>:TS流和PS流是MPEG-2标准中规定的两种输出码流。TS格式中,从视频流的任意一片断开始都可以独立解码,而PS格式不可以。由于TS流具备较强的抵抗传输误码的能力,因此目前在传输媒体中进行传输的MPEG-2码流基本上都采用了TS流的包格式。

TS流的优点:

1、动态带宽分配:由于TS的传输包长度是固定的,因此可过PID可以将规定的信道总频带在视频、音频和数据信息见进行实时的、灵活的分配。利用这一特性,可在广播付费节目前实时地将解密钥匙插入到TS流中送给广大用户。

2、可分级性:允许一个复用的传输码流与其他视音频基本码流进行二次复用,生产占用频带给宽的更高一级的TS流。
3、可扩展性
4、抗干扰性
5、接收机成本低廉

2.TS如何产生

 从上图可以看出,视频ES和音频ES通过打包器形成一个个PES, 之后PES与共同或独立的系统时间基准通过TS复用器复用形成的传输流TS。 注意这里的TS流是位流格式(即是说TS流是可以按位读取的)。

具体形成过程如下:

TS流的形成过程:
1、 压缩【显示单元】产生【进入单元】,连续的【进入单元】组成一个基本码流。
2、 对ES(基本码流)进行打包形成PES。
3、 在PES包中加入定时信息(PTS/DTS)。
4、 将PES包内容分配到一系列固定长度的TS包中。
5、 在传输包中加入定时信息(PCR)。
6、 在传输包中加入节目专用信息(PSI) 。
7、 连续输出传输包形成具有恒定比特率的MPEG-TS流。

3.TS流的格式

TS流是基于Packet的位流格式,即由n个包组成;每个包是188个字节(或204个字节,在188个字节后加上了16字节的CRC校验数据,其他格式一样)。TS包的包头提供关于传输方面的信息:同步、有无差错、有无加扰、PCR(节目参考时钟)等标志。TS包的包头长度不固定,但是前32比特(4个字节)的结构固定,后面可能跟有自适应字段(daptation_field)。32个比特(4个字节)是最小包头长度,下图是一个TS流,以第k个包(Package)为例:

sync_byte:sync_byte是一个固定的8bits字段,其值为“0100 0111”(0x47)。在选择其他经常出现的字段(如PID)的值时,应避免与sync_byte竞争。

transport_error_indicator:transport_error_indicator是一个1bit的标志。当设置为“1”时,它指示相关传输流数据包中至少有一个不可纠正的比特错误。传输层之外的实体可以将此位设置为“1”。当设置为“1”时,除非已更正错误中的位值,否则不得将位重置为“0”。

payload_unit_start_indicator是一个1bit标志,对于携带PES数据包(参见2.4.3.6)或传输流段数据(参见2.4.4.4中的表2-31)具有规范含义。

当传输流数据包的有效载荷包含PES数据包数据时,有效载荷单元开始指示符具有以下意义:“1”表示该传输流数据包包含的有效载荷将从PES数据包的第一个字节开始,“0”表示在该传输流包中不应开始任何PES数据包。如果payload_unit_start_indicator设置为'1',则在该传输流数据包中开始一个且仅有一个PES数据包。这也适用于stream_type 6的私有流(参见表2-34)。

当传输流包的有效载荷包含传输流段数据时,payload_unit_start_indicator具有以下意义:如果传输流包携带段的第一个字节,payload_unit_start_indicator值应为“1”,表示此传输流数据包的有效载荷的第一个字节携带pointer_field。如果传输流数据包包含的不是某个节的第一个字符,payload_unit_start_indicator值应为“0”,表示有效载荷中没有pointer_field。参见2.4.4.1和2.4.4.2。这也适用于stream_type为5的私有流(参见表2-34)。

对于空数据包,payload_unit_start_indicator应设置为“0”。本规范中未定义该位对于仅携带私人数据的传输流数据包的含义。

 ​​​​transport_priority传输优先级是一个1bit的指示器。当设置为“1”时,它表示关联的包比其他具有相同PID的没有位设置为“1”的包具有更大的优先级。传输机制可以使用它来确定其在基本流中的数据的优先级。根据应用程序,传输优先级字段可以被编码,而不管PID,或只在一个PID内。此字段可以被特定于信道的编码器或解码器更改。

PID:是一个13bit字段,表示存储在数据包有效负载中的数据类型。PID值Ox0000保留给程序关联表(见表2-30)。PID值0x0001保留给条件访问表(见表2-32)。PID值0x0002保留给传输流描述表(见表2-36),PID值Ox0003保留给IPMP控制信息表(见ISO/IEC 13818-1),PID数值0x0004-0000F保留。PID值Ox1FFF为空数据包保留(见表2-3)。

 

transport_scrambling_control这个2bit字段表示传输流数据包有效负载的加扰模式。传输流包头和适应字段不应加扰。对于空数据包,传输干扰控制字段的值应设置为“00”(见表2-4)。

adaptation_field_control:此2bit字段表示此传输流数据包报头之后是否带有adaptation_field() 和/或payload(请参见表2-5)。 

continuity_counter:一个4bit字段,随着每个有相同PID的传输流包而递增。continuity_counter在其最大值后又变为0。当数据包的adaptation_field_control等于“00”或“10”时,continuity_counter不得增加。

在传输流中,重复的数据包可以作为相同PID的两个连续传输流数据包发送。重复的数据包应具有与原始数据包相同的continuity_counter值,且adaptation_field_control字段应等于“01”或“11”。在重复的包中,原始包的每个字节应被重复,除了在程序时钟引用(PCR)字段中,如果存在,一个有效的值应被编码。

当特定传输流数据包中的continuity_counter的值相差一个正值,或满足非增量条件(adaptation_field_control设置为“00”或“10”或重复的数据包)时,continuity_counter是连续的。当discontinuity_counter设置为“1”时,continuity_counter可能是不连续的(参见2.4.3.4)。在一个空数据包的情况下,连续性计数器的值是未定义的。

data_byte:data_byte应是来自PES包(参见2.4.3.6)、传输流段(参见2.4.4)、传输流段后的包填充字节或PID指示的这些结构中的私有数据的连续字节。在PID值为Ox1FFF的空包的情况下,可以分配数据字节值。data_bytes字节数由184减去adaptation_field()中的字节数指定,如2.4.3.4中所述。

总的TS格式如下:

4.adaptation_field()

5.结语 

由于其中需要解释的太多,大家可以自己下载ISO/IEC 13818-1去自行查阅,下载地址如下(https://download.csdn.net/download/weixin_43195281/88184762)此处十分重要,主要包含PSI/SI等DVB经常用到的table,例如PAT,PMT等。之后会出对各个table详细的解释与如何从TS中parse出表格信息的代码流程,到时候介绍对应adaptation_field()的详细解释。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值