基于S3C6400的移動多媒體廣播終端設計
主界面完成的具體工作包含:搜索可用的電視頻點;選擇收看的電視頻道;檢測當前的信號強度;讀取接收到的音視頻數據;對接收到的音視頻數據進行解碼;播放解碼后的音視頻數據;對當前播放的節目進行錄像;調節音量大小;靜音功能。
主界面利用調用泰合電視接收模塊SDK,通過SPI驅動程序讀寫數據,并將接收到的CMMB復用子幀解析成H.264格式的視頻數據,AAC格式的音頻數據和其他數據。然后調用播放器模塊,將H.264格式的視頻數據和AAC格式的音頻數據解碼并播放。
2.2 電視接收模塊SDK
電視接收模塊SDK提供對CMMB電視信號的控制,包括:電視芯片的初始化,設置頻點,掃描頻點;得到頻道信息,設置頻道;接收及停止音視頻數據;測試電視信號強度大小。
該模塊主要由數據處理模塊及信號控制模塊2個子模塊組成。
數據處理子模塊在打開引擎時,會生成一個線程,這個線程用來讀取CMMB信號,并進行分析、處理,其流程如圖3所示。

這個子模塊是一個死循環,在循環中,先通過一個標志進行判斷,如果需要處理數據,首先讀取一幀數據,如果沒有數據,則阻塞在這兒。然后對這幀數據進行分析,分別放入音頻,視頻,其他數據的緩沖區,最后,調用回調函數對各種數據進行處理,將音視頻數據發送給音視頻播放模塊來播放。
另一個子模塊,信號控制模塊主要是提供控制接口讓上層調用,以完成對CMMB信號的處理。該子模塊主要包含以下功能接口函數:引擎的初始化:創建讀數據線程,啟動初始化;引擎的打開:對電視芯片初始化;設置頻點:設置當前頻點;得到ESG信息:從信號中提取ESG信息并分析;關閉引擎:清除用到的資源,硬件重置位;得到頻道信息列表:發送請求,分析頻道信號;設置頻道:設置當前頻道;得到參數:能得到信號強度,當前頻道等參數。
2.3 音視頻播放模塊
音視頻播放由3個線程來完成。這3個線程分別為視頻處理線程、音頻處理線程、數據接收線程。
視頻處理線程:
(1)先判斷緩沖區隊列有沒有視頻數據,如果沒有,休眠10 ms;
(2)有數據的話,因為視頻數據是根據時間戳順序作為隊列放在緩沖區的,取出第一幀,判斷是否已經過時,如果是很老的數據,已經錯過了播放時間,則判斷幀類型,如果是關鍵幀,則解碼并顯示,否則,丟掉這一幀,然后轉到第(1)步;
(3)否則,判斷這一幀是否到了播放時間,如果是,則將這幀數據解碼并顯示,然后轉到第(1)步;
(4)如果沒有到播放時間,則休眠10 ms。然后轉到第(1)步。
音頻處理線程:
(1)先判斷緩沖區隊列有沒有音頻數據,如果沒有,休眠10 ms;
(2)有數據的話,因為音頻數據是根據時間戳順序作為隊列放在緩沖區的,取出第一幀,判斷是否已經過時,如果是很老的數據,已經錯過了播放時間,則丟棄,然后轉到第(1)步;
(3)否則,判斷是否到了播放時間,如果是,則將這幀數據解碼并播放,然后轉到第(1)步;
(4)如果沒有到播放時間,則休眠10 ms。然后轉到第(1)步。
數據接收線程:數據接收線程不屬于播放器模塊,它是電視接收模塊的一部分。
(1)如果有數據到來,判斷有沒有視頻數據,如果有,將它們全部插入到視頻緩沖區;
評論