数字电视学习笔记数字电视广播中大多采用MPEG-2标准进行图像和声音的压缩,因此,关于数字电视的学习也主要以MPEG-2的码流为主。
一、MPEG-2中的码流数字电视的码流都是以二进制信号为基础来表示,电视信号被编码成数字电视码流后,与其他数字信号并没有明显的特征区别,数字电视码流可以当作一般的数据进行压缩,当作文件进行存储,可以方便的通过计算机进行处理。
数字电视有多个不同的层次和类型:ES,PES,PS,TS。
1)ES-Elementary Streams(原始流)为数字电视的各个组成元素(如视频信号,音频信号等)编码后形成的直接表示基本元素内容的流。
2)PES-Packetized Elementary Streams(分组原始流)是按照一定要求和格式打包的ES流。
3)PS流(Program stream)是将一个或一组节目的PES按照他们之间的相互关系进行组织,并加入各组成部分关系描述后的码流,它主要用于存储(比如DVD等)。
4)TS(Transport Stream)流是将一个或者多个节目的各个组成元素的PES按照它们之间相互关系进行组织、加入各组成部分关系描述和节目组成信息,并进一步封装成传输包后的码流。
图1.1 数字码流之间的层次关系因为PS流主要应用于差错率很低的存储等领域,比如DVD。
TS流主要应用于差错率较高的传输等领域。
数字电视大部分都是以TS流实现的。
所以在这里我们主要学习TS 流。
二、传输流(TS)和PES分组1)PES(分组原始流)ES流打包之后形成很多PES分组,保持串行顺序。
每个PES分组只包含一个ES流中的一个数据元素,比如一帧音频数据,一帧视频数据等。
PES分组可以很大,最大可以达64k字节。
PES分组分为“分组头部(header)”和“有效载荷(Payload)”。
有效载荷是指首部之后的数据。
首部的前四个字节数据构成分组的起始码,标识了该分组所属ES流的类型和ID 号。
图2.1 PES分组2)TS(传输流)TS分组也就是传输流(TS)数据形成的分组。
每个TS分组长度为固定值——188个字节。
分组分为“分组头部(header)”和“有效载荷(Payload)”。
分组的前4个字节为分组头部(header),包含了一些分组信息。
有些情况下需要更多信息时,需要在“分组头部”之后加入“调整字段(Adaption field)”。
图2.2 TS分组PID在TS流中的作用:PID是Packet identification的简称,就是“包标志符”。
数字电视系统包括一路或者多路电视电视节目数据(每个电视节目中包含一个或者多个ES流数据),和一些附加的SI(后面将会介绍)数据等,这些数据被复用(MUX)分组打包成不同的传输流(TS)分组(请参考图一),用系统唯一的一个13 bits数字标志该数据的类型,即PID。
例如,PID=0x00表示是数字电视系统中的PAT(节目关联表)包,而PID=0x10表示是数字电视系统的NIT (网络信息表)包。
不同的节目(包括Video和Audio)分别采用不同的PID,例如,我们在PMT(节目映射表)表中如果检测到PID=0x0120的PID是VIDEO数据,那么表示包号码是0x0120的所有包都是Video数据,其他依此类推。
数据流被机顶盒收到之后,需要首先分析SI数据,然后再对TS流中的数据,根据PID进行解复用(DEMUX),得到ES流然后再节目ES流(包括音频流,视频流等)进行播放(请参考后面搜台流程的介绍)。
图2.3 机顶盒解复用和解码3)两者之间的关系:PES分组被重新打包成TS分组。
每个PES的第一个字节被打包成TS的有效载荷的第一个字节,反之则不成立。
一个PES分组可能被打包成多个TS分组。
图2.4 PES分组被打包成TS三、服务信息(SI)SI全称为Service information。
TS流是多路节目复用的,怎么才能知道这些节目在TS 流的位置和详细信息呢?MPEG-2系统提供了一些附加信息来实现这个功能,这就是SI。
SI也是需要编码并插入到TS分组中的,他们的PID是特定的值。
SI的PID的值在EN300468中定义。
图3.1 PSI的PID定义(EN300468)PID和table_id唯一的确定一个包是哪一种SI表。
table_id的定义如下:图3.2 PSI的table_id定义(EN300468)1)SI中包含如下的表:PAT:是Program Association Table的简称,即”节目关联表”.PAT属于DVB系统流中的一个包,包号码(PID)是0x00。
PA T表描述了DVB系统流中包含什么样的PID,主要是描述当前流的NIT表格的PID号码是多少,当前流中有多少个不同类型PMT表,每个PMT表对应的频道号等信息。
图3.3 PA T数据PMT:是Program Map Table的简称,即”节目影射表”。
PMT的PID是服务器自由定义的(但不会和系统保留的PID冲突)。
这个PID是在PAT表中描述的,比如,,如果在PAT表中有0x100项的内容,那么说明所有PID是0x100的包都是PMT表。
不同的频道有不同的PMT,也就是说,一个不同的PMT代表的是一个不同频道.PMT表格和PAT表格配合在一起,就可以检测出DVB流中所有存在节目的所有PID,因此,数字电视搜台就是依靠这两个表格数据完成的。
图3.4 PA T数据CA T:是Conditional Access Table的简称,即”条件访问表”,PID是0x01.CAT携带的是服务器的私有信息(CA系统就需要使用该表格实现节目的解密)。
SDT:是Service Description Table的简称,即”服务器描述表”,PID是0x11。
SDT携带的是电视台名称和电视节目名称。
DVB接收系统接收SDT表中的节目信息,实现比较友好的界面显示和操作。
NIT:是Network Information Table的简称,即“网络信息表”,PID是0x10。
NIT提供如网络名称(服务提供商的名称,比如广电局,中国电信等),传输参数(如频率,调制方式等)。
这个表格一般是解码器内部使用的数据,当然也可以做为EPG的一个显示数据提供给用户做为参考。
传输参数对数字电视系统比较重要,比如频点数据(服务提供商提供了多少频点,频点分别是什么)对数字电视系统的搜台非常重要。
EIT:Event Information Table,环境信息表。
PID是0x11。
环境信息表提供如下信息:节目段的标识号、起始时间、节目长度、播放状态、是否加密;指向特定信息的链接信息;节目段多语种的简短介绍;节目段的详细介绍;两段同样节目段的时间偏移;基本码流类型,如视频的幅型比、伴音的类型、字幕的类型等;使用的加密系统;节目类型,如电影/戏剧、新闻、综艺、体育、少儿、音乐、艺术、社会政治、文教等;节目限定年龄的级别;给出实现交互式回传信道的电话号码;为满足各节目段的码率而提供的缓存大小信息及私有数据等。
BAT:是Bouquet Association Table的简称,即“节目组关联表”。
描述了一组相关的节目,这些节目可以在不同的TS流。
2)SI的作用a)NIT、PAT、PMT、SDT主要用于搜台,并为用户提供一个友好的操作菜单。
搜台的步骤(该步骤主要参考广电局的数字电视系统)如下:(1)系统首先通过搜索搜到第一个第一个频点,或者提供商定义好第一个频点,系统直接调到该频点处理。
(2)系统收到提供商提供的TS流以后,首先等待NIT数据包,即PID等于0x10且table_id为0x40或者0x41的数据包。
收到之后,系统需要分析NIT数据包,并记录下一些提供商提供的频点信息。
(3)调到一个提供商提供的频点,接收到TS流之后,等待流中的PA T数据包(根据数据包的PID和table_id确定,参考上文)。
收到PAT数据包之后,系统需要分析PAT 数据包,并把所有电视节目的编号(program_number)和其PMT的PID记录下来。
(4)系统在该流中等待一个节目的PMT数据包。
收到之后,解析这个PMT数据包,并记录下这个节目中的ES流的PID,以备用户选择这个节目之后,需要根据相应的PID获得相应的ES流分组,并进行解码工作,播放给用户。
比如一个节目可能包含一个音频流和一个视频流,则需要分别记录下这个音频流和视频流的PID,以备将来播放使用。
(5)重复(4)获得所有节目的ES流信息。
(6)系统在该流中等待SDT数据包。
收到之后,解析这个SDT数据包,可以记录下每个电视节目的名称等详细信息。
(7)重复(3)、(4)、(5)、(6)、(7)步获得提供商提供的所有节目。
并且可以显示一个友好的菜单提供给用户选择图3.5 SI表之间的关系图b)CA T表主要用于服务提供商的一些增值业务,比如收费的点播等服务。
c)EIT表可以提供给用户一些节目预告,节目预定等功能。
d)BA T表可以提供给用户一个友好的分类菜单,方便用户选择节目。
四、MPEG-2的数据结构1. TS分组前面提到TS分组有188个字节数据组成,其结构如下:前面32bit数据即为分组的头部(header),他指明了这个分组的属性。
sync_byte——同步数据,固定为0x47,表示后面是一个TS分组。
transport_error_indicator——传输错误标志位。
1表示该包中有错误,需要丢弃。
0表示该包中没有错误。
payload_unit_start_indicator——负载开始标志位。
如果该分组有效载荷是PES,则1表示该分组中有效载荷的第一位为PES分组的第一位,该包中有且只有一个PES分组开始;0表示该分组中没有PES从这里开始传送(请参考图2.4),说明该分组不是PES分组打包之后的首分组,而是后续分组。
如果该分组的有效载荷为SI分组,则1表示该有效载荷以pointer_field(起作用请参考13818-1)开始,即该分组为一个SI分组的首分组。
0表示该有效载荷没有以pointer_field(起作用请参考13818-1)开始,即该分组为SI分组的后续分组,不是首分组。
transport_priority——传输优先级位。
PID——这个字段非常重要。
指明该分组中有效载荷的数据类型。
前面已经论述过了。
请参考图3.1。
transport_scrambling_control ——加密标志位。
表示TS分组有效负载的加密模式。
TS 分组首部(也就是前面这32bit)是不应被加密的EIT例外的情况,请参考EN300468),00表示未加密。
adaption_field_control——翻译为“调整字段控制表示”。