DVB业务信息PSI/SI综述

一、SI信息的构成

1、信息构成

SI信息内容是按照network(网络)→transport strem(传输流)→service(业务)→event(事件)的分层顺序描述,如图1所示。SI数据信息是按照一定的数据结构进行存储的,这样一来才能达到方便、快捷地进行数据检索和提取。SI数据主要有:网络信息、传输流信息、业务信息、业务的事件信息等,并且大量的信息都是通过描述符来传输的,所以可用树状链表来存储数据,构成从网络、传输流、业务、事件的树状结构。机顶盒接收端的解析主要负责这些SI数据的重建。

在数字电视系统中,为了能有效地从众多的数据包中组织起SI信息,而使用了很多的标识。有Network_id(网络标识)、Original_network_id(原始网络标识)、Transport_stream_id(传输流标识)、Service id(业务标识)、eventid_id(事件标识)、Bouquet_id(业务群组标识)。这些标识是作为信息查找定位用的,例如:要在一个TS里找出一个业务信息,就要知道这个业务信息在那个网络里、在哪个TS里和这个业务信息在这个流里的标识,这样一来,通过层层过滤,就能精确地定位描述这个业务信息的位置,并把它们找出来进行数据组织。图1就非常清楚地表明了这种查找思路。

一个网络信息由network_id来定位。

一个TS由network_id、Original_network_id、Transport_stream_id来定位,标明这个流在那个网络播发,它原属那个网络,并给它加上标识。

一个业务由network_id、Original_network_id、Transport_stream_id、service_id来定位,标明这个业务在那个网络播发,它原属那个网络和那个流,并给它加上标识。这体现在SDT表中。

一个事件由network_id、Original_network_id、Transport_stream_id、service_id、event_id来定位,标明这个事件在那个网络播发,它原属那个网络和那个流及那个业务,并给它加上标识。这体现在EIT表中。

据此,根据各个SI表的功能,各表的ID结构如下:

NIT:network_id、Original_network_id、Transport_stream_id 、service_id。

SDT:Original_network_id、Transport_stream_id 、service_id。

EIT:Original_network_id、Transport_stream_id 、service_id、event_id。

BAT:bouquet_id 、Original_network_id 、Transport_stream_id 、service_id。

另外,还有一个PID(包标识),它的作用是给每一个数据包打上一个标记,TS承载有视频数据、音频数据、PSI和SI信息数据、图文电视数据、字幕数据、数据广播数据、交互业务数据、CA系统的控制信息数据等等,除了PSI和SI信息数据和CA系统的控制信息数据外,其他的数据的PID都是通过PMT表给出的,CA系统的控制信息数据的PID是由CAT表给出的,而承载了PSI和SI信息的各种表的PID值是固定分配的。如下表

表                       PID值

PAT                    |           0X0000
CAT                    |            0X0001
TSDT                   |            0X0002
NIT、ST               |           0X0010
SDT、BAT、ST  |          0X0011
EIT、ST              |        0X0012
RST、ST              |         0X0013
TDT、TOT、ST   |          0X0014
DIT                       |          0X001E
SIT                       |         0X001F

由于这些表是分配了固定的PID值,所以机顶盒就可以根据这些PID值来辨认出是什么表,并读取表中的描述参数来生成EPG信息和完成各种数据的组织、解码出所需要的节目和信息。

2、表的构成

表是组成SI信息的一种数据结构。在TS中有很多不同节目的数据包,解码器如何确定哪个数据包属于某个节目?其答案就是在TS中的PSI和SI信息里,这些信息精确地指引出获得某节目与该节目数据包的PID之间的关系。

由MPEG-2定义的TS里面,数据包携带了两类信息:一是音、视频等素材的数据,二是PSI表。具有给定PID的数据包的有序排列就形成了TS流。PSI表里的承载的内容主要是TS(本节目流)的描述参数。由MPEG-2定义的PSI主要包含有三个表:PAT、PMT、CAT。每个表都可作为一个或多个TS包的净荷插入TS中传送。

一个TS数据包的净荷为188个字节,当一个PSI/SI表的字节长度大于184字节时,就要对这个表进行分割,形成段(section)来传送。分段机制主要是将一个数据表分割成多个数据段。在PSI/SI表到TS包的转换过程中,段起到了中介的作用。由于一个数据包只有188字节,而段的长度是可变的,EIT表的段限长4096字节,其余PSI/SI表的段限长为1024字节。因此,一个段要分成几部分插入到TS包的净荷中。如图2所示。

PSI/SI表的构成是:一个表由一个或多个子表构成,表用table_id来标识;不同的子表由table_id和table_id_extension来区分(具有相同的table_id和不同的table_id_extension);一个子表由一个或多个段构成(具有相同的table_id和table_id_extension,不同section_number来区分);每个段由多个TS数据包的数据组成。每个段具有一个完整的数据结构,表的重要参数----描述符在段里传送。图3所示是SDT表的结构。

(1024)时,可把子表分割成两个或更多个段, 并通过section_number来区分,如图3-1所示。

不同的信息表在TS中通过PID来区分,具有相同PID的不同表由table_id(table_id是表标识)来区分,属于同一个table_id的不同子表由table_id_extension、版本号(version_number)进行区分,属于同一个子表的不同段由section_number区分。表的扩展标识符有:network_id、oringinal_network_id、boquet_id、tansport_stream_id、service_id等。

l         对于NIT表的子表具有相同的table_id、network_id和version_number。

l         对于BAT表的子表具有相同的table_id、bouquet_id和version_number。

l         对于SDT表的子表具有相同的table_id、oringinal_network_id、tansport_stream _id和version_number。

l        对于EIT表的子表具有相同的table_id、oringinal_network_id、tansport_stream _id、 service_id和version_number。

以EIT表为例。EIT的PID是0X0012,当它的table_id=0X4E时,EIT描述的是在当前TS中的当前/后续(EIT present/following)事件信息;table_id=0X4F时,EIT描述的是在其它TS中的当前/后续(EIT present/following)事件信息。这两个不同的描述形成了EIT的两个表。每个表分为两个段,一个段用来描述当前正在播放的事件,另一个段用来描述即将播放的事件。此时两个段的table_id、service_id、tansport_stream_id是相同的,但section_number不相同,section_number 0x00用来描述当前事件,section_number 0x01描述下一个事件。

⑴ 网络描述表(NIT)的作用

在MPEG2中由于并没有对NIT表进行定义,所以在PSI中NIT表内容是私有的,但在DVB中给NIT表作了明确的定义,所以NIT表是一个全局表,就是一个数字电视系统只对应两个NIT表,分别为当前网络表(table_id=0X40)和其他网络表(table_id=0X041),每个不同的网络视其频点数(1个TS=1个频点)的多少对应一个或多个子表,通过network_id来区分。

NIT表主要是提供有关物理网络的信息,网络信息表传送本网络以及与此有关的其它网络的一些信息。每个网络都有唯一的识别符(network_id)。网络信息表主要携带:网络识别符(Network_ID)、网络名称、传输系统参数(有线传输系统参数包括:频率、调制方式、FEC外码、符号率、FEC内码)、节目业务类型及Service_ID等信息。机顶盒只要调谐到携带NIT表的传送流中,即可提取其它网络的参数,一般解码器便可根据提取出来的信息,自动搜索频道。

这里说一说network_id和oringinal_network_id的分别。每个运营商都需要注册唯一的network_id,假设中央电视台的network_id=0X01,广州电视台的network_id=0X02      。当中央电视台直接播发自己的节目时,network_id=oringinal_network_id,如果由广州电视台转播中央电视台的节目时,那么network_id=0X02,oringinal_network_id=0X01。也就是说oringinal_network_id等于节目原发运营商的network_id。

⑵     业务描述表(SDT)的作用

SDT表是由DVB定义的,是一个SI表,因此它是一个全局表,一个数字电视系统对应两个SDT表,分别为当前流(actual transport)表(table_id=0X42)和其他流(other transport)表(table_id=0X46)。每一个TS对应一个子表(也有对应多个子表的,如同一个TS但业务来自不同的original_network),通过tansport_stream_id和original_network_id来区分。图4就是一个SDT表的构成图。从图可看出,这个SDT表由两个表组成,一个是当前流表,只有一个子表;另一个是其他流表,由三个子表组成,每个流对应一个子表。

SDT表用于描述系统中业务的名称、业务提供者、是否有相应的事件描述表等方面的信息;业务描述表可以描述当前传输流,也可以描述其他传输流,这由表的Table_ID来区分。业务描述表提供了如下的信息:属于哪一个节目业务群;节目业务的类型,如PAL、NTSC、SECAM、调频广播、图文电视、准视频点播等;节目业务的提供者;可以接收该业务的国家和不可以接收该业务的国家;指向特定的链接信息;实现准视频点播的指导信息;实现多画面的控制信息;指示使用的加密系统;给出实现交互式回传信道的电话号码;提供多语种的节目业务名称和广播者以及私有数据。但最常用的是业务列表,即对业务名称的描述,如中央1台、广州新闻台、珠江台等等。

⑶    事件信息表(EIT)的作用

EIT表是由DVB定义的,是一个SI表,因此它是一个全局表,一个数字电视系统每一个业务对应两种EIT表。一是EIT present/following表(描述当前事件/后续事件),一个业务对应着一个EIT present/following表,EIT present/following表分为当前流表(table_id=0X4E)和其他流表(table_id=0X4F),每一个流通常对应6个(有6个业务)EIT present/following子表,每个子表由两个段组成,分别是EIT present段和EIT following段,section_number= 0x00的段描述当前播放的事件, section_number= 0x01段描述后续播放事件,图5所示。其他流表结构与当前流表相同;二是EIT schedule(时间表)表,一个业务最多可对应16个EIT schedule表,那么每个流通常最多可对应6(业务数)×16=96个子表,每个子表由256个段组成(由于分段号是8个比特,所以最多只能有256个分段),。

对于EITschedule表,它是用作描述一个业务在一段时间(可以是一天、一周,最大可以是64天,根据冗余带宽来进行设定)内所播放的节目安排,节目的播出安排是以时间和节目简介作为描述的。时间及内容是描述一个事件的最基本元素,例如:把一个业务所播放的每一个节目都看成是一个事件,那么每一个节目开始播放的时间和播放时间的长度及事件的内容就是该事件的基本元素,EIT schedule子表就是用这一基本元素来描述每一个事件并产生某一段时间内要发生的所有事件的列表,因此EIT schedule子表的信息量很大(EIT表的段限长4096字节),由256个section组成,所以又引入了segment(片段)的概念。把256个段分成32个segment;一个segment由8个section(分段)组成,每个segment可以描述3个小时的事件信息,也就是说,一个EIT schedule表由32个片段组成,每个片段由8个分段组成,通过section_number来区分,那么每个子表可描述32*3=96小时(4天)的事件信息,由于一个业务最多可对应着16个EIT schedule表,则对于一个业务来说最多可以描述16(0X50----0X5F)*4=64天的事件信息。这里,segment相当于一个事件组,section是事件组内具体的一个事件。EIT schedule表也分为当前流表(table_id=0X50---0X5F 共16个)和其他流表(table_id=0X60---0X6F 共16个), EIT schedule表是可选的(即系统可以发送此表也可以不发送此表),事件信息按时间顺序排列。

EIT表包含事件或节目的有关数据,如事件的名称、开始时间、持续时间、运行状态等。事件信息表提供如下信息:节目段的标识号、起始时间、持续时间、播放状态、是否加密;指向特定信息的链接信息;节目段多语种的简短介绍;节目段的详细介绍;两段同样节目段的时间偏移;基本码流类型介绍,如视频的幅型比、伴音的类型、字幕的类型等;使用的加密系统介绍;节目类型介绍,如电影/戏剧、新闻、综艺、体育、少儿、音乐、艺术、社会政治、文教等;节目限定年龄的级别介绍;给出实现交互式回传信道的电话号码;为满足各节目段的码率而提供的缓存大小信息及私有数据。事件信息中提供了类似于广播电视报所提供的节目表的内容,根据EIT及其它表所提供的信息,可以做出各种EPG功能,如按节目类型检索、按时间检索及对某类节目的锁定等。可以说EIT表是提供EPG信息的主要表,也是结构最复杂的SI表。

在EITpresent/following表中,每一事件都用一个event_id来标识它,每一个事件的顺序关系(当前正在发生的事件/后续发生的事件)就由EIT present/following来描述。

那么如何来识别当前正在发生的事情和后续发生的事情呢?那是通过event_id来标识的,如图5所示。图中event_id=0X49表示当前正在发生的事件;event_id=0X4A表示后续发生的事件。那么在当前事件完成进入后续事件时,此时的后续事件变成当前事件,后续事件将由一个新的事件代替。这一变化是使用version_number来加以描述的。例如:

当前播出 19:00----19:30 新闻联播 event_id=0X49;

后续播出 19:31----20:00 动画片 event_id=0X4A,此时version_number=0

设新的后续 21:01---21:45 曲艺节目。当新闻联播完成后,则变化为:

当前播出 19:31----20:00 动画片 event_id=0X49;

后续播出 21:01----21:45 曲艺节目 event_id=0X4A,此时version_number=1

图6是由SDT表和EIT表所产生的EPG信息,图7是由EIT表所产生的一个节目频道的节目播出时间表。

EIT表是SI表中结构最复杂的表,图8是它的结构图。

机顶盒通常都有一个“节目指南”的按钮,按动它就可以读取EIT schedule自表里的信息,显示某一个业务在某段时间内的所有事件列表。

⑷     业务组关联表(BAT)的作用

BAT表是由DVB定义的,是一个SI表,因此它是一个全局表,一个数字电视系统只对应一个BAT表,其table_id=0X4A。一个节目类别对应一个段。为了让受众能更方便地在众多的节目中寻找出自己喜欢的节目,往往需要提供一种把众多的节目频道进行分类的方法(一个类相当一个节目组)。例如把电影频道归为“家庭影院”的类别,把电视连续剧归为“电视剧场”的类别等等,BAT表就提供了这一功能,每一个类别都用一个bouquet_id 来标识。它包括了节目业务名称(类别)及节目组所包含的节目清单(节目列表)。BAT表在SI信息中属于可选表。

BAT表还支持一个特别的描述符,称为国家获得性描述符。此描述符的意义是:运营商可能出于运营的需要,把一些业务提供给特定(国家)的人群收看,而不希望给其他(其他国家)的人群收看,那么,就可以利用国家获得性这一描述符,在其他人群收看节目时不显示这些业务。这个描述符同样支持SDT表,不过在SDT 表中指的是某一个业务,而不是一个业务组。所以,BAT表概括地说是提供给不同观众不同组合节目的一种方法。

⑸ 其他表

对于PAT、PMT和CAT表,都是由MPEG-2定义的,是PSI里面的表,所以这三个表都不是全局表,它们存在在每一个TS中。PSI信息使用这3个表来定义码流的结构,一个TS对应一个PAT表;一个CA系统和一个TS对应一个CAT表,CAT表的PID值总是1,每个CAT都只给出其所在流的EMM(包括携带组密钥的EMM和携带产品密钥的EMM)包的PID等信息;一个业务(节目频道)对应一个PMT表,一个TS对应多个PMT(视流中所携带的业务数而定)且只对应本流的业务。

PAT的PID是0,它是PSI信息的根,要查找信息时首先必须从PAT开始,表中列出了传送码流中所有节目所对应的PMT的PID,可根据这些PID找到相应的PMT包。在PMT表中又可以找到与节目有关的所有基本码流,如视频、音频、ECM和数据等有关信息的PID,然后把这些标有这一PID的数据包组织起来通过解码,把节目或数据还原出来。

以上PSI的几个表和NIT表是解码所必需的表,而SDT和EIT是构成业务信息所必需的表。

SI还有其他的表,如:TDT表,称为时间日期表,它给出了当前的时间和日期的信息,有时也可作为机顶盒解码时钟的更新;RST表,称为运行状态表,属于可选表,它用于快速更新某节目或某些节目的运行参数,RST只有在状态或节目变更时才发送一次;ST表,称为填充表,属于可选表,它用来替代不传送的表。

⑹ 描述符

描述符是用来携带节目要素和TS流等的各种参数的信息结构、语法与语义,描述符是PSI/SI表的构成主体,PSI/SI表的主要意义就是传送这些描述符,为机顶盒提供相关业务描述与运行参数,可以认为SI表是舟而描述符是舟上的货物。描述符的通用结构都是以descriptor_tag (描述符标记)字段与紧跟其后的descriptor_length(描述符长度)字段开始。每个SI表通常都使用特定的描述符,但也不限制这些描述符在其他表中使用。

描述符是随使用它的SI表一起发送的。

描述符以及在它们的PSI/SI表中的位置见下表

在PSI/SI表里,我们通常都看到一个循环语句,如:

for(I=0;I<N;I++){

descriptor()

}

这个循环语句是用来引导机顶盒读取描述参数用的,以SDT子表为例,由于一个SDT子表里面包含了对多个业务的描述,每个业务的都使用了Multilingual_service_name_descriptor和service_descriptor描述符,也就是说一个SDT子表里同样的描述符被使用了多次(也可以理解为,一个描述符里存有多个描述参数),通过循环语句来对描述符进行重复有序的读取,来提取里面的描述参数,直到读完为止。

网络信息表(NIT)的段数据结构:

Netwok_information_section(){ 网络信息段

Table_id   8bit 表标识

Section_syntax_indicator 1bit 段序列指示(标记位),此值=1时,规定从section第43位开始的5位是版本号

Reserved_future_use 1bit 保留将来使用字段

Reserved   2bit 保留字段

Section_length12bit 段长度

Network_id 16bit 网络标识

Reserved   2bit 保留字段

Version_number   5bit 表版本号,作为表更新机制

Current_next_indicator 1bit 当前/下一个有效指示位(标记位),表示当前表是否有效,如果Current_next_indicator为1,则当前表有效;0表示当前表无效.

Section_number 8bit 当前段段号

Last_section_number 8bit 最后段号(反映了这个子表由多少个段组成,如其值为0X01那么表示这个子表由两个段组成)

Reserved_future_use   4bit 保留将来使用字段

Network_description_length 12bit 网络描述符长度

For(I=0;I<N;I++){ 获取网络

Descriptor()   读取网络描述参数(网络名称描述符、连接描述符)

}

reserved_future_use 4bit 保留将来使用字段

transport_stream_loop_length 12bit 传输流循环长度

for(I=0;I<N;I++){ 获取传输流(整个系统的传输流)

transport_stream_id 16bit 传输流标识

original_network_id 16bit 原始网络标识

reserved_future_use 4bit 保留将来使用字段

transport_descriptors_length 12bit 传输描述符长度

for(j=0;j<N;j++){ 获取传输流的描述子(有线传送系统描述符、业务列表描述符等)

descriptor() 读取描述参数

}

}

CRC_32 32bit 循环校验码

}

下图是一个真实的NIT表,此表由两个段组成

*******************************************************************************

业务组关联表(BAT)的段数据结构:

bouquet_association_section(){ 业务群组关联段

Table_id   8bit 表标识

Section_syntax_indicator 1bit 段序列指示(标记位),此值=1.

Reserved_future_use 1bit 保留将来使用字段

Reserved   2bit 保留字段

Section_length12bit 段长度

bouquet_id 16bit 业务群组标识

Reserved   2bit 保留字段

Version_number   5bit 表版本号,作为表更新机制

Current_next_indicator 1bit 当前/下一个有效指示位(标记位)

Section_number 8bit 当前段段号

Last_section_number 8bit 最后段号

Reserved_future_use   4bit 保留将来使用字段

bouquet_description_length 12bit 业务群组描述符长度

For(I=0;I<N;I++){ 获取业务群描述子(业务群名称描述符、多语言业务群组名称描述符)

Descriptor()   读取描述参数

}

reserved_future_use 4bit 保留将来使用字段

transport_stream_loop_length 12bit 传输流循环长度

for(I=0;I<N;I++){ 获取属于本群的传输流描述

transport_stream_id 16bit 传输流标识

original_network_id 16bit 原始网络标识

reserved_future_use 4bit 保留将来使用字段

transport_descriptors_length 12bit 传输描述符长度

for(j=0;j<N;j++){获取每一个TS下的业务描述子(业务列表描述符、私有数据说明描述符)

descriptor() 读取描述参数

}

}

CRC_32 32bit 循环校验码

}

BAT表所支持的描述符如下(打※号的是最常用的描述符):

※service_list_descriptor    业务列表描述符

Stuffing_descriptor       填充描述符

※bouquet_name_descriptor    业务群组名称描述符

Linkage_descriptor    连接描述符

Private_data_specifier_descriptor    专用(私有)数据说明符描述符

Country_availability_descriptor 国家有效性描述符

CA_identifler_descriptor   条件接收标识描述符

Multilingual_bouquet_name_descriptor   多语言业务群组名称描述符

BAT表常用的描述符数据结构

Bouquet_name_descriptor(){ 业务群组名称描述符

Descriptor_tag 8bit 描述符起始标记

Descriptor_length 8bit 描述符长度

For(I=0;I<N;I++){

Char 8bit 业务群组名称字符集

}

}

下图是一个真实的BAT表,此表由3个段组成。

*******************************************************************************

条件接收表(CAT)的段数据结构:

CA_section(){ 条件接收段

Table_id   8bit 表标识

Section_syntax_indicator 1bit 段序列指示(标记位),此值=1.

“0” 1bit

reserved 2bit 保留字段

Section_length 12bit 段长度

Reserved   18bit 保留字段

Version_number   5bit 表版本号,作为表更新机制

Current_next_indicator 1bit 当前/下一个有效指示位(标记位)

Section_number 8bit 当前段段号

Last_section_number 8bit 最后段号

For(I=0;I<N;I++){ 获取CA系统(如有多个CA系统同密,则每一个CA_descriptor对应一个CA系统)

CA_descriptor()   读取描述参数

}

CRC_32 32bit 循环校验码

}

CA_descriptor描述符数据结构:

CA_descriptor(){ CA描述符

Descriptor_tag 8bit 描述符起始标记

Descriptor_length 8bit 描述符长度

CA_system_id 16bit 条件接收系统标识

Reserved    3bit   保留字段

CA_PID 13bit 该字段表示传送包的PID值,此包中含有由相应CA_system_id指明的CA系统的ECM和EMM信息

For(I=0;I<N;I++){

Private_data_byte 8bit   私有数据字节

}

}

下图是一个真实的CAT表。

*******************************************************************************

业务描述表(SDT)的段数据结构:

service_descriptor_section(){ 业务描述段

Table_id   8bit 表标识

Section_syntax_indicator 1bit 段序列指示(标记位),此值=1.

Reserved_future_use 1bit 保留将来使用字段

Reserved   2bit 保留字段

Section_length 12bit 段长度

Transport_stream_id 16bit 传输流标识

Reserved   2bit 保留字段

Version_number   5bit 表版本号,作为表更新机制

Current_next_indicator 1bit 当前/下一个有效指示位(标记位)

Section_number 8bit 当前段段号

Last_section_number 8bit 最后段号

Original_network_id   16bit 原始网络标识

Reserved_future_use   4bit 保留将来使用字段

For(I=0;I<N;I++){ 获取业务个数

Service_id 16bit 业务标识,通常它等于节目号(program_number),以此来指向需要的节目。

Reserved_future_use   6bit 保留将来使用字段

EIT_schedule_flag 1bit   EIT时间表信息标记,为1时表示信息在当前流,为0时则不在当前流。

EIT_present_following_flag 1bit EIT当前/后续事件信息标记,为1时表示信息在当前流,为0时则不在当前流

Running_status 3bit 运行状态标记

Free_CA_mode 1bit 是否加扰标记,1值表示加扰,0值表示不加扰

descriptors_loop_length 12bit 描述符循环长度

for(j=0;j<N;j++){ 获取每一个业务描述子(业务描述符、多语言节目名称描述符等)

descriptor() 读取描述参数

}

}

CRC_32 32bit 循环校验码

}

SDT表所支持的描述符如下(打※号的是最常用的描述符):

※service_descriptor     业务描述符

Stuffing_descriptor       填充描述符

※bouquet_name_descriptor     业务群组名称描述符

Linkage_ descriptor    连接描述符

Private_data_specifier_ descriptor    专用(私有)数据说明符描述符

Country_availability_ descriptor 国家有效性描述符

CA_identifler_ descriptor   条件接收标识描述符

Multilingual_service_name_ descriptor   多语言节目名称描述符

NVOD_reference_descriptor 准视频点播参考描述符

Time_shifted_service_descriptor 时间移位业务描述符

※Mosaic_descriptor 马赛克描述符

Telephone_descriptor 电话描述符

※     Data_broadcast_descriptor 数据广播描述符

SDT表常用的描述符数据结构

service_descriptor(){ 业务描述符

descriptor_tag 8bit 描述符起始标记

descriptor_length   8bit 描述符长度

service_type   8bit   业务类型

service_provider_name_length     8bit 业务提供者名称长度

for(i=0;i<N;i++){

char 8bit 字符集

}

service_name_length   8bit 业务名称长度

for(i=0;i<N;i++){

char 8bit   字符集

}

}

bouquet_name_descriptor(){ 业务群名称描述符

descriptor_tag 8bit 描述符起始标记

descriptor_length   8bit 描述符长度

for(i=0;i<N;i++){

Char      8bit   字符集

}

}

data_broadcast_descriptor(){   数据广播描述符

descriptor_tag 8bit 描述符起始标记

descriptor_length 8bit 描述符长度

data_broadcast_id   16bit 数据广播标识

component_tag      8bit 组件标记, 取值与流标识描述符中的component_tag字段相同.

selector_length      8bit 选择器字段长度

for(i=0;i<selector_length;i++){

Selector_type 8bit 选择器类型

}

ISO 639-2_language_code     24bit 语言编码

text_length   8bit 文本长度

for(i=0;i<text_length;i++){

text_char   8bit 文本字符集

}

}

下图是个真实的SDT表。

**************************************************************************

节目信息表(EIT)的段数据结构:

event_information_section(){ 事件信息段

Table_id   8bit 表标识

Section_syntax_indicator 1bit 段序列指示(标记位),此值=1.

Reserved_future_use 1bit 保留将来使用字段

Reserved   2bit 保留字段

Section_length 12bit 段长度

service_id 16bit 业务标识,通常它等于节目号(program_number),以此来关联描述的节目。

Reserved   2bit 保留字段

Version_number   5bit 表版本号,作为表更新机制

Current_next_indicator 1bit 当前/下一个有效指示位(标记位)

Section_number 8bit 当前段段号

Last_section_number 8bit 最后段号

Reserved_future_use   4bit 保留将来使用字段

transport_stream_id 16bit 传输流标识

original_network_id 16bit 原始网络标识

segment_last_section_number 8bit 最后的片段号。如果子表未分片断,该字段值与弹last_section_number的值相同。

last_table_id   8bit 最后段的表标识

For(I=0;I<N;I++){ 获取播放事件

Event_id 16bit 事件标识(在一个业务内是唯一分配的)

Start_time 40bit 开始时间

Duration 24bit 持续时间

Running_status 3bit 运行状态

Free_CA_mode 1bit 是否加扰标记,1值表示加扰,0值表示不加扰

Descriptor_loop_length 12bit 描述符循环长度

for(j=0;j<N;j++){ 获取每个事件描述子(短事件描述符、扩展事件描述符、内容描述符等)

descriptor() 读取描述参数

}

}

CRC_32 32bit 循环校验码

}

EIT表所支持的描述符如下(打※号的是最常用的描述符):

※Short_event_descriptor     短事件描述符

Stuffing_descriptor       填充描述符

※Extended_event_descriptor     扩展事件描述符

time_shifted_event_descriptor   时间移位事件描述符

※component_descriptor 组件描述符

Private_data_specifier_ descriptor    专用(私有)数据说明符描述符

※Content_ descriptor 内容描述符

※Parental_rating_descriptor 家长分级描述符

CA_identifler_ descriptor   条件接收标识描述符

Multilingual_component_name_ descriptor   多语言组件名称描述符

Short_smoothing_buffef_descriptor 短平滑缓冲器描述符

linkage_descriptor 链接描述符

Telephone_descriptor 电话描述符

Data_broadcast_descriptor 数据广播描述符

EIT表常用的描述符数据结构

Short_event_descriptor(){   短事件描述符

Descriptor_tag 8bit 描述符起始标记

Descriptor_length 8bit 描述符长度

ISO_639_language_code 24bit 语言编码

Event_name_length 8bit 事件名称长度

For(I=0;I<event_name_length;I++){

Event_name_char 8bit 事件名称字符集

}

text_length 8bit 文本长度

for(I=0;I<text_length;I++){

text_char   8bit 文本字符集

}

extended_event_descriptor(){ 扩展事件描述符

Descriptor_tag 8bit 描述符起始标记

Descriptor_length 8bit 描述符长度

Descriptor_number 4bit 描述符号

Last_descriptor_number 4bit 最后描述符号

ISO_639_language_code 24bit 语言编码

Length_of_items 8bit 条目长度

For(I=0;I<N;I++){

Item_descriptor_length 8bit 条目字符长度

}

item_length 8bit 条目长度

for(j=0;j<N;j++){

item_char   8bit 条目字符集

}

item_length 8bit 条目长度

For(I=0;I<N;I++){

text_char   8bit 文本字符集

component_descriptor(){ 组件描述符

Descriptor_tag 8bit 描述符起始标记

Descriptor_length 8bit 描述符长度

Reserved_future_use   4bit 保留将来使用字段

Stream_content   4bit   码流内容

Component_type 8bit   组件类型

Component_tag 8bit   组件标记

ISO_639_language_code 24bit 语言编码

For(I=0;I<N;I++){

text_char   8bit 文本字符集

content_descriptor(){   内容描述符

descriptor_tag  8bit     描述符起始标记

descriptor_length    8bit 描述符长度

for(i=0;i<N;i++){

content_nibble_level_1   4bit     第一级的节目内容分类

content_nibble_level_2     4bit    第二级的节目内容分类

user_nibble    4bit    使用者定义字段

user_nibble    4bit    使用者定义字段

}

}   
content_nibble_level_ 1和content_nibble_level_2的分配

下图是一个真实的EIT表

****************************************************************************

节目关联表(PAT)的段数据结构:

program_association_section(){ 节目关联段

Table_id   8bit 表标识

Section_syntax_indicator 1bit 段序列指示(标记位)

“0” 1bit

Reserved 2bit 保留字段

Section_length 12bit 段长度

Reserved 2bit 保留字段

Version_number   5bit 表版本号,作为表更新机制

Current_next_indicator 1bit 当前/下一个有效指示位(标记位)

Section_number 8bit 当前段段号

Last_section_number 8bit 最后段号

For(I=0;I<N;I++){ 获取本流的节目号

Program_number 16bit 节目号

Reserved 3bit 保留字段

if(Program_number==0){ 如果节目号等于零

network_id 13bit   那么节目号是一个网络标识

else{

program_map_PID 13bit   否则节目号是一个PMT表的标识

}

}

CRC_32 32bit 循环校验码

}

下图是一个真实的PAT表。

时间与日期表(TDT)的段数据结构:

time_date_section(){ 时间日期段

table_id 8bit 表标识

Section_syntax_indicator 1bit 段序列指示(标记位)

Reserved_future_use 1bit 保留将来使用字段

Resetved 2bit 保留字段

Section_length 12bit 段长度

UTC_time    40bit 当前的时间和日期

}

******************************************************************************

节目影射表(PMT)的段数据结构:

TS_program_map_section(){ 传输流节目影射段

Table_id   8bit 表标识

Section_syntax_indicator 1bit 段序列指示(标记位)

“0” 1bit

Reserved   2bit 保留字段

Section_length 12bit 段长度

Program_number 16bit 节目号

Reserved   2bit 保留字段

Version_number   5bit 表版本号,作为表更新机制

Current_next_indicator 1bit 当前/下一个有效指示位(标记位)

Section_number 8bit 当前段段号

Last_section_number 8bit 最后段号

Reserved   3bit 保留字段

PCR_id 13bit 同步时钟标识

Reserved   4bit 保留字段

Program_info_length 12bit 节目信息长度

For(I=0;I<N;I++){ 获取表所带的描述符信息(如CA描述符等)

Descriptor() 读取描述参数

}

For(I=0;I<N;I++){ 获取节目组件

Stream_type 8bit 传输流的类型

Reserved   3bit 保留字段

Elementary_PID 13bit 元素标识,指示TS包的PID值,这些包含有相关的节目元素

Reserved   4bit 保留字段

ES_info_length 12bit ES信息长度,指示跟随其后的描述相关节目元素的字节数

for(i=0;i<N;i++){

descriptor() 读取描述参数

}

}

CRC_32 32bit 循环校验码

}

PMT表所支持的描述符如下(打※号的是最常用的描述符):

Mosaic_descriptor 马赛克描述符

※Stream_identifier_descriptor 码流标识描述符

Teletext_descriptor 图文电视描述符

Subtitling_descriptor 字幕描述符

Private_data_specifier_ descriptor    专用(私有)数据说明符描述符

Service_move_descriptor 业务转移描述符

CA_identifler_ descriptor   条件接收标识描述符

※     Data_broadcast_descriptor 数据广播描述符

PMT表常用的描述符数据结构

stream_identifier_descriptor(){ 码流信息描述符

Descriptor_tag 8bit 描述符起始标记

Descriptor_length 8bit 描述符长度

component_tag      8bit 组件标记, 标识与一个组件描述符给定的描述相关的组件流。

}

下图是一个真实的PMT表。

一、EPG的实现

1、 EPG系统构成

EPG包含以下基本功能:

l         电视报:以时间---节目名称的形式,提供当前频道从当天开始的一周的电视节目信息。

l         当前\后续节目信息:提供当前频道播放的节目信息及节目简介,同时也提供下一个将要播放的节目信息及简介。

EPG还可以包含以下的一些扩展功能,这些功能是可选的。

l       节目附加信息:如节目情节介绍。

l       节目分类:按节目内容进行分类,如体育、影视等。

l       节目预定:在节目单上预约一段时间之后将要播出的节目,届时机顶盒就可以自动切换到预定的频道,并播放预定的节目。

l       家长分级控制:对节目内容进行分级控制。

《数字电视广播业务信息规范》规定:EPG所需要的基本信息有SI来提供,以保证机顶盒获取EPG基本信息时的兼容性。对于个性化EPG所需要的额外信息,用户可根据具体情况通过专用数据传送。对于EPG的界面,则不作规定。EPG的上述功能所需的全部信息都必须通过SI获取。

在业务信息规范中,显示SI信息的方式并没做出详细的规定,机顶盒制造商可以自己选择显示方式。

下图是EPG系统的结构图:

从图中可看出,EPG系统分为两大部分,一部分是EPG客户端,另一部分是EPG服务端。EPG客户端由PSI\SI编辑工作站和EVENT编辑工作站组成。

PSI\SI编辑工作站的主要功能是对网络信息、传输刘信息、服务信息、链接描述符信息的编辑,主要的操作有:新增、修改、删除等基本操作。

EVENT编辑工作站的主要功能是负责录入每个server下的节目时间表信息、功能有:

l         节目片段的新增、插入、删除。

l         外部节目单的导入(节目基本信息导入)。

l         增强节目信息的输入。

其中节目的基本信息有:节目播出的开始时间(年、月、日、时分)、节目时长、是否是CA控制、运行状态、节目名称、节目简介等。

节目增强信息包括:事件组件描述、事件内容描述、事件扩展描述、父母级控制四项。

事件组件描述有:语种、流描述、组件描述、流组件号、文本描述等内容。

事件内容描述:主要是节目分类,如一级分类、二级分类及用户自定义分类。

事件扩展描述:就是节目的其他方面的描述,多为语种描述。

父母级控制:观众年龄限制。

EPG客户端所输入的数据都通过数据库服务器与数据库相连,并调用里面的数据,生成EPG信息,EPG信息生成器主要功能有:

l         根据输入的信息生成符合标准的SI信息文件。

l         根据输入的节目单信息自动实时生成符合标准的EIT信息文件。

l         根据输入的信息生成播发控制文件来控制EPG信息的播发。

最后,EPG播发服务器负责根据EPG信息生成器所产生的控制文件和信息文件来完成EPG信息的播发。

2、 机顶盒的工作过程

机顶盒通常采用从PAT表→PMT表→NIT表→SDT表→EIT表解析构造EPG并同时搜索节目。但根据SI标准及机顶盒的实际解码流程,应从NIT表直接构造EPG,即先忽略PAT、PMT表。首先通过在机顶盒预先设置的主频点从传输流中直接提取NIT表,根据NIT表携带的传输系统参数搜索所有载波信息,再解析SDT、EIT表等构造出基本的EPG信息,其过程是:NIT表→SDT表→EIT表→生成EPG。EPG提供的信息主要包括:传送信息的天数(例如一周)、传送频道的数目和名称、传送的节目数、节目提供商的标识和名称、传送网络的信息(网络标识和网络名称),其细节信息还包括:节目名称、节目的简单介绍、节目的开始和结束时间、节目的主题、节目的类属、节目的观看分级限制(例如对某个年龄段进行限制)。

机顶盒通过EPG菜单来切换不同频率的频道时的解析过程:根据SDT表给出的业务标识符service_id(它等于program_number)→PAT表→PMT表→找到所需节目的TS包→CAT表→解扰→解码(如果业务没被加扰,可省去CAT表→解扰过程)。

当加入了BAT表时,用户可根据节目的分类来检索所需要的节目频道。首先查找BAT,根据BAT列出一系列的节目种类,比如新闻、体育、电影、音乐等,用户可选择其中自己感兴趣的类型,如电影。接收应用程序根据此BAT中包含的业务群信息,得到一个业务群列表。此时用户可以根据自己的喜好,选择自己喜欢观看的电影频道。

此时,首先要找到该业务所对应的传输流,根据BAT中所给出的对应的传输流标识符,然后查找NIT中与此传输流标识匹配的传输流描述符,然后根据描述符中的参数(如频率、调制方式等)解调出该传输流,即transport_stream_id→NIT(得到流的解调参数)。再根据BAT中的业务群组标识符(bouquet_id)完成:bouquet_id→ service_id→PAT表→PMT表→找到所需节目的TS包→CAT表→解扰→解码的过程(如果业务没被加扰,可省去CAT表→解扰过程),从而收看到自己喜欢看的节目。同时根据service_id在SDT中查找,得到有关的业务信息,还可以查找EIT,得到有关事件的信息,比如开始时间、持续时间等。

3、EPG的显示技术

当电视节目和EPG应用同时启动时,用户看到的是节目画面和EPG界面的叠加,电视画面从前到后可以分为三层,依次为图形层(On Screen Display,OSD)、视频层和背景层。图形层界面显示技术是指在图像画面上叠加文字显示,使屏幕为用户提供更多的附加信息;视频层为当前正在收看的节目,即解码出来的活动图像;背景层为没有播放电视节目和启动EPG菜单时的屏幕图像。EPG画面在图形层上构建,EPG画面是由许多EPG图形元素(如按钮、文本框、选择按钮、组件容器等)叠加而成。界面的状态转移是通过消息驱动的机制来实现的,在消息响应函数(消息响应函数就是一个普通函数指针,可以随时切换)中进行消息处理。用户见到的是屏幕图像是这三层的叠加后的图像。

SI数据检索模块快速地检索由播出前端SI数据库传送过来的SI信息,并提取这些信息供EPG显示使用;OSD层图形元素库提供界面所需的图形元素;状态转移控制器接收用户遥控器的输入,控制状态转移流向;OSD层图像是指EPG界面图形元素合成后的图像,完成图形绘制。最后是OSD层、视频层和背景层的叠加操作。

三、PSI/SI表的其他应用

1、 NVOD业务

NVOD称为准视频点播。它是把一个节目通过多个播放通道按一定的时间间隔进行重播。由于NVOD只是一个名称并不是一个实际的播放任务,为此在DVB-SI中把它定义为一个参考业务并把它作为一个标记来看。而每一个播放通道的播放,则是一个实际的播放任务,而且相邻两播放通道的播放时间都有固定的偏移量,所以DVB-SI中把它定义为时移业务。

一个参考业务下面通常包含6个时移业务,如图9所示。我们也可以把每一个时移业务看成是一个参考业务下的事件,那么播出时间和持续时间就是这个事件的基本元素。

接下来我们还必须要对参考业务进行一些描述,如:片长、价格、节目类型、节目发行商、家长等级控制、业务名称、节目简介、语言类别等。并将这些信息显示在屏幕上,而且把业务名称作为参考业务选择的第一级菜单,把时移业务的播放时间(事件时间元素)作为时移业务选择的二级菜单。

以上是NVOD业务的一个总体思路,如何具体实现呢?在DVB-SI中是利用SDT和EIT来实现的。

对于NVOD业务,SDT表主要传送业务描述符、NVOD参考描述符、时移业务描述符、业务描述符;EIT P/F主要传送短事件描述符、扩展事件描述符、组件描述符、CA标识描述符、内容描述符、家长等级控制描述符;EIT schedule主要传送时移事件描述符。

首先在NIT表的业务列表描述符(service_list_descriptor)通过service_type定义了7个业务,其中1个是参考业务(service_type=0X04),其余6个是时移业务(service_type=0X05),并给这6个时移业务赋予业务ID(service_id),除了参考业务外,6个时移业务的业务ID是和PMT表中的节目号(program_number)相等的。然后在SDT表中,每一个时移业务都通过时移业务描述符(time_shifted_descriptor)赋予一个参考业务ID(reference_service_id)目的是表明每一个时移业务归属于那个参考业务。而对于参考业务则通过NVOD参考业务描述符(NVOD_reference_service_descriptor)和业务描述符(service_descriptor)进行描述,其中NVOD参考业务描述符通过TS_ID 、原始网络ID、业务ID给参考业务作了定位,而业务描述符给参考业务安上一个名称和提供这个参考业务提供者的信息。由此可见,参考业务名称及参考业务提供者的信息是由SDT产生的。

对于EIT表,7个业务对应着2个EIT的子表,通过业务ID和事件ID(event_id)进行定位。参考业务由一个EIT P/F子表进行描述。在EIT P/F里传送了短事件描述符(short_event_descriptor)、扩展事件描述符(extended_event_descriptor)、组件描述符(component_ descriptor)、CA标识描述符(CA_identifier_ descriptor)、内容描述符(content_ descriptor)和家长等级控制描述符(parental_rating_descriptor),这些描述符提供了给参考业务在:名称、提供者、片长、影片价格、影片简介、家长控制等级、语言类别等多方面进行描述。

6个时移业务由EIT schedule的多个段分别进行描述,对于每一个时移业务究竟需要多少个段来描述,是视其的播放编排(有多少个播放事件)而定的。前面说过,一个时移业务就相当于参考业务下的一个事件,但如果一个时移业务不只有一个播放任务,而是连续多个播放任务,那么一个时移业务就由多个事件组成,每一个播放任务就作为一个事件。如图10所示。每一个事件都由一个开始时间(start_time)和持续时间

(duration)进行描述,并通过时移事件描述符(time_shifted_event_descriptor)中的参考业务ID和参考事件ID及event_id进行定位(对于一个参考业务下的所有时移业务的参考业务ID和参考事件ID都是相同的)。

以上这些表及描述符参数都通过业务ID进行关联,从而实现了NVOD应用的一、二选择菜单和点播收看。菜单界面如图11所示。

图12是SI信息表在NVOD业务的关系图。

这里要注意的是,SDT、EIT、NIT这几个表都只是针对NVOD业务的,他们存在于NVOD业务的流中,其中EIT表的结构与普通的EIT表是不同的。这样做的目的是为了把NVOD单列出来,防止它出现在整个节目列表中。

2、 马赛克业务
马赛克业务是数字电视一个导航业务,它可起着节目推介的作用。马赛克在DVB中作是一个service,它的产生如图13所示。其核心是马赛克服务器,马赛克服务器主要功能是从多个TS中按需要提取节目视频,然后根据设置参数进行压缩、定位等处理,然后把它们合成一个节目流,同时生成相应的SI信息表,再把这个马赛克业务流与相应的SI信息经过复用器后形成一个完整的马赛克业务节目流。

马赛克业务的表现形式如图14所示,在PAL制式下,一祯电视画面大小一般为:720×576,称为电视屏幕,但马赛克业务通常不会占满整个电视屏幕,它只占整个电视屏幕的一个区域,我们称显示马赛克业务的区域为马赛克屏幕。马赛克屏幕里面显示节目图像的最小单位称为基本单元,而每一个基本单元可作为一个逻辑单元,也可由多个基本单元组成一个逻辑单元来显示较大的节目画面。

在DVB标准中,支持马赛克业务的描述符是mosaic_descriptor结构如下:

mosaic_descriptor( ){

descriptor_tag         8bit

descriptor_length     8bit

mosaic_entry_point         1bit 马赛克业务入口点

number_of_horizontal_elementary_cells 3bit 水平方向基本单元数

reserved_future_use        1bit

number_of_vertical_elementary_cells 3bit 垂直方向基本单元数

for ( i = 0; i< N; i++){

logical_cell_id    6bit 逻辑单元ID

reserved_future_use         7bit

logical_cell_presentation_info 3bit 逻辑单元表达信息

elementary_cell_field_length 8bit

for(i= 0;i<elementary_cell_field_length;i++){ 基本单元字段长度

reserved_future_use    2bit

elementary_cell_id       6bit

}

cell_linkage_info        8bit 单元连接信息

if ( cell_linkage_info == 0x01) {   与业务群相关

bouquet_id           16bit

}

if ( cell_linkage_info == 0x02) {     与业务相关

original_network_id       16bit

transport_stream_id      16bit

service_id      16

}

if ( cell_linkage_info == 0x03) {   与其他马赛克业务相关

original_network_id      16bit

transport_stream_id      16bit

service_id      16bit

}

if ( cell_linkage_info == 0x04) {   与事件相关

original_network_id       16bit

transport_stream_id      16bit

service_id      16bit

event_id         16bit

}

}

}

从马赛克描述符中,我们可看到,描述符对马赛克中的基本单元快数作了定义,对逻辑单元也作了定义,且每个逻辑单元所连接的信息及类型也作了定义,但对马赛克屏幕的大小及当存在多个马赛克页面时,如何进行页面间的切换没有做定义和描述,因此必须要对标准中没有的这些部分进行补充(作私有定义)。

⑴、私有定义一:马赛克屏幕的定义。

马赛克屏幕可把其定义为逻辑屏幕,引入一个logical_screen_descriptor (逻辑屏幕描述符)来描述逻辑屏幕的位置与大小,如下:

logical_screen_descriptor(){

descripyor_tag   8bit

descriptor_length 8bit

screen_left   16bit 屏幕水平坐标位置

screen_top   16bit 屏幕垂直坐标位置

(以上这两个参数定义料逻辑屏幕左上角的坐标,如图14的x0,y0)

screen_right 16bit

screen_bottom 16bit

(以上这两个参数定义了逻辑屏幕的右下角的坐标,如图13的x1,y1)

}

上面的逻辑屏幕描述符可以在PMT表中携带,也可以在SDT表中携带。由于它是一个私有描述符,因此,当它由SDT表携带时,根据DVB标准,必须要通过一个私有数据说明描述符加以说明,该描述符在DVB标准有定义,如下:

private_data_specifier_descriptor(){

descriptor_tag

descriptor_length

private_data_specifier

}

其中的private_data_specifier值是用于标识逻辑屏幕描述符是哪个厂家的私有描述符。

⑵、私有定义二:在马赛克业务所在流的PMT表中,由于一个马赛克业务存在多个逻辑单元和多个音频流与视频流,那么这些音频流、视频流属于哪个逻辑单元的?必须要进行标识。所以每一个音频流和视频流后都跟着一个stream_identifier_descriptor(流标识描述符),主要用于描述该音频流及视频流和逻辑单元之间的对应关系,其中的componene_tag(组件标签)是与马赛克视频对应逻辑单元的logical_cell_id (逻辑单元ID) 相等的,这个流标识描述符结构如下:

stream_identifier_descriptor(){

descriptor_tag

descriptor_length

component_tag

}

⑶、私有定义三:当存在多个马赛克页面时,为了能够使用户在几个页面之间进行切换,需要引入马赛克链接描述,其定义如下:

linkage_descriptor(){

descriptor_tag

descriptor_length

transport_stream_id

original_network_id

service_id

linkage_type

for(I=0;I<n;I++){

privste_data_byte

}

}

其中linkage_type可取0X82和0X83两个值,0X82代表向上链接,0X83表示向下链接。linkage_descriptor可由SDT表携带,每一个马赛克业务可携带两个linkage_descriptor,分别链接到上一个马赛克页面和下一个马赛克页面。同样,由于linkage_descriptor是私有描述符,所以要用一个private_data_specifier_descriptor加以说明。

图2是一个马赛克业务的实际画面,其mosaic_descriptor如图15所示。

机顶盒实现马赛克的流程:

机顶盒首先查找SDT表,看是否存在马赛克业务,如果存在,根据业务的TS_id 找到该流,并处理该流的PAT表和PMT表,在屏幕显示马赛克业务画面。

当用户对某一逻辑单元的内容感兴趣时,有下列几种情况:

①、           如果该逻辑单元是与业务群相关的,那么机顶盒将根据bouquet_id显示BAT表的信息。

②、           如果该逻辑单元与业务相关的,那么机顶盒将根据original_network_id、transport_stream_id、service_id找到业务所在的流并且通过处理PAT表和PMT表显示选中的业务内容。

③、           如果该逻辑单元与事件相关,那么显示EIT表信息,并根据original_network_id、transport_stream_id、service_id、event_id找到该事件所在的流,且通过处理PAT表和PMT表显示选中的事件内容。

④、            如果该逻辑单元与马赛克业务相关,那么机顶盒根据original_network_id、transport_stream_id、service_id找到该马赛克业务所在的流,且通过处理PAT表和PMT表显示选中的马赛克业务内容。

【DVB】DVB业务信息PSI/SI综述相关推荐

  1. 数字电视业务PSI/SI学习

    数字电视业务PSI/SI学习系列 一.MPEG-2系统原理 第一章 MPEG-2简介 什么是MPEG和MPEG-2? MPEG是Moving Picture Experts Group 的简称,MPE ...

  2. 数字电视业务PSI/SI学习系列

    声明:本文转载自某文档,文档来源于网络. 什么是MPEG和MPEG-2? MPEG是Moving Picture Experts Group 的简称,MPEG-2是MPEG和ISO组织设计的一个数字视 ...

  3. 【PSI/SI学习系列】2.PSI/SI深入学习3——SI信息解析2(SDT, EIT, TDT,TOT)

    PSI/SI 深入学习 BASIC KNOWLEDGE LEARNING OF PSI/SI 转载自:https://blog.csdn.net/kkdestiny/article/details/1 ...

  4. PSI/SI深入学习3——SI信息解析2(SDT, EIT, TDT,TOT)

    PSI/SI 深入学习 BASIC KNOWLEDGE LEARNING OF PSI/SI SDT 解析 PARSINGOF SDT "SDT描述了业务内容及信息,连接了NIT与EIT和P ...

  5. 【PSI/SI学习系列】1.从TS流到PAT和PMT

    [PSI/SI学习系列]1.从TS流到PAT和PMT   前言 欢迎到我的网站阅读:http://www.onelib.biz/blog/stb 一 从TS流开始 最近开始学习数字电视机顶盒的开发,从 ...

  6. 利用评论信息的推荐综述

    利用评论信息的推荐综述 摘 要: 推荐系统因可以为人们提供个性化的服务而在日常生活中扮演者越来越重要的角色.传统的推荐系统往往利用用户或物品的评分信息,然而在现实场景中评分信息一般是比较稀疏的,这种数 ...

  7. 信息隐藏技术综述-学习笔记

    信息隐藏技术综述 文章目录 信息隐藏技术综述 @[toc] 一.什么是信息隐藏 二.信息隐藏基本原理 2.1信息隐藏的分类 2.2信息隐藏的特性 2.3信息隐藏的基本模型 2.4信息隐藏的关键技术 2 ...

  8. 一分钟图情论文:《2011-2022年我国图书馆读者个人信息保护研究综述》

    一分钟图情论文:<2011-2022年我国图书馆读者个人信息保护研究综述> 2021年8月,<中华人民共和国个人信息保护法>正式颁布.作为我国首部个人信息保护单独立法,该法的出 ...

  9. Freebie:专业业务信息图表模板

    寻找免费赠品? 我们在这里与Freepik的朋友合作,这是HKDC读者的独家发行. 您正在查看一个以业务为主题的统计信息图表模板 ,其中包含的元素非常适合数据可视化,年度报告演示或制作精美的信息图表. ...

最新文章

  1. 昨天尝试了Layout,也谈Silverlight的布局
  2. 浙江绿盟科技2011.10.14校园招聘会笔试题
  3. netbeans html 格式化,在NetBeans IDE8.0中怎么把html的文件转换成jsp格式
  4. 浅谈:MyBatis-Plus的CRUD与乐观锁,分页插件,逻辑删除
  5. 全国计算机准考证打印2015年,甘肃2015下半年全国计算机等级考试准考证打印时间...
  6. Differential Geometry之第八章常Gauss曲率曲面
  7. 如何用python一个字一个字的输出汉字
  8. 高德地图,百度地图,腾讯地图,谷歌地图,坐标拾取器
  9. Windows10家庭版远程桌面登录——RDPWrap
  10. 互联网企业该如何进行风险管理
  11. linux下oracle 9204 soft only,在CentOS4.3(x86_64)上安装Oracle9204 for linux(x86_64)
  12. html策略类文字游戏,中国唯一 一款运营超20年的网游竟然是款纯文字游戏
  13. Flutter获取Android/iOS设备信息
  14. 右键计算机没有软件删减,右键菜单太长会导致电脑卡顿?轻松删除右键菜单无用项!...
  15. 任务分销系统云智推任务提交版拉新系统网站源码
  16. mysql中gender要用什么类型,如何选择合适的MySQL数据类型
  17. Git + Github初入门
  18. 桌面移到D盘根目录下还原的办法
  19. freeman 链码
  20. HDU1435 Stable Match 【稳定婚姻问题】

热门文章

  1. C#,图论与图算法,寻找图强连通单元(Strongly Connected Components)的罗伯特·塔扬(Robert Tarjan‘s Algorithm)算法与源程序
  2. 【Java面试题】把数组排成最小的数
  3. Java与模式之建造者模式详解
  4. 正负分数计算机在线算使用,分数的表示以及计算(c++)
  5. Git和SVN的优缺点/比较/区别
  6. 完美简单解决git和svn共用混用,或用git维护svn的问题
  7. 叔本华系列之(一)论独立的思考
  8. php 射影定理,立体几何(射影定理)
  9. 什么是“大中台、小前台”
  10. linux如何安装声卡驱动