主要是實現簡單的搜索,能獲取到節目列表,點擊列表內容實現播放,整個效果流程以下圖所示:html
結合本身在相關項目中實現他人接口,對整個流程的理解給出下面流程圖,可能存在缺陷,整體思路是這樣實現的:java
整個搜索基於本地在570頻點上播放的一個碼流 ,播放須要的碼流信息以下:網絡
private static final long freq = 570000000; private String freqInfo = "frequency://" + freq + "?symbol_rate=6875000&delivery=cable&modulation=qam64&frequency=" + freq;// 頻點相關信息 private String promInfo = "program://450?audio_stream_pid=52&audio_stream_type=audio_mpeg1&video_stream_pid=51&video_stream_type=video_mpeg2&pcr_stream_pid=51&ca_required=false";// 搜索到的節目信息
上面給出的信息,能夠直接拿去解碼播放了,咱們經過如下各表的解釋,看看以上數據是怎麼來的。ide
一、NIT(Network Information Table)表:網絡信息表,NIT傳送本網絡以及與此有關的其餘網絡的一些信息。每一個網絡都有惟一的標識符(network_id)。NIT把一些節目集中在一塊兒,提供調諧接收必須的轉發器、頻率、符號率、調製方式等參數,供接收解碼的自動調諧接收。NIT中對該網絡中全部的TS流都有描述,網絡中的頻點列表就從NIT中得到,每一個頻點的頻率、調製方式等都在該表中有說明。ui
transport_stream下描述了全部TS流,802頻點下的相關參數,若是要搜索整個網絡,下面的頻點都要搜索到。這裏咱們只去搜了570頻點。spa
二、SDT(Service Description Table)表:業務描述表,SDT表給出了傳送流中每一個節目或業務有關的其餘節目的名稱和參數,包含某節目屬於哪一節目業務組、節目業務類型、節目業務提供者、業務運行狀態等信息。code
做用:提供業務的相關信息,好比說名稱、提供者名稱、業務類型等,用戶在收看某頻道時能夠根據須要隨時查看這些信息。比較典型的是EPG中頻道列表中各頻道的名稱即從SDT得到;當在收看某頻道時,能夠查看該頻道的提供者名稱等信息也是從SDT中得到。orm
咱們看到這個節目的名稱是:電視指南,Service_id=450(0x1c2),這個要保存下來,後面會用到。視頻
三、PAT(Program Association Table)表:節目關聯表,PAT表主要包含頻道號碼和每個頻道對應的PMT的PID號碼,這些信息咱們在處理PAT表格的時候會保存起來,之後會使用到htm
SDT中Service_id=program_number=450(0x1c2),PMT的PID=0x0032,經過這個找到電視指南這個節目的PMT的PID。
四、PMT(Program Map Table)表:節目映射表,PMT表中包含的數據以下:
(1) 當前頻道中包含的全部Video數據的PID
(2) 當前頻道中包含的全部Audio數據的PID
(3) 和當前頻道關聯在一塊兒的其餘數據的PID(如數字廣播,數據通信等使用的PID)。
只要咱們處理了PMT,那麼咱們就能夠獲取頻道中全部的PID信息,例如當前頻道包含多少個Video,共多少個Audio,和其 他數據,還能知道每種數據對應的PID分別是什麼. 這樣若是咱們要選擇其中一個Video和Audio收看,那麼只須要把要收看的節目的Video PID和Audio PID保存起來,在處理Packet的時候進行過濾便可實現。
獲取音視頻相關信息,能夠實現播放相關節目。
(1) 搜臺:通常來講, 接收機開機以後的第一件事件是:搜臺。
目前關於搜臺過程不少, 可是最重要的固然是: 找到一個承載數字節目的頻點.
通常運營商都會在接收機上設定一個初始頻點,(叫主頻點,或中心頻點),接收機能夠根據這個頻點的網絡參數,如頻點,符號率,調製方式,去鎖定此頻點。
(2) 得到nit:通常狀況下,因爲nit裏的信息是關係到整個網絡的,所以,接收機先從該表入手,得到nit後,這個網絡中有多少流,每一個流的物理參數等都已得到。以後的其餘頻點鎖定就能夠依靠這些信息進行。
(3)得到sdt:依靠sdt,接收機能夠知道頻道名,頻道類型等信息,能夠構建出EPG應用的頻道列表。
(4) :若是這時候,用戶選定一個頻道進行播放,接收機會根據此頻道的service_id,判斷其所在的ts流,以後切換到此流中。
(5): 切換過來以後,尋找PAT, 得到此流全部的PMT,因爲serice_id必定和PAT中的progrma_number同樣,所以,很容易找到相應的pmt。
(6) :得到pmt, 從pmt中得到pcr_pid,auido_pid,vidoe_pid以後,將這三個pid設入接收機的解碼器中,便可完成視頻的播放。
http://www.360doc.com/content/11/1223/17/7399771_174513153.shtml