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