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