手機(jī)電視(DVB-H)軟件接收器
圖6 MPE-FEC框架交織編碼方式
本文引用地址:http://www.ex-cimer.com/article/165496.htmDVB-H接收器的詳細(xì)軟件架構(gòu)如圖7所呈現(xiàn),主要由傳輸串流分派器(TransportStreamDispatcher)、子譯碼器(SubDecoder)組件、控制器(Controller)對象與MPE-FEC運(yùn)算單元(MPE-FECOperationUnit)所組成。
4.1傳輸串流分派器
傳輸串流分派器主要負(fù)責(zé)將DVB-H傳輸串流中各種類型的封包轉(zhuǎn)遞給不同的子譯碼器進(jìn)行處理并從封包中過濾使用者所欲觀看的節(jié)目傳遞給DVB-H終端裝置。若在Burst傳輸期間,封包數(shù)據(jù)因噪聲干擾而損毀,或者傳送端于傳送時為符合服務(wù)的傳輸位率而添加一些填塞封包,因此為減少封包的處理時間,故在傳輸串流分派器取得封包之后,便先檢查此流封包是否發(fā)生錯誤與是否為填塞封包,若發(fā)生錯誤,則將封包丟棄,而整個執(zhí)行程序?qū)⑦M(jìn)入到錯誤分類機(jī)制(ErrorCategorizationmechanism)中,若為填塞封包則即早丟棄,避免填塞封包送入子譯碼器中花費(fèi)不必要的處理時間。為簡化子譯碼器的復(fù)雜度,傳輸串流分派器系使用分派表方式來注冊欲譯碼的封包子譯碼器類型,并藉此分離各個子譯碼器之間的相依關(guān)系。分派表系采用雜湊表(Hashtable)的一種應(yīng)用,使用雜湊表的優(yōu)點(diǎn)在于不論注冊數(shù)量的多寡,查詢時間花費(fèi)永遠(yuǎn)固定為常數(shù)值,因此將可廣泛支持未來規(guī)范中新增的窗體或電視臺所自訂的私有窗體。而整個傳輸串流分派器的分派處理動作則如表1的虛擬程序代碼(Pseudocode)所示。
表1 傳輸串流分派器之虛擬程序代碼
If System Start then
Set Buffer to receive TS packet
If ErrorIndicator is equal to 1
Drop this TS packet
Start Error Categorization mechanism
else if PID is equal to 8191
Drop this TS packet
else if PayloadUnitStartIndicator is equal to 1
If ContinueSection is not equal to Null
Call the sub-decoder to continue decode
else
If sub-decoder is not found
Drop this unknown TS packet
else
Call the sub-decoder to decode
else
If ContinueSection is not equal to Null
Call the sub-decoder to continue decode
else
Drop this TS packet
4.2子譯碼器組件
于初始化時期,子譯碼器必須向傳輸串流分派器注冊封包類型,以便從傳輸串流分派器中得到相對應(yīng)的封包。
表2子譯碼器共通虛擬程序代碼
Function:DecodeFunction
從傳輸串流分派器中取得section中的第一個封包并譯碼。
Set PayloadBuffer to receive the section data
Set PaylaodLength equal to PacketPayloadLength
If SectionHeaderLength is equal to 12
Decode the section header
If section payload is not equal to Null
Output section payload to
SectionPayloadCottectionUnit
else
Set ReceiveLength equal to PayloadLength
Set ContinueSection to this sub-decoder
Function:ContinueFunction
從傳輸串流分派器中取得接續(xù)的section封包資料。
Set PayloadBuffer to receive the section data
Set PayloadLength equal to PayloadLength add
ReceiveSectionPayloadLength
If SectionHeaderLength is equal to 12
Decode the section header
If section payload is not equal to Null
Output section payload to
SectionPayloadCottectionUnit
If PayloadLength is equal to SectionLength
Set ContinueSection to Null
else
Set ContinueSection to this sub-decoder
子譯碼器共通的虛擬程序代碼如表2所示,傳輸串流分派器則根據(jù)分派表中已經(jīng)注冊的子譯碼器信息來遞送封包給特定子譯碼器,子譯碼器則根據(jù)封包中所傳達(dá)的數(shù)據(jù)將訊息或組態(tài)釋出,并傳遞給控制器對象。當(dāng)子譯碼器藉由解讀section的長度字段得知該section數(shù)據(jù)長度超過一個封包所能承載的數(shù)量時,會將接續(xù)片段指針對象設(shè)定指向自己。此后,當(dāng)傳輸串流分派器接收到封包后,將會檢視接續(xù)片段指針對象是否為空對象,若為空對象則從分派表中尋找負(fù)責(zé)解a此封包的子譯碼器。若非空對象,則將封包傳送給欲接續(xù)接收的子譯碼器,直到整個section數(shù)據(jù)接收完成之后,子譯碼器才會將接續(xù)片段指針對象重設(shè)為空對象,而從下一個封包開始,將以正常程序?qū)ふ曳獍幼g碼器。
4.3控制器對象
控制器對象為DVB-H軟件接收器與使用者互動的接口??刂破鞯闹饕δ艹藬X取使用者的輸入訊息之外,也實作訊息輸出接口。在控制行為部分,控制器僅與子譯碼器互動,在訊息輸出方面,則是與整個DVB-H軟件接收器中的所有組件連結(jié)在一起。另外,在實作設(shè)計上則不同于傳統(tǒng)將控制接口嵌入于播放器的作法,藉由此方式達(dá)到DVB-H軟件接收器與播放裝置各別獨(dú)立的能力。
4.4MPE-FEC運(yùn)算單元
MPE-FEC運(yùn)算單元主要負(fù)責(zé)進(jìn)行整個MPE-FEC機(jī)制的運(yùn)作,如圖8而其又可分為三個運(yùn)作單元,分別為:MPEsection數(shù)據(jù)收集單元、FECsection數(shù)據(jù)收集單元與所羅門譯碼單元(RSDecodingUnit)。
其中MPE與FECsection數(shù)據(jù)收集單元主要負(fù)責(zé)收集從子譯碼器解讀取出的section數(shù)據(jù),當(dāng)完成section數(shù)據(jù)收集后即填入位于所羅門譯碼單元中的MPE-FEC框架中,直到整個框架的所有section數(shù)據(jù)均已收集完成,則立即進(jìn)行每列的所羅門糾錯譯碼,藉此來修復(fù)于傳輸時因噪聲干擾所造成的數(shù)據(jù)錯誤。
評論