传送流(TS)的基础知识
数字电视的TS包和TS流的组成和功能
综合考虑几下几个因素:
(1)包的长度不能过短,否则包头开销所占比例过大,
导致传输效率下降
(2)包的长度不能过长,否则在丢失同步的情况下恢复同步的
周期过长,导致较多的信息丢失
(3)其他环境相适配,如纠错编码,宽带网等。
TS包按功能分为链接头,适配域,净荷。
链接头的长度固定,4个字节
适配域的长度从0字节到184字节可变,可以没有,也可以扩展到整个TS包
净荷数据的长度从0字节到184字节可变。
整个TS流是由许多长度为188字节的TS包周期性的排列而形成的。
ts包头包含4个字节的内容,主要负责TS包的同步、各种ES流的表示、TS包传输差错的检测和条件接收等功能。
(1)包同步(syn_bate)
是包中的第一个字节,TS包以固定的8bit的同步字节开始,所有的TS传送包,同步字都是唯一的OX47,用于建立发送端和接收端包的同步。
(2)包差错指示(transport_error_indicator)
用于从解码器向分接器指示传输误码。若这个比特被设置,表示此TS包中所携带的净荷信息有错误,无法使用。
(3)净荷单元起始指示(payload_uint_start_indicator)
标志PES包头以及包含节目特定信息的表(PMT,PAT)的头是否出现在该包中,在失步后的重新同步中起着重要的作用。
(4)传送优先级(transport_priority)
用于表示包中含有重要数据,应予以优先传送。
(6)加扰控制(transport_scrambling_control)
传送信息通过加入扰码来加密,各个基本码流可以独立进行加扰。加扰控制字段说明TS包中的净荷数据是否加扰。如果加扰,标志出解扰的密匙。
(5)包标识符PID(pid)
PID是识别TS包的重要参数,用来识别TS包所承载的数据。在TS码流生成时,每一类业务(视频,音频,数据)的基本码流均被赋予一个不同的识别号PID,解码器借助于PID判断某一个TS包属于哪一类业务的基本码流。
(7)调整字段控制(adaptation_field_control:适配域控制)
标志TS包是否有调整字段存在。
调整字段值 | 描述 |
00 | 为ISO/IBC未来使用保留 |
01 | 没有调整字段,仅含有184B长度的有效字段 |
10 | 没有有效净荷,仅含183B长度的调整字段 |
11 | 0-182B的调整字段后为有效净荷 |
(8)循环计数器(continuty_counter)
用于对传输误码进行检测。在发送端对所有的包都做0-15的循环计数,在接收终端,如发现循环计数器的值有中断,表明数据在传输中有丢失。
调整字段:是一个可变长度的域,它在TS包中是否存在,由适配域控制标识决定。
功能:1、同步和定时
2、随机进入压缩的码流
3、当地节目插入
节目时钟基准(PCR):在数字压缩编码系统中,由于每个图像的数据是不同的(图像的编码方法和复杂程度不同),这样不可能从图像数据的起始部分直接获取定时信息。所以需要每隔一定的传送时间,在TS包适配域中传送系统时钟27MHz的一个采样值给接收机,作为解码器的时钟基准信号,称为节目时钟基准(PCR)。PCR通常每隔100ms至少传送一次。
帧的编码压缩:
在视频码流中存在I帧,B帧,P帧三种编码帧类型。
I 帧采用帧内压缩编码,B帧采用帧内以及帧间压缩编码。
只有 I 帧编码数据可以独立进行解码;P帧为前向预测帧,是以前一个I帧或P帧为预测进行编码的。在I帧和P帧中间可以插入若干个B帧,B帧是从相邻最近的I帧或者P帧进行双向预测进行编码的。所以,形成P帧时,参考帧帧存只要求存储一帧图像,而形成B帧时,参考帧帧存则需要存储前后两帧图像。
在节目调谐或节目更换需要发生节目拼接时需要随时进入音频或视频,随机进入应该是I帧(I帧是独立压缩编码的),在I帧前面的视频序列的头部应该有一个随机进入点。
随机进入指标就是表明随机进入点的位置。
在电视广播中,常需要进行本地节目和广告的插入,在MPEG-2传送系统中,使用TS包调整字段中的一些标志来支持。插入节目的PCR值与插入前节目的PCR值是不同的,因此通知解码器,要尽快与插入节目建立同步关系。
节目插入点必然是随机进入点,但并不是所有的随机进入点都适合作为节目插入点。
MPEG-2解码器接收到MPEG-2 TS流时,首先检测包结构,在TS流中查找同步字节:
总是OX47,总位于TS包开始位置,固定间隔为188字节。
同时满足这两个条件,可以确定同步。
如果出现一个字节为47hex(OX47),解码器将检测这个字节前后n倍188字节的位置是否也是同步字节。
如果是,则当前字节为同步字节;
否则,当前字节只是码流中偶尔出现的47hex,不是同步字节。
接收端收到5个TS包之后开始同步。
丢包3个之后解码器即失步。
TS包中净荷所承载的信息包括以下3种:
1、视频/音频的PES包以及辅助数据
2、描述单路节目复用信息的节目映射表(PMT)
3、描述单路节目复用信息的节目关联表(PAT)
系统复用时,对视频和音频的ES流进行打包,形成视频和音频的PES流,辅助数据不需要打成PES包.
(1)系统复用时,对视频和音频的ES流进行打包,形成视频和音频的PES流,辅助数据不需要打成PES包.
(2)视频和音频的PES包以一帧编码图像为单位,音频PES包恒定长度,视频PES包长度可变。
(3)PES包的长度通常都是远大于TS包的长度,一个PES包必须由整数个TS包来传送,TS包没装满的填充字节。
(4)TS包长度固定,188字节,有效净荷184字节。
PSI/SI
PSI(节目专用信息):节目关联表(PAT)、节目映射表(PMT)、条件访问表(CAT)
SI(节目信息):网络信息表(NIT)、业务描述表(SDT)、节目段信息表(EIT)、时间与日期表(TDT)、
PSI分段
根据PSI分段映射可以知道,一个PSI分段可以装在一个TS包里面(分段较小)。也可以装在连续的两个或多个TS包里面(分段大于184,一个TS包容纳不下)。并且,一个TS包的有效负载也可以包含不止一个PSI分段的信息。
以PAT为例:
PAT的section_length可以作为接收pat section的判断条件,当接收到的TS包的payload_unit_start_indicator为1时,表明这个TS包包含了PAT头信息,从这个包里面解析出section_length和continuity_counter,然后继续收集TS包,并判断continuity_counter的连续性,不断读出TS包中的静载荷(也就是PAT数据),用section_length作为收集TS包结束条件。
payload_unit_start_indicator = 1的包,表明是PAT开始的TS包,然后依次接收后面的payload_unit_start_indicator = 0的包,提取出净荷,直到提取数据的长度满足section_length
从TS流获取PAT表并解析
PMT
如果该TS包所在的频点有多个频道(节目),那么就可以从该TS包的PAT表中解析出多个PMT_ID(每个PMT_ID对应一张PMT表)。从而在TS数据流中获取该频点所有的PMT表(所有节目)。
PMT表中有以下信息:
- 该PMT表对应频道(节目)中所有视频数据包的pid。
- 该PMT表对应频道(节目)中所有音频数据包的pid。
- 该PMT表对应频道(节目)中的其他数据包(比如:中文/英文字幕)的pid。
在机顶盒处理了所有的PMT后就知道了该频点有多少个频道,在数据库中保存所有频道的信息,当用户选择了某个频道后,机顶盒查询数据库后就可以定位到该频道的信息然后进行播放。
SDT
由于每个频道由一个pid来标志,同时这些pid是一串数字不便于记忆,所以 DVB设计了一张表(SDT)用于保存频道名称到频道pid的映射。用户就可以通过选择频道名称来选择频道对应的pid。
SDT包含提供的信息:
(1) 该节目是否在播放中
(2) 该节目是否被加密
(3) 该节目的名称