数字电视业务PSI/SI学习
數(shù)字電視業(yè)務(wù)PSI/SI學(xué)習(xí)系列??
一、MPEG-2系統(tǒng)原理
?????????????????????????????第一章?MPEG-2簡(jiǎn)介
什么是MPEG和MPEG-2?
??????MPEG是Moving?Picture?Experts?Group?的簡(jiǎn)稱(chēng),MPEG-2是MPEG和ISO組織設(shè)計(jì)的一個(gè)數(shù)字視頻壓縮規(guī)范,主要用于DVD和DVB上,當(dāng)前的標(biāo)準(zhǔn)文檔是ISO13818.
什么是DVB?
DVB是Digtal?Video?Broadcast的簡(jiǎn)稱(chēng),是歐洲所有國(guó)家和其他部分國(guó)家和地區(qū)使用的數(shù)字電視標(biāo)準(zhǔn).其中美國(guó)的ATSC標(biāo)準(zhǔn)也是在DVB標(biāo)準(zhǔn)的基礎(chǔ)上實(shí)現(xiàn)的.
什么是TS碼流和PS流?
??????TS是transport?stream的簡(jiǎn)稱(chēng),就是”傳輸流”.DVB數(shù)據(jù)廣播采用的數(shù)據(jù)格式就是TS碼流.
??????PS是program?stream的簡(jiǎn)稱(chēng),就是”節(jié)目流”.DVD中采用的數(shù)據(jù)格式就是PS流.
??????這兩種流的格式是不同的,TS格式具有很強(qiáng)的錯(cuò)誤校正功能,適合傳輸,而PS格式適合存儲(chǔ)在媒體中.??在這里,著重描述的是TS碼流格式.
什么是PID?
??????PID是Packet?identification的簡(jiǎn)稱(chēng),就是”包標(biāo)志符”.DVB系統(tǒng)把不同的數(shù)據(jù)打包成不同的數(shù)據(jù)包,用系統(tǒng)唯一的一個(gè)13?bits數(shù)字標(biāo)志該數(shù)據(jù)的類(lèi)型.例?如,PID=0x00表示是DVB系統(tǒng)中的PAT包,而PID=0x10表示是DVB系統(tǒng)的NIT包.不同的節(jié)目(包括Video和Audio)分別采用?不同的PID,例如,我們?cè)赑MT表中如果檢測(cè)到PID=0x0120的PID是VIDEO數(shù)據(jù),那么表示包號(hào)碼是0x0120的所有包都是Video數(shù)?據(jù),其他依此類(lèi)推.
什么是PAT?
??????PAT是Program?Association?Table的簡(jiǎn)稱(chēng),即”節(jié)目關(guān)聯(lián)表”.PAT屬于DVB系統(tǒng)流中的一個(gè)包,包號(hào)碼(PID)是0x00.PAT表描述了DVB系統(tǒng)流中包含什么樣的PID,主要是描述當(dāng)前流的NIT表格的PID號(hào)碼是多少,當(dāng)前流中有多少個(gè)不同類(lèi)型PMT表,每個(gè)PMT表對(duì)應(yīng)的頻道號(hào)等信息.
什么是PMT?
??????PMT是Program?Map?Table的簡(jiǎn)稱(chēng),即”節(jié)目影射表”.PMT的PID?是服務(wù)器自由定義的(但不會(huì)和系統(tǒng)保留的PID沖突).這個(gè)PID是在PAT表中描述的,比如,如果在PAT表中有0x100項(xiàng)的內(nèi)容,那么說(shuō)明所有?PID是0x100的包都是PMT表.不同的頻道有不同的PMT,也就是說(shuō),一個(gè)不同的PMT代表的是一個(gè)不同頻道.PMT表格和PAT表格配合在一起,?就可以檢測(cè)出DVB流中所有存在節(jié)目的所有PID,因此,數(shù)字電視搜臺(tái)就是依靠這兩個(gè)表格數(shù)據(jù)完成的.
什么是CAT?
??????CAT是Conditional?Access?Table的簡(jiǎn)稱(chēng),即”條件訪(fǎng)問(wèn)表”,PID是0x01.CAT攜帶的是服務(wù)器的私有信息(CA系統(tǒng)就需要使用該表格實(shí)現(xiàn)節(jié)目的解密).
什么是SDT?
??????SDT是Service?Description?Table的簡(jiǎn)稱(chēng),即”服務(wù)器描述表”,PID是0x11.SDT攜帶的是電視臺(tái)名稱(chēng)和電視節(jié)目名稱(chēng).DVB接收系統(tǒng)接收SDT表中的節(jié)目信息,實(shí)現(xiàn)比較友好的界面顯示和操作.
什么是NIT和EIT?
??????NIT是Network?Information?Table的簡(jiǎn)稱(chēng),即”網(wǎng)絡(luò)信息表”.
????????EIT是Event?Information?Table的簡(jiǎn)稱(chēng),即”環(huán)境信息表”.
????????NIT可以提供當(dāng)前流的節(jié)目信息,也可以提供和當(dāng)前流有關(guān)聯(lián)的流的節(jié)目信息.
????????EIT提供的是流節(jié)目信息的改變,比如一個(gè)節(jié)目已經(jīng)開(kāi)始,或者已經(jīng)結(jié)束的信息等.
什么是EPG?
??????EPG是Electronic?Programme?Guides的簡(jiǎn)稱(chēng),即”電子節(jié)目指南”.該功能可實(shí)現(xiàn)預(yù)告近段時(shí)間即將播放的節(jié)目?jī)?nèi)容,同時(shí)支持基于內(nèi)容的檢索.
什么是teletext?
??????Teletext就?是我們常說(shuō)的”圖文電視”,當(dāng)然在MPEG-2中,圖文電視已經(jīng)數(shù)字化,也就是說(shuō),圖文信息已經(jīng)做為數(shù)字化信息在TS流中傳播.但最終,數(shù)字化的圖文信息?都將轉(zhuǎn)化為模擬的VBI信息插入到正常的電視信號(hào)中實(shí)現(xiàn)圖文電視的顯示.圖文電視有很多標(biāo)準(zhǔn),比如close?caption,WSS等,歐洲的DVB使?用的teletext標(biāo)準(zhǔn)是ITU-R?System?B?Teletext規(guī)格.該規(guī)格支持歐洲多種語(yǔ)言,支持簡(jiǎn)單圖象和文本的混合顯示.
?????????????????????????????第二章?DVB系統(tǒng)的構(gòu)成?
[本文不詳細(xì)描述DVB系統(tǒng)的硬件構(gòu)成,只是根據(jù)ISO13818中的描述,詳細(xì)解釋TS碼流的格式和解復(fù)用原理.(夠了,夠了?呵呵)]
DVB的分類(lèi)
DVB根據(jù)應(yīng)用的不同,主要分為DVB-S,DVB-C,DVB-T,DVB-H等多種規(guī)格.不同的規(guī)格基本原理都是相同的,不同的主要是調(diào)制方式不同:
?DVB-S,S是Satelite的首字母,應(yīng)用于數(shù)字電視衛(wèi)星廣播,調(diào)制方式是QPSK.
?DVB-C,C是Cable的首字母,應(yīng)用于城市有線(xiàn)廣播.調(diào)制方式是QAM所有格式:?16QAM,32QAM,64QAM,128QAM,256QAM.
?DVB-T,T是Terrestrial的首字母,應(yīng)用于陸地?zé)o線(xiàn)廣播,調(diào)制方式是QPSK或者16QAM和64QAM.
?DVB-H,H是Handheld的首字母,應(yīng)用于手持無(wú)線(xiàn)廣播,調(diào)制方式和DVB-T相同.
?總?的來(lái)說(shuō),不同的DVB系統(tǒng)只有前端系統(tǒng)是不同的,最終的數(shù)字信息都是相同的,也就是都是采用ISO13818描述的規(guī)格.前端系統(tǒng)主要是指調(diào)制方法和發(fā)射?方法等.因此,這里所敘述的內(nèi)容,全部適用于所有的DVB系統(tǒng),同時(shí)因?yàn)槊绹?guó)的ATSC系統(tǒng)也是在DVB系統(tǒng)上的小量更改和小部分功能增加,因此也適用于?ATSC標(biāo)準(zhǔn).
?基本系統(tǒng)描述如下:
?(1)編碼系統(tǒng):
??假?設(shè)信號(hào)源有6個(gè)節(jié)目,則DVB系統(tǒng)先對(duì)這6個(gè)節(jié)目的所有數(shù)據(jù)(Video,Audio)進(jìn)行壓縮處理,然后經(jīng)過(guò)一個(gè)叫做"復(fù)用"的程序進(jìn)行節(jié)目的復(fù)用?(PID分配,即對(duì)6個(gè)節(jié)目分別分配不同的PID號(hào)碼)形成叫做"PES"的包,然后再經(jīng)過(guò)TS流處理程序,把這些PES包全部封裝成TS碼流格式,最后?把獲得的TS格式的數(shù)字信號(hào)經(jīng)過(guò)調(diào)制(實(shí)現(xiàn)的是頻率的復(fù)用),然后經(jīng)過(guò)D/A轉(zhuǎn)換成模擬信號(hào),再次調(diào)制成高頻信號(hào),經(jīng)傳輸系統(tǒng)發(fā)送出去.
?(2)解碼系統(tǒng)
??接?收系統(tǒng)接收到高頻信號(hào),先轉(zhuǎn)化為中頻信號(hào),然后再經(jīng)過(guò)一個(gè)高速的A/D轉(zhuǎn)換成數(shù)字信號(hào),接著經(jīng)過(guò)一個(gè)反調(diào)制程序,這樣就得到了TS碼流.?TS碼流進(jìn)入一?個(gè)稱(chēng)為"解復(fù)用"的程序,該程序?qū)崿F(xiàn)自動(dòng)分析TS流中的表格信息,讀取所有可用的PID信息等,然后提取一個(gè)用戶(hù)指定的PID(用戶(hù)選擇的節(jié)目),把該節(jié)?目的數(shù)字信號(hào)全部接收而忽略其他不需要的信號(hào),然后Video,Audio信號(hào)分別進(jìn)入不同的解壓縮程序,分別對(duì)Video,Audio信號(hào)進(jìn)行解壓縮和?顯示,如果該節(jié)目包含了Teletext和EPG,也有可能同時(shí)處理Teletext和EPG,并且把處理的結(jié)果和Video信號(hào)一起疊加到屏幕上.
Packet的概念
?(1)TS流是基于Packet的位流格式,每個(gè)包是188字節(jié)或者204字節(jié)(一般是188字節(jié),204字節(jié)的格式僅僅是在188字節(jié)的Packet后部加上16字節(jié)的CRC數(shù)據(jù),其他格式是一樣的),整個(gè)TS流組成如下所示:
???
?
??Packet?1?????Packet?2????......????Packet?n
在實(shí)際使用中,因?yàn)門(mén)S流已經(jīng)內(nèi)部具有很強(qiáng)的錯(cuò)誤處理能力,所以一般使用較多的是188字節(jié)一個(gè)包的格式,204字節(jié)一個(gè)包的格式據(jù)說(shuō)一般在高清節(jié)目中使用較多.
?所有的Packet格式都是統(tǒng)一的,包括一個(gè)Packet?header和Packet?datas.其中Packet?header包含了同步字節(jié)(該字節(jié)固定是0x47,表示這個(gè)包的數(shù)據(jù)開(kāi)始是正確的),該P(yáng)acket的唯一號(hào)碼(即PID)和其他一些信息.格式如下(用C格式表示)
typedef?struct
{
?unsigned?sync_byte:8;/*8?bits的同步字節(jié)*/
?unsigned?transport_error_indicator:1;/*1?bit的錯(cuò)誤指示信息,1表示當(dāng)前Packet至少有1bit的傳輸錯(cuò)誤,0表示所有數(shù)據(jù)都正確*/
?unsigned?payload_unit_start_indicator:1;/*負(fù)載單元開(kāi)始標(biāo)志,請(qǐng)參考ISO13818-1了解該標(biāo)志作用*/
?unsigned?transport_priority:1;/*1?bit的傳輸優(yōu)先級(jí)標(biāo)志,1表示高優(yōu)先級(jí),0表示低優(yōu)先級(jí)*/
?unsigned?PID:13;/*13?bits的Packet?ID號(hào)碼,唯一的號(hào)碼對(duì)應(yīng)不同的包*/
?unsigned?transport_scrambling_control:2;/*2?bits的加密標(biāo)志,00表示沒(méi)有加密,其他表示已被加密*/
?unsigned?adaptation_field_control:2;/*?2?bits的附加區(qū)域控制,請(qǐng)參考ISO13818-1了解該標(biāo)志作用*/
?unsigned?continuity_counter:4;/*4?bits的包遞增計(jì)數(shù)器*/
}PACKET_HEADER;
以上結(jié)構(gòu)剛好占用32?bits,即4個(gè)字節(jié),因此一個(gè)TS流的Packet頭部的4字節(jié)是header信息,分析該header信息就可以知道當(dāng)前Packet的屬性.剩下的184字節(jié)有可能是Video數(shù)據(jù),也有可能是Audio數(shù)據(jù),也有可能是DVB?SI信息,怎?么區(qū)分呢?其實(shí)很簡(jiǎn)單,就是利用header中的PID信息.上一章說(shuō)了PAT是節(jié)目關(guān)聯(lián)表,它的PID是0x0000.這個(gè)PID就是對(duì)應(yīng)這里?header的PID.換句話(huà)就是說(shuō),如果我們發(fā)現(xiàn)一個(gè)Packet的PID等于0x0000,那么說(shuō)明這個(gè)Packet是DVB的PAT表格而不是?Video數(shù)據(jù)或者Audio數(shù)據(jù).
實(shí)?際上,在信號(hào)編碼成TS碼流的時(shí)候,不同節(jié)目的Video,Audio等數(shù)據(jù)都分配了不同的PID.例如,一個(gè)節(jié)目有兩路Video,三路Audio,那?么分配PID的時(shí)候可能是Video?1==0x100,Video?2==0x101,Audio?1==0x102,Audio?2==0x103,?Audio?3==0x104,這樣傳輸?shù)腡S碼流中的PID就可能有以上的PID.因此,如果我們需要在程序中過(guò)濾出第一路Video和第二路?Audio就可以這樣處理了(偽代碼描述):
?void?Process_Packet(unsigned?char*buff)
?{
??int?PID=GETPID(buff);/*從當(dāng)前的188字節(jié)緩沖區(qū)中獲取PID信息*/
??if(PID==0x100)?/*PID等于第一路Video的PID,說(shuō)明當(dāng)前數(shù)據(jù)是Video數(shù)據(jù)*/
??{
???SaveToVideoBuffer(buff+4);/*把header后部的數(shù)據(jù)存到Video緩沖區(qū),待后部處理*/
??}
??else?if(PID==0x103)/*PID等于第二路Audio的PID,說(shuō)明當(dāng)前數(shù)據(jù)是Audio數(shù)據(jù)*/
??{
???SaveToAudioBuffer(buff+4);/*把header后部的數(shù)據(jù)存到Audio緩沖區(qū)*/
??}
??else/*其他PID則丟棄,當(dāng)然如果PID是DVB系統(tǒng)保留的PID如PAT,PMT則必須處理*/
??{
???printf("unknown?PID!\n");
??}???
?}
現(xiàn)?在的問(wèn)題是,編碼的時(shí)候分配好的PID,在解碼的時(shí)候是怎么知道什么PID對(duì)應(yīng)什么數(shù)據(jù)呢?這就是DVB?SI表格的分析與處理了,請(qǐng)參考第三章.這里先?看一個(gè)實(shí)際的TS碼流的例子.這里的數(shù)據(jù)是用UltraEdit用16進(jìn)制格式打開(kāi)TS碼流文件得到的.文件是Taiwan-551.ts.
這?里僅僅截取了3個(gè)Packet的信息,請(qǐng)注意圖中用紅色標(biāo)注的部分,這就是TS流Packet的4個(gè)字節(jié)的頭信息.這個(gè)TS流是采用每個(gè)包共188字節(jié)的?格式,因?yàn)閮蓚€(gè)頭信息的間隔是188個(gè)字節(jié)(第一個(gè)0x47到第二個(gè)0x47的間隔).以后的所有的Packet都將是188字節(jié)的格式,這是?DVB?TS標(biāo)準(zhǔn)規(guī)定的固定大小.那么這三個(gè)包分別包含的是什么數(shù)據(jù),下面我們可以自己分析一下.
?先?看第一個(gè)包,頭信息數(shù)據(jù)是"0x47?0x07?0xe5?0x12",剛才已經(jīng)知道了,header信息都是按位操作的(這就是為什么TS碼流也可以叫?做位流的原因),特別要注意的是定義和傳輸?shù)臅r(shí)候都是MSB?first,也就是說(shuō),先出現(xiàn)的位是數(shù)據(jù)的最高位.先轉(zhuǎn)化成2進(jìn)制格式:
?01000111?00000111?11100101?00010010
請(qǐng)對(duì)照上面的PACKET_HEADER結(jié)構(gòu):
typedef?struct
{
?unsigned?sync_byte:8;
?unsigned?transport_error_indicator:1;
?unsigned?payload_unit_start_indicator:1;
?unsigned?transport_priority:1;
?unsigned?PID:13;
?unsigned?transport_scrambling_control:2;
?unsigned?adaptation_field_control:2;
?unsigned?continuity_counter:4;
}PACKET_HEADER;
那么對(duì)照一下,我們可以發(fā)現(xiàn):
?sync_byte=01000111,就是0x47,這是DVB?TS規(guī)定的同步字節(jié),固定是0x47.
?transport_error_indicator=0,表示當(dāng)前包沒(méi)有發(fā)生傳輸錯(cuò)誤.
?payload_unit_start_indicator=0,含義請(qǐng)參考ISO13818-1標(biāo)準(zhǔn)文檔
?transport_priority=0,表示當(dāng)前包是低優(yōu)先級(jí).
?PID=00111?11100101即0x07e5,這代表是什么呢,暫時(shí)還不知道(實(shí)際上是Video?PID,參考下圖)
?transport_scrambling_control=00,表示節(jié)目沒(méi)有加密
?adaptation_field_control=01即0x01,具體含義請(qǐng)參考ISO13818-1
?continuity_counte=0010即0x02,表示當(dāng)前傳送的相同類(lèi)型的包是第3個(gè)
依此類(lèi)推,再看一下第二個(gè)包"0x47?0x07?0xe5?0x13",2進(jìn)制是01000111?00000111?11100101?00010011
?sync_byte=01000111,就是0x47,這是DVB?TS規(guī)定的同步字節(jié),固定是0x47.
?transport_error_indicator=0,表示當(dāng)前包沒(méi)有發(fā)生傳輸錯(cuò)誤.
?payload_unit_start_indicator=0,含義請(qǐng)參考ISO13818-1標(biāo)準(zhǔn)文檔
?transport_priority=0,表示當(dāng)前包是低優(yōu)先級(jí).
?PID=00111?11100101即0x07e5,這代表是什么呢,暫時(shí)還不知道(實(shí)際上是Video?PID,參考下圖)
?transport_scrambling_control=00,表示節(jié)目沒(méi)有加密
?adaptation_field_control=01即0x01,具體含義請(qǐng)參考ISO13818-1
?continuity_counte=0011即0x03,表示當(dāng)前傳送的相同類(lèi)型的包是第4個(gè)(注意到了吧,以上兩個(gè)包的PID都是0x07e5,所以這里的continuity_counte就遞增一次)
第三個(gè)包是"0x47?0x07?0xf1?0x18",2進(jìn)制是01000111?00000111?11110001?00011000.
?sync_byte=01000111,就是0x47,這是DVB?TS規(guī)定的同步字節(jié),固定是0x47.
?transport_error_indicator=0,表示當(dāng)前包沒(méi)有發(fā)生傳輸錯(cuò)誤.
?payload_unit_start_indicator=0,含義請(qǐng)參考ISO13818-1標(biāo)準(zhǔn)文檔
?transport_priority=0,表示當(dāng)前包是低優(yōu)先級(jí).
?PID=00111?11100101即0x07f1,這代表是什么呢,暫時(shí)還不知道(實(shí)際上是Audio?PID,參考下圖)
?transport_scrambling_control=00,表示節(jié)目沒(méi)有加密
?adaptation_field_control=01即0x01,具體含義請(qǐng)參考ISO13818-1
?continuity_counte=1000即0x08,表示當(dāng)前傳送的相同類(lèi)型的包是第9個(gè)
請(qǐng)看解碼程序<<Seekfor?MPEG-2?decoder>>讀取該文件的結(jié)果:
?
上圖我們可以發(fā)現(xiàn),Taiwan-551.ts有一個(gè)節(jié)目叫"DIMO",它的Video?PID是0x07e5,Audio?PID是0x07e6
還有一個(gè)節(jié)目叫"Service?1",沒(méi)有Video?PID,它的Audio?PID是0x07f1(說(shuō)明是一個(gè)廣播節(jié)目而非電視節(jié)目)
這個(gè)數(shù)據(jù)剛好和我們剛才的分析是吻合的.
但?是我想大家還有疑問(wèn),為什么0x07e5代表Video?PID,0x07e6代表其中一個(gè)Audio?PID呢?這就是剛才提到的,這是TS流在編碼的?時(shí)候就分配好了的.但是,在解碼的時(shí)候是怎么知道0x07e5就代表的是Video而不是Audio呢?這就是第三章的內(nèi)容:DVB?SI/PSI分析和?處理.
?????????????????????????第三章?DVB?SI/PSI分析和處理
SI是Specific?Information的簡(jiǎn)稱(chēng),PSI是program?Specific?Information.該機(jī)制允許DVB傳送各種各樣的訊息,比如節(jié)目名稱(chēng),電視臺(tái)名稱(chēng),各種PID,私有信息,甚至單獨(dú)傳送數(shù)據(jù)實(shí)現(xiàn)數(shù)據(jù)通信等.這些功能的實(shí)現(xiàn)都?xì)w功于SI/PSI.
?在DVB?標(biāo)準(zhǔn)中,定義了一個(gè)標(biāo)準(zhǔn)的PID用來(lái)實(shí)現(xiàn)SI/PSI.這些PID是系統(tǒng)保留的,因此DVB編碼的時(shí)候并不會(huì)用這些PID做為Video?PID或者?Audio?PID或者其他PID.在一個(gè)簡(jiǎn)單的解復(fù)用程序中,只需要提供處理PAT,PMT表格的程序即可實(shí)現(xiàn)解復(fù)用,當(dāng)然如果需要更友好的界面和實(shí)現(xiàn)?更復(fù)雜的功能(如CA)則必須處理其他的SI表.在這里僅僅分析PAT,PMT,SDT表格,其他SI表格的分析,請(qǐng)參考ISO13818-1(MPEG-2系統(tǒng)層標(biāo)準(zhǔn))和EN300468(DVB?SI標(biāo)準(zhǔn))文檔.
?DVB定義的SI保留的PID分別是:
??
上表格的PID就是DVB保留的PID,分配的其他PID一定不會(huì)占用這些PID.解復(fù)用程序需要使用到的表格只有PAT,PMT,SDT,而CA應(yīng)用還需要使用CAT,EPG應(yīng)用還需要使用NIT,EIT,TDT,TOT等表格.所以在需要解復(fù)用的時(shí)候,偽代碼需要這樣寫(xiě):
??void?Process_Packet(unsigned?char*buff)
??{
???int?PID=GETPID(buff);
???if(PID==0x0000)?/*這是PAT表*/
???{
????Process_PAT(buff+4);/*處理PAT表*/
???}
???else?if(PID==......)/*Video?或者Audio*/
???{
???}
???else/*其他不支持的PID*/
???{
????printf("Unknown?PID!");
???}
??}
?所?有的表格都開(kāi)始于Packet中的184字節(jié)的數(shù)據(jù)部分,但有的時(shí)候一個(gè)表格沒(méi)有184字節(jié),這時(shí)在Packet中就可能插入一些無(wú)效信息用來(lái)填充使整個(gè)?Packet依然保持是188字節(jié).也可能用頭信息中的payload_unit_start_indicator標(biāo)志表格有個(gè)偏移位置(當(dāng)?payload_unit_start_indicator=0表示表格數(shù)據(jù)直接從Packet區(qū)的第四個(gè)字節(jié)開(kāi)始,否則表示有一個(gè)偏移量位置開(kāi)始,具體?請(qǐng)參考ISO13818-1,第4字節(jié)到偏移量間的數(shù)據(jù)是系統(tǒng)填充的無(wú)效數(shù)據(jù)).
?下面針對(duì)解復(fù)用程序詳細(xì)分析一下PAT,PMT和SDT三類(lèi)表格的格式.
PAT,?Program?Association?Table,節(jié)目關(guān)聯(lián)表
?PAT表攜帶以下信息:
(1)?TS流ID---?transport_stream_id,該ID標(biāo)志唯一的流ID
(2)?節(jié)目頻道號(hào)--?program_number,該號(hào)碼標(biāo)志TS流中的一個(gè)頻道,該頻道可以包含很多的節(jié)目(即可以包含多個(gè)Video?PID和Audio?PID)
(3)?PMT的PID---?program_map_PID,表示本頻道使用的哪個(gè)PID做為PMT的PID,因?yàn)榭梢杂泻芏嗟念l道,因此DVB規(guī)定PMT的PID可以由用戶(hù)自己定義.
PAT表定義如下:
?
各字段含義如下:
?table_id:8?bits,標(biāo)志本表格的類(lèi)型,應(yīng)該是0x00
?section_syntax_indicator:1?bit,段語(yǔ)法標(biāo)志,應(yīng)該是'1'
?'0':固定的'0',這是為了防止和ISO13818Video流格式中的控制字沖突而設(shè)置的.
?Reserved:保留的2bits,保留位一般都是'0'
?section_length:12bits的段大小,單位是Bytes.
?transport_stream_id:16bits的當(dāng)前流ID,DVB內(nèi)唯一.(事實(shí)上很多都是自定義的TS?ID)
?version_number:5bits版本號(hào)碼,標(biāo)注當(dāng)前節(jié)目的版本.這是個(gè)非常有用的參數(shù),當(dāng)檢測(cè)到這個(gè)字段改變時(shí),說(shuō)明TS流中的節(jié)目已經(jīng)變化了,程序必須重新搜索節(jié)目.
?current_next_indicator:1bit:當(dāng)前還是未來(lái)使用標(biāo)志符,一般情況下為'0'
?section_number:8bits當(dāng)前段號(hào)碼
?last_section_number:8bits最后段號(hào)碼(section_number和last_section_number的功能是當(dāng)PAT內(nèi)容>184字節(jié)時(shí),PAT表會(huì)分成多個(gè)段(sections),解復(fù)用程序必須在全部接收完成后再進(jìn)行PAT的分析)
?從for()開(kāi)始,就是描述了當(dāng)前流中的頻道數(shù)目(N),每一個(gè)頻道對(duì)應(yīng)的PMT?PID是什么.解復(fù)用程序需要和上圖類(lèi)似的循環(huán)來(lái)接收所有的頻道號(hào)碼和對(duì)應(yīng)的PMT?PID,并把這些信息在緩沖區(qū)中保存起來(lái).在后部的處理中需要使用到PMT?PID.
?CRC_32:本段的CRC校驗(yàn)值,一般是會(huì)忽略的.N是一個(gè)變量,計(jì)算方法是N=(section_length-9)/4.
?從以上分析我們可以發(fā)現(xiàn),PAT表主要包含頻道號(hào)碼和每一個(gè)頻道對(duì)應(yīng)的PMT的PID號(hào)碼,這些信息我們?cè)谔幚鞵AT表格的時(shí)候會(huì)保存起來(lái),以后會(huì)使用到這些數(shù)據(jù).例如我們可以定義這樣的數(shù)據(jù)結(jié)構(gòu)保存這些信息:
?typedef?struct
?{
??int?channel_number;/*頻道號(hào)*/
??int?pmt_pid;/*對(duì)應(yīng)channel_number頻道號(hào)的PMT的PID*/
?}PMT_ITEM;
?PMT_ITEM?pmt[64];/*定義最多64個(gè)頻道,這個(gè)結(jié)構(gòu)在分析PAT表格的時(shí)候會(huì)更新*/
PMT,?Program?Map?Table,節(jié)目影射表
?如果一個(gè)TS流中含有多個(gè)頻道,那么就會(huì)包含多個(gè)PID不同的PMT表.檢測(cè)是否PMT的偽代碼如下:
?void?Process_Packet(unsigned?char*buff)
?{
??int?I;
??int?PID=GETPID(buff);
??if(PID==0x0000)/*PAT表格*/
??{
???Process_PAT(buff+4);
??}
??else?if(PID==.....)/*Video?PID或者Audio?PID*/
??{
??}
??else
??{
???/*在這里檢測(cè)PID是否是PMT的PID*/
???for(i=0;i<64;i++)
???{
????if(PID==pmt[i].pmt_pid)/*PID等于在PAT檢測(cè)到的PMT?PID相同*/
????{
?????Process_PMT(buff+4);/*說(shuō)明當(dāng)前Packet是PMT,進(jìn)入處理*/
?????break;
????}?
???}
??}
?}
PMT表中包含的數(shù)據(jù)如下:
(1)?當(dāng)前頻道中包含的所有Video數(shù)據(jù)的PID
(2)?當(dāng)前頻道中包含的所有Audio數(shù)據(jù)的PID
(3)?和當(dāng)前頻道關(guān)聯(lián)在一起的其他數(shù)據(jù)的PID(如數(shù)字廣播,數(shù)據(jù)通訊等使用的PID)
PMT定義如下:
?
各字段含義如下:
?table_id:8bits的ID,應(yīng)該是0x02
?section_syntax_indicator:1bit的段語(yǔ)法標(biāo)志,應(yīng)該是'1'
?'0':固定是'0',如果不是說(shuō)明數(shù)據(jù)有錯(cuò).
?reserved:2bits保留位,應(yīng)該是'00'
?section_length:16bits段長(zhǎng)度,從program_number開(kāi)始,到CRC_32(包含)的字節(jié)總數(shù).
?program_number:16bits的頻道號(hào)碼,表示當(dāng)前的PMT關(guān)聯(lián)到的頻道.換句話(huà)就是說(shuō),當(dāng)前描述的是program_number頻道的信息.
?reserved:2bits保留位,應(yīng)該是'00'
?version_number:版本號(hào)碼,如果PMT內(nèi)容有更新,則version_number會(huì)遞增1通知解復(fù)用程序需要重新接收節(jié)目信息,否則version_number是固定不變的.
?current_next_indicator:當(dāng)前未來(lái)標(biāo)志符,一般是0
?section_number:當(dāng)前段號(hào)碼
?last_section_number:最后段號(hào)碼,含義和PAT中的對(duì)應(yīng)字段相同,請(qǐng)參考PAT部分.
?reserved:3bits保留位,一般是'000'.
?PCR_PID:13bits的PCR?PID,具體請(qǐng)參考ISO13818-1,解復(fù)用程序不使用該參數(shù).
reserved:4bits保留位,一般是'0000'
program_info_length:節(jié)目信息長(zhǎng)度(之后的是N個(gè)描述符結(jié)構(gòu),一般可以忽略掉,這個(gè)字段就代表描述符總的長(zhǎng)度,單位是Bytes)
緊接著就是頻道內(nèi)部包含的節(jié)目類(lèi)型和對(duì)應(yīng)的PID號(hào)碼了.
stream_type:8bits流類(lèi)型,標(biāo)志是Video還是Audio還是其他數(shù)據(jù).
reserved:3?bits保留位.
elementary_PID:13bits對(duì)應(yīng)的數(shù)據(jù)PID號(hào)碼(如果stream_type是Video,那么這個(gè)PID就是Video?PID,如果stream_type標(biāo)志是Audio,那么這個(gè)PID就是Audio?PID)
reserved:4?bits保留位.
ES_info_length:和program_info_length類(lèi)似的信息長(zhǎng)度(其后是N2個(gè)描述符號(hào))
CRC_32:32bits段末尾是本段的CRC校驗(yàn)值,一般忽略.
從以上的分析可以看出,只要我們處理了PMT,那么我們就可以獲取頻道中所有的PID信息,例如當(dāng)前頻道包含多少個(gè)Video,共多少個(gè)Audio,和其他數(shù)據(jù),還能知道每種數(shù)據(jù)對(duì)應(yīng)的PID分別是什么.
這樣如果我們要選擇其中一個(gè)Video和Audio收看,那么只需要把要收看的節(jié)目的Video?PID和Audio?PID保存起來(lái),在處理Packet的時(shí)候進(jìn)行過(guò)濾即可實(shí)現(xiàn).
比較全面實(shí)現(xiàn)解復(fù)用的偽代碼如下:
int?Video_PID=0x07e5,Audio_PID=0x07e6;/*一般是在PMT檢索后由用戶(hù)自己設(shè)置這兩個(gè)全局值*/
void?Process_Packet(unsigned?char*buff)
{
?int?I;
?int?PID=GETPID(buff);/*獲取當(dāng)前Packet的PID*/
?if(PID==0x0000)/*0x0000表示是PAT*/
?{
??Process_PAT(buff+4);
?}
?else?if(PID==Video_PID)/*和Video_PID相等,說(shuō)明當(dāng)前Packet是一個(gè)Video?Packet*/
?{
??SaveToVideoBuffer(buff+4);/*保存到Video緩沖區(qū)*/
?}
?else?if(PID==Audio_PID)/*和Audio_PID相等,說(shuō)明當(dāng)前Packet是一個(gè)Audio?Packet*/
?{
??SaveToAudioBuffer(buff+4);/*保存到Audio緩沖區(qū)*/
?}
?else
{
?for(?i=0;i<64;i++)
?{
??if(PID==pmt[i].pmt_pid)
??{
???Process_PMT(buff+4);
???Break;
??}
?}
}?
?
}
以上偽代碼可以實(shí)現(xiàn)基本的解復(fù)用:檢測(cè)所有的頻道,檢測(cè)所有stream的PID,選擇特定的節(jié)目進(jìn)行播放.只要讀取每個(gè)Packet的188字節(jié)的內(nèi)容,然后每次都調(diào)用Process_Packet()即可實(shí)現(xiàn)簡(jiǎn)單的解復(fù)用.
介紹到這里,我們就可以總結(jié)一下DVB搜臺(tái)的原理了.(好!洗耳恭聽(tīng)!)
??機(jī)?頂盒先調(diào)整高頻頭到一個(gè)固定的頻率(如498MHZ),如果此頻率有數(shù)字信號(hào),則COFDM芯片(如MT352)會(huì)自動(dòng)把TS流數(shù)據(jù)傳送給MPEG-?2?decoder.?MPEG-2?decoder先進(jìn)行數(shù)據(jù)的同步,也就是等待完整的Packet的到來(lái).然后循環(huán)查找是否出現(xiàn)PID==?0x0000的Packet,如果出現(xiàn)了,則馬上進(jìn)入分析PAT的處理,獲取了所有的PMT的PID.接著循環(huán)查找是否出現(xiàn)PMT,如果發(fā)現(xiàn)了,則自動(dòng)進(jìn)?入PMT分析,獲取該頻段所有的頻道數(shù)據(jù)并保存.如果沒(méi)有發(fā)現(xiàn)PAT或者沒(méi)有發(fā)現(xiàn)PMT,說(shuō)明該頻段沒(méi)有信號(hào),進(jìn)入下一個(gè)頻率掃描.
??從以上描述可以看出,機(jī)頂盒搜索頻率是隨機(jī)發(fā)生的,要使每次機(jī)頂盒都能搜索到信號(hào),則要求TS流每隔一段時(shí)間就發(fā)送一次PAT和PMT.事實(shí)上DVB傳輸系統(tǒng)就是這么做的.因此無(wú)論何時(shí)接入終端系統(tǒng),系統(tǒng)都能馬上搜索到節(jié)目并正確解復(fù)用實(shí)現(xiàn)播放.不僅僅如此,其他數(shù)據(jù)也都是交替?zhèn)魉偷?比如第一個(gè)Packet可能是PAT,第二個(gè)Packet可能是PMT,而第三個(gè)Packet可能是Video?1,第四個(gè)Packet可能是Video?2,
只要系統(tǒng)傳輸速度足夠快(就是稱(chēng)之為"碼率"的東東),實(shí)現(xiàn)實(shí)時(shí)播放是沒(méi)有任何問(wèn)題的.
?到這里雖然實(shí)現(xiàn)了解復(fù)用,但可以看出,使用的PID都是枯燥的數(shù)字,如果調(diào)臺(tái)要用戶(hù)自己輸入數(shù)字那可是太麻煩了,而且還容易輸入錯(cuò)誤,操作非常不直觀,即使做成一個(gè)菜單讓用戶(hù)選擇也是非常的呆板.針對(duì)這個(gè)問(wèn)題,DVB系統(tǒng)提出了一個(gè)SDT表格,該表格標(biāo)志一個(gè)節(jié)目的名稱(chēng),并且能和PMT中的PID聯(lián)系起來(lái),這樣用戶(hù)就可以通過(guò)直接選擇節(jié)目名稱(chēng)來(lái)選擇節(jié)目了.
SDT,?Service?description?section,服務(wù)描述段
?SDT可以提供的信息包括:
(1)?該節(jié)目是否在播放中
(2)?該節(jié)目是否被加密
(3)?該節(jié)目的名稱(chēng)
SDT定義如下:
?
各字段定義如下:
?table_id:8bits的ID,可以是0x42,表示描述的是當(dāng)前流的信息,也可以是0x46,表示是其他流的信息(EPG使用此參數(shù))
?section_syntax_indicator:段語(yǔ)法標(biāo)志,一般是'1'
?reserved_future_used:2bits保留未來(lái)使用
?reserved:1bit保留位,防止控制字沖突,一般是'0',也有可能是'1'
?section_length:12bits的段長(zhǎng)度,單位是Bytes,從transport_stream_id開(kāi)始,到CRC_32結(jié)束(包含)
?transport_stream_id:16bits當(dāng)前描述的流ID
?reserved:2bits保留位
?version_number:5bits的版本號(hào)碼,如果數(shù)據(jù)更新則此字段遞增1
?current_next_indicator:當(dāng)前未來(lái)標(biāo)志,一般是'0',表示當(dāng)前馬上使用.
?original_netword_id:16bits的原始網(wǎng)絡(luò)ID號(hào)
?reserved_future_use:8bits保留未來(lái)使用位
?接下來(lái)是N個(gè)節(jié)目信息的循環(huán):
??service_id:16?bits的服務(wù)器ID,實(shí)際上就是PMT段中的program_number.
??reserved_future_used:6bits保留未來(lái)使用位
??EIT_schedule_flag:1bit的EIT信息,1表示當(dāng)前流實(shí)現(xiàn)了該節(jié)目的EIT傳送
??EIT_present_following_flag:1bits的EIT信息,1表示當(dāng)前流實(shí)現(xiàn)了該節(jié)目的EIT傳送
??running_status:3bits的運(yùn)行狀態(tài)信息:1-還未播放?2-幾分鐘后馬上開(kāi)始,3-被暫停播出,4-正在播放,其他---保留
??free_CA_mode:1bits的加密信息,'1'表示該節(jié)目被加密.
??緊?接著的是描述符,一般是Service?descriptor,分析此描述符可以獲取servive_id指定的節(jié)目的節(jié)目名稱(chēng).具體格式請(qǐng)參考?EN300468中的Service?descriptor部分.分析完畢,則節(jié)目名稱(chēng)和節(jié)目號(hào)碼已經(jīng)聯(lián)系起來(lái)了.機(jī)頂盒程序就可以用這些節(jié)目名稱(chēng)代替?PID讓用戶(hù)選擇,從而實(shí)現(xiàn)比較友好的用戶(hù)界面!
?下面參考一下<<Seekfor?MPEG2?decoder>>中的界面和顯示信息.
?
上?圖是<<Seekfor?MPEG2?decoder>>打開(kāi)三個(gè)不同的碼流文件(*.ts)形成的PID信息和節(jié)目名稱(chēng).用戶(hù)?可以通過(guò)切換節(jié)目名稱(chēng)的下拉列表框切換節(jié)目,也可以通過(guò)"視頻流"和"音頻流"下拉列表框切換Video和Audio!這些數(shù)據(jù)都是通過(guò)分析PAT,?PMT和SDT得到的.
?????????????????????????第四章?Teletext原理
歐洲采用的Teletext?標(biāo)準(zhǔn)叫做"ITU-R?System?B?Teletext",標(biāo)準(zhǔn)文檔是EN300472和EN300706.該標(biāo)準(zhǔn)支持以下特性:
(1)?24X40的文本字符顯示,也支持簡(jiǎn)單的圖象信息的顯示.
(2)?支持多頁(yè)碼,應(yīng)用程序可以自由切換到任意選定的頁(yè).
(3)?支持多語(yǔ)言,可以在teletext中指定所使用的語(yǔ)言.
(4)?文本支持自定義背景色,自定義前景色.支持長(zhǎng)度,寬度加倍(double?width,double?height)
(5)?所有數(shù)據(jù)采用了奇偶校驗(yàn)和漢明碼編碼,具有比較強(qiáng)的錯(cuò)誤處理功能.
(6)?格式基本兼容模擬TTX,支持VBI插入teletext數(shù)據(jù).
Teletext數(shù)?據(jù)是在TS流中和Video,Audio數(shù)據(jù)一起傳送的.EN300472規(guī)定采用以下方法識(shí)別teletext數(shù)據(jù)的PID:如果PMT段中的?stream_type==0xbd(private_stream_1),那么這個(gè)數(shù)據(jù)流就是teletext或者subtitle數(shù)據(jù)(統(tǒng)稱(chēng)為VBI?數(shù)據(jù),具體區(qū)分還需要在teletext分析中處理),VBI數(shù)據(jù)開(kāi)始于PES包的數(shù)據(jù)部分.
?Teletext在PES包中的格式如下:
??各字段含義:
??data_identifier:數(shù)據(jù)標(biāo)志符,如果是teletext必須等于0x10~0x1f.
??data_unit_id:用來(lái)標(biāo)志是teletext數(shù)據(jù)還是subtitle數(shù)據(jù).0x02表示是teletext,0x03表示是subtitle.
??data_field()是標(biāo)準(zhǔn)的teletext格式的數(shù)據(jù)包,參考下圖.實(shí)際上,一個(gè)data_field就是teletext的一行數(shù)據(jù).
?data_field()的格式如下:
??各字段含義如下:
??reserved_future_use:2bits保留未來(lái)使用
??field_parity:1bit的奇偶標(biāo)志,'1'表示是偶數(shù)場(chǎng)(下半場(chǎng)),'0'表示奇數(shù)場(chǎng)(上半場(chǎng))
??line_offset:5bits,在VBI插入時(shí)指定的場(chǎng)線(xiàn)數(shù)據(jù).(以上兩個(gè)參數(shù)在使用VBI硬件插入才需要使用)
??framing_code:8bits的幀同步代碼,必須是0xe4.
??magazine_and_packet_address:16bits,指定當(dāng)前傳送的雜志號(hào)碼和包號(hào)碼,采用的是漢明8/4編碼.
其中的包號(hào)碼(Packet?address)實(shí)際上代表的是TTX頁(yè)面的行號(hào)碼(0-24).
??data_block:320bits,40Bytes的數(shù)據(jù)塊,全部采用奇偶校驗(yàn),對(duì)應(yīng)TTX頁(yè)面的40列,范圍是0x00-0x7f(最高位是奇偶校驗(yàn)位).把這部分的數(shù)據(jù)全部提取出來(lái),就可以獲得一個(gè)行的全部數(shù)據(jù)(TTX是24行X40列).
?因此,解teletext的軟件一般采用這樣的流程:
(1)?分析PMT表,獲取代表teletext的PID,標(biāo)注為T(mén)TX_pid;
(2)?在解復(fù)用程序中過(guò)濾PID==TTX_pid的數(shù)據(jù),解出PES的數(shù)據(jù)部分.
(3)?把第二步得到的數(shù)據(jù)部分全部保存到一個(gè)緩沖區(qū),直到所有的數(shù)據(jù)全部緩沖完畢.
(4)?解出packet?address,該數(shù)據(jù)代表當(dāng)前的行號(hào)(0-24).如果是0,則本個(gè)data?block包含的是主頁(yè)面代碼和
子頁(yè)面代碼.如果不是0(1-24),則說(shuō)明data?block是對(duì)應(yīng)頁(yè)的列數(shù)據(jù)(40個(gè)字節(jié)的ASCII),把這些數(shù)據(jù)解出保存到緩沖區(qū).(這里必須和PID過(guò)濾一樣,過(guò)濾主頁(yè)面號(hào)碼和子頁(yè)面號(hào)碼,即沒(méi)有選擇的頁(yè)面忽略掉)
(5)?循環(huán)第(4)步直到所有的列數(shù)據(jù)全部解出.
(6)?把緩沖區(qū)中的24X40的數(shù)據(jù)顯示出來(lái).一般是在RAM中定義一個(gè)unsigned?char?TTX_DATA[24][40]數(shù)組保存.
Teletext是如何支持自定義前景色和背景色等特性的呢?實(shí)際上非常簡(jiǎn)單,就包含在每一行數(shù)據(jù)的40個(gè)字節(jié)中.我們知道可顯示ASCII的范圍是0x20~0x7f,小于0x20的代碼在teletext中做為控制字符(需要在顯示程序中處理),具體規(guī)定如下:
?0x00-0x07:設(shè)置前景色,顏色分別是黑,紅,綠,黃,藍(lán),洋青,洋藍(lán),白(設(shè)置后生效,也就是說(shuō),顯示程序遇到這些代碼,在隨后的顯示中必須改變前景色到對(duì)應(yīng)的顏色)
?0x08:開(kāi)始閃爍功能,設(shè)置后生效.
?0x09:結(jié)束閃爍功能,設(shè)置后生效
?0x0a:BOX結(jié)束,設(shè)置后生效.
?0x0b:BOX開(kāi)始,設(shè)置后生效.
?0x0c:正常象素大小,設(shè)置后生效.
?0x0d:寬度加倍,設(shè)置后生效.
?0x0e:長(zhǎng)度加倍,設(shè)置后生效.
?0x0f:寬度和長(zhǎng)度都加倍,設(shè)置后生效.
?0x10-0x17:設(shè)置馬塞克顏色,顏色代碼同0x00-0x07,設(shè)置后生效.
?0x18:以后固定是顯示空,直到遇到其他顏色屬性.設(shè)置后生效.
?0x19-0x1b:請(qǐng)參考EN300706標(biāo)準(zhǔn).
?0x1c:設(shè)置黑背景色.設(shè)置后馬上生效.
?0x1d:設(shè)置新的背景色,下一個(gè)字符指定背景顏色,代碼同0x0-0x07.
?0x1e:保持馬塞克功能,設(shè)置后生效.
?0x1f:取消馬塞克功能,設(shè)置后生效.
以?上所描述的控制字符作用范圍僅僅是一行.也就是說(shuō)如果遇到新行,則設(shè)置全部恢復(fù)默認(rèn)設(shè)置,EBU?teletext的默認(rèn)設(shè)置是:黑背景色,白前景色,無(wú)?閃爍,無(wú)BOX,正常的象素大小,無(wú)任何馬塞克功能.因此,teletext的顯示程序必須一個(gè)字符一個(gè)字符的分析數(shù)據(jù),直到所有的數(shù)據(jù)全部顯示完畢.
?實(shí)際上,EBU?teletext使用了4個(gè)規(guī)格,包括V1.0,V1.5,V2.5,V3.5.V1.0只支持ASCII文本和基本屬性,其他規(guī)格還支持簡(jiǎn)單圖象和Objects,請(qǐng)參考EN300706獲取更多的信息.
?EBU?teletext格式使用了漢明編碼方法,具體編碼格式請(qǐng)參考EN300706.
?下面可以參考一下<<Seekfor?MPEG-2?decoder>>中處理teletext的效果:
(1)?菜單上的數(shù)字是主頁(yè)面,下一級(jí)菜單是子頁(yè)面:
(2)teletext文字疊加在Video上的透明顯示效果:
(3)teletext文字疊加在Video上不透明的顯示效果:
?(4)切換到其他頁(yè)面的顯示效果:
????????????????????????????第五章??EPG原理
EPG就?是"電子節(jié)目指南",相當(dāng)于一個(gè)節(jié)目菜單的功能.在一個(gè)TS流中,可以提供當(dāng)前流的所有信息,如頻率,調(diào)制方式,頻道號(hào),所有節(jié)目的PID,名稱(chēng)等信息,?也可以根據(jù)需要提供其他相關(guān)聯(lián)的TS流(例如同一電視臺(tái)同步播放的其他頻率的節(jié)目信息)的信息.解碼器接收這些信息,形成一個(gè)固定格式的菜單讓用戶(hù)選擇需?要收看的頻道或節(jié)目,這就是"EPG".不僅如此,EPG還可以對(duì)節(jié)目進(jìn)行分類(lèi),比如節(jié)目可以是電影,也可以是新聞,這樣,把屬于電影的節(jié)目歸在一起,把?屬于新聞的節(jié)目歸在一起,這樣對(duì)用戶(hù)來(lái)說(shuō)檢索節(jié)目就變得非常的方便.
?EPG的實(shí)現(xiàn)也歸功于DVB的SI信息.和EPG功能相關(guān)的SI有NIT(網(wǎng)絡(luò)信息表),EIT(環(huán)境信息表),SDT(服務(wù)描述表),BAT(群組關(guān)聯(lián)表),TDT(日期時(shí)間表)和TOT(時(shí)間偏移表).下面簡(jiǎn)單分析這些表所攜帶的信息.
NIT,Network?Information?Table,網(wǎng)絡(luò)信息表
?NIT提供如網(wǎng)絡(luò)名稱(chēng)(相當(dāng)于電視臺(tái)名稱(chēng)),傳輸參數(shù)(如頻率,調(diào)制方式等).這個(gè)表格一般是解碼器內(nèi)部使用的數(shù)據(jù),當(dāng)然也可以做為EPG的一個(gè)顯示數(shù)據(jù)提供給用戶(hù)做為參考.
?NIT格式如下:
?
?各字段含義如下:
??table_id:8?bits標(biāo)志,應(yīng)該是0x40或0x41.當(dāng)table_id==0x40時(shí)候,這個(gè)NIT描述的是當(dāng)前流的網(wǎng)絡(luò)信息,否則描述的是其他流的網(wǎng)絡(luò)信息(一般是電視臺(tái)同步播放的其他TS流信息).
??section_syntax_incicator:1bit的段語(yǔ)法標(biāo)志,應(yīng)該是'1'
??reserved_future_use:1bit保留未來(lái)使用位,一般是'0'
??reserved:2bits保留位,一般是'00',這是防止控制字沖突而設(shè)置的.
??section_length:12bits段長(zhǎng)度,從network_id開(kāi)始,到CRC_32(包含)結(jié)束的字節(jié)總數(shù).
??network_id:16bits的網(wǎng)絡(luò)ID號(hào)碼,DVB內(nèi)唯一的一個(gè)號(hào)碼,標(biāo)志不同的電視臺(tái).
??Reserved:2bits保留意見(jiàn)位.
??version_number:5bits的版本號(hào)碼,當(dāng)NIT內(nèi)容有任何改變時(shí),該字段會(huì)遞增1(提醒解碼器更新NIT信息).
??current_next_indicator:1bit的當(dāng)前下次使用標(biāo)志,一般是'0'
??section_number:8bits的當(dāng)前段號(hào)碼.
??last_section_number:8bits的當(dāng)前段號(hào)碼.
??reserved_future_use:4bits保留未來(lái)使用,現(xiàn)在應(yīng)該是'0000'.
??network_descriptors_length:12bits網(wǎng)絡(luò)描述符長(zhǎng)度,單位是字節(jié).
??descriptor():N個(gè)不同的描述符結(jié)構(gòu),一般是網(wǎng)絡(luò)名稱(chēng)描述符,解碼器在此獲取當(dāng)前的網(wǎng)絡(luò)名稱(chēng)(即電視臺(tái)名稱(chēng))
??reserved_future_use:4bits未來(lái)保留位,當(dāng)前應(yīng)是'0000'.
??transport_stream_loop_length:12bits的字節(jié)總數(shù),就是隨后的循環(huán)的字節(jié)總數(shù).
??transport_stream_id:16bits的網(wǎng)絡(luò)ID
??original_network_id:16bits原始網(wǎng)絡(luò)ID.如果original_network_id==?transport_stream_id說(shuō)明該TS流是直播節(jié)目,否則說(shuō)明該TS流是轉(zhuǎn)播節(jié)目.
??transport_descriptors_length:12bits的描述符長(zhǎng)度,隨后的N個(gè)描述符占用的字節(jié)總數(shù).
??descriptor(),N個(gè)描述符,可以有多個(gè)連續(xù)但不相同的描述符號(hào),如網(wǎng)絡(luò)名稱(chēng)描述符,傳輸系統(tǒng)參數(shù)描述符,解碼器分析這些描述符獲取網(wǎng)絡(luò)的不同信息.
??CRC_32:整個(gè)段的CRC校驗(yàn)值,一般可以忽略.
EIT,?Event?Information?Table,環(huán)境信息表
?環(huán)?境信息表提供如下信息:節(jié)目段的標(biāo)識(shí)號(hào)、起始時(shí)間、節(jié)目長(zhǎng)度、播放狀態(tài)、是否加密;指向特定信息的鏈接信息;節(jié)目段多語(yǔ)種的簡(jiǎn)短介紹;節(jié)目段的詳細(xì)介紹;?兩段同樣節(jié)目段的時(shí)間偏移;基本碼流類(lèi)型,如視頻的幅型比、伴音的類(lèi)型、字幕的類(lèi)型等;使用的加密系統(tǒng);節(jié)目類(lèi)型,如電影/戲劇、新聞、綜藝、體育、少?兒、音樂(lè)、藝術(shù)、社會(huì)政治、文教等;節(jié)目限定年齡的級(jí)別;給出實(shí)現(xiàn)交互式回傳信道的電話(huà)號(hào)碼;為滿(mǎn)足各節(jié)目段的碼率而提供的緩存大小信息及私有數(shù)據(jù)等.
?環(huán)境信息表中提供了類(lèi)似于廣播電視報(bào)所提供的節(jié)目表的內(nèi)容,在SI中,只有EIT才有可能被加密。根據(jù)EIT及其它表所提供的信息,可以出五花八門(mén)的電子節(jié)目指南。-如:按節(jié)目類(lèi)型檢索、按時(shí)間檢索及對(duì)某類(lèi)節(jié)目的鎖定等.
?EIT表格定義如下:
??
?各字段定義如下:
??table_id:8bits的表ID,如果當(dāng)前表是重現(xiàn)/跟隨信息,則table_id是0x4e(當(dāng)前流)或0x4f(其他流),否則如果是時(shí)間段信息,則table_id是0x50~0x5f(當(dāng)前流)或者0x60~0x6f(其他流).
??section_syntax_indicator:1bit的段語(yǔ)發(fā)標(biāo)志符,應(yīng)該是'1'
??reserved_future_use:1bit未來(lái)保留位,應(yīng)該是'0'
??reserved:2bits的保留位,應(yīng)該是'00'
??section_length:12bits的段長(zhǎng)度,單位是bytes,從service_id開(kāi)始到CRC_32(含)結(jié)束.
??service_id:16bits的頻道號(hào),同PMT中的program_number;
??reserved:同上.
??version_number:5bitsEIT版本號(hào)碼.內(nèi)容有更新則此字段遞增1,表示需要更新EIT信息.
??current_next_indicator:1bit的當(dāng)前下次應(yīng)用標(biāo)志,一般是'0'
??section_number:8bits當(dāng)前段號(hào)碼.
??last_section_number:8bits最后段號(hào)碼.
??transport_stream_id:16bits的TS流ID.
??original_network_id:16bits的原始網(wǎng)絡(luò)ID.
??segment_last_section_number:未知功能.
??last_table_id:未知功能.
?隨后是N個(gè)Event的信息:
??event_id:16bits環(huán)境ID,流唯一數(shù)字.
??start_time:40bits的開(kāi)始時(shí)間.UTC格式.
??duration:24bits的持續(xù)時(shí)間(節(jié)目長(zhǎng)度),BCD格式.
??running_status:2bits運(yùn)行狀態(tài),定義和PMT中的running_status相同.
??free_CA_mode:1bit的是否加密標(biāo)志,'0'表示沒(méi)有加密.
?descriptors_loop_length:12bits描述符總長(zhǎng)度,單位Bytes.
??descriptors():N個(gè)描述符列表.
TDT和TOT提供的是系統(tǒng)時(shí)間信息,結(jié)構(gòu)較簡(jiǎn)單,請(qǐng)參考EN300468文檔!
RST,Running?Status?Table,播放狀態(tài)表
?RST提供的是TS流中的節(jié)目播放狀態(tài)(是否正在播放等)的信息.
?RST格式定義如下:
?
?各字段含義如下:
??table_id:8bits表ID標(biāo)志,應(yīng)該是0x71.
??section_syntax_indicator:1bit的段語(yǔ)法標(biāo)志,應(yīng)該是'1'.
??reserved_future_user:1bit未來(lái)保留位
??reserve:2bits保留位.
??section_length:12bits段長(zhǎng)度,單位Bytes.實(shí)際就是隨后的for()循環(huán)中所有的字節(jié)數(shù)目.
??transport_stream_id:16bits的TS?ID,DVB內(nèi)唯一.
??original_network_id:16bits原始網(wǎng)絡(luò)ID.
??serviced_id:16bits節(jié)目號(hào),和PMT內(nèi)的program_number相同含義.
??event_id:16bits環(huán)境ID,同EIT定義.
??reserved_future_use:5bits未來(lái)保留位.
??running_status:3bits運(yùn)行狀態(tài).0x01表示不在播放中,0x02表示即將播放,0x03表示播放被暫停,0x04表示正在正常播放,其他屬于未定義狀態(tài).
?實(shí)?際上,以上標(biāo)準(zhǔn)SI表提供出的EPG信息是比較少的,實(shí)際上有用的EPG信息都是包含在描述符中,就是Table結(jié)構(gòu)內(nèi)部的descriptor()字段?中.DVB系統(tǒng)提供了很多標(biāo)準(zhǔn)的descriptor(),不同的描述符展示不同的信息.具體的描述符結(jié)構(gòu)請(qǐng)參考EN300468.
?標(biāo)準(zhǔn)描述符簡(jiǎn)單介紹如下:
(1)?Bouquet?name?descriptor:組名稱(chēng)描述符,提供一個(gè)組的名稱(chēng)符號(hào).
(2)?CA?identifier?descriptor:CA系統(tǒng)控制字描述符,提供CA的加密字.
(3)?Component?descriptor:組件描述符號(hào),提供系統(tǒng)內(nèi)所有組件的名稱(chēng)等信息.
(4)?Content?descriptor:內(nèi)容描述符號(hào),提供系統(tǒng)節(jié)目的內(nèi)容信息(實(shí)現(xiàn)按內(nèi)容檢索功能)
(5)?Country?availability?descriptor:有效國(guó)家列表描述符號(hào),提供該服務(wù)允許使用的國(guó)家名稱(chēng)列表.
(6)?Data?broadcast?descriptor:數(shù)據(jù)廣播描述符,提供數(shù)據(jù)廣播信息.
(7)?Data?broadcast?id?descriptor:數(shù)據(jù)廣播標(biāo)志描述符號(hào).
(8)?Cable?delivery?system?descriptor:DVB-C傳輸系統(tǒng)參數(shù)描述符,提供DVB-C參數(shù)信息.
(9)?Satellite?delivery?system?descriptor:DVB-S傳輸系統(tǒng)參數(shù)描述符,提供DVB-S參數(shù)信息.
(10)?Terrestrial?delivery?system?descriptor:DVB-T傳輸系統(tǒng)參數(shù)描述符,提供DVB-T參數(shù)信息.
(11)?Extended?event?descriptor:擴(kuò)展環(huán)境描述符號(hào).
(12)?Frequency?list?descriptor:頻率列表描述符,提供所有的頻率信息.
(13)?Linkage?descriptor:可連接描述符.
(14)?Local?time?offset?descriptor:當(dāng)前時(shí)間信息.
(15)?Mosaic?descriptor:馬塞克描述符.
(16)?Multilingual?bouquet?name?descriptor:多語(yǔ)言代碼組名稱(chēng)描述符.
(17)?Multilingual?component?descriptor:多語(yǔ)言組件描述符號(hào).
(18)?Multilingual?network?name?descriptor:多語(yǔ)言網(wǎng)絡(luò)名稱(chēng)描述符.
(19)?Multilingual?service?name?descriptor:多語(yǔ)言服務(wù)名稱(chēng)描述符.
(20)?NVOD?reference?descriptor:VOD點(diǎn)播參考描述符.
(21)?Network?name?descriptor:網(wǎng)絡(luò)名稱(chēng)描述符.
(22)?Private?data?specifier?descriptor:私有數(shù)據(jù)描述符.
(23)?Short?smoothing?buffer?descriptor:傳輸速率描述符.
(24)?Service?descriptor:服務(wù)器描述符,提供電視臺(tái)名稱(chēng)和電視節(jié)目名稱(chēng)等信息.
(25)?Service?list?descriptor:節(jié)目列表描述符,提供所有的節(jié)目頻道號(hào)和節(jié)目類(lèi)型.
(26)?Service?move?descriptor:節(jié)目刪除描述符.
(27)?Short?event?descriptor:短消息描述符.
(28)?Stream?identifier?descriptor:流標(biāo)志描述符.
(29)?Stuffing?descriptor:填充數(shù)據(jù)描述符.
(30)?Subtitling?descriptor:子字幕描述符.
(31)?Telephone?descriptor:電話(huà)號(hào)碼描述符.
(32)?Teletext?descriptor:圖文信息描述符.
(33)?Time?shifted?event?descriptor:時(shí)間消逝環(huán)境描述符.
以?上描述符結(jié)構(gòu)定義在EN300468,所有的描述符都插入到不同的SI表中,因此描述符的分析應(yīng)該結(jié)合不同的SI表來(lái)進(jìn)行.但是這種插入又是有規(guī)律的,如?NIT表只可能插入Terrestrial?delivery?system?descriptor之類(lèi)或者?Network?name?descriptor,絕對(duì)不可能插入Service?descriptor!具體插入的什么描述符,只能通過(guò)描述符的第一個(gè)?字節(jié)descriptor_tag來(lái)判斷.
?因?為EPG的實(shí)現(xiàn)是非常靈活的,不同的應(yīng)用需要不同的EPG功能,因此在<<Seekfor?MPEG-2?decoder>>中?沒(méi)有加入EPG功能.然而實(shí)際上,EPG功能比較容易實(shí)現(xiàn),但因?yàn)镋PG錯(cuò)綜復(fù)雜的SI,寫(xiě)EPG功能之前還是需要仔細(xì)理清思路才能實(shí)現(xiàn)的.?
二?DVB碼流中業(yè)務(wù)信息與電子節(jié)目指南
怎樣在眾多的數(shù)字電視節(jié)目中快速地找到用戶(hù)所需要的節(jié)目,是數(shù)字電視應(yīng)用所要解決的問(wèn)題。在DVB接收機(jī)中通常都使用電子節(jié)目指南(EPG)這一工具來(lái)達(dá)到快速查找節(jié)目的目的,生成EPG的數(shù)據(jù)來(lái)源于DVB碼流中的有業(yè)務(wù)信息SI信息。
在數(shù)字電視中,所有視頻、音頻、文字、圖片等經(jīng)數(shù)字化處理后都變成了數(shù)據(jù),并按照MPEG-2的標(biāo)準(zhǔn)打包,形成固定長(zhǎng)度(188個(gè)字節(jié))的傳送包,然后將這些數(shù)據(jù)包進(jìn)行復(fù)用,形成傳送碼流(TS),通常一個(gè)頻道對(duì)應(yīng)一個(gè)TS流,一個(gè)頻道的TS流由多個(gè)節(jié)目及業(yè)務(wù)組成。在TS流中如果沒(méi)有引導(dǎo)信息,數(shù)字電視的終端設(shè)備將無(wú)法找到需要的碼流,所以在MPEG-2中,專(zhuān)門(mén)定義了PSI信息,其作用是自動(dòng)設(shè)置和引導(dǎo)接收機(jī)進(jìn)行解碼。PSI信息在復(fù)用時(shí)通過(guò)復(fù)用器插入到TS流中,并用特定的PID(包標(biāo)識(shí)符)進(jìn)行標(biāo)識(shí)。
在MPEG-2標(biāo)準(zhǔn)中定義的節(jié)目信息PSI,是對(duì)單一碼流的描述,由于系統(tǒng)通常存在多個(gè)碼流,為了使使用者能在多碼流中快速地找出自己需要的業(yè)務(wù),在DVB對(duì)MPEG-2的PSI進(jìn)行了擴(kuò)充,在PSI四個(gè)表的基礎(chǔ)上再增加了九個(gè)表,形成SI。SI是對(duì)整個(gè)系統(tǒng)所有碼流的描述,描述系統(tǒng)傳輸內(nèi)容、廣播數(shù)據(jù)流的編排和時(shí)間表等的數(shù)據(jù),它包括PSI信息。
一、節(jié)目信息(PSI)
PSI由節(jié)目關(guān)聯(lián)表(PAT)、條件接收表(CAT)、節(jié)目映射表(PMT)和網(wǎng)絡(luò)信息表(NIT)組成,這些表插入到TS中傳輸。PSI指定了如何從一個(gè)攜帶多個(gè)節(jié)目的傳送流中正確找到特定的節(jié)目,當(dāng)接收機(jī)要接收某一個(gè)指定節(jié)目時(shí),它首先從節(jié)目關(guān)聯(lián)表中取得這個(gè)節(jié)目的節(jié)目映射表的PID值,然后從TS中找出與此PID值相對(duì)應(yīng)的節(jié)目映射表,從這個(gè)節(jié)目映射表中獲得構(gòu)成這個(gè)節(jié)目的基本碼流的PID值,根據(jù)這個(gè)PID值濾出相應(yīng)的視頻、音頻和數(shù)據(jù)等基本碼流,解碼后復(fù)原為原始信號(hào),刪除含有其余PID的傳送包。MPEG-2傳送流的結(jié)構(gòu)如圖1所示。
圖2是PAT與PMT的關(guān)系及結(jié)構(gòu)圖。
圖3是CAT與NIT的結(jié)構(gòu)圖。
從上面的幾幅圖中可知,要保證傳送流能正常接收,在該流中至少有一個(gè)完整有效的PAT。CAT描述了節(jié)目的加密方式,它包含了節(jié)目的EMM識(shí)別PID,只有授權(quán)的解碼器才能由CAT收到密鑰,解碼出相應(yīng)的數(shù)據(jù)流。NIT包含節(jié)目的頻道調(diào)諧參數(shù)、頻率、符號(hào)率等物理傳輸網(wǎng)信息,這些信息使得接收機(jī)可以按照用戶(hù)的選擇以很少的延時(shí)或無(wú)延時(shí)地改變頻道、調(diào)諧參數(shù),正確地解碼出TS。由于PSI數(shù)據(jù)的完整性十分重要,因此在每個(gè)PSI段中均需要加校驗(yàn)碼。
二、業(yè)務(wù)信息(SI)
PSI數(shù)據(jù)只提供了單個(gè)TS的信息,使接收機(jī)能對(duì)單個(gè)TS中的不同節(jié)目流進(jìn)行解碼,但它不能提供多個(gè)TS的有關(guān)業(yè)務(wù)和節(jié)目的類(lèi)型、什么節(jié)目、什么時(shí)間開(kāi)始等信息,因此DVB系統(tǒng)對(duì)PSI進(jìn)行了擴(kuò)展,提供了其它不同信息種類(lèi)的多種表格,形成SI。在實(shí)用中,我們將SI所提供的數(shù)據(jù)通過(guò)有序地組織起來(lái),生成類(lèi)似節(jié)目報(bào)的形式,它能在電視機(jī)上即時(shí)瀏覽,這樣將大大方便用戶(hù)的使用,這就是電子節(jié)目指南EPG。
SI定義了不9個(gè)表
1、業(yè)務(wù)群關(guān)聯(lián)表(BAT):它提供了業(yè)務(wù)群相關(guān)的信息,給出了業(yè)務(wù)群的名稱(chēng)以及每個(gè)業(yè)務(wù)群中的業(yè)務(wù)列表。
2、業(yè)務(wù)描述表(SDT):它包含了描述系統(tǒng)中業(yè)務(wù)的數(shù)據(jù),例如業(yè)務(wù)名稱(chēng),起始時(shí)間、持續(xù)時(shí)間等。
3、事件信息表(EIT):它包含了與事件或節(jié)目相關(guān)的數(shù)據(jù),EIT是生成EPG的主要表。
4、運(yùn)行狀態(tài)表(RST):它給出了事件的狀態(tài)(運(yùn)行/非運(yùn)行),運(yùn)行狀態(tài)表更新這些信息,允許自動(dòng)適應(yīng)切換事件。
5、時(shí)間和日期表(TDT):它給出了與當(dāng)前的時(shí)間和日期相關(guān)的信息,由于這些信息更新頻繁,所以需要單獨(dú)使用一個(gè)表。
6、時(shí)間偏移表(TOT):它給出了與當(dāng)前時(shí)間、日期和本地時(shí)間偏移相關(guān)的信息,由于這些信息更新頻繁,所以需要單獨(dú)使用一個(gè)表。
7、填充表(ST):它用于使現(xiàn)有的段無(wú)效,例如在一個(gè)傳輸系統(tǒng)的邊界。
8、選擇信息表(SIT):它僅用于碼流片段中,如記錄一段碼流,它包含了描述該碼流片段業(yè)務(wù)信息間段的地方。
9、間斷信息表(DIT):它僅用于碼流片段,如記錄的一段碼流中,它將插入到碼流片段業(yè)務(wù)信息間斷的地方。
這里值得一提的是,NIT在MPEG-2標(biāo)準(zhǔn)中未予以規(guī)定,而是由SI規(guī)定。
以上這些表在傳送流中以數(shù)據(jù)段的形式傳送,不同的信息表在傳送流中通過(guò)賦予不同的特定的PID來(lái)進(jìn)行區(qū)分(如表1所示)。而具有相同PID的不同信息表則進(jìn)行由表標(biāo)識(shí)符TABLE?ID來(lái)區(qū)分,在接收端通過(guò)查這些特定的PID來(lái)找到它們。這里說(shuō)明一下,TS中有兩種標(biāo)識(shí)符,一種是包標(biāo)識(shí)符,一種是表標(biāo)識(shí)符。例如SI中的SDT的每一個(gè)表都對(duì)一個(gè)特定TS中的業(yè)務(wù)進(jìn)行描述,這些業(yè)務(wù)可能是這個(gè)表所存在的TS的一部分,也可能是其它TS的一部分,這些SDT的PID都是相同的,這時(shí)候我們就可以通過(guò)不同的表標(biāo)識(shí)符來(lái)區(qū)分它們,從而識(shí)別出那一個(gè)表所描述的業(yè)務(wù)是那一個(gè)TS的。
表1
| 表 | PID值 |
| PAT | 0X0000 |
| CAT | 0X0001 |
| PMT | 0X0002 |
| NIT | 0X0010 |
| SDT、BAT | 0X0011 |
| EIT | 0X0012 |
| TDT、TOT | 0X0014 |
?
SI中的各表在實(shí)際使用中并不都需要傳送,其中NIT、SDT、EIT、TDT是必需傳送的,其它表則按照需要進(jìn)行選擇傳送。
三、電子節(jié)目指南(EPG)
在DVB系統(tǒng)中,EPG可使用戶(hù)方便、快捷、直觀地找到需要的節(jié)目,根據(jù)《數(shù)字電視廣播業(yè)務(wù)規(guī)范》對(duì)EPG的要求,EPG應(yīng)提供節(jié)目單和當(dāng)前節(jié)目播放等基本功能,還提供節(jié)目附加信息、節(jié)目分類(lèi)、節(jié)目預(yù)訂和家長(zhǎng)分級(jí)控制等功能。EPG的這些功能均可通過(guò)SI來(lái)實(shí)現(xiàn),也就是說(shuō)SI是實(shí)現(xiàn)EPG功能的前提。在SI中,最重要的是NIT、EIT和SDT,利用這3個(gè)表中的數(shù)據(jù)就可以構(gòu)成功能不同的EPG。
NIT的作用在上面已經(jīng)說(shuō)過(guò),SDT的作用是提供對(duì)每個(gè)業(yè)務(wù)的描述,使用戶(hù)能方便地了解每個(gè)業(yè)務(wù)的內(nèi)容。對(duì)于每一個(gè)TS都有一個(gè)SDT與之對(duì)應(yīng)。EIT實(shí)際上是一個(gè)節(jié)目表,對(duì)于每一個(gè)節(jié)目都存在一個(gè)獨(dú)立的EIT。
EPG包含兩個(gè)部分:一是播出前端的EPG編輯器;二是用戶(hù)端接收機(jī)相應(yīng)的控制軟件,兩部分一一對(duì)應(yīng),每個(gè)接收機(jī)的相關(guān)部分必須要按照前端定義的數(shù)據(jù)結(jié)構(gòu)來(lái)定制,從而接收顯示前端送出的業(yè)務(wù)信息。
SI一般在復(fù)用器合成TS時(shí)插入,有3種插入方式。
1、??將各表數(shù)據(jù)通過(guò)復(fù)用器廠(chǎng)家提供的應(yīng)用軟件接口由復(fù)用器插入到節(jié)目碼流中。
2、??將各表數(shù)據(jù)按MPEG-2標(biāo)準(zhǔn)打包,通過(guò)碼流播出卡輸出,再將之送入復(fù)用器的異步串行口與節(jié)目碼流復(fù)用。
3、??通過(guò)條件接收加擾器提供的接口插入,因此可通過(guò)局域網(wǎng)將數(shù)據(jù)表送入加擾器,由加擾器向碼流中插入SI。
四、接收機(jī)與EPG
DVB接收機(jī)又稱(chēng)機(jī)頂盒,它是接收DVB節(jié)?目的用戶(hù)端設(shè)備。打開(kāi)接收機(jī),通常都有一個(gè)開(kāi)機(jī)畫(huà)面,這個(gè)畫(huà)面實(shí)際上是一個(gè)存儲(chǔ)于機(jī)頂盒內(nèi)的一個(gè)菜單選擇頁(yè)面,它是由稱(chēng)為裝載器的控制軟件生成的用戶(hù)操作?界面,用戶(hù)可通過(guò)遙控器進(jìn)行選擇操作。每個(gè)有線(xiàn)電視營(yíng)運(yùn)商所開(kāi)發(fā)的這個(gè)界面都有所不同,但功能是一樣的,其主要內(nèi)容是營(yíng)運(yùn)商提供業(yè)務(wù)(節(jié)目)的分類(lèi)和系統(tǒng)?設(shè)置及一些輔助功能。這些內(nèi)容構(gòu)成了頁(yè)面的最上層主菜單,其下一層菜單則通常由SI生成的EPG所構(gòu)成。
主菜單中的系統(tǒng)設(shè)置是為引導(dǎo)接收機(jī)快速準(zhǔn)確地接收到DVB節(jié)目而設(shè)的,其有最基本的有三個(gè)操作:信息檢測(cè)、節(jié)目搜索、軟件下載。
1、信息檢測(cè):它主要顯示目前DVB系統(tǒng)的主頻及相關(guān)參數(shù),如主頻頻率、碼率、調(diào)制方式、誤碼率、信號(hào)電平等,供維護(hù)人員檢測(cè)參考。
這里說(shuō)明一下,所謂主頻是指SI所在碼流的調(diào)制頻率。
2、節(jié)目搜索:接收機(jī)在節(jié)目搜索時(shí)首先搜索主頻頻率,找出SI信息,然后生成EPG,又由EPG生成一個(gè)節(jié)目列表,這個(gè)節(jié)目列表包括節(jié)目名稱(chēng)、節(jié)目說(shuō)明、節(jié)目播出時(shí)間等,并將這個(gè)節(jié)目列表作為下一層菜單,每個(gè)下層菜單項(xiàng)都指向相應(yīng)節(jié)目所在的TS流,達(dá)到用戶(hù)能方便快捷地收看到所需節(jié)目的目的。
節(jié)目搜索分兩種方式:一種是手動(dòng)搜索,一種是自動(dòng)搜索。手動(dòng)搜索方式是通過(guò)人工輸入主頻頻率或DVB系統(tǒng)內(nèi)所有TS流的調(diào)制頻率來(lái)引導(dǎo)接收機(jī)接收;自動(dòng)方式是由軟件設(shè)置好相關(guān)的接收參數(shù),由軟件來(lái)引導(dǎo)接收機(jī)接收。
3、?軟件下載:在前面說(shuō)過(guò),接收機(jī)的裝載器必須要按照前端定義的數(shù)據(jù)結(jié)構(gòu)來(lái)定制,當(dāng)前端需要變更播出節(jié)目時(shí)(如增加或減少節(jié)目的播出,調(diào)整播出節(jié)目的類(lèi)別等)?或更改主頻頻率時(shí),接收機(jī)的裝載器也應(yīng)作相應(yīng)的變更。所以,當(dāng)前端要作節(jié)目變更時(shí),營(yíng)運(yùn)商必須要同時(shí)變更接收機(jī)的裝載器,并向所有接收機(jī)發(fā)出軟件更新信?息,用戶(hù)收到信息后,就可用軟件下載功能來(lái)更新接收機(jī)的裝載器了。
????綜上所述,構(gòu)成一個(gè)DVB系統(tǒng)最基本的業(yè)務(wù)信息應(yīng)該包括PSI和SI業(yè)務(wù)信息。EPG由SI生成,DVB接收機(jī)靠EPG來(lái)引導(dǎo)接收和選擇收看DVB節(jié)目。
三?兩篇很好的EPG相關(guān)文章
???1?基于DVB-SI的數(shù)字有線(xiàn)電視機(jī)頂盒節(jié)目指南的設(shè)計(jì)實(shí)現(xiàn)
?????????????????????????????????????????????????????????王景存 王瑞胡
?????????????????????????????????????????????????????????北京科技大學(xué)信息工程學(xué)院
????????????????????????????????????????????????????????武漢科技大學(xué)信息科學(xué)與工程學(xué)院??
摘要?本文介紹了電子節(jié)目指南信息的構(gòu)成以及MPEG-2?PSI和DVB-SI信息規(guī)范,提出了一種EPG信息的存儲(chǔ)結(jié)構(gòu)和節(jié)目數(shù)據(jù)庫(kù)的生成方案,并據(jù)此講述了如何在數(shù)字有線(xiàn)電視機(jī)頂盒中生成電子節(jié)目指南EPG。
關(guān)鍵詞?機(jī)頂盒?MPEG-2?PSI節(jié)目專(zhuān)用信息?DVB-SI業(yè)務(wù)信息?電子節(jié)目指南?
1?引言?
目前數(shù)字電視已經(jīng)進(jìn)入快速發(fā)展階段,與數(shù)字電視相關(guān)的業(yè)務(wù)也將大幅度增長(zhǎng)。當(dāng)節(jié)目運(yùn)營(yíng)商將大量的節(jié)目信息通過(guò)有線(xiàn)網(wǎng)絡(luò)提供給用戶(hù),用?戶(hù)在欣賞高質(zhì)量節(jié)目源的同時(shí)如何才能方便快捷地找到這些業(yè)務(wù)或信息就成了開(kāi)發(fā)者們需要解決的一個(gè)關(guān)鍵問(wèn)題。電子節(jié)目指南(EPG,Electronic?Program?Guide)正是為了方便用戶(hù)對(duì)信息的獲取而制作的運(yùn)行于用戶(hù)端綜合接收解碼器(IRD,Integrated?Receiver?Decoder)的應(yīng)用程序,它通過(guò)電視屏幕向用戶(hù)提供由文字、圖形、圖像組成的人機(jī)交互界面,負(fù)責(zé)電視節(jié)目和各種業(yè)務(wù)的導(dǎo)航[1]。用戶(hù)通過(guò)電子節(jié)目指?南,能夠了解到節(jié)目的相關(guān)信息(包括節(jié)目時(shí)間、播放時(shí)間、內(nèi)容梗概等),并且實(shí)現(xiàn)對(duì)節(jié)目的快速檢索和訪(fǎng)問(wèn)。?
EPG的形成依賴(lài)于節(jié)目播出前端將符合DVB(Digital?Video?Broadcasting)標(biāo)準(zhǔn)的業(yè)務(wù)信息(SI,Service?Information)插入到承載節(jié)目信息的傳送流(TS,Transport?Stream)中,這些SI信息攜帶了EPG所需的全部數(shù)據(jù)。
2?電子節(jié)目指南信息的組成和傳輸?
電子節(jié)目指南信息(以下簡(jiǎn)稱(chēng)EPG信息)由兩部分組成:基本EPG信息和擴(kuò)展EPG信息。?
基本EPG信息是指完全可以用《數(shù)字廣播業(yè)務(wù)信息規(guī)范(GY/Z174-2001)》中的網(wǎng)絡(luò)信息表NIT、業(yè)務(wù)群關(guān)聯(lián)表BAT、業(yè)務(wù)描述表SDT、事件信息表EIT等進(jìn)行描述的EPG信息。?
擴(kuò)展EPG信息是指在基本EPG信息之外,通過(guò)數(shù)據(jù)輪播傳遞的EPG信息,這些信息的入口采用EPG映射表EMT進(jìn)行描述,信息的內(nèi)容被封裝成具有多級(jí)目錄結(jié)構(gòu)的文件系統(tǒng),稱(chēng)為擴(kuò)展EPG內(nèi)容信息(XECI)。?
一個(gè)EPG系統(tǒng)至少應(yīng)該包括基本EPG信息[?2?]。?
本文也僅就基本EPG信息進(jìn)行論述。?
“數(shù)據(jù)廣播業(yè)務(wù)信息規(guī)范”中NIT、BAT、SDT、EIT和EMT表都被分成一個(gè)或若干個(gè)段(section)來(lái)表示,然后插入到?TS包中。段是一種用來(lái)把SI信息表和EPG信息表映射為T(mén)S包的語(yǔ)法結(jié)構(gòu),這些信息符合GB/T?17975.1定義的專(zhuān)用段語(yǔ)法結(jié)構(gòu)。段可直接映射到TS包中。段可能起始于TS包有效負(fù)載的起始處,但這并不是必須的,因?yàn)門(mén)S包有效負(fù)載的第一個(gè)段的?起始位置是由pointer_field字段指定的[?3?]。
3?MPEG-2?PSI節(jié)目專(zhuān)用信息與DVB-SI信息簡(jiǎn)介?
在數(shù)字電視中,所有的音、視頻信號(hào)和數(shù)據(jù)信息經(jīng)過(guò)編碼后,在進(jìn)入傳輸系統(tǒng)前,必須按照MPEG-2標(biāo)準(zhǔn)打包,形成固定長(zhǎng)度的TS包,?包長(zhǎng)為188字節(jié)或204字節(jié)。對(duì)于這些長(zhǎng)度相同的包,如果沒(méi)有引導(dǎo)信息,IRD是無(wú)法找到所需要的碼流的。為此在MPEG-2標(biāo)準(zhǔn)中專(zhuān)門(mén)定義了節(jié)目專(zhuān)用?信息(PSI,Program?Specification?Information),其作用在于自動(dòng)設(shè)置和引導(dǎo)IRD進(jìn)行解碼[?4?]。?
PSI信息由以下四種表組成:?(1)節(jié)目關(guān)聯(lián)表PAT;?(2)節(jié)目映射表PMT;?(3)網(wǎng)絡(luò)信息表NIT;?(4)條件訪(fǎng)問(wèn)表CAT。?
在實(shí)際應(yīng)用中,解碼器IRD要對(duì)某一路特定碼流進(jìn)行解碼時(shí),首先要找到PAT表,根據(jù)PAT表找到所需的節(jié)目及該節(jié)目對(duì)應(yīng)的PMT表?的PID。PMT表中可能包含多個(gè)數(shù)字碼流,每個(gè)碼流都有一個(gè)唯一的PID與之對(duì)應(yīng)。如果要解碼的是視頻碼流,則在PMT表中找到video?PID值,再?gòu)腡S流中過(guò)濾出PID值與之匹配的TP包并送到視頻解碼器。?
MEPG-2的PSI信息提供了相關(guān)節(jié)目組成和相互關(guān)系的信息,從而使得接收端IRD可以對(duì)多路傳輸流進(jìn)行解析,但是這些信息在實(shí)?際應(yīng)用中仍顯得不夠,它不能提供節(jié)目的名稱(chēng)、節(jié)目的開(kāi)始時(shí)間、持續(xù)時(shí)間及節(jié)目的附加信息等。為此在DVB中擴(kuò)展定義了SI業(yè)務(wù)信息。PSI信息基本上都是?與現(xiàn)行流(AS,Actual?Stream)相關(guān)的,而SI信息則可以包括不在現(xiàn)行流中的一些業(yè)務(wù)和事件信息,從而允許用戶(hù)進(jìn)行更多的選擇和了解更多的其它業(yè)務(wù)信息。?
與PSI定義的四種表不同,SI中定義了9種表,其中構(gòu)成基本EPG信息的最重要的表是網(wǎng)絡(luò)信息表NIT、業(yè)務(wù)描述表SDT和事件信息表EIT。?SI?表傳送的信息都是通過(guò)描述符(descriptor)的形式給出的。?
每個(gè)描述符都以descriptor_tag(用于唯一標(biāo)識(shí)descriptor的類(lèi)型)和descriptor_length開(kāi)始。不同的描述符用于描述不同SI表中承載的信息[?6?]。
4?系統(tǒng)介紹?
本EPG系統(tǒng)是在STMicroelectronic公司所提供的機(jī)頂盒開(kāi)發(fā)方案上實(shí)施的,其主控制芯片采用STi5518,內(nèi)部集?成有32位主CPU、專(zhuān)用DVB傳輸流解復(fù)用和解擾模塊、MEPG-2音、視頻解碼單元、數(shù)字視頻編碼器及各種接口等。與之配套的軟件開(kāi)發(fā)平臺(tái)選用的也是?該公司開(kāi)發(fā)的STLite/OS20嵌入式操作系統(tǒng),支持多任務(wù)、存儲(chǔ)器管理、進(jìn)程調(diào)度、定時(shí)器管理等實(shí)時(shí)特性。該系統(tǒng)能實(shí)時(shí)接收用戶(hù)通過(guò)遙控按鍵或前面?板觸發(fā)的交互信號(hào),實(shí)現(xiàn)節(jié)目基本信息的瀏覽、節(jié)目列表的生成、節(jié)目之間的跳轉(zhuǎn)以及節(jié)目預(yù)告信息的查詢(xún)等。
5?系統(tǒng)設(shè)計(jì)及實(shí)現(xiàn)
5.1?EPG信息的存儲(chǔ)結(jié)構(gòu)?
TS流里攜帶的EPG數(shù)據(jù)信息通過(guò)IRD接收以后都以樹(shù)狀鏈表的結(jié)構(gòu)存儲(chǔ)在PROG_INFO_STRUCT和TRANSPONDER_INFO_STRUCT這樣兩個(gè)結(jié)構(gòu)中。?
在本機(jī)頂盒有關(guān)節(jié)目操作的各項(xiàng)功能中,絕大部分都與節(jié)目數(shù)據(jù)庫(kù)有關(guān),比如自動(dòng)節(jié)目搜索時(shí),需要建立節(jié)目數(shù)據(jù)庫(kù),并為搜索到的節(jié)目在數(shù)?據(jù)庫(kù)中建立相應(yīng)的數(shù)據(jù)單元,用于存儲(chǔ)該節(jié)目的各種信息;在切換節(jié)目時(shí),需要根據(jù)不同節(jié)目中音、視頻數(shù)據(jù)的PID值從而選擇不同的碼流進(jìn)行音、視頻解碼等。?
節(jié)目數(shù)據(jù)庫(kù)主要來(lái)自PSI表的內(nèi)容。?
在具體的軟件實(shí)現(xiàn)過(guò)程中,節(jié)目數(shù)據(jù)庫(kù)的建立主要通過(guò)ParsePAT()、ParsePMT()兩個(gè)函數(shù)來(lái)實(shí)現(xiàn)。ParsePAT()函數(shù)調(diào)用的結(jié)果是得到有線(xiàn)傳輸系統(tǒng)中不同的節(jié)目PID,而ParsePMT則獲取各個(gè)節(jié)目中音、視頻碼流的PID值?
5.2?節(jié)目跳轉(zhuǎn)的實(shí)現(xiàn)?
系統(tǒng)響應(yīng)用戶(hù)在不同節(jié)目之間的切換時(shí),需要將用戶(hù)選定節(jié)目的音、視頻碼流從復(fù)用的多路節(jié)目碼流中提取出來(lái)并分別送到音、視頻解碼器進(jìn)?行解碼。它依賴(lài)于硬件可編程傳輸接口(PTI,Programmable?Transport?Interface)來(lái)實(shí)現(xiàn)。在系統(tǒng)生成的節(jié)目數(shù)據(jù)庫(kù)結(jié)構(gòu)中的stProgNo變量存儲(chǔ)有轉(zhuǎn)發(fā)器號(hào)TransponderId及節(jié)目的音、視頻PID值。
5.3?事件信息的獲取?
事件信息表EIT按時(shí)間順序提供每個(gè)業(yè)務(wù)中包含的事件的信息。(這里的事件相當(dāng)于傳統(tǒng)意義上的節(jié)目,而業(yè)務(wù)則指的是提供節(jié)目源的某個(gè)?電視臺(tái),如業(yè)務(wù)“中央電視臺(tái)-1”的事件“新聞聯(lián)播”。)EIT包含兩種不同類(lèi)型的表,分別為EIT?present/following(簡(jiǎn)稱(chēng)EIT?p/f)和EIT?Schedule(EIT-S)。EIT?p/f給出了指定業(yè)務(wù)中當(dāng)前和后一個(gè)事件的信息,而EIT-S則包含一周內(nèi)或更長(zhǎng)時(shí)間的節(jié)目預(yù)告信息。任何構(gòu)成EIT的event?information?section均在PID為0x0012的TS包中傳輸,它給出了業(yè)務(wù)中事件的名稱(chēng)、事件開(kāi)始時(shí)間、持續(xù)時(shí)間及其他一些信息。?
?以下以EIT?p/f為例來(lái)講述事件信息的獲取方式:?
在EIT?p/f中,每個(gè)業(yè)務(wù)service都用兩個(gè)section分別來(lái)描述當(dāng)前(present)和后續(xù)(following)信息,其中的section?number為0?的用來(lái)描述當(dāng)前事件,而section?number為1的section則用來(lái)描述后續(xù)事件。?
在節(jié)目信息結(jié)構(gòu)PROG_INFO_STRUCT中,定義了EVENT_INFO_BASIC類(lèi)型的二維數(shù)組?event_info_database[2]用來(lái)存放一個(gè)業(yè)務(wù)中的present和following事件的信息。這些信息包括事件的名稱(chēng)、事件的開(kāi)始?時(shí)間、事件的持續(xù)時(shí)間。?
事件的日期和時(shí)間在TS流里是按照MJD(Modified?Julian?Date,修正的儒略日期)+?UTC(Universal?Time?Co-ordinate,通用時(shí)間坐標(biāo))的格式并以16進(jìn)制的形式給出的。在MJD+UTC和local?MJD+local?time之間的轉(zhuǎn)換可參照GY/Z174-2001來(lái)進(jìn)行。如TS流里的數(shù)據(jù)為0xCE1F?0056?0001?0600,則轉(zhuǎn)換以后得到的信息為:該事件的播出時(shí)間為2003年5月8日,星期四,開(kāi)始時(shí)間為00:56:00,持續(xù)時(shí)間為01:06:00。?
而事件的名稱(chēng)則通過(guò)解析描述符short_event_descriptor來(lái)實(shí)現(xiàn)。并將得到的信息存儲(chǔ)在event_info_database結(jié)構(gòu)中。?
所有解析得到的信息最終都將存儲(chǔ)在節(jié)目數(shù)據(jù)庫(kù)中,提供給顯示模塊直接調(diào)用。
6?結(jié)束語(yǔ)?
真正完整意義上的EPG的功能是十分強(qiáng)大的,它不僅能提供節(jié)目表單和當(dāng)前節(jié)目播放等基本功能,還可提供節(jié)目預(yù)定和家長(zhǎng)分級(jí)控制等高級(jí)?功能。本文從實(shí)用的角度給出了一個(gè)基本EPG系統(tǒng)的實(shí)現(xiàn)方案。另外我們也實(shí)現(xiàn)了EPG交互式應(yīng)用中的SI增值業(yè)務(wù)如天氣預(yù)報(bào)、新聞、股票數(shù)據(jù)等的接收,以?菜單觸發(fā)的形式提供給用戶(hù)一個(gè)由文本和圖形組成的反饋信息。?
王景存,北京科技大學(xué)信息工程學(xué)院,副教授,博士;?
王瑞胡,武漢科技大學(xué)信息科學(xué)與工程學(xué)院,碩士研究生,研究方向:數(shù)字信號(hào)處理。?
?????????
???????????????????
????????????2?數(shù)字電視的電子節(jié)目指南(EPG)及其系統(tǒng)
數(shù)字電視由于傳輸數(shù)字化,多種業(yè)務(wù)可以混合在一起通過(guò)一個(gè)信道傳輸。因此,數(shù)字電視已經(jīng)不是單一的電視業(yè)務(wù),而是指通過(guò)電視傳輸通道傳輸?shù)臄?shù)字業(yè)務(wù),包括?視頻、音頻、圖像、數(shù)據(jù)等。全球數(shù)字電視已經(jīng)進(jìn)入快速發(fā)展階段。可以預(yù)見(jiàn),在今后幾年,與數(shù)字電視相關(guān)的業(yè)務(wù)將大幅度增長(zhǎng)。隨之而來(lái)的問(wèn)題是,當(dāng)數(shù)字電視?能為用戶(hù)提供數(shù)倍于目前節(jié)目量的節(jié)目及多種業(yè)務(wù)時(shí),用戶(hù)怎樣才能便捷地找到所要的節(jié)目和信息呢?電子節(jié)目指南(EPG)顯然是必不可少的工具。
? ?電子節(jié)目指南給用戶(hù)提供一個(gè)容易使用的、界面友好的、可以快速訪(fǎng)問(wèn)節(jié)目的一種方式,用戶(hù)還可以通過(guò)該功能收看一個(gè)或多個(gè)頻道,甚至所有頻道近期將播放的節(jié)?目。同時(shí),EPG可提供分類(lèi)功能,可以幫助用戶(hù)瀏覽和選擇各種類(lèi)型的節(jié)目。當(dāng)然電子節(jié)目指南對(duì)業(yè)務(wù)提供商也有很重要的意義。?
數(shù)字電視的信息
1、節(jié)目說(shuō)明信息
? ?在數(shù)字電視中,所有的信息和信號(hào),包括視頻、音頻、文字、圖片等經(jīng)數(shù)字化后都變成了數(shù)據(jù)。數(shù)據(jù)在傳輸前要按照有關(guān)標(biāo)準(zhǔn)(一般是MPEG-2)打包,形成固?定長(zhǎng)度的傳送(TS)包,MPEG-2的TS包長(zhǎng)為188字節(jié),然后再通過(guò)網(wǎng)絡(luò)快速傳輸?shù)侥康牡亍?duì)于這些長(zhǎng)度相同的TS包,如果沒(méi)有引導(dǎo)信息,接收端解?碼器是無(wú)法找到需要的碼流的。因此,在MPEG-2中專(zhuān)門(mén)定義了PSI。PSI的作用是自動(dòng)設(shè)置和引導(dǎo)解碼器進(jìn)行解碼。?PSI由節(jié)目關(guān)聯(lián)表(PAT)、條件接收表(CAT)、節(jié)目映射表(PMT)和網(wǎng)絡(luò)信息表(NIT)組成,每個(gè)表分成若干段映射(變換)到TS中傳輸。
? ?PSI的幾個(gè)表包含了解碼和重現(xiàn)節(jié)目所需信息,其主要作用是找到節(jié)目和要解壓縮的碼流。其中PAT是所有表的根,它的PID值為0。實(shí)際應(yīng)用中,解碼器要?對(duì)一特定碼流解碼時(shí),首先要找到PAT。然后在PAT中找到所需節(jié)目(比如節(jié)目1),根據(jù)節(jié)目1相應(yīng)的PMT的PID(如22),找到節(jié)目1的PMT。?PMT中可能包括多個(gè)數(shù)字碼流(包括視頻碼流、音頻碼流和數(shù)據(jù)碼流),每個(gè)碼流也有一個(gè)PID。如果要解碼的是視頻碼流,則在PMT中找到視頻碼流的?PID是54,再到TS中去找PID是54的包,并把所有PID是54的包送到視頻解碼器。在PAT中,節(jié)目0總是為NIT預(yù)留的。
?這里PID值是十進(jìn)制的,在有關(guān)標(biāo)準(zhǔn)中分配的PID值是十六進(jìn)制的,即用0×開(kāi)頭的值表示。如十進(jìn)制的22、54,在十六進(jìn)制中分別是0×16、0×36。
2、業(yè)務(wù)信息
? ?PSI數(shù)據(jù)提供接收機(jī)能自動(dòng)設(shè)置的信息,使之能對(duì)復(fù)用流中的不同節(jié)目流進(jìn)行解碼。但是PSI表不能提供有關(guān)業(yè)務(wù)和節(jié)目的識(shí)別信息。因此,DVB組織對(duì)?MPEG-2的PSI進(jìn)行了擴(kuò)展,提供了不同信息種類(lèi)的多種表格,稱(chēng)之為SI。SI是用來(lái)描述傳送系統(tǒng)、傳送內(nèi)容和廣播數(shù)據(jù)流時(shí)間表等數(shù)據(jù),它幫助綜合接?收解碼器(IRD)自動(dòng)調(diào)諧,給用戶(hù)提供附加信息,使IRD能自動(dòng)設(shè)置可供選擇的業(yè)務(wù)。?
?SI由業(yè)務(wù)群關(guān)聯(lián)表(BAT)、業(yè)務(wù)描述表(SDT)、事件信息表(EIT)等9個(gè)表提供,它們分成若干段映射到TS包中傳輸。
?在PSI中,網(wǎng)絡(luò)信息表(NIT)的內(nèi)容是專(zhuān)用的且未作規(guī)定,但在SI表中專(zhuān)門(mén)定義了NIT的語(yǔ)法和語(yǔ)義,擴(kuò)展了NIT的數(shù)據(jù)格式,旨在提供更多有關(guān)物理網(wǎng)絡(luò)的信息。
? ?與PSI中PAT、PMT、CAT不同的是,SI的9個(gè)表在實(shí)際使用中并不都是強(qiáng)制性傳送的。在實(shí)際(現(xiàn)行)傳送系統(tǒng)中,NIT、SDT、EIT及TDT?的傳送是強(qiáng)制性的。在其它傳送系統(tǒng)中,NIT、SDT、EIT是可選傳送的。BAT、RST、TOT在任何情況下都是可選傳送的。ST、SIT和DIT則?是需要時(shí)才存在。
?
?除攜帶時(shí)間表信息的EIT外,所有的PSI和SI表都不能加擾,以免影響解碼器正常工作。
?在實(shí)際應(yīng)用中,節(jié)目播出前端將符合標(biāo)準(zhǔn)定義的PSI和SI表插入TS包,構(gòu)成數(shù)字電視廣播碼流,傳輸給用戶(hù)。接收端解碼器根據(jù)PSI解復(fù)用和解碼所需的碼流,利用SI提供的數(shù)據(jù)構(gòu)成各種功能的EPG。解碼器根據(jù)包標(biāo)識(shí)符(PID)和表標(biāo)識(shí)符找到所需的碼流和數(shù)據(jù)。
?在插入TS之前,PSI和SI表被分成一段或若干段。段是用來(lái)把PSI和SI變換為T(mén)S包的語(yǔ)法結(jié)構(gòu),其長(zhǎng)度是可變的。EIT的段限長(zhǎng)4096字節(jié),其余PSI和SI表的段限長(zhǎng)1024字節(jié)。每段包含以下元素:表標(biāo)識(shí)符、表標(biāo)識(shí)符擴(kuò)展、版本號(hào)和當(dāng)前/后續(xù)指示符。
?PSI和SI表分段映射到TS包后,帶有相應(yīng)的包標(biāo)識(shí)符,用以指示TS包的性質(zhì)。表標(biāo)識(shí)符是為了標(biāo)識(shí)段是屬于什么表的。
? ?PSI表只能在確切知道節(jié)目是什么、在什么時(shí)間播出時(shí)才能找到要解碼的碼流,并不提供有關(guān)節(jié)目是什么、在什么時(shí)間開(kāi)始等信息,也沒(méi)有多種碼流的選擇信息。?在數(shù)字電視業(yè)務(wù)不斷增加的情況下,用戶(hù)在選擇業(yè)務(wù)時(shí)會(huì)感到很不方便。如果能將用戶(hù)所需信息有序組織起來(lái),提供類(lèi)似節(jié)目報(bào)、又能在電視機(jī)上即時(shí)瀏覽的功能,?將大大方便用戶(hù)使用。EPG正好能起到這種作用。
?根據(jù)《數(shù)字電視廣播業(yè)務(wù)信息規(guī)范》對(duì)EPG的要求,EPG應(yīng)提供節(jié)目單和當(dāng)前節(jié)目播放等基本功能,還可提供節(jié)目附加信息、節(jié)目分類(lèi)、節(jié)目預(yù)訂和家長(zhǎng)分級(jí)控制等高級(jí)功能。
?在交互電視中,EPG更復(fù)雜,應(yīng)能提供諸如節(jié)目?jī)?nèi)容背景資料、視角切換、天氣預(yù)報(bào)、游戲等功能。
?EPG的這些功能均可通過(guò)SI提供的數(shù)據(jù)來(lái)實(shí)現(xiàn)。也就是說(shuō)SI是實(shí)現(xiàn)EPG功能的前提。在SI表中,最重要的是NIT、EIT和SDT,利用這3個(gè)表中的數(shù)據(jù)就可以構(gòu)造出功能不同的EPG。
3、網(wǎng)絡(luò)信息表
?在PSI中定義的NIT的傳送是可選的。在SI中,要求在實(shí)際(現(xiàn)行)傳送流中,NIT的傳送是強(qiáng)制性的。?
?NIT指出了傳送當(dāng)前業(yè)務(wù)的物理網(wǎng)絡(luò)信息及該網(wǎng)絡(luò)的特性,例如業(yè)務(wù)是通過(guò)何種傳送系統(tǒng)(衛(wèi)星或地面或有線(xiàn))傳送的、傳送系統(tǒng)的有關(guān)參數(shù)等。任一網(wǎng)絡(luò)由獨(dú)立分配的網(wǎng)絡(luò)標(biāo)識(shí)符值唯一標(biāo)識(shí)。?
?NIT主要攜帶網(wǎng)絡(luò)標(biāo)識(shí)符、網(wǎng)絡(luò)名稱(chēng)和傳送系統(tǒng)參數(shù)等信息。
?傳送系統(tǒng)有兩個(gè)標(biāo)識(shí),即網(wǎng)絡(luò)標(biāo)識(shí)符和原始網(wǎng)絡(luò)標(biāo)識(shí)符。當(dāng)NIT在產(chǎn)生TS的網(wǎng)絡(luò)上傳送時(shí),網(wǎng)絡(luò)標(biāo)識(shí)符和原始網(wǎng)絡(luò)標(biāo)識(shí)符取同一值。在原始網(wǎng)絡(luò)標(biāo)識(shí)符中的每個(gè)業(yè)務(wù)標(biāo)識(shí)符都是唯一的。含于TS中的某個(gè)業(yè)務(wù)轉(zhuǎn)移到另一傳送系統(tǒng)時(shí),網(wǎng)絡(luò)標(biāo)識(shí)符改變,原始網(wǎng)絡(luò)標(biāo)識(shí)符保持不變。
?衛(wèi)星傳送系統(tǒng)的參數(shù)有:軌道位置、軌道的東西標(biāo)志、頻率、調(diào)制方式、極化方式、符號(hào)率及前向糾錯(cuò)(FEC)內(nèi)碼。
?有線(xiàn)傳送系統(tǒng)參數(shù)包括:頻率、調(diào)制方式、FEC外碼、符號(hào)率、FEC內(nèi)碼。
?地面?zhèn)魉拖到y(tǒng)參數(shù)我國(guó)還未定義。
?NIT中提供的上述數(shù)據(jù)是供解碼器自動(dòng)搜索頻道用的,也可以顯示出來(lái)為用戶(hù)提供參考數(shù)據(jù)。另外,還可以傳輸一些可選信息,如多語(yǔ)種提供網(wǎng)絡(luò)名稱(chēng)、業(yè)務(wù)列表等。
?
4、業(yè)務(wù)描述表?
?SDT的每一個(gè)子表都對(duì)一個(gè)特定TS流中的業(yè)務(wù)進(jìn)行描述。這些業(yè)務(wù)可能是實(shí)際TS流的一部分,也可能是其它TS流的一部分,可以通過(guò)不同的表標(biāo)識(shí)符來(lái)區(qū)分。(業(yè)務(wù)如CCTV1等)
?SDT可分成若干業(yè)務(wù)描述段,任何構(gòu)成SDT的段都要由PID為0×0011的TS包傳送。
?SDT提供業(yè)務(wù)所屬的業(yè)務(wù)群、業(yè)務(wù)使用的加密系統(tǒng)、與其它業(yè)務(wù)的鏈接信息、該業(yè)務(wù)的準(zhǔn)用國(guó)家、業(yè)務(wù)名稱(chēng)和業(yè)務(wù)提供者、業(yè)務(wù)是否允許NVOD,以及多畫(huà)面的控制、實(shí)現(xiàn)交互式回傳信道的電話(huà)號(hào)碼和多語(yǔ)種業(yè)務(wù)名稱(chēng)等信息。
?為了更容易獲得有關(guān)業(yè)務(wù),一般遵循這樣一些規(guī)則:對(duì)于實(shí)際TS,SDT的傳送是強(qiáng)制性的,而且在一特定TS的SDT中,SI碼流至少應(yīng)列出該TS中的所有業(yè)務(wù)信息;其它TS的SDT應(yīng)當(dāng)列出該TS的所有業(yè)務(wù)。
5、事件信息表?(事件如新聞聯(lián)播等)
?EIT按時(shí)間順序提供每個(gè)業(yè)務(wù)中包含的事件的信息,其類(lèi)型通過(guò)表識(shí)別符進(jìn)行區(qū)別,見(jiàn)《數(shù)字電視廣播業(yè)務(wù)信息規(guī)范》中的表2。任何構(gòu)成EIT段均在PID為0×0012的傳送包中進(jìn)行傳送
?當(dāng)前/后續(xù)事件信息表(EIT?present/following)只包含給定業(yè)務(wù)中的當(dāng)前和后續(xù)一個(gè)事件的信息,但在NVOD情況下可以有多于兩個(gè)事件描述信息。而EIT?Schedule(EIT-S)則包含一周內(nèi)或更長(zhǎng)時(shí)間的節(jié)目預(yù)告信息.
?EIT提供的信息包括:事件的標(biāo)識(shí)號(hào)、起始時(shí)間、節(jié)目長(zhǎng)度;播放狀態(tài)、是否加密;事件的詳細(xì)介紹;兩段同樣事件的時(shí)間偏移;事件多語(yǔ)種的簡(jiǎn)短介紹;節(jié)目限定的級(jí)別等。
?在所有PSI和SI表中,只有EIT的時(shí)間表可以被加擾。
電子節(jié)目指南的構(gòu)成
?根據(jù)NIT、SDT和EIT等SI表提供的信息,可以構(gòu)成各種各樣的EPG,使用戶(hù)能通過(guò)多種方式找到所要的信息。
?在數(shù)字電視系統(tǒng)中,對(duì)于電視臺(tái)和用戶(hù)來(lái)說(shuō),增加EPG功能是非常必要的,而EPG所需的信息正是由SI提供的。
? ?實(shí)際上SI表提供的各種信息是通過(guò)描述符來(lái)實(shí)現(xiàn)的。《數(shù)字電視廣播業(yè)務(wù)信息規(guī)范》中的表12列出了描述符在SI表中最可能出現(xiàn)的位置,從中可以看到,同一?類(lèi)信息允許出現(xiàn)在多個(gè)SI表中,而且表示的是標(biāo)識(shí)符最可能出現(xiàn)的位置,并沒(méi)有限制在其它表中使用該標(biāo)識(shí)符;此外,SI表提供的各種信息并不都是強(qiáng)制性的。?這樣就為EPG前端系統(tǒng)和SI編輯器的開(kāi)發(fā)提供了較大的空間和靈活性,同時(shí)也表明EPG是一種定制系統(tǒng),它的功能與節(jié)目業(yè)務(wù)提供商打算向用戶(hù)提供什么樣的?服務(wù)有關(guān)。?
?EPG包含兩個(gè)部分:一是播出前端的EPG編輯器;二是用戶(hù)端數(shù)字電視接收機(jī)中相應(yīng)的接收/顯示/控制軟件。兩部分一一對(duì)應(yīng),如果一個(gè)廠(chǎng)家的接收機(jī)產(chǎn)品要?進(jìn)入一個(gè)業(yè)已采用某種EPG前端產(chǎn)品(數(shù)據(jù)結(jié)構(gòu)封裝)的傳輸網(wǎng)絡(luò)(用戶(hù)群體),則必須按照前端定義的數(shù)據(jù)結(jié)構(gòu)來(lái)改造其接收機(jī)的相關(guān)部分,從而接收顯示前端?送出的業(yè)務(wù)信息。而在EPG前端編輯器中,根據(jù)所需的功能,將采用適當(dāng)?shù)拿枋龇麃?lái)提供有關(guān)的信息。?
EPG系統(tǒng)的組成
?EPG系統(tǒng)分為前端子系統(tǒng)和接收端子系統(tǒng),前端子系統(tǒng)主要負(fù)責(zé)SI數(shù)據(jù)的組織和生成,一般來(lái)說(shuō),由一個(gè)專(zhuān)門(mén)的SI復(fù)用器(SI?Server?)來(lái)完成這部分工作,并把生成的SI數(shù)據(jù)與節(jié)目等的其它數(shù)據(jù)流進(jìn)行系統(tǒng)層復(fù)用,在TS流中傳輸。
?接收端子系統(tǒng)主要負(fù)責(zé)SI數(shù)據(jù)的接收、解析等。
?
綜合接收解碼器(Integrated?Receive?Decoder,IRD)從接收的TS流中解析出SI數(shù)據(jù),并在本地建立SI數(shù)據(jù)庫(kù),用戶(hù)通過(guò)EPG界面與SI數(shù)據(jù)庫(kù)進(jìn)行交互。為了方便用戶(hù)的隨機(jī)接入,?SI數(shù)據(jù)是重復(fù)發(fā)送的,有關(guān)它的重傳速率在EN?300?468[1]中有詳細(xì)的規(guī)定。接收端不停地接收、解析來(lái)自發(fā)端的SI數(shù)據(jù),當(dāng)發(fā)端的SI數(shù)據(jù)改變時(shí),SI數(shù)據(jù)庫(kù)更新,否則接收的SI數(shù)據(jù)被丟棄。?
?
? ?EPG的應(yīng)用程序運(yùn)行于數(shù)字電視的機(jī)頂盒中,應(yīng)用程序管理器負(fù)責(zé)EPG應(yīng)用的管理,上層的EPG?API屏蔽了下層的軟硬件實(shí)體,使編寫(xiě)EPG應(yīng)用程序時(shí)可以不考慮底層的具體實(shí)現(xiàn),只需要調(diào)用相應(yīng)的API函數(shù),下層的DVB-SI?API也是起同樣的作用。下層的解復(fù)用模塊接收TS流,解出DVB?SI數(shù)據(jù)流,再經(jīng)SI數(shù)據(jù)解析模塊,生在SI信息表,存于本地?cái)?shù)據(jù)庫(kù)中,由DVB-SI?API提供的接口向上層提供服務(wù)。
?國(guó)內(nèi)外的EPG系統(tǒng)的實(shí)現(xiàn)方案,概括起來(lái)主要有以下兩種:
? ?(1)本地應(yīng)用方案:這種實(shí)現(xiàn)方案要求節(jié)目列表及詳細(xì)信息作為業(yè)務(wù)信息的形式復(fù)用于MPEG-2傳輸層中,數(shù)據(jù)經(jīng)信道傳輸后,在接收端的解碼器對(duì)這些數(shù)據(jù)?進(jìn)行解碼,并在接收機(jī)RAM中形成專(zhuān)用的EPG數(shù)據(jù)庫(kù),EPG應(yīng)用將檢索數(shù)據(jù)庫(kù)并根據(jù)用戶(hù)輸入的指令顯示用戶(hù)關(guān)心的節(jié)目信息。目前大多數(shù)廠(chǎng)商提供的EPG?采用該種實(shí)現(xiàn)方案。
?(2)交互式實(shí)現(xiàn)方案:這種實(shí)現(xiàn)方案首先要求數(shù)字電視機(jī)頂盒的軟件系統(tǒng)中有中間件(以HTML引擎為例),在發(fā)送端的EPG服務(wù)器將把HTML頁(yè)面的形式?組織,通過(guò)數(shù)據(jù)廣播信道傳輸?shù)綑C(jī)頂盒,機(jī)頂盒通過(guò)HTML引擎顯示這些頁(yè)面,如同在PC世界中的瀏覽網(wǎng)頁(yè)。用戶(hù)與EPG的交互分成兩種形式,對(duì)于沒(méi)有回傳?信道的情況下,HTML頁(yè)面通過(guò)Data?Carousel發(fā)送,實(shí)現(xiàn)本地交互;而對(duì)于有回傳信道的情況下,機(jī)頂盒將根據(jù)用戶(hù)的輸入從網(wǎng)絡(luò)中獲取新的所需頁(yè)面。該方案以O(shè)penTV為代表。
?上述兩種實(shí)現(xiàn)方案都要求業(yè)務(wù)信息或HTML頁(yè)面隨著時(shí)間遷移或節(jié)目修改而做相應(yīng)變更,對(duì)于本地應(yīng)用和本地交互方案還要求數(shù)據(jù)有一定的重傳率,以保證EPG的隨機(jī)接入。
?比較上述兩種實(shí)現(xiàn)方案,前者的EPG顯示形式是由接收機(jī)中的EPG應(yīng)用完全決定的,發(fā)送端只提供必須的信息條目,比較容易實(shí)現(xiàn);后者的EPG顯示形式完全由EPG服務(wù)器提供的頁(yè)面決定,即由發(fā)送端決定。?
EPG系統(tǒng)的關(guān)鍵技術(shù)?
? ?實(shí)現(xiàn)EPG系統(tǒng)主要有以下幾個(gè)關(guān)鍵技術(shù):發(fā)端的SI數(shù)據(jù)的組織和生成,接收端SI數(shù)據(jù)的接收和解析,接收端SI數(shù)據(jù)庫(kù)的建立,EPG界面的顯示等。其中有?些是用硬件實(shí)現(xiàn),如SI數(shù)據(jù)的接收和解析;有些則用軟件實(shí)現(xiàn),如SI數(shù)據(jù)庫(kù)的建立和EPG界面的顯示。具體如下:
1、SI數(shù)據(jù)的組織和生成
? ?發(fā)端的SI數(shù)據(jù)的組織和生成,由發(fā)端的SI服務(wù)器(SI?Server)完成這部分功能,接收端的SI解析與此功能相反,主要負(fù)責(zé)SI數(shù)據(jù)表的重建。SI數(shù)據(jù)的組織要符合DVB-SI中的語(yǔ)法定義和MPEG-2?的語(yǔ)法定義,同時(shí)要縱觀傳輸網(wǎng)絡(luò)中的所有業(yè)務(wù)信息。信息內(nèi)容應(yīng)與PSI和SI表中的信息相對(duì)應(yīng),它可按照Network-Transport?Stream-Service-Event的分層順序描述,同時(shí)內(nèi)嵌Transport?Stream-Program(Service)-Element?Stream的分層順序。?
?
2、SI數(shù)據(jù)庫(kù)的建立?
? ?SI數(shù)據(jù)必須按照一定的數(shù)據(jù)結(jié)構(gòu)進(jìn)行存儲(chǔ),這樣才能方便、快捷地對(duì)其進(jìn)行檢索和數(shù)據(jù)的提取。特別是對(duì)EPG系統(tǒng),運(yùn)行于機(jī)頂盒的實(shí)時(shí)操作系統(tǒng)中,需要對(duì)用?戶(hù)的交互進(jìn)行實(shí)時(shí)的動(dòng)作。SI數(shù)據(jù)庫(kù)建立的好壞對(duì)其性能有重要的影響。SI數(shù)據(jù)主要有:網(wǎng)絡(luò)信息、傳輸流信息、業(yè)務(wù)(節(jié)目)信息,業(yè)務(wù)的事件信息等,并且?大量的信息都是通過(guò)描述子來(lái)傳輸?shù)?#xff0c;所以可用樹(shù)狀鏈表來(lái)存儲(chǔ)數(shù)據(jù),構(gòu)成從網(wǎng)絡(luò)、傳輸流、業(yè)務(wù)、事件的樹(shù)狀結(jié)構(gòu),傳送不同信息的描述子用繼承于同一基類(lèi)的描?述子類(lèi)來(lái)表示。?
3、EPG系統(tǒng)的顯示技術(shù)?
?當(dāng)電視節(jié)目和EPG應(yīng)用同時(shí)啟動(dòng)時(shí),用戶(hù)看到的可能是節(jié)目畫(huà)面和EPG界面的疊加,用戶(hù)所看到的電視畫(huà)面從前到后可以分為三層,依次為圖形層、視頻層和背景層。
? ?這里的圖形層也就是下面所說(shuō)的OSD(On?Screen?Display)層,OSD界面顯示技術(shù)指在圖像畫(huà)面上疊加文字顯示,使屏幕為用戶(hù)提供更多的附加信息。視頻層為當(dāng)前正在收看的節(jié)目(解碼出來(lái)的活動(dòng)圖?像);背景層為沒(méi)有播放電視節(jié)目和啟動(dòng)EPG菜單時(shí)的屏幕圖像。EPG畫(huà)面在圖形層上構(gòu)建,EPG畫(huà)面是由許多EPG圖形元素(如按鈕、文本框、選擇按?鈕、組件容器等)疊加而成。界面的狀態(tài)轉(zhuǎn)移是通過(guò)消息驅(qū)動(dòng)的機(jī)制來(lái)實(shí)現(xiàn)的,在消息響應(yīng)函數(shù)中進(jìn)行消息處理。見(jiàn)到的屏幕圖像是這三層的疊加(blend)后?的圖像。
?EPG界面顯示的總體思想是:SI數(shù)據(jù)與圖形元素分離。包括以下幾部分:SI數(shù)據(jù)的檢索與提取,EPG界面所需的圖形元素庫(kù),狀態(tài)轉(zhuǎn)移控制器,OSD層繪?制引擎,OSD層圖、視頻層、背景層及這三層的Blend操作。SI數(shù)據(jù)檢索模塊快速的檢索本地SI數(shù)據(jù)庫(kù),提供EPG界面當(dāng)前輸入焦點(diǎn)所需的數(shù)據(jù)信息;?OSD層圖形元素庫(kù)提供界面所需的圖形元素,該庫(kù)存于本地機(jī)頂盒的ROM中;狀態(tài)轉(zhuǎn)移控制器接收用戶(hù)遙控器的輸入,提供當(dāng)前顯示所需的活動(dòng)焦點(diǎn),控制狀態(tài)?轉(zhuǎn)移地流向;OSD層圖像是指EPG界面圖形元素合成后的圖像;OSD繪制引擎決定顯示的相應(yīng)算法,接收各模塊提供的數(shù)據(jù),完成OSD層圖形的繪制,最后?是OSD層、視頻層和背景層的blend操作。
?數(shù)字電視的優(yōu)勢(shì)不僅僅是提供高質(zhì)量的視頻、音頻節(jié)目,更重要的是采用數(shù)字化處理后,提供了業(yè)務(wù)的靈活性和多樣性。其中電子節(jié)目指南,它描述節(jié)目的播出時(shí)間?和簡(jiǎn)要內(nèi)容,可幫助觀眾方便快速地尋找自己感興趣的節(jié)目。將為觀眾收看電視帶來(lái)極大的幫助,因此。必須重視數(shù)字電視的電子節(jié)目指南系統(tǒng)的研究和內(nèi)容的制作。
???
?????轉(zhuǎn):http://blog.163.com/hweizhou@126/blog/static/347885762007112911523013/
總結(jié)
以上是生活随笔為你收集整理的数字电视业务PSI/SI学习的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: css实现3d正方体旋转
- 下一篇: java闪光灯手电筒_Android_A