转载自:http://blog.sina.com.cn/s/blog_4b0b1bc401008r92.html
DVB-SI入门
(2008-02-27 14:14:30)
标签: 数字电视dvbsipsi入门it |
数字电视与传统模拟电视节目选择的方式完全不同,传统电视的每一个频道对应有个节目,只要调到相应的频率,就可以看到节目。而在数字电视信号中,一路码流对应多路节目,使用复用技术就可以做到了。一个物理频道只能给出包含多路的一路传输流。要观看其中的某一路节目,还必须从传输流中提出该路节目的压缩包,然后再进行解码。所以怎么从众多的传输流中,选中一路节目播放,就变得更很复杂。在mpeg-2的传输流(Transport Stream)中,节目专用信息PSI(Progame Specific Information),就是规定不同节目和节目的不同成分如何复用成一个统一的码流。以PSI为基础可以提供一个码流的构成,从而帮助用户对节目进行选择。DVB中的服务信息(Service Information)则对此进行了进一步的扩展,加入了一些对用户有用的信息,表示节目的类型、服务商、节目的相互关系等。正确的了解mpeg-2的PSI以及DVB的SI的结构,以及其在节目组织、选择中的应用,可以正确理解service information在DVB解码中的地位。对于我们做好对数字节目的复用,也能起到帮助的作用。
1、 MPEG-2 TS中的PSI
PSI信息主要包括一下的表:
PAT(Program Association Table):节目群从表,该表的PID是固定的0x0000,它的主要作用是指出该传输流的ID,以及该路传输流中所对应的MAP表和NIT表的PID.
PMT(Program Map Table):节目映射表,该表的PID是由PAT提供给出的。通过该表可以得到一路节目中包含的信息,例如:该路节目由哪些流构成和这些流的类型(视频、音频、数据),指定节目中各流度应的PID,以及该节目的PRC所对应的PID.
NIT(Network Information Table):网络信息表,该表的PID是由PAT提供的。NIT的作用主要是对多路传输流的识别,NIT提供多路传输流、物理网络及网络传输的相关的一些信息,如用于调谐的频率信息以及编码方式、调制方式等参数方面的信息。
CAT(Conditional Access Table):条件访问表,PID-0x0001。
除了上述的几种表外,mpeg-2还提供了私有字段,用于实现对mpeg-2的扩充。
2、 DVB中的SI
MPEG-2的PSI中提供了不少的关于节目组成和相互关系的信息,从而使得在接收端可以正确的对多路传输流进行分解。但是这些信息在实际使用时仍显得不够,为此在DVB中采用SI和PSI信息进行了进一步的扩展。
除了在PSI中的信息之外,DVB还定义了一些其他的一些表。
SI的主要用途有:
a、 根据NIT、PAT、PMT等信息可以进行自动的频道调谐;
b、 更方便的对节目进行选择和定位;
c、 实现电子节目指南EPG(Electronic Program Guide),等等。
PSI中的信息基本上都是与当先码流相关的,即它们所涉及的内容都与当前码流中的部分信息相关。与PSI不同的是,SI的基本信息可以包括不在当前码流中的一些服务和事件,允许用户进行更多的选择和了解更多的其他的服务信息。
DVB规定携带SI信息的传输包必须用指定的PID,指定的PID如下表:
TABLE TYPE PID VALUE
PAT 0X0000
CAT 0X0001
TSDT 0X0002
RESERVED 0X0003 TO 0X000F
NIT、ST 0X0010
SDT、BAT、ST 0X0011
EIT、ST 0X0012
RST、ST 0X0013
TDT、TOT、ST 0X0014
Network Synchroniztion 0X0015
Reserved for future use 0X0016 TO 0X001B
Inband signaling 0X001C
Measurement 0X001D
DIT 0X001E
SIT 0X001F
在该表中可以看到同一个PID可以对应不同的表,要把这样的表区分开来,需要进一步找到TableID进行识别。TableID表如下:
Value Description
0x00 Program_association_section
0x01 Conditional_access_section
0x02 Program _map_section
0x03 Transport_stream_description_section
0x04 TO 0X3F Reserved
0x40 Network_information_section-actual_network
0x41 Network_information_section-other_network
0x42 Service_description_section-actual_stream
0x43 to 0x45 Resreved for future use
0x46 Service_description_section-other_transport_stream
0x47 to 0x49 Reserved for future use
0x4A Bouquet_association_section
0x4B to 0x4D Reserved for future use
0x4E Event_information_section-actual_transport_stream,P/F
0x4F Event_information_section-other_transport_stream,P/F
0x50 to 0x5F Event_information_section-actual_stream,schedule
0x60 to 0x6F Event_information_section-other_stream,schedule
0x70 Time_date_section
0x71 Running_status_section
0x72 Stuffing_section
0x73 Time_offset_section
0x74 to 0x7D Reserved for future use
0x7E Discontinuity_information_section
0x7F Selection_information_section
0x80 to 0xFE User defined
0xFF Reserved
有了这两个ID,我们可以在码流中找到我们想要的任何一张表。
SI主要包括一下一些信息表:
NIT(Network Information Table):NIT的作用主要是对多路传输流的识别,NIT提供多路传输流,物理网络及网络传输的相关的一些信息,如用于调谐的频率信息以及编码方式、调制方式等参数方面的信息,根据此信息设置IRD(Integrated Receiver Decoder)可以进行多路传输流之间的切换。
SDT(Service Description Table):用于描述系统中各路节目的名称,该节目的提供者,是否有相应的时间描述表等方面的信息。该表可以描述当先传输流,也可以描述其他的传输流,这个由TableID进行区分。
EIT(Event Information Table):该表是对某一路节目的更进一步的描述。它提供事件的名称、开始时间、时间长度、运行状态等;
TDT(Time and Date Table):该表提供当前的时间信息,该表用来对IRD的解码时钟进行更新;
BAT(Bouquet Association Table):该表提供一系列类似节目的集合。这些节目可以在不同的传输流中,利用该表可以很方便的进行相关节目或某一类节目的浏览和选择;
RST(Running Status Table):该表提供某一具体事件的运行状态,可用于按时自动的切换到指定的事件;
TOT(Time Offset Table):该表提供当地时间与TDT之间的关系,该表与TDT配合使用;
TSDT(Transport Stream Description Table):由PID0x0002标识,提供传输流的一些参数;
ST(Stuffing Table):该表表明其内容是无效的,只作为填充字节。
那么,我们如何运用DVB中的SI信息表呢?
1、 网络信息表(NIT)
网络信息表提供一组传输流以及相应调谐信息。NIT在IRD(整合接收解码器)启动程序中用到,并且调谐信息可以存储到不变的存储器中。NIT还可以用来标志调谐信息的变化。NIT遵从如下规定:
a、 当前的传输系统必须包含NIT。
b、 当且仅当NIT包含可用的传输系统描述符,当前传输系统才是有效的。这就指定了NIT包含有效信息的条件。在一些广播传输系统边界,TS中的NIT也被允许用来描述广播频道中的网络。IRD不得不选择一个不同的机制来获得当前传输系统的相应的调谐信息。例如,一个卫星IRD接受到当前传统的一个电缆传输系统描述符,那么这个描述符被视为有效,如果一个电缆IRD接收到当前传输系统的一个电缆传输系统描述符也是有效的,但是如果电缆IRD接收到当前传输系统的一个卫星传输系统描述符,那么这个描述符对于这个IRD就是无效的。
c、 如果当前传输流系统一个有效的NIT在SI比特流中出现,那么这个NIT应当列出当前传输流系统中所有的TS.
d、 SI流每10秒钟应当至少包含8各TS包来传输NIT或者空包。这个规定简化了广播传输边界中NIT的复位(replacement).使用这样的复位机制,使得本地频率控制使用低廉设备成为可能。
SI使用两个标志来描述传输系统,它们分别是network_id和original_network_id.后者用来作为一个TS中的一个服务的唯一标志符,即使这个TS被传送到了其他的传输系统之中,一个TS可以被path:original_network_id/transport_stream_id唯一标识,一个服务可以被peth:original_network_id/transport_stream_id/service_id唯一标识。显然,network_id不在这个path之内,另外,每个original_network_id中都有不同的service_id。当一个服务(同一个TS内)被传送到另一个传输系统后,只有network_id改变了,original_network_id不受影响。
下面举个例子,考虑如下情况:有两个服务(A和B)。它们源于两个不同的传输系统并且碰巧有相同的service_id和transport_stream_id,它们被传输到一个新的传输系统。在这个例子中,这两个服务被安排在新的network中的不同TS中。如果这两个服务被放在同一个TS中,那么必须修改服务的ID,因为在同一个TS中一个SERVICE_ID不能够分配给多个服务,并且一个TS仅仅可以对应一个original_network_id。
2、 BAT信息
BAT提供一组服务,这些服务提供了一个基础,IRD在这些基础之上向用户展示有效的服务,BAT的传输是可选的。下面的规则提高了SI比特流的连贯性并且简化了IRD的工作。
SI比特流应当在每个BAT子表中列出集锦的所有服务。
注意:一个服务可以属于多个bouquet。这一规定使得IRD可以通过不同的TS得到一个服务。如果IRD将bouquet中服务信息提供给用户,那么列在bouquet中的服务就得到保证,否则一些服务将会丢失。一个bouquet可以把不同网络传输的多个TS中的服务集中起来。如果BAT中所有服务都被列在SDT中,IRD对bouquet中所有服务信息的访问将会变得容易。同样的,如果NIT信息给出所有TS中service的容量,IRD对service的访问将会变得容易。
3、 SDT信息
SDT用来罗列TS中service的名称以及其他参数。每一个TS中都有一个独立的SDT子表。为了提高对service的采集,定义了下列规定:强制传输当前TS的SDT;SDT列出的SI比特流至少包括TS中所有服务。另外:当前TS(例如table_id=0x46)中SDT描述其他TS时,应当列出这个TS的所有service。强烈推荐service_id,在一个network中一旦把一个service_id分配给了一个特定的服务,那么这个service_id将不再变化,以便于IRD实现收藏频道列表之类的功能。
4、 EIT信息
时间信息表用来传递当前的、将来的甚至更远的未来的事件的信息。每个Service都有自己独立的EIT子表。
4.1 EIT Present/Following信息(以下简称EIT P/F)
下列规则简化了EIP P/F信息的获得,SI规范规定EIT段最大部超过4096字节。
SI流中的每个Service都有两段来描述EIT Present/Following,section_number 0x00用老描述当前事件,section_number 0x01描述下一个事件。这些约束不适用于NVOD引用的Service,这些Service在每段中可能有多个事件描述,并且在EIT Present/Following中可能有更多的段。推荐提供事件描述event_id的升级排列。
在一个section中,SI可以最多4096个字节来描述一个单独的事件。
对于当前事件有如下规定:
a、 同一时刻最多只有一个当前事件。
b、 当存在一个当前事件时,该事件应该被描述在EIT Present/Following的section0中。
c、 当前事件中的running_status应当被给出。
d、 在同一时刻,最多有一个following event.
e、 如果following event存在,该事件应当在EIT Present/Following的section1中。
f、 如果following event不存在,则传输一个section1为空的EIT Present/Following。
g、 Following event的running_status应当给出。
事件的持续时间和EIT持续事件一样,必须包含事件被设置为“not running”或者“pausing”。事件的开始时间和EIT start_time一样,应当是整个事件的开始事件,而不是从pause恢复后的时间。
注意:一个事件的开始时间加上它的持续时间可能比following event的开始时间要小。换句话说,允许事件之间有间隔。在这种情况下,following event被看作是间隔后的事件,这个事件应当编在EIT Present/Following的secting1中。
注意:开始时间和持续时间都是预定的,一些广播服务提供商可能会更新这些信息,而另外一些则更愿意保持开始时间不变。例如为了避免名为“8点新闻”的事件被误解,把信息中的开始事件从8:01:23改为8:00:00
4.2、EIT Schedule结构
1)EIT Schedule结构遵从如下规则:
1、 EIT/Schedule分配了16个table_id,0x50-0x5F给当前TS,0x60-0x6F给其它TS,这些id按照时间顺序排列;
2、子表下的256个section被分为32段(segment),每8个section一个字段(segment).Segment#1、从section0到7、section#2、从section8到15等等
3、 每段包含三个小时内开始的事件信息;
4、 段内事件信息按照事件排列;
5、 如果一个段(segment)有n节(section),而n<8,这个信息必须放在段前n个节中,还要显示指明最后一节的位置:S0+n-1(S0是段中第一节),这个值在EIT的segment_last_section_number中。例如,第二段只有两节,那么segment_last_section_number包含值8+2-1=9;
6、 如果段中有节的话,段的segment_last_section_number应当有值s0+7;
7、 完全空的段通过空节(不包含loop over事件)表示,段的vsegment_last_section_number值为s0+0
8、 段中事件的安排遵从一个时间t0.
T0是通过时间坐标(Universal Time Coordinated(UTC))的“last midnight”。
举个例子:UTC-6的下午5点,就是UTC-0的下午11点,即从:last midnight”算起23小时。因此对于UTC-6,t0就是前一天的下午6点;
table_id 0x50(对于其它TS是0x60)的第0段,包含从午夜(UTC时间)到“今天”02:59:59(UTC时间)(三个小时)的事件信息。第一段包含从03:00:00到05:59:59(UTC时间)的事件信息。依此类推,这就意味着第一个子表包含“今天”UTC午夜时间算起4天的信息;
9、last_section_number用来指明子表的结束位置;
10、last_table_id用来指明整个EIT/Schedule结构的结束位置;
11、与过去相关的段可以用空段代替,参见7规则;
12、EIT/Schedule包含的时间定义中的running_status应当设为“为定义”即0x00;
13、EIT/Schedule表不适用于NVOD涉及的服务,因为这些服务带有未定义开始时间的事件;
2)EIT加密
EIT Schedule表格可以被加密,为了与条件接入相联系,必须分配一个service_id(=MPEG-2 program_number)来描述加密的EIT Schedule Tables,这个service_id在PSI中。EIT在PMT中定义,service_id看成由一个private steam组成的各种电视节目(The EIT is identified in the Program Map Table(PMT)section for this service_id as a programme consisting of one private steam),PMT包含一个或者多个CA_descriptor来验证相关的CA码流。为达到这个目的,在DVB应用程序中service_id的值0xFFFF被保留。
怎样在众多的数字电视节目中快速地找到用户所需要的节目,是数字电视应用所要解决的问题。在DVB接收机中通常都使用电子节目指南(EPG)这一工具来达到快速查找节目的目的,生成EPG的数据来源于DVB码流中的有业务信息SI信息。
在数字电视中,所有视频、音频、文字、图片等经数字化处理后都变成了数据,并按照MPEG-2的标准打包,形成固定长度(188个字节)的传送包,然后将这些数据包进行复用,形成传送码流(TS),通常一个频道对应一个TS流,一个频道的TS流由多个节目及业务组成。在TS流中如果没有引导信息,数字电视的终端设备将无法找到需要的码流,所以在MPEG-2中,专门定义PSI来信息,其作用是自动设置和引导接收机进行解码。PSI信息在复用时通过复用器插入到TS流中,并用特定的PID(包标识符)进行标识。
在MPEG-2标准中定义的节目信息PSI,是对单一码流的描述,由于系统通常存在多个码流,为了使使用者能在多个码流中快速地找到自己需要的业务,在DVB对MPEF-2地PSI进行了扩充,在PSI是个表的基础上再增加了九个表,形成SI。SI是对整个系统所有码流的描述,描述系统传输内容、广播数据流的编排和事件表等的数据,它包括PSI信息。
一、节目信息(PSI)
PSI由节目关联表(PAT)、条件接受表(CAT)、节目映射表(PMT)和网络信息表(NIT)组成,这些表插入到TS中传输。PSI指定了如何从一个携带多个节目的传输流中正确找到特定的节目,当接收机要接收某一指定节目时,它首先从节目关联表中取得这个节目映射表中的PID值,,然后从TS中找出与此PID值相对应的节目映射表,从这个节目映射表中获得构成这个节目的基本码流的PID值,根据这个PID值滤出相应的视频、音频、和数据等基本码流,解码后复原为原始信号,删除含有其余PID的传送包。MPEG-2传送的结构如图所示:
从上面的几幅图中可知,要保证传送流能正常接收,在该流中至少有一个完整有效的PAT。CAT描述了节目的加密方式,它包含了节目的EMM识别PID,只有授权的解码器才能由CAT受到密钥,解码出相应的数据流。NIT包含节目的频道调谐参数、频率、符号率等物理传输网信息,这些信息使得接收机可以按照用户的选择以很少的延时或无延时地改变频道、调谐参数,正确地解码出 TS。由于PSI数据的完整性十分重要,因此在每个PSI段中均需要加校验码。
二、业务信息(SI)
PSI数据只提供了单个TS的信息,使接收机能对单个TS中的不同节目流进行解码,但它不能提供多个TS的有关业务和节目的类型、什么节目、什么时间开始等信息,因此DVB系统对PSI进行了扩展,提供了其他不同信息种类的多种表格,形成SI。在实用中,我们将SI所提供的数据通过有序地组织起来,生成类似节目报的形式,它能在电视机上即时浏览,这样将大大方便用户的使用,这就是电子节目指南EPG。
SI定义了9个表格
1、 业务群关联表(BAT):它提供了业务群相关的信息,给出了业务群的名称以及每个业务群中的业务列表。
2、 业务描述表(SDT):它包含了描述系统中业务的数据,例如业务名称、起始时间、持续时间等。
3、 事件信息表(EIT):它包含了与事件或节目相关的数据,EIT是生成EPG的主要表。
4、 运行状态表(RST):它给出了事件的状态(运行/非运行),运行状态表更新这些信息,允许自动适应切换事件。
5、 时间和日期表(TDT):它给出了与当前事件和日期相关的信息,由于这些信息更新频繁,所以需要单独使用一个表。
6、 时间偏移表(TOT):它给出了与当前事件、日期和本地事件偏移相关的信息,由于这些信息更新频繁,所以需要单独使用一个表。
7、 填充表(ST):它用于使现有的段无效,例如在一个传输系统的边界。
8、 选择信息表(SIT):它仅用于码流片段中,如记录一段码流,它包含了描述该码流段业务信息间断的地方。
9、 间断信息表(DIT):它仅用于码流片段,如记录的一段码流中,它将插入到码流片段业务信息间断的地方。
这里值得一提的是,NIT在MPEG-2标准中未予以规定,而是由SI规定。
以上这些表在传送流中以数据段的形式发送,不同的信息表在传送流中通过赋予不同的特定PID来进行区分(如表一)。而具有相同的PID的不同信息表则进行由表标识符TABLE ID来区分,在接收端通过查这些特定的PID来找到它们。这里说明一下,TS中有两种标识符,一种使包标识符,一种使表标识符。例如SI中的SDT的每一个表都对一个特定的TS中的业务进行描述,这些业务可能使这个表所存在的TS的一部分,也可能使其他TS的一部分,这些SDT的PID都是相同的,这时候我们就可以通过不同的表标识符来区分它们,从而识别出那一个表所描述的业务使那一个TS的。
表一
表 | PID值 |
PAT | 0X000 |
CAT | 0X001 |
PMT | 0X002 |
NIT | 0X0010 |
SDT、BAT | 0X0011 |
EIT | 0X0012 |
TDT、TOT | 0X0014 |
SI中的各表在实际使用中并不都需要传送,其中NIT、SDT、EIT、TDT是必须传送的,其它表则按照需要进行选择传送。
三、电子节目指南(EPG)
在DVB系统中,EPG可使用户方便、快捷、直观地找到需要的节目,根据《数字电视广播业务规范》对EPG的要求,EPG应对提供节目单和当前节目播放等基本功能,还提供节目附加信息、节目分类、节目预定和家长分级控制等功能。EPG的这些功能均可通过SI来实现,也就是说SI是实现EPG功能的前提。在SI中,最重要的是NIT、EIT和SDT,利用这3个表中的数据就可以构成功能不同的EPG。
NIT的作用在上面已经说过,SDT的作用是提供对每个业务的描述,使用户能方便地了解每个业务的内容。对于每一个TS都有一个SDT与之对应。EIT实际上是一个节目表,对于每一个节目都存在一个独立的EIT。
EPG包含两个部分:一是播出前端的EPG编辑器;二是用户端接收机相应的控制软件,两部分一一对应,每个接收机的相关部分必须按照前端定义的数据结构来定制,从而接收显示前端送出的业务信息。
SI一般在复用器合成TS时插入,有3种插入方式:
1、 将各表数据通过复用器厂家提供的应用软件接口由复用器插入到节目码流中。
2、 将各表数据按MPEG-2标准打包,通过码流播出卡输出,再将之送入复用器的异步串行口与节目码流复用。
3、 通过条件接收加扰器提供的接口插入,因此可通过局域网将数据表送入加扰器,由加扰器向码流中插入SI。
四、接收机与EPG
DVB接收机又称机顶盒,它是接收DVB节目的用户端设备。打开接收机,通常都有一个开机画面,这个画面实际上是一个存储于机顶盒内的一个菜单选择页面,它是由称为装载器的控制软件生成的用户操作界面,用户可通过遥控器进行选择操作。每个有线电视营运商所开发的这个界面都有所不同,但功能都是一样的,其主要内容是营运商提供业务(节目)的分类和系统设置及一些辅助功能。这些内容构成了页面的最上层主菜单,其下一层菜单则通常由SI生成的EPG所构成。
主菜单中的系统设置是为了引导接收机快速准确的接收到DVB节目而设的,其有最基本的三个操作:信息检测、节目搜索、软件下载。
1、信息检测:它主要显示目前DVB系统的主频及相关参数,如主频率、码率、调制方式、误码率、信号电平等,供维护人员检测参考。(这里说明一下,所谓主频是指SI所在码流的调制频率。)
2、节目搜索:接收机在节目搜索时首先搜索主频频率,找出SI信息,然后生成EPG,又由EPG生成一个节目列表,这个节目列表包括节目名称、节目说明、节目播出事件等,并将这个节目列表作为下一层菜单,每个下层菜单都指向相应节目所在的TS流,达到用户能方便快捷的收看到所需节目的目的。
3、软件下载:在前面说过,接收机的装载器必须要按照前端定义的数据结构来定制,当前端需要变更播出节目时(如增加或减少节目的播出,调整播出节目的类别等)或更改主频频率时,接收机的装载器也应做相应的变更。所以,当前端要做节目变更时,营运商必须要同时变更接收机的装载器,并向所有接收机发出软件更新信息,用户收到信息后,就可用软件下载功能来更新接收机的装载器了。
综上所述,构成一个DVB系统最基本的业务信息应该包括PSI和SI业务信息。EPG由SI生成,DVB接收机靠EPG来引导接收和选择收看DVB节目。