基于AU 1 200的TS流處理設(shè)計
中國地面電視傳輸標(biāo)準(zhǔn)的強(qiáng)制實施和直播星的開通,將極大地促進(jìn)數(shù)字電視的發(fā)展?,F(xiàn)在國內(nèi)已經(jīng)有多個省市開播了移動數(shù)字電視。對終端接收設(shè)備軟件而言,數(shù)字電視的處理主要是對經(jīng)過解碼后的TS流分析和解析。
1 TS流及一般處理流程
1.1 TS流
TS流,即傳送流(Transport Stream),是根據(jù)ITU-TRec.H.222.O | ISO/IEC 13818-2和ISO/IEC 13818-3協(xié)議而定義的一種數(shù)據(jù)流。它由一道或多道節(jié)目組成,每道節(jié)目由一個或多個原始流和其他一些流復(fù)合在一起,包括視頻流、音頻流、節(jié)目特定信息流(PSI)和其他數(shù)據(jù)包。在數(shù)字電視廣播中傳送的就是TS流。TS流可以承載多種信息流,如實際應(yīng)用中的音視頻流、數(shù)據(jù)流、控制流等。一個TS包的長度是固定的,以同步字節(jié)(sync_byte)Ox47打頭,后跟數(shù)據(jù)包識別號PID和分組負(fù)載數(shù)據(jù)等,總長為188字節(jié)。從PID可以判斷其后面負(fù)載的數(shù)據(jù)類型是視頻流、音頻流、PSI,還是其他數(shù)據(jù)包。節(jié)目特定信息流(PSI)用來描述傳送流的組成結(jié)構(gòu),由特定的PID構(gòu)成,其中最重要的是PAT表和 PMT表。
1.2 TS流的處理
數(shù)字電視接收設(shè)備在收到TS流后的一般處理流程如圖1所示。TS-Reader是TS流讀取模塊,用于檢測TS流并讀??;TS-Demux模塊是TS流分拆模塊,用于將TS流中的音視頻數(shù)據(jù)分檢出來供后面模塊處理;Video-Decoder模塊是視頻解碼模塊,依照TS流承載的視頻數(shù)據(jù)壓縮格式進(jìn)行相應(yīng)的解碼工作,然后將解碼后的視頻數(shù)據(jù)送到顯示設(shè)備輸出;Audio-Decoder模塊是音頻解碼模塊,將TS流內(nèi)的音頻流解碼,輸出到音頻設(shè)備。
2 基于AU1200的TS流處理系統(tǒng)組成
本設(shè)計的數(shù)字電視接收設(shè)備的硬件選用AU1200作為主芯片。AU1200是RMI公司推出的一款MIPS架構(gòu)的高性能、低功耗、高集成度的嵌入式處理器。AU1200所具有的媒體加速引擎(Media Acceleration Engine,MAE)可以在沒有DSP的條件下流暢播放MPEG-1、MPEG-2、DivX和Xvid等多種流媒體,而不需要PC(或其他設(shè)備)進(jìn)行內(nèi)容的代碼轉(zhuǎn)換。采用AU1200作為嵌入式數(shù)字電視播放設(shè)備的主芯片,在媒體播放性能上能充分利用其低成本、低功耗和高性能的特性。
MAE是AU1200處理器內(nèi)置的片上硬件,它承擔(dān)了視頻解碼、縮放、顏色空間轉(zhuǎn)換和過濾的功能。MAE硬件上被分為前端和后端,各自執(zhí)行特定的任務(wù)。 MAE的前端獨(dú)立執(zhí)行最為復(fù)雜和繁重的解碼任務(wù),包括反向量化、反向余弦轉(zhuǎn)換、運(yùn)動補(bǔ)償和Windows Media Video 9覆蓋平滑處理。MAE后端執(zhí)行縮放、顏色空間轉(zhuǎn)換和過濾功能。高效地利用MAE前后端可以減輕CPU的負(fù)載,提供更友好的人機(jī)交互。
以Linux系統(tǒng)為平臺,利用其多線程處理的優(yōu)勢,結(jié)合AU1200硬件組成的數(shù)字電視播放系統(tǒng)可以方便地實現(xiàn)數(shù)字電視TS流的播放。數(shù)字電視播放系統(tǒng)結(jié)構(gòu)如圖2所示。
3 數(shù)字電視播放軟件的設(shè)計
播放軟件采用模塊化設(shè)計,多線程并行處理。各模塊并通過MAI(Media Application Interface)Engine完成相互問的數(shù)據(jù)傳遞和同步。軟件要求在保持流暢播放MPEG(1,2,4),DivX,WMV和XviD等格式多媒體文件的同時增加播放數(shù)字電視的功能。
3.1 已有播放軟件結(jié)構(gòu)
已有的媒體播放軟件結(jié)構(gòu):播放軟件內(nèi)各模塊通過MAI Engine將相應(yīng)模塊組裝起來,完成特定格式的媒體文件的播放或格式轉(zhuǎn)換。
模塊類型分為:File Reader模塊、Demux模塊、De-coder模塊、Render模塊和File Writer模塊。模塊是否需要載人、如何進(jìn)行鏈接由MAI Engine根據(jù)播放的媒體格式而定。模塊裝載后以線程的形式獨(dú)立運(yùn)行,模塊間通過數(shù)據(jù)緩沖區(qū)進(jìn)行數(shù)據(jù)交換,并由MAI Engine負(fù)責(zé)協(xié)調(diào),以確保模塊運(yùn)行正常。
3.2 播放軟件內(nèi)的TS流處理
在播放軟件內(nèi)實現(xiàn)數(shù)字電視TS流的播放,需要在原有的播放系統(tǒng)上增加TS流的Reader、Demux和Decoder模塊。由于數(shù)字電視的音視頻編碼格式都是公開且確定的,因此需要相應(yīng)的Decoder模塊進(jìn)行處理?;贛AE的TS流處理模塊結(jié)構(gòu)如圖3所示。
(1)TS-Reader模塊
TS-Reader模塊是讀取TS流的模塊。它從硬件設(shè)備獲取TS流數(shù)據(jù),按照TS-Demux的數(shù)據(jù)緩沖區(qū)大小要求寫入該緩沖區(qū)。主要實現(xiàn)打開TS流數(shù)據(jù)接口、關(guān)閉接口和讀取TS流數(shù)據(jù)3個功能,分別對應(yīng)3個主要函數(shù)一TSstreamopen()、_TSstreamclose()和 _TSstreamread()。由于數(shù)字電視不支持回放,因此不具備定位搜索(即Seek)的功能。
(2)TS-Demux模塊
TS-Demux模塊是進(jìn)行TS流解析的模塊,它是處理數(shù)字電視TS流的關(guān)鍵。TS-Demux從緩沖區(qū)中取到數(shù)據(jù)后,需要對TS流進(jìn)行解析,然后返回 MAI當(dāng)前TS流的節(jié)目信息,供應(yīng)用程序選擇。在確定節(jié)目流PID后,TS-Demux將根據(jù)音視頻PID分檢TS流,獲取Video和Audio數(shù)據(jù),供相應(yīng)的Decoder解碼。
(3)Audio-Decoder模塊
在MAI開始鏈接各模塊時已確定了音視頻的解碼格式,因此音視頻的解碼模塊在鏈接時已確定下來。此時的音頻解碼Audio-Decoder模塊就是處理音頻解碼的模塊,依據(jù)不同的數(shù)字電視格式,該音頻解碼格式可能是mp3或ac3等。音頻解碼后,音頻數(shù)據(jù)送往Audio-Render模塊驅(qū)動硬件發(fā)出聲音。
(4)Video-Decoder模塊
視頻解碼Video-Decoder模塊也是進(jìn)行確定編碼格式的解碼工作。對于MPEG2的編碼格式,Video-Decoder將數(shù)據(jù)交給MAE的前端處理,由MAE送到顯示屏上顯示。對于其他不能使用MAE前端進(jìn)行處理的視頻格式(如H264等),必須由軟件進(jìn)行解碼,形成YUV數(shù)據(jù),然后將YUV數(shù)據(jù)輸入到MAE的后端處理。
3.3 數(shù)字電視播放效果
需要對搭建起的數(shù)字電視播放系統(tǒng)進(jìn)行測試。通過測試,數(shù)字電視設(shè)備接口的數(shù)據(jù)緩沖區(qū)需要設(shè)置為256KB,如果存儲容量允許采用512 KB到1 MB更好。在數(shù)字電視模塊采用USB接口進(jìn)行播放時,播放流暢,音視頻同步,數(shù)字電視的實際播放達(dá)到了預(yù)期的效果。
3.4 增加對其他媒體格式的支持
對于其他常見的媒體文件格式,如flv和rmvb等,也可以通過增加該格式的 Demux和Decoder實現(xiàn)播放。由于視頻Decoder解碼后得到的是YUV數(shù)據(jù),因此直接將該數(shù)據(jù)交給MAE-BE端處理。音視頻同步方面,需要在提交YUV數(shù)據(jù)給MAE-BE端處理時,將當(dāng)前幀的時間戳一并提交給MAE,即可由MAE內(nèi)部實現(xiàn)音視頻同步。當(dāng)然也可以自己在程序中進(jìn)行音視頻同步,這需要在提交YUV前從MAE取得音頻播放的時間戳,然后與當(dāng)前視頻幀的時間戳比較,進(jìn)行必要的延時操作。
結(jié) 語
本文詳細(xì)介紹了數(shù)字電視播放系統(tǒng)的建立過程。該系統(tǒng)基于AU1200芯片,結(jié)合軟硬件優(yōu)勢,實現(xiàn)了數(shù)字電視TS流的播放功能。通過對媒體播放程的擴(kuò)展,還可以實現(xiàn)如flv和rmvb等多種媒體格式的解碼播放。