韌館-LearnHouse

[轉]MPEG-2系統原理

資料來源:https://www.cnblogs.com/jingmoxukong/archive/2011/08/01/2123547.html
這是轉自中國的文章,覺得基本概念很完整,很適合初學者閱讀

一、MPEG-2系統原理

第一章 MPEG-2簡介

什麼是MPEG和MPEG-2?
MPEG是Moving Picture Experts Group 的簡稱, MPEG-2是MPEG和ISO組織設計的一個數字視頻壓縮規範,主要用於DVD和DVB上,當前的標準文檔是ISO 13818。

什麼是DVB?
DVB是Digital 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的簡稱,即“網絡信息表”。NIT可以提供當前流的節目信息,也可以提供和當前流有關聯的流的節目信息。
EIT是Event Information Table的簡稱,即“事件信息表”。EIT提供的是流的節目信息的改變,比如一個節目已經開始,或者已經結束的信息等。

什麼是EPG?
EPG是Electronic Program Guides的簡稱,即“電子節目指南”。該功能可預告最近一段時間即將播放的節目內容,同時支持基於內容的檢索。

什麼是Teletext?
Teletext就 是我們常說的“圖文電視”,當然在MPEG-2中, 圖文電視已經數字化,也就是說,圖文信息已經成為數字化信息在TS流中傳播。但最終,數字化的圖文信息 都將轉化為模擬的VBI信息插入到正常的電視信號 中實現圖文電視的顯示。圖文電視有很多標準,比如close caption,WSS等,歐洲的DVB使 用的teletext標準是ITU- R System B Teletext規格。該規格支持歐洲多種語言,支持簡單圖像和文本的混合顯示。

第二章 DVB系統的構成

DVB的分類

DVB根據應用的不同,主要分為DVB-S,DVB-C,DVB-T,DVB-H等多種規格。不同的規格基本原理都是相同的,不同的主要是調製方式不同:
DVB-S,S是Satellite的首字母,應用於數字電視衛星廣播,調製方式是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 data。其中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。

下面可以參考一下<>中處理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的。

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。

2019年8 月 posted by admin in 文獻參考 and have No Comments

Place your comment

Please fill your data and comment below.
名稱:
信箱:
網站:
您的評論: