0 引 言
移動多媒體廣播目前已經成為炙手可熱的發(fā)展熱點。移動多媒體廣播業(yè)務是指通過衛(wèi)星和地面無線廣播方式,在具有7英寸以下小屏幕的移動便攜式終端上,實現隨時隨地接收廣播電視節(jié)目收視與信息服務。
我國于2006年提出了具有自主知識產權的中國移動多媒體廣播(China Mobile Multimedia Broadcast—ing,CMMB)系統,能夠支持諸如手機、PDA、MP3、MP4、數碼相機、筆記本式計算機等小尺寸、小屏幕、移動便攜的多種終端,實現隨時隨地提供廣播影視節(jié)目和信息服務,滿足當代社會“信息無處不在”的需求。為了實現較高質量的電視節(jié)目接收和播放,終端的性能起著重要的作用,其中終端的音視頻解碼能力又是主要因素。同時兼顧到終端的成本,選擇合適的軟硬件平臺十分關鍵。因此本設計兼顧數字移動電視的性能要求和成本兩個方面。
l CMMB系統架構與終端結構簡介
2006年10月24日,國家廣播電影電視總局正式頒布了中國移動多媒體廣播CMMB系統的廣播信道行業(yè)標準《GY/T 220.1—2006移動多媒體廣播第1部分:廣播信道幀結構、信道編碼和調制》,確定了采用我國自主研發(fā)的移動多媒體廣播傳輸技術標準(Satellite—Terrestrial Interactive Multi—service Infrastructure。STiMi)。目前國際上還沒有形成統一的移動多媒體廣播技術標準,尚處于大規(guī)模應用的前期,因此該標準的及時出臺,對我國移動多媒體廣播和相關民族工業(yè)的發(fā)展具有重要的促進作用。
CMMB技術體系是利用大功率S波段衛(wèi)星信號覆蓋全國,利用地面增補轉發(fā)器同頻同時同內容轉發(fā)衛(wèi)星信號補點覆蓋衛(wèi)星信號盲區(qū),利用無線移動通信網絡構建回傳通道,從而組成單向廣播和雙向交互相結合的移動多媒體廣播網絡。CMMB體系架構如圖1所示。
數字移動電視終端的硬件部分主要分為兩部分:電視的接收模塊和播放顯示模塊。前者負責控制CMMB信號,后者負責播放音視頻數據。數字移動電視的接收模塊采用泰合志恒公司生產的模塊。接收模塊的主要功能包含:電視芯片的初始化,設置頻點,掃描頻點;獲取頻道信息,設置頻道;接收及停止音視頻數據;測試電視信號強度大小。播放顯示模塊以三星的ARMll處理器S3C6400為核心的嵌入式系統。
終端的軟件部分以Linux操作系統為平臺,而電視播放器軟件結合泰合志恒電視接收模塊的SDK,能夠實現數字電視的控制和播放。
2 數字電視系統軟件設計
數字電視的系統結構由主界面、電視接收模塊SDK和音視頻播放模塊3部分組成,如圖2所示。
3個模塊的主要功能如下:
主界面:提供數字移動電視的用戶界面,與用戶交互,提供播放電視,選臺,設置音量,設置靜音等功能。電視接收模塊SDK:數字電視控制引擎,封裝SPI的驅動程序,向上提供接口,用來接收數字電視信號,提供音視頻數據,控制信息等。音視頻播放模塊:用于播放音視頻數據。
2.1 主界面[!--empirenews.page--]
主界面完成的具體工作包含:搜索可用的電視頻點;選擇收看的電視頻道;檢測當前的信號強度;讀取接收到的音視頻數據;對接收到的音視頻數據進行解碼;播放解碼后的音視頻數據;對當前播放的節(jié)目進行錄像;調節(jié)音量大??;靜音功能。
主界面利用調用泰合電視接收模塊SDK,通過SPI驅動程序讀寫數據,并將接收到的CMMB復用子幀解析成H.264格式的視頻數據,AAC格式的音頻數據和其他數據。然后調用播放器模塊,將H.264格式的視頻數據和AAC格式的音頻數據解碼并播放。
2.2 電視接收模塊SDK
電視接收模塊SDK提供對CMMB電視信號的控制,包括:電視芯片的初始化,設置頻點,掃描頻點;得到頻道信息,設置頻道;接收及停止音視頻數據;測試電視信號強度大小。
該模塊主要由數據處理模塊及信號控制模塊2個子模塊組成。
數據處理子模塊在打開引擎時,會生成一個線程,這個線程用來讀取CMMB信號,并進行分析、處理,其流程如圖3所示。
這個子模塊是一個死循環(huán),在循環(huán)中,先通過一個標志進行判斷,如果需要處理數據,首先讀取一幀數據,如果沒有數據,則阻塞在這兒。然后對這幀數據進行分析,分別放入音頻,視頻,其他數據的緩沖區(qū),最后,調用回調函數對各種數據進行處理,將音視頻數據發(fā)送給音視頻播放模塊來播放。
另一個子模塊,信號控制模塊主要是提供控制接口讓上層調用,以完成對CMMB信號的處理。該子模塊主要包含以下功能接口函數:引擎的初始化:創(chuàng)建讀數據線程,啟動初始化;引擎的打開:對電視芯片初始化;設置頻點:設置當前頻點;得到ESG信息:從信號中提取ESG信息并分析;關閉引擎:清除用到的資源,硬件重置位;得到頻道信息列表:發(fā)送請求,分析頻道信號;設置頻道:設置當前頻道;得到參數:能得到信號強度,當前頻道等參數。
2.3 音視頻播放模塊
音視頻播放由3個線程來完成。這3個線程分別為視頻處理線程、音頻處理線程、數據接收線程。
視頻處理線程:
(1)先判斷緩沖區(qū)隊列有沒有視頻數據,如果沒有,休眠10 ms;
(2)有數據的話,因為視頻數據是根據時間戳順序作為隊列放在緩沖區(qū)的,取出第一幀,判斷是否已經過時,如果是很老的數據,已經錯過了播放時間,則判斷幀類型,如果是關鍵幀,則解碼并顯示,否則,丟掉這一幀,然后轉到第(1)步;
(3)否則,判斷這一幀是否到了播放時間,如果是,則將這幀數據解碼并顯示,然后轉到第(1)步;
(4)如果沒有到播放時間,則休眠10 ms。然后轉到第(1)步。
音頻處理線程:
(1)先判斷緩沖區(qū)隊列有沒有音頻數據,如果沒有,休眠10 ms;
(2)有數據的話,因為音頻數據是根據時間戳順序作為隊列放在緩沖區(qū)的,取出第一幀,判斷是否已經過時,如果是很老的數據,已經錯過了播放時間,則丟棄,然后轉到第(1)步;
(3)否則,判斷是否到了播放時間,如果是,則將這幀數據解碼并播放,然后轉到第(1)步;
(4)如果沒有到播放時間,則休眠10 ms。然后轉到第(1)步。
數據接收線程:數據接收線程不屬于播放器模塊,它是電視接收模塊的一部分。
(1)如果有數據到來,判斷有沒有視頻數據,如果有,將它們全部插入到視頻緩沖區(qū);[!--empirenews.page--]
(2)判斷有沒有音頻數據,如果有,將它們都插入到音頻緩沖區(qū);
(3)阻塞,等待數據到來;
(4)當有數據到來時,轉到第(1)步。
音視播放器模塊共有4個子模塊:緩沖區(qū)管理、音視頻同步、音視頻解碼、視頻顯示。
2.3.1 緩沖區(qū)管理
一共設計2個隊列,音頻緩沖隊列,視頻緩沖隊列。每幀數據放入緩沖區(qū),成員分別為幀長,幀類型(視頻有,音頻無),時間戳,數據指針。幀長表示幀數據長度,幀類型里,1表示關鍵幀,0表示非關鍵幀,時間戳表示幀數據播放的時間,數據指針指向幀數據緩沖區(qū)。當有新的數據到來時,構造一個幀成員,填入各項參數,然后根據時間戳,將他插入到緩沖隊列,播放時間近的放在前面。流程如下:
(1)首先構造一個幀緩沖成員;
(2)按照幀數據內容填充幀緩沖;
(3)根據時間戳,按照近的在前面的原則,放入緩沖區(qū)隊列。
2.3.2 音視頻同步
音視頻數據始終與系統時間進行同步,起初初始化時,先在緩沖區(qū)存放1 s的數據。因為系統時間與發(fā)送的數據時間戳不一定相同,所以不用絕對時間,而是以緩沖區(qū)的第一幀時間戳為開始時間,后面的數據都以與這幀數據的時間差這個相對時間為準。
視頻和系統時間同步的流程如下:
(1)判斷緩沖隊列是否為空,如果是空,休眠10 ms;
(2)如果非空,從緩沖隊列取出一幀,判斷這幀數據是否已經過時,如果超過播放時間100 ms以上,則判斷幀類型,如果是非關鍵幀,丟掉這幀數據,否則處理這幀數據,然后跳到第(1)步;
(3)如果這幀數據剛剛超過播放時間并且超過時間不超過100 ms,則處理這幀數據,然后跳到第(1)步。
音頻和系統時間同步的處理流程如下:
(1)判斷音頻緩沖區(qū)是否為空,如果是空,休眠10 ms;
(2)如果非空,取出一幀數據,判斷是否已經超過播放時間100 ms,如果是,丟棄這幀數據,跳到第(1)步;
(3)否則,處理這幀數據,跳到第(1)步。
2.3.3 音視頻解碼
數字移動電視信號目前音頻采用的是AAC編碼,利用開源解碼庫libfaad2來解碼,libfaad2的使用流程如下:
(1)首先對解碼器進行配置,設置一些解碼參數,例如采樣率,聲道數等;
(2)然后初始化解碼器;
(3)如果有需要解碼的音頻幀,依次調用NeAAC—DecDecode進行解碼;
(4)當音頻幀都解碼完畢,需要關閉解碼器。
三星的S3C6400芯片提供了多種格式視頻的硬件編解碼器,簡稱為MFC(Multi—format Video Codec),支持的功能有:MPEG一4 Simple Profile編解碼;H.264/AVC Baseline Profile編解碼;H.263 P3編解碼;VC一1(WMV9)Main Profile編解碼;支持多任務,如同時完成1路編碼和3路解碼;支持多格式,如同時進行MPEG一4編碼和H.264解碼。理論上MFC性能可以達到全雙工的720*480 30幀/s(或720*576 25幀/s)的編解碼。
MFC驅動負責直接控制MFC硬件完成實際的編解碼操作,提供類似字符設備的接口;MFC API封裝了底層驅動的控制接口,給上層提供函數調用的接口方式,解碼器調用流程如圖4所示。
2.3.4 視頻顯示[!--empirenews.page--]
對于解碼后的數據,首先要將YUV格式轉換為RGB格式,轉換可以使用硬件來進行。三星的S3C6400芯片提供的PostProcessor(以下簡稱Post或PP)支持的功能有:視頻/圖像的縮放;視頻格式轉換;顏色空間轉換(RGB<一>YUV);視頻輸入支持420,422格式,輸出支持YCbCr420,YCbCr422格式;圖像格式支持16位RGB(565格式)、24位RGB;最大分辨率支持2 048×2 048;支持單幀模式(Per Frame RunMode)和自動模式(Free Run Mode)。
3 結 語
本數字電視系統能夠實現穩(wěn)定可靠的對CMMB信號的控制并具有完善的正常或異常退出機制。接收CMMB標準(H.264 320*240/AAC)的音視頻數據時,播放速率達到25幀/s。畫面流暢,停頓少,沒有明顯的馬賽克。界面友好,操作簡便,功能穩(wěn)定,同時具有較高的實時性。