機頂盒demux的工作原理


在機頂盒中demux部分相對來說是比較復雜的部分,對於機頂盒軟件開發的新手來說通常在這里會遇到一些困難,今天特意研究了一下驅動層代碼,有一點自己的理解,因此寫下來記錄一下學習過程。

機頂盒中數據是如何流向的呢?

清流數據大致流向: TS流-->高頻頭(tuner) -->過濾(demux)-->緩沖區(Buffer)-->中間件、app

TS流中的數據是前段經過編碼、復用、調制之后的數據,機頂盒通過tuner對TS流解調,demux解復用然后將數據送到buffer中,最后機頂盒通過讀取buffer獲得需要的數據。

那這個數據流是如何驅動的呢?

eg:播放節目:

軟件在啟動時會創建很多任務,其中一個就是過濾不同psi、SI表(pat/pmt等),它循環的向demux請求PSISI表(主要設置的參數包括PID、data、mask),demux的數據是從tuner過來的,因此請求之前需要tuner先鎖定頻點,解調出數據,之后就解復用,解析PMT表后可以獲得音視頻的pid,  然后將音視頻、PCR的PID送到播放器中進行播放, 當然播放過程中也需要不停的根據PID請求音視頻數據。

 

在demux中數據是如何過濾的呢?

demux中主要的資源有slot、  filter和 buffer

 

主要分為4個步驟:

1. 判斷是否有空閑的filter,沒有的話就直接退出了。每一個數據請求需要占用一個filter,如PAT/PMT等表的請求,通常是需要一直占用filter的。

2. 將app設置下來的PID設到SLOT里面,同時設置slot的數據輸入端口,數據流的類型等, 然后根據這個slot創建一個虛擬通道,將slot、filter、buffer等聯系在一起。

  slot.in = DMX_INPUT_PORT;
  slot.pid = ReqPid;
  slot.type = DMX_CH_TYPE_SECTION;

  pid唯一標識包數據,同一類型的包只有一個pid,pid是demux的實現基礎,沒有設置demux就不能實現過濾。

  slot可以把它看成一個管理對象,管理PID、filter、buffer,一個slot對應一個PID,但可以對應對個filter。

3. 設置filter。首先設置filter的buffer,然后將app設置下來的data 、mask(data  mask相‘與’后來過濾數據)設置到filter中,filter將過濾后的數據放到buffer中。

4. 最后通過回調,將數據拋向app層。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM