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