青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

elva

精解PSI-SI(二)

DVB SI/PSI分析和處理

 

SI是Specific Information的簡(jiǎn)稱,PSI是program Specific Information.該機(jī)制允許DVB傳送各種各樣的訊息,比如節(jié)目名稱,電視臺(tái)名稱,各種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í)候,偽代碼需要這樣寫:

  void Process_Packet(unsigned char*buff)

  {

   int PID=GETPID(buff);

   if(PID==0x0000) 

   {

    Process_PAT(buff+4);

   }

   else if(PID==......)

   {

   }

   else

   {

    printf("Unknown PID!");

   }

  }

 所 有的表格都開始于Packet中的184字節(jié)的數(shù)據(jù)部分,但有的時(shí)候一個(gè)表格沒有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é)開始,否則表示有一個(gè)偏移量位置開始,具體 請(qǐng)參考ISO13818-1,第4字節(jié)到偏移量間的數(shù)據(jù)是系統(tǒng)填充的無(wú)效數(shù)據(jù)).

 下面針對(duì)解復(fù)用程序詳細(xì)分析一下PAT,PMT和SDT三類表格的格式.

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可以由用戶自己定義.

PAT表定義如下:

 

各字段含義如下:

 table_id:8 bits,標(biāo)志本表格的類型,應(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()開始,就是描述了當(dāng)前流中的頻道數(shù)目(N),每一個(gè)頻道對(duì)應(yīng)的PMT PID是什么.解復(fù)用程序需要和上圖類似的循環(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;

  int pmt_pid;

 }PMT_ITEM;

 PMT_ITEM pmt[64];

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)

  {

   Process_PAT(buff+4);

  }

  else if(PID==.....)

  {

  }

  else

  {

   

   for(i=0;i<64;i++)

   {

    if(PID==pmt[i].pmt_pid)

    {

     Process_PMT(buff+4);

     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開始,到CRC_32(包含)的字節(jié)總數(shù).

 program_number:16bits的頻道號(hào)碼,表示當(dāng)前的PMT關(guān)聯(lián)到的頻道.換句話就是說(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é)目類型和對(duì)應(yīng)的PID號(hào)碼了.

stream_type:8bits流類型,標(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類似的信息長(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)行過濾即可實(shí)現(xiàn).

比較全面實(shí)現(xiàn)解復(fù)用的偽代碼如下:

int Video_PID=0x07e5,Audio_PID=0x07e6;

void Process_Packet(unsigned char*buff)

{

 int I;

 int PID=GETPID(buff);

 if(PID==0x0000)

 {

  Process_PAT(buff+4);

 }

 else if(PID==Video_PID)

 {

  SaveToVideoBuffer(buff+4);

 }

 else if(PID==Audio_PID)

 {

  SaveToAudioBuffer(buff+4);

 }

 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)的原理了.(好!洗耳恭聽!)

  機(jī) 頂盒先調(diào)整高頻頭到一個(gè)固定的頻率(如498MHZ),如果此頻率有數(shù)字信號(hào),則COFDM芯片(如MT352)會(huì)自動(dòng)把TS流數(shù)據(jù)傳送給MPEG- 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ù)并保存.如果沒有發(fā)現(xiàn)PAT或者沒有發(fā)現(xiàn)PMT,說(shuō)明該頻段沒有信號(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)傳輸速度足夠快(就是稱之為"碼率"的東東),實(shí)現(xiàn)實(shí)時(shí)播放是沒有任何問題的.

 到這里雖然實(shí)現(xiàn)了解復(fù)用,但可以看出,使用的PID都是枯燥的數(shù)字,如果調(diào)臺(tái)要用戶自己輸入數(shù)字那可是太麻煩了,而且還容易輸入錯(cuò)誤,操作非常不直觀,即使做成一個(gè)菜單讓用戶選擇也是非常的呆板.針對(duì)這個(gè)問題,DVB系統(tǒng)提出了一個(gè)SDT表格,該表格標(biāo)志一個(gè)節(jié)目的名稱,并且能和PMT中的PID聯(lián)系起來(lái),這樣用戶就可以通過直接選擇節(jié)目名稱來(lái)選擇節(jié)目了.

SDT, Service description section,服務(wù)描述段

 SDT可以提供的信息包括:

(1) 該節(jié)目是否在播放中

(2) 該節(jié)目是否被加密

(3) 該節(jié)目的名稱

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開始,到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-幾分鐘后馬上開始,3-被暫停播出,4-正在播放,其他---保留

  free_CA_mode:1bits的加密信息,'1'表示該節(jié)目被加密.

  緊 接著的是描述符,一般是Service descriptor,分析此描述符可以獲取servive_id指定的節(jié)目的節(jié)目名稱.具體格式請(qǐng)參考 EN300468中的Service descriptor部分.分析完畢,則節(jié)目名稱和節(jié)目號(hào)碼已經(jīng)聯(lián)系起來(lái)了.機(jī)頂盒程序就可以用這些節(jié)目名稱代替 PID讓用戶選擇,從而實(shí)現(xiàn)比較友好的用戶界面!

 下面參考一下<<Seekfor MPEG2 decoder>>中的界面和顯示信息.

 

上 圖是<<Seekfor MPEG2 decoder>>打開三個(gè)不同的碼流文件(*.ts)形成的PID信息和節(jié)目名稱.用戶 可以通過切換節(jié)目名稱的下拉列表框切換節(jié)目,也可以通過"視頻流"和"音頻流"下拉列表框切換Video和Audio!這些數(shù)據(jù)都是通過分析PAT, PMT和SDT得到的.

posted on 2008-11-12 17:51 葉子 閱讀(1583) 評(píng)論(0)  編輯 收藏 引用 所屬分類: MPEG

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            亚洲欧洲在线一区| 亚洲精品国精品久久99热一| 99视频在线精品国自产拍免费观看 | 久久精品一区二区| 国产午夜精品久久| 91久久精品国产91性色| 欧美精品91| 亚洲欧美久久| 亚洲综合第一| 国产视频久久久久| 欧美肥婆bbw| 国内偷自视频区视频综合| 日韩视频一区二区三区在线播放 | 亚洲成色www久久网站| 国产精品综合视频| 亚洲已满18点击进入久久| 亚洲精选91| 欧美天堂亚洲电影院在线观看 | 91久久久久久久久久久久久| 欧美人与性动交α欧美精品济南到| 欧美综合激情网| 国产伦精品一区二区三区在线观看| 99国产成+人+综合+亚洲欧美| 亚洲一区二区欧美| 欧美极品一区二区三区| 在线观看日韩国产| 免费观看日韩| 亚洲人成网站777色婷婷| 亚洲欧洲综合| 国产欧美在线播放| 久久综合狠狠综合久久综合88| 久久激情视频免费观看| 黑人极品videos精品欧美裸| 久久久久五月天| 一区二区激情视频| 亚洲国产成人久久综合一区| 亚洲免费视频成人| 亚洲国产合集| 国产精品一级| 久久久在线视频| 亚洲一区二区日本| 亚洲人精品午夜| 欧美激情91| 久久久91精品国产| 先锋影音久久| 亚洲特黄一级片| 亚洲精品色婷婷福利天堂| 欧美视频一区二区三区在线观看 | 久久精品国产精品| 一区二区三区精品久久久| 亚洲国产精品一区在线观看不卡 | 欧美在线综合| 亚洲精品三级| 国产精品美女久久久久久久| 欧美精品自拍| 欧美三级电影一区| 国产精品高潮呻吟久久| 久久人人看视频| 欧美乱妇高清无乱码| 欧美精品三级在线观看| 国产精品久久二区| 国产日韩一区二区三区在线播放| 国产精品久久久久久亚洲毛片| 国产精品久久一区二区三区| 欧美视频在线一区| 欧美日韩在线免费观看| 国产精品jizz在线观看美国 | 久久久久久久成人| 欧美凹凸一区二区三区视频| 欧美不卡在线| 国产色爱av资源综合区| 国产精品户外野外| 国产精品午夜视频| 亚洲高清视频一区二区| 亚洲午夜一区| 欧美96在线丨欧| 亚洲综合电影一区二区三区| 久久九九国产精品怡红院| 国产精品盗摄一区二区三区| 国内一区二区三区| 亚洲精品一区中文| 鲁大师影院一区二区三区| 亚洲图片激情小说| 美女爽到呻吟久久久久| 一区二区高清视频在线观看| 麻豆久久精品| 亚洲蜜桃精久久久久久久| 欧美伊人久久| 一区二区三区www| 欧美日韩一区在线| 中文国产亚洲喷潮| 日韩一区二区精品| 国产精品久久久久久久第一福利 | 亚洲第一久久影院| 欧美在线免费观看| 一本色道久久| 国产精品青草综合久久久久99| 亚洲九九精品| 一区二区三区毛片| 国产精品成人午夜| 久久av一区二区三区漫画| 亚洲女性裸体视频| 欧美亚州一区二区三区| 亚洲天天影视| 欧美一区三区二区在线观看| 激情综合色丁香一区二区| 亚洲电影免费观看高清完整版在线| 欧美中文在线观看国产| 亚洲精品一区二区三区99| 亚洲一区二区三区在线播放| 国产夜色精品一区二区av| 久久夜色撩人精品| 欧美另类99xxxxx| 欧美有码在线观看视频| 欧美国产日韩在线| 国产精品实拍| 欧美韩日精品| 国产午夜亚洲精品羞羞网站| 亚洲欧洲一区二区天堂久久| 国产精品www色诱视频| 久久国产精品99久久久久久老狼| 久久久噜噜噜久久| 久久婷婷蜜乳一本欲蜜臀| 欧美日韩精品免费观看视一区二区 | 久久久久久久久久看片| 亚洲国产欧美不卡在线观看| 欧美一区二区播放| 亚洲一区二区在线免费观看| 欧美成年人网站| 91久久久在线| 亚洲精选在线观看| 欧美日本高清视频| 一本色道精品久久一区二区三区| 91久久精品网| 欧美在线视频一区二区| 久久精品国产综合| 激情文学综合丁香| 午夜视频久久久久久| 欧美一区二区三区免费观看| 国产精品久久| 性欧美精品高清| 欧美成人午夜77777| 99热免费精品| 欧美成人综合网站| 亚洲国产电影| 中文国产成人精品| 国产日韩欧美在线播放不卡| 亚洲欧美色一区| 欧美激情区在线播放| 亚洲午夜电影| 性欧美videos另类喷潮| 欧美jizz19性欧美| 亚洲欧美激情一区二区| 国产一区二区三区四区五区美女| 欧美中文在线观看国产| 免费精品99久久国产综合精品| 一区二区欧美精品| 亚洲电影av| 狠狠色狠狠色综合人人| 国产精品成人免费视频| 欧美日本二区| 欧美激情欧美激情在线五月| 9人人澡人人爽人人精品| 欧美在线观看视频一区二区| 99视频日韩| 日韩午夜激情| 中文网丁香综合网| 9i看片成人免费高清| 亚洲精一区二区三区| 亚洲国产精品成人精品| 91久久综合| 亚洲一卡久久| 亚洲毛片在线观看| 亚洲乱码国产乱码精品精 | 午夜亚洲性色福利视频| 亚洲性视频h| 欧美在线看片a免费观看| 欧美在线亚洲综合一区| 美女视频网站黄色亚洲| 欧美精品18+| 国产免费成人在线视频| 国产精品国产精品国产专区不蜜| 欧美性感一类影片在线播放| 国产精品欧美日韩| 亚洲国产日韩欧美| 亚洲性感美女99在线| 久久精品一区中文字幕| 亚洲国产成人av在线| 一区二区三区三区在线| 久久网站热最新地址| 裸体歌舞表演一区二区| 久久免费视频网站| 亚洲国产视频a| 亚洲欧美在线一区| 欧美日本精品| 亚洲人在线视频| 久久综合伊人77777尤物| 一区二区三区不卡视频在线观看 | 久久精品国产亚洲高清剧情介绍| 久久久久久久久久久久久久一区|