本文概括性地討論手機電視這種嵌入式手持設備的軟硬件開發(fā)要點:如何設計硬件,,實現(xiàn)音視頻同步,提高H.264解碼速率,,并防止DMA緩沖溢出等,。
硬件設計
硬件設計概述
硬件配置的選擇要綜合考慮,如CPU的處理功能關系到最終的解碼顯示效果,。當然,,選擇一些高檔通用處理器,,或者是專用的媒體處理器都能夠達到較好的效果,但卻增加了硬件的成本,??梢栽谧罱K顯示效果和硬件的選擇上采取折中方案。目前,,能接收T-DMB和DVB-H標準的芯片還不是很多,,可以選擇市場上的一些主流芯片。本文討論的這款產(chǎn)品的硬件配置為:S3C2440A(400MHz),,64MB的SDRAM,,apollo fs1110, kino2efs1026?;究梢詽M足手機電視對硬件的需求,。通過天線接收到的射頻信號送給射頻前端的RF調諧芯片APOLLO FS1110,主要作用是把射頻信號解調為IF(Intermediate Frequency)信號,。這款芯片是目前市場上的主流產(chǎn)品,,可以接收多個標準的信號,而且體積小(5.0mmx5.0mmx0.9mm),,功耗低(80mW),擁有三個低噪聲前端放大器,,涵蓋 L-Band、BandⅡ和BandⅢ三個頻段,。apollo fs1110把IF信號送給kino2 efs1026,,完成信源碼解碼輸出MPEG2-TS數(shù)據(jù)。kino2是一款高度優(yōu)化的基帶處理器,,體積小(10mm×10mm×1.3mm),,功耗低(100mW),可以提供各種DMB碼率,,最高可以達到1.8Mbps,,片上含有R-S解碼器,可以實現(xiàn)較佳的移動信道性能,。kino2把信源碼TS碼流送給CPU,,由CPU完成TS流的解復用、解碼和顯示,。硬件設計框圖如圖1所示,。

圖1 硬件設計框圖
硬件各功能模塊描述
手機電視終端最終要做到支持多標準、多頻段,,這也是市場的需求,。由于現(xiàn)在開展手機電視業(yè)務的三地所采用的頻段不太一樣,如北京和廣東采用了VHF Band 3,,而上海采用了L- Band,,因此,,同一手機電視終端如果要在國內(nèi)不同地區(qū)接收手機服務,需要支持多頻段,。本文討論的T-DMB采用的工作頻段是VHF 3波段和L波段,,因此,要使用FS1110的BandⅢ和L-Band;而BandⅡ主要用于FM廣播,。FS1110的3個高頻輸入都可以使用,,頻段選擇可以由FS1026通過IIC接口來控制,同時,,F(xiàn)S1110內(nèi)部寄存器的初始化也是通過此接口來完成的,。
下游的FS1026基帶處理器模塊接收RF調諧器送過來的IF信號,最終完成信源解碼,。輸出的MPEG2-TS數(shù)據(jù)支持并行和串行兩種格式,。串行數(shù)據(jù)可以通過SPI接口和CPU直接連接?;鶐K還可以通過SCP(Serial Control Port)接口和CPU進行控制信息的交換,,SCP接口和IIC接口是完全兼容的。還可以用串口(UART)和CPU進行通信,。由于有的商業(yè)DMB節(jié)目經(jīng)過服務商加擾(經(jīng)過加密),,智能卡模塊可完成解擾功能,。
CPU的功能是通過SPI接口接收TS數(shù)據(jù),,完成音頻和視頻的解碼后顯示。數(shù)據(jù)可以通過DMA進行緩存,,然后就可以從DMA中讀取數(shù)據(jù)進行解復用,。DMA方式為一種高速的數(shù)據(jù)傳輸操作,允許在外部設備和存儲器之間直接讀寫數(shù)據(jù),,既不通過CPU,,也不需要CPU干預。整個數(shù)據(jù)傳輸操作在DMA控制器的控制下進行,。CPU除了在數(shù)據(jù)傳輸開始和結束時做一點處理外,,在傳輸過程中,CPU可以進行其它工作,。這樣,,在大部分時間里,CPU和輸入/輸出都處于并行操作狀態(tài),。因此,,可以大大提高整個系統(tǒng)的效率。在WinCE平臺下,,對DMA的操作相當方便,,驅動開發(fā)難度不大,,讀取數(shù)據(jù)就像操作普通文件一樣。只有一點區(qū)別,,就是要防止DMA溢出,。因為普通文件的讀取完全可控,而這里處理的是一種“實時”流,,有可能發(fā)生溢出,。溢出包括上溢(數(shù)據(jù)讀取過慢)和下溢(讀取過快)。和MPEG的解碼器接收端防止數(shù)據(jù)溢出的原理是一樣的,,主要是由于圖像編碼的格式不一樣,,發(fā)送的解碼器前端的數(shù)據(jù)速率并不是恒定的。MPEG采用流速反饋控制來控制數(shù)據(jù)溢出,,使得到達音視頻解碼器的數(shù)據(jù)速率趨于恒定,。對DMA的控制就簡單些,用專用的一個線程讀取數(shù)據(jù),,解復用線程依據(jù)數(shù)據(jù)的多少,,可以丟棄某些幀或者放慢解碼速度。不過一般還是丟幀的情況多,。
硬件設計注意事項
設計硬件電路時的主要問題就是高頻和電磁兼容,,一般的方法是加屏蔽罩,可以把APOLLO FS1110加屏蔽罩,,以減少模塊的空間干擾,。當然也可以把APOLLO FS1110、KINO2EFS1026做成外置式模塊,。還可以通過優(yōu)化原理圖的設計來減少高頻的影響,。因為原理圖的好壞直接影響布局、布線的難度,,以及以后板子性能的好壞,。為了布局布線時能清晰地進行分區(qū)設計,以減少各個功能模塊之間的影響,,設計原理圖時應把數(shù)字,、模擬和RF電路分開。但是,,由于手持設備體積較小,,屏蔽罩一般是必不可少的。
軟件設計
T-DMB標準概述
T-DMB采用H.264 視頻壓縮標準,,音頻采用專利費較低的MPEG-4 比特分片算術編碼BSAC(Bit-Sliced Arithmetic Coding)或者AAC+(歐洲T-DMB采用),,圖像格式為CIF(Common Intermediate Format)(352×288),把這些音頻和視頻碼流加上一些用戶數(shù)據(jù),,經(jīng)過MPEG-4 SL(Sync Layer)同步層打包和MPEG-2 TS(Transport Stream)復用后,,交給調制器調制為適宜在信道上傳播的信號發(fā)射出去,。各種標準的接收端除信道解碼有較大差別,信源的解碼很相近,。T-DMB系統(tǒng)發(fā)送端編碼器結構如圖2所示,。

圖2 T-DMB發(fā)送端編碼框圖
其中的MPEG-4 OD/BINFS發(fā)生器產(chǎn)生視聽對象、場景時空關系信息和視聽對象的描述符信息,。IOD發(fā)生器產(chǎn)生視聽對象的初始信息:場景描述和對象描述信息,。分段發(fā)生器主要收集SLP和IOD數(shù)據(jù)信息,用于產(chǎn)生和節(jié)目解復用相關的參考信息PSI(Program Specific Information),。在T-DMB的數(shù)據(jù)流中,,可以通過解析PMT中的描述字段得到IOD_descriptor ,由IOD_descriptor可以得到場景、對象描述信息,。由對象描述可以得到ES_ descriptor等信息,。SL同步打包器主要負責視聽對象和輔助數(shù)據(jù)的同步。SL包經(jīng)PES打包之后,,再把PES包打為TS包發(fā)送給調制器,。
關鍵字:T-DMB 手機電視
軟件的功能描述
軟件的主要任務是TS流的解復用、H.264和AAC+的解碼,,采用微軟的Direct Show技術開發(fā),,可以降低開發(fā)難度和開發(fā)周期。Direct Show技術是微軟提供的Windows平臺多媒體開發(fā)包,,以COM為基礎,。Direct Show使用Filter Graph的模型來管理整個數(shù)據(jù)流的處理過程。參與處理的各個功能模塊叫Filter,,按功能分3類:Source,、Transform,、Rendering Filter ,。Source Filter主要負責獲取數(shù)據(jù)和前期的處理;Transform Filter負責數(shù)據(jù)格式的轉換和傳輸,主要是負責解碼;Render Filter負責顯示,。各個Filter和應用程序的交互靠事件通知機制來完成:Filter狀態(tài)改變時發(fā)出一個事件,,由Filter Graph Manager處理或發(fā)給應用程序。整個軟件可以分為5大功能模塊,,如圖3所示,。TS解復用器模塊屬于Source Filter,作用是從DMA緩沖中獲取數(shù)據(jù),,然后從TS流中解析PAT(Program Association Table)和PMT(Program Map Table),,得到相關節(jié)目的音頻和視頻數(shù)據(jù)TS包的PID(Packet Identifier)之后,就可以組合PES(Packetized Elementary Stream)包,,同時還可以得到和音視頻同步相關的參數(shù):PCR(Program Clock Reference),、CTS(Presentation Time Stamp),、DTS(Decoding Time Stamp),最后把PES包去包頭后的ES(Elementary Stream)數(shù)據(jù)發(fā)給下游的解碼Filter,。H.264和AAC+解碼模塊屬于Transform Filter,,主要功能是把從上游獲取的音頻和視頻數(shù)據(jù)進行解碼,把解碼得到的PU(Presentation Unit)重新排序(只有用到雙向預測時需排序),,送給下游的生成器,。視頻生成器和音頻生成器模塊屬于Rendering Filter,主要完成顯示功能,。如果數(shù)據(jù)格式需要轉換,,可以在解碼器和生成器之間加一個具有轉化功能的Transform Filter。

音頻和視頻的同步
軟件設計中的關鍵技術是解決音視頻同步的問題,。音視頻同步主要在 TS解復用器中解決,。要想做到音頻和視頻的同步,需要用到這幾個參數(shù):PCR,、DTS,、PTS??梢栽赥S包的調整域中得到PCR,從PES包中得到PTS,。PES包中的數(shù)據(jù)是SL包,可以從SL包頭中得到DTS,。DTS是解碼時間,,PTS是顯示時間。PCR是對編碼器90K時鐘的計數(shù),,它的作用是在解碼器切換節(jié)目時,,提供對解碼器PCR計數(shù)器的初始值。PTS,、DTS最大可能和PCR達到相同的時間起點,,即對解碼器提供一個公共的時鐘參考,以便準確地進行音視頻的同步,。PCR捕捉到和DTS數(shù)值相同的時刻,,就可以進行音視頻解碼。因為視頻編碼的時候用到了雙向預測,,一個圖像單元被解出后并非馬上顯示,,可能在存儲器中留一段時間,作為其余圖像單元的解碼參考,,在被參考完畢后才顯示,。由于聲音沒有用到雙向預測,它的解碼次序就是它的顯示次序,故對它MPEG只提出PTS的概念,,PTS就是音頻的DTS值,。即:
DTS=PTS (1)
如果得不到PTS,那么按下式計算:
PTS=PTS_pre +Xms (2)
其中,,PTS_pre表示前面一個AU的PTS,,X是ACC+一幀的時間間隔,以ms為單位,。
一般視頻對象分為I-VOP,、B-VOP、P-VOP三種編碼類型,。假設在解碼器端的VO(Video Object)輸入次序為:
1 2 3 4 5 6 7 8 9 10………
I B B P B B P B B P B B P B B I B B P........
由于視頻對象編碼時用到雙向預測,,解碼器的實際解碼次序為:
I P B B P B B P B B P B B I B B P B B ........
顯示次序同解碼器的輸入次序。假設知道I幀的PTS和DTS,。那么得到關于P幀:
PTS_P4=PTS_I +33.67ms * 3 (3)
DTS_P4=DTS_I +33.67ms (4)
B1幀:PTS_Bn=PTS_I +33.67ms * 2 (5)
DTS_Bn=DTS_I +33.67ms (6)
B2幀可以參考上面的兩個式子,。其中,33.67ms為視頻幀時間間隔,。
軟件開發(fā)注意事項
關于H.264的解碼效率問題,。軟件解碼部分采用開源工程ffmpeg中的H.264解碼器,它效率高,,方便移植,,其中,關鍵運算,,如IDCT,、運動補償?shù)冗€在幾種不同平臺上用匯編進行實現(xiàn)。把H.264解碼器移植到ARM平臺,,對于IDCT和運動補償匯編代碼,,只需仿照其它平臺的代碼就可實現(xiàn),其開發(fā)難度并不大,。音頻解碼部分可以參考FAAC和FAAD開源工程,。
結語
本文討論的是能夠接收符合T-DMB規(guī)范(各種標準的接收終端的差別很小)手機電視信號的嵌入式手持設備的軟硬件設計概述,這種設備使用戶可以不經(jīng)過移動通信網(wǎng)絡直接獲得數(shù)字電視信號,,能夠滿足人們隨時隨地對信息的需求,。在實際的開發(fā)過程中的主要硬件問題是電磁兼容,,軟件是音視頻的同步和H.264的解碼效率問題,。軟件開發(fā)的難點集中在MPEG-2的解復用和Direct Show應用框架的設計。