PSI信息解析

SI信息

INFORMATION OF PSI

"PSI是對單一TS流的描述,是TS流中的引導信息"

         PSI信息由節目關聯表PAT、條件接收表CAT、節目映射表PMT和網絡信息表NIT組成。這些表會被插入到TS流中。PSI信息是對單一TS流的描述,它是TS流的引導信息PSI信息指定了如何從一個攜帶多個節目的傳輸流中找到指定的節目(見Q1)。

        下面給出的是節目引導信息(或稱節目特定信息,PSI)的四個表結構。

結構名

中文

所定義標準

PID

描述

PAT

節目關聯表

MPEG2標準

0x0000

將節目號碼和節目映射表PID相關聯,是獲取數據的開始

PMT

節目映射表

MPEG2標準

PAT中指出

指定一個或多個節目的PID

CAT

條件接收表

MPEG2標準

0x0001

將一個或多個專用EMM流分別與唯一的PID相關聯

NIT

網絡信息表

SI標準

PAT中指出

描述整個網絡,如多少個TS流、頻點和調製方式等信息

        雖然這四個結構可以視爲簡單的表,但事實上,它們被進一步劃分爲各個段,並插入到TS包中。


PAT解析

PARSINGOF PAT

"PAT是機頂盒接收的入口點,是它獲取數據的開始"

       節目關聯表PAT的意義在於,它描述了當前TS流中包含了哪些PID;只有根據獲得的PID,用戶纔可以以此作爲憑據找出其他表(如PMT表)及其信息。所以PAT是機頂盒接收的入口點,是它獲取數據的開始;要保證一個TS流能被正常接收,則至少要有一個完整有效的PAT

        下面給出了PID字段的取值要求:

描述

0x0000

PAT

0x0001

CAT

0x0002~0x000F

保留

0x0010~0x1FFE

可賦給network_PIDProgram_map_PIDelementary_PID或作其他用途

0x1FFF

空的分組

   

PAT的表結構分析

ANALYZEOTHE STRUCTUREOPAT

 

        首先,對PAT的表結構進行分析。下面給出了PAT表的基本結構:

節目關聯段

Syntax(句法結構)         No. ofbits(所佔位數)   Identifier(識別符)  Note(註釋)

program_association_section(){

table_id                                            8                      uimsbf                                                  

Section_syntax_indicator               1                          bslbf                   通常設爲“1”

"0"                                                     1                        bslbf

Reserved                                         2                        bslbf

Section_length                                12                      uimsbf                 見註釋

transport_stream_id                        16                       uimsbf            見註釋

Reserved                                         2                         bslbf

Version_number                              5                         uimsbf             見註釋

Current_next_indicator                   1                          bslbf                 見註釋

Section_number                              8                          uimsbf            見註釋

last_section_number                       8                          uimsbf            見註釋

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

    program_number                         16                         uimsbf        見註釋

    reserved                                         3                          bslbf

    if(program_number == 0){

        network_PID                             13                         uimsbf        見註釋

    }

    else{

        program_map_PID                 13                         uimsbf        見註釋

    }

}

CRC_32                                         32                  rpchof                  見註釋

}



這裏我們注意關注五個字段:

        table_id(賦值):PATtable_id應爲0x00

          transport_stream_id(傳輸流標誌):用以標識來源於網絡中任何其他複合流的TS

        program_number(節目號):規定program_map_PID可適用的節目。當值爲0x0000時,其後的PID參照將是網絡PID。它可以作爲一個指示符號,例如用於廣播通道。

        network_PID(網絡PID):僅當program_number爲0x00時使用

        program_map_PID(節目映射PID):據此找出相應的PMT

 

PAT的實例分析

ANALYZEOREAL EXAMPLE OPAT

 

        藉助碼流分析儀,我們可以很清楚地以實例的方式更加清晰地瞭解PAT的結構。下面給出的就是一個TS流的PAT分析情況:



   根據上表可以看出,這個TS流裏共有6套節目,其映射關係PID分別爲0xc90xcb0xce0xcc0xcd0xca。(注:0xc9=201

        下面給出的是PMT的簡單解析:


        兩相比較,可以很清楚地知道,PAT是如何鎖定各個PMT的(每個節目都有一個自己的PMT)。

Q1:如何找到一個特定的節目?

1.已知節目名稱(或id等信息)

P248

        首先要從節目關聯表PAT中獲取這個節目的節目映射表PMTPID值,再從TS流中找出與此PID值相對應的節目映射表PMT;再從PMT中獲取構成這個節目的基本碼流的PID值,從而根據該PID過濾出相應的視頻、音頻和數據等基本碼流。最後解碼恢復爲原始信號。

PMT解析

PARSINGOF PMT

"PMT是連接節目號與節目元素的橋樑"

       節目映射表PMT的意義在於,它給出了節目號與組成這個節目元素之間的映射;也就是說,PMT是連接節目號與節目元素的橋樑。我們知道,一個電視節目至少包含了視頻和音頻數據,而每一個節目的視音頻數據都是以包的形式在TS流中傳輸的;所以說,一個TS流包含了多個節目的視頻和音頻數據包。要想過濾出一個TS流中其中一個節目的視頻和音頻,則需要知道這個節目中視頻和音頻的標識號PIDPMT表的作用就在於,它提供了每個節目視頻、音頻(或其他)數據包的PID

 

PMT的表結構分析

ANALYZEOTHE STRUCTUREOPMT

 

        先給出PMT表的段結構:

Syntax (句法結構)         No. of bits(所佔位數)   Identifier(識別符)  Note(註釋)
program_map_section(){
table_id                                               8                       uimsbf                                                  
Section_syntax_indicator                 1                          bslbf                   通常設爲“1”
"0"                                                        1                        bslbf
Reserved                                              2                        bslbf
Section_length                                   12                      uimsbf                 見註釋
program_number                              16                       uimsbf            
Reserved                                              2                         bslbf
Version_number                                5                         uimsbf             見註釋
Current_next_indicator                    1                          bslbf                 見註釋
Section_number                                8                          uimsbf            見註釋
last_section_number                        8                          uimsbf            見註釋
reserved                                              3                          bslbf
PCR_PID                                             13                         uimsbf           見註釋
reserved                                              4                          bslbf
program_info_length                       12                        uimsbf            頭兩位爲"00"
for(i=0;i<N;i++){
    descriptor()
}
for(i=0;i<N1;i++){
    stream_type                                8                          uimsbf        見註釋
    reserved                                       3                           bslbf
    elementary_PID                         13                        uimsbf        見註釋
    reserved                                       4                           bslbf
   ES_info_length                          12                        uimsbf             頭兩位爲"00"
    for(j=0;j<N2;j++){
        descriptor();
    }
}
CRC_32                                         32                  rpchof                  見註釋
}

 這裏着重介紹兩個字段:

elementary_PID:標識了該節目(program_number)攜帶的基本流的識別號PID

stream_type:流類型,指出了PIDelementary_PID的基本流的類型

 

附:流類型取值說明

取值

描述

0x00

國際標準保留

0x01

視頻

0x02

視頻或受限參數視頻流

0x03

音頻

0x04

音頻

0x05

private_sections

0x06

包含專用數據的PES分組

0x07

ISO/IEC 13533 MHEG

0x08

 

0x09

ITU-T Rec.H.222.1

0x0A~0x0D

GB/T類型

0x0E

GB/T輔助

0x0F~0x7F

GB/T保留

0x80~0xFF

用戶專用



PMT的實例分析



首先,注意到這張PMT表的progam_number=0xc9,就是我們在上面解析PAT表得到的。

        從上面可以知道,節目號爲0xc9(即201)的節目有兩個單元流:

流名稱

標識號

類型

說明

MPEG2視頻

ES PID=0x21

stream_type=0x02

ES PID即爲elementary_PID

MPEG1音頻

ES PID=0x28

stream_type=0x03

ES PID即爲elementary_PID

        elementary_PIDstream_type的意義在於,告知接收機基本流的類型和識別PID。要想獲取這個節目的視頻,只需要對PID0x21的數據包進行過濾,並交由視頻處理模塊處理。下圖所示(除了節目名稱,還需要SDT表信息)即爲PATPMT共同獲取的信息。

 



  上圖給出了在一個TS流中PSI各表之間的聯繫。首先從PAT表出發,獲取當前有哪些節目號(program_map_PID),再根據這些節目號找出program_number相同的PMT;獲取到PMT後,即可根據elementary_PIDstream_type來確定要過濾哪些含有基本流的TS包,以及這些包裏面是什麼類型的數據。這樣,機頂盒就可以過濾出相應的節目(視頻和音頻數據)來收看了。

發佈了1 篇原創文章 · 獲贊 2 · 訪問量 2萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章