楊祖芳 熊承義 陳方強(qiáng)
摘 要:隨著信息技術(shù)和計(jì)算機(jī)技術(shù)的飛速發(fā)展,在移動(dòng)設(shè)備上欣賞豐富的電視節(jié)目和接收及時(shí)的交通、股市等實(shí)時(shí)數(shù)據(jù)信息越來(lái)越成為眾多消費(fèi)者期待的功能。提出一種應(yīng)用于CMMB移動(dòng)多媒體廣播系統(tǒng)的手持?jǐn)?shù)字移動(dòng)電視終端的設(shè)計(jì),以三星的ARM11處理器S3C6400作為硬件平臺(tái),采用Linux作為軟件平臺(tái),詳細(xì)介紹了硬件結(jié)構(gòu)和軟件系統(tǒng)的設(shè)計(jì),實(shí)現(xiàn)數(shù)字移動(dòng)電視的音視頻解碼,最終實(shí)現(xiàn)數(shù)字移動(dòng)電視的播放。
關(guān)鍵詞:移動(dòng)多媒體廣播;S3C6400;數(shù)字移動(dòng)電視;媒體終端
中圖分類號(hào):TN919.8文獻(xiàn)標(biāo)識(shí)碼:B
文章編號(hào):1004-373X(2009)03-179-04
Design of Mobile Multimedia Broadcasting Terminal Based on S3C6400
YANG Zufang,XIONG Chengyi,CHEN Fangqiang
(College of Electronic Information Engineering,South-Central University for Nationalities,Wuhan,430074,China)
Abstract:With the rapid development of information technology and computer technology,appreciating a wealth of television programs and receiving real-time data such as prompt transportation,the stock market on the mobile equipment becomes the function which more and more consumers expected.A design of portable digital mobile TV terminal applied to China Mobile Multimedia Broadcasting system(CMMB) is presented.The design of hardware structure and software system are introduced in detail.The digital mobile TV terminal using Sumsung′s ARM11 processor S3C6400 as hardware platform,using Linux as software platform.The digital mobile TV audio and video decoding and digital mobile TV broadcasting are realized ultimately.
Keywords:mobile multimedia broadcast;S3C6400;digital mobile TV;medium terminal
0 引 言
移動(dòng)多媒體廣播目前已經(jīng)成為炙手可熱的發(fā)展熱點(diǎn)。移動(dòng)多媒體廣播業(yè)務(wù)是指通過(guò)衛(wèi)星和地面無(wú)線廣播方式,在具有7英寸以下小屏幕的移動(dòng)便攜式終端上,實(shí)現(xiàn)隨時(shí)隨地接收廣播電視節(jié)目收視與信息服務(wù)[1-3]。
我國(guó)于2006年提出了具有自主知識(shí)產(chǎn)權(quán)的中國(guó)移動(dòng)多媒體廣播(China Mobile Multimedia Broadcasting,CMMB) 系統(tǒng)[4,5],能夠支持諸如手機(jī)、PDA、MP3、MP4、數(shù)碼相機(jī)、筆記本式計(jì)算機(jī)等小尺寸、小屏幕、移動(dòng)便攜的多種終端,實(shí)現(xiàn)隨時(shí)隨地提供廣播影視節(jié)目和信息服務(wù),滿足當(dāng)代社會(huì)“信息無(wú)處不在”的需求。
為了實(shí)現(xiàn)較高質(zhì)量的電視節(jié)目接收和播放,終端的性能起著重要的作用,其中終端的音視頻解碼能力又是主要因素。同時(shí)兼顧到終端的成本,選擇合適的軟硬件平臺(tái)十分關(guān)鍵。因此本設(shè)計(jì)兼顧數(shù)字移動(dòng)電視的性能要求和成本兩個(gè)方面。
1 CMMB系統(tǒng)架構(gòu)與終端結(jié)構(gòu)簡(jiǎn)介
2006年10月24日,國(guó)家廣播電影電視總局正式頒布了中國(guó)移動(dòng)多媒體廣播CMMB系統(tǒng)的廣播信道行業(yè)標(biāo)準(zhǔn)《GY/T 220.1-2006 移動(dòng)多媒體廣播 第1 部分:廣播信道幀結(jié)構(gòu)、信道編碼和調(diào)制》,確定了采用我國(guó)自主研發(fā)的移動(dòng)多媒體廣播傳輸技術(shù)標(biāo)準(zhǔn)(Satellite-Terrestrial Interactive Multi-service Infrastructure,STiMi)。目前國(guó)際上還沒(méi)有形成統(tǒng)一的移動(dòng)多媒體廣播技術(shù)標(biāo)準(zhǔn),尚處于大規(guī)模應(yīng)用的前期,因此該標(biāo)準(zhǔn)的及時(shí)出臺(tái),對(duì)我國(guó)移動(dòng)多媒體廣播和相關(guān)民族工業(yè)的發(fā)展具有重要的促進(jìn)作用。
CMMB 技術(shù)體系是利用大功率S波段衛(wèi)星信號(hào)覆蓋全國(guó),利用地面增補(bǔ)轉(zhuǎn)發(fā)器同頻同時(shí)同內(nèi)容轉(zhuǎn)發(fā)衛(wèi)星信號(hào)補(bǔ)點(diǎn)覆蓋衛(wèi)星信號(hào)盲區(qū),利用無(wú)線移動(dòng)通信網(wǎng)絡(luò)構(gòu)建回傳通道,從而組成單向廣播和雙向交互相結(jié)合的移動(dòng)多媒體廣播網(wǎng)絡(luò)[6]。CMMB 體系架構(gòu)如圖1所示。
數(shù)字移動(dòng)電視終端的硬件部分主要分為兩部分:電視的接收模塊和播放顯示模塊。前者負(fù)責(zé)控制CMMB信號(hào),后者負(fù)責(zé)播放音視頻數(shù)據(jù)。數(shù)字移動(dòng)電視的接收模塊采用泰合志恒公司生產(chǎn)的模塊。接收模塊的主要功能包含:電視芯片的初始化,設(shè)置頻點(diǎn),掃描頻點(diǎn);獲取頻道信息,設(shè)置頻道;接收及停止音視頻數(shù)據(jù);測(cè)試電視信號(hào)強(qiáng)度大小。播放顯示模塊以三星的ARM11處理器S3C6400為核心的嵌入式系統(tǒng)[7]。
終端的軟件部分以Linux操作系統(tǒng)為平臺(tái)[8,9],而電視播放器軟件結(jié)合泰合志恒電視接收模塊的SDK,能夠?qū)崿F(xiàn)數(shù)字電視的控制和播放。
2 數(shù)字電視系統(tǒng)軟件設(shè)計(jì)
數(shù)字電視的系統(tǒng)結(jié)構(gòu)由主界面、電視接收模塊SDK和音視頻播放模塊3部分組成,如圖2所示。
3個(gè)模塊的主要功能如下:
主界面:提供數(shù)字移動(dòng)電視的用戶界面,與用戶交互,提供播放電視,選臺(tái),設(shè)置音量,設(shè)置靜音等功能。
電視接收模塊SDK:數(shù)字電視控制引擎,封裝SPI的驅(qū)動(dòng)程序,向上提供接口,用來(lái)接收數(shù)字電視信號(hào),提供音視頻數(shù)據(jù),控制信息等。
音視頻播放模塊:用于播放音視頻數(shù)據(jù)。
2.1 主界面
主界面完成的具體工作包含:搜索可用的電視頻點(diǎn);選擇收看的電視頻道;檢測(cè)當(dāng)前的信號(hào)強(qiáng)度;讀取接收到的音視頻數(shù)據(jù);對(duì)接收到的音視頻數(shù)據(jù)進(jìn)行解碼;播放解碼后的音視頻數(shù)據(jù);對(duì)當(dāng)前播放的節(jié)目進(jìn)行錄像;調(diào)節(jié)音量大?。混o音功能。
主界面利用調(diào)用泰合電視接收模塊SDK,通過(guò)SPI驅(qū)動(dòng)程序讀寫(xiě)數(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提供對(duì)CMMB電視信號(hào)的控制,包括:電視芯片的初始化,設(shè)置頻點(diǎn),掃描頻點(diǎn);得到頻道信息,設(shè)置頻道;接收及停止音視頻數(shù)據(jù);測(cè)試電視信號(hào)強(qiáng)度大小。
該模塊主要由數(shù)據(jù)處理模塊及信號(hào)控制模塊2個(gè)子模塊組成。
數(shù)據(jù)處理子模塊在打開(kāi)引擎時(shí),會(huì)生成一個(gè)線程,這個(gè)線程用來(lái)讀取CMMB信號(hào),并進(jìn)行分析、處理,其流程如圖3所示。
這個(gè)子模塊是一個(gè)死循環(huán),在循環(huán)中,先通過(guò)一個(gè)標(biāo)志進(jìn)行判斷,如果需要處理數(shù)據(jù),首先讀取一幀數(shù)據(jù),如果沒(méi)有數(shù)據(jù),則阻塞在這兒。然后對(duì)這幀數(shù)據(jù)進(jìn)行分析,分別放入音頻,視頻,其他數(shù)據(jù)的緩沖區(qū),最后,調(diào)用回調(diào)函數(shù)對(duì)各種數(shù)據(jù)進(jìn)行處理,將音視頻數(shù)據(jù)發(fā)送給音視頻播放模塊來(lái)播放。
另一個(gè)子模塊,信號(hào)控制模塊主要是提供控制接口讓上層調(diào)用,以完成對(duì)CMMB信號(hào)的處理。該子模塊主要包含以下功能接口函數(shù):引擎的初始化:創(chuàng)建讀數(shù)據(jù)線程,啟動(dòng)初始化;引擎的打開(kāi):對(duì)電視芯片初始化;設(shè)置頻點(diǎn):設(shè)置當(dāng)前頻點(diǎn);得到ESG信息:從信號(hào)中提取ESG信息并分析;關(guān)閉引擎:清除用到的資源,硬件重置位;得到頻道信息列表:發(fā)送請(qǐng)求,分析頻道信號(hào);設(shè)置頻道:設(shè)置當(dāng)前頻道;得到參數(shù):能得到信號(hào)強(qiáng)度,當(dāng)前頻道等參數(shù)。
2.3 音視頻播放模塊
音視頻播放由3個(gè)線程來(lái)完成。這3個(gè)線程分別為視頻處理線程、音頻處理線程、數(shù)據(jù)接收線程。
視頻處理線程:
(1) 先判斷緩沖區(qū)隊(duì)列有沒(méi)有視頻數(shù)據(jù),如果沒(méi)有,休眠10 ms;
(2) 有數(shù)據(jù)的話,因?yàn)橐曨l數(shù)據(jù)是根據(jù)時(shí)間戳順序作為隊(duì)列放在緩沖區(qū)的,取出第一幀,判斷是否已經(jīng)過(guò)時(shí),如果是很老的數(shù)據(jù),已經(jīng)錯(cuò)過(guò)了播放時(shí)間,則判斷幀類型,如果是關(guān)鍵幀,則解碼并顯示,否則,丟掉這一幀,然后轉(zhuǎn)到第(1)步;
(3) 否則,判斷這一幀是否到了播放時(shí)間,如果是,則將這幀數(shù)據(jù)解碼并顯示,然后轉(zhuǎn)到第(1)步;
(4) 如果沒(méi)有到播放時(shí)間,則休眠10 ms。然后轉(zhuǎn)到第(1)步。
音頻處理線程:
(1) 先判斷緩沖區(qū)隊(duì)列有沒(méi)有音頻數(shù)據(jù),如果沒(méi)有,休眠10 ms;
(2) 有數(shù)據(jù)的話,因?yàn)橐纛l數(shù)據(jù)是根據(jù)時(shí)間戳順序作為隊(duì)列放在緩沖區(qū)的,取出第一幀,判斷是否已經(jīng)過(guò)時(shí),如果是很老的數(shù)據(jù),已經(jīng)錯(cuò)過(guò)了播放時(shí)間,則丟棄,然后轉(zhuǎn)到第(1)步;
(3) 否則,判斷是否到了播放時(shí)間,如果是,則將這幀數(shù)據(jù)解碼并播放,然后轉(zhuǎn)到第(1)步;
(4) 如果沒(méi)有到播放時(shí)間,則休眠10 ms。然后轉(zhuǎn)到第(1)步。
數(shù)據(jù)接收線程:數(shù)據(jù)接收線程不屬于播放器模塊,它是電視接收模塊的一部分。
(1) 如果有數(shù)據(jù)到來(lái),判斷有沒(méi)有視頻數(shù)據(jù),如果有,將它們?nèi)坎迦氲揭曨l緩沖區(qū);
(2) 判斷有沒(méi)有音頻數(shù)據(jù),如果有,將它們都插入到音頻緩沖區(qū);
(3) 阻塞,等待數(shù)據(jù)到來(lái);
(4) 當(dāng)有數(shù)據(jù)到來(lái)時(shí),轉(zhuǎn)到第(1)步。
音視播放器模塊共有4個(gè)子模塊:緩沖區(qū)管理、音視頻同步、音視頻解碼、視頻顯示。
2.3.1 緩沖區(qū)管理
一共設(shè)計(jì)2個(gè)隊(duì)列,音頻緩沖隊(duì)列,視頻緩沖隊(duì)列。每幀數(shù)據(jù)放入緩沖區(qū),成員分別為幀長(zhǎng),幀類型(視頻有,音頻無(wú)),時(shí)間戳,數(shù)據(jù)指針。幀長(zhǎng)表示幀數(shù)據(jù)長(zhǎng)度,幀類型里,1表示關(guān)鍵幀,0表示非關(guān)鍵幀,時(shí)間戳表示幀數(shù)據(jù)播放的時(shí)間,數(shù)據(jù)指針指向幀數(shù)據(jù)緩沖區(qū)。當(dāng)有新的數(shù)據(jù)到來(lái)時(shí),構(gòu)造一個(gè)幀成員,填入各項(xiàng)參數(shù),然后根據(jù)時(shí)間戳,將他插入到緩沖隊(duì)列,播放時(shí)間近的放在前面。流程如下:
(1) 首先構(gòu)造一個(gè)幀緩沖成員;
(2) 按照幀數(shù)據(jù)內(nèi)容填充幀緩沖;
(3) 根據(jù)時(shí)間戳,按照近的在前面的原則,放入緩沖區(qū)隊(duì)列。
2.3.2 音視頻同步
音視頻數(shù)據(jù)始終與系統(tǒng)時(shí)間進(jìn)行同步,起初初始化時(shí),先在緩沖區(qū)存放1 s的數(shù)據(jù)。因?yàn)橄到y(tǒng)時(shí)間與發(fā)送的數(shù)據(jù)時(shí)間戳不一定相同,所以不用絕對(duì)時(shí)間,而是以緩沖區(qū)的第一幀時(shí)間戳為開(kāi)始時(shí)間,后面的數(shù)據(jù)都以與這幀數(shù)據(jù)的時(shí)間差這個(gè)相對(duì)時(shí)間為準(zhǔn)。
視頻和系統(tǒng)時(shí)間同步的流程如下:
(1) 判斷緩沖隊(duì)列是否為空,如果是空,休眠10 ms;
(2) 如果非空,從緩沖隊(duì)列取出一幀,判斷這幀數(shù)據(jù)是否已經(jīng)過(guò)時(shí),如果超過(guò)播放時(shí)間100 ms以上,則判斷幀類型,如果是非關(guān)鍵幀,丟掉這幀數(shù)據(jù),否則處理這幀數(shù)據(jù),然后跳到第(1)步;
(3) 如果這幀數(shù)據(jù)剛剛超過(guò)播放時(shí)間并且超過(guò)時(shí)間不超過(guò)100 ms,則處理這幀數(shù)據(jù),然后跳到第(1)步。
音頻和系統(tǒng)時(shí)間同步的處理流程如下:
(1) 判斷音頻緩沖區(qū)是否為空,如果是空,休眠10 ms;
(2) 如果非空,取出一幀數(shù)據(jù),判斷是否已經(jīng)超過(guò)播放時(shí)間100 ms,如果是,丟棄這幀數(shù)據(jù),跳到第(1)步;
(3) 否則,處理這幀數(shù)據(jù),跳到第(1)步。
2.3.3 音視頻解碼
數(shù)字移動(dòng)電視信號(hào)目前音頻采用的是AAC編碼[10],利用開(kāi)源解碼庫(kù)libfaad2來(lái)解碼,libfaad2的使用流程如下:
(1) 首先對(duì)解碼器進(jìn)行配置,設(shè)置一些解碼參數(shù),例如采樣率,聲道數(shù)等;
(2) 然后初始化解碼器;
(3) 如果有需要解碼的音頻幀,依次調(diào)用NeAACDecDecode進(jìn)行解碼;
(4) 當(dāng)音頻幀都解碼完畢,需要關(guān)閉解碼器。
三星的S3C6400芯片提供了多種格式視頻的硬件編解碼器,簡(jiǎn)稱為MFC(Multi-format Video Codec),支持的功能有:MPEG-4 Simple Profile 編解碼;H.264/AVC Baseline Profile 編解碼;H.263 P3 編解碼;VC-1(WMV9)Main Profile 編解碼;支持多任務(wù),如同時(shí)完成1路編碼和3路解碼;支持多格式,如同時(shí)進(jìn)行MPEG-4編碼和H.264解碼。理論上MFC性能可以達(dá)到全雙工的720*480 30幀/s(或720*576 25幀/s)的編解碼。
MFC驅(qū)動(dòng)負(fù)責(zé)直接控制MFC硬件完成實(shí)際的編解碼操作,提供類似字符設(shè)備的接口;MFC API封裝了底層驅(qū)動(dòng)的控制接口,給上層提供函數(shù)調(diào)用的接口方式,解碼器調(diào)用流程如圖4所示。
2.3.4 視頻顯示
對(duì)于解碼后的數(shù)據(jù),首先要將YUV格式轉(zhuǎn)換為RGB格式,轉(zhuǎn)換可以使用硬件來(lái)進(jìn)行。三星的S3C6400芯片提供的PostProcessor(以下簡(jiǎn)稱Post或PP)支持的功能有:視頻/圖像的縮放;視頻格式轉(zhuǎn)換;顏色空間轉(zhuǎn)換(RGB<->YUV);視頻輸入支持420,422格式,輸出支持YCbCr420,YCbCr422格式;圖像格式支持16位RGB(565格式)、24位RGB;最大分辨率支持2 048×2 048;支持單幀模式(Per Frame Run Mode)和自動(dòng)模式(Free Run Mode)。
3 結(jié) 語(yǔ)
本數(shù)字電視系統(tǒng)能夠?qū)崿F(xiàn)穩(wěn)定可靠的對(duì)CMMB信號(hào)的控制并具有完善的正?;虍惓M顺鰴C(jī)制。接收CMMB標(biāo)準(zhǔn)(H.264 320*240/AAC)的音視頻數(shù)據(jù)時(shí),播放速率達(dá)到25幀/s。畫(huà)面流暢,停頓少,沒(méi)有明顯的馬賽克。界面友好,操作簡(jiǎn)便,功能穩(wěn)定,同時(shí)具有
較高的實(shí)時(shí)性。
參考文獻(xiàn)
[1]解偉.移動(dòng)多媒體廣播(CMMB)技術(shù)與發(fā)展[J].電視技術(shù),2008,32(4):4-7.
[2]毛劍慧,黑勇,喬樹(shù)山,等.CMMB 系統(tǒng)接收機(jī)同步及信道估計(jì)設(shè)計(jì)[J].微電子學(xué)與計(jì)算機(jī),2008,25(5):124-127.
[3]Taura K,Tsujishita M,Takea M.A Digital Audio Broadcasting Receiver [J].IEEE Trans.on Consumer Electronics,1996,42(3):322- 327.
[4]國(guó)家廣播電影電視總局.GY/T 220.1- 2006,移動(dòng)多媒體廣播 第一部分:廣播信道幀結(jié)構(gòu)、信道編碼和調(diào)制[S].2006.
[5]國(guó)家廣播電影電視總局.GY/T 220.2- 2006,移動(dòng)多媒體廣播 第二部分:復(fù)用[S].2006.
[6]楊慶華.中國(guó)移動(dòng)多媒體廣播標(biāo)準(zhǔn)體系介紹[J].現(xiàn)代電視技術(shù),2008,20(2):14-18.
[7]金敏,周翔,金梁.嵌入式系統(tǒng):組成、原理與設(shè)計(jì)編程[M].北京:人民郵電出版社,2006.
[8][美]博韋,西斯特.深入理解Linux內(nèi)核[M].2版.陳莉君,馮銳,牛欣源,譯.北京:中國(guó)電力出版社,2004.
[9]馬季蘭,彭新光.Linux操作系統(tǒng)[M].北京:電子工業(yè)出版社,2002.
[10]Takagi K,Miyaji S,Sakazawa S.Conversion of MP3 to AAC in the Compressed Domain[J].IEEE Multimedia Signal Processing,2006,8(10):132-135.