手機電視(DVB-H)軟件接收器
圖6 MPE-FEC框架交織編碼方式
本文引用地址:http://dyxdggzs.com/article/165496.htmDVB-H接收器的詳細軟件架構如圖7所呈現,主要由傳輸串流分派器(TransportStreamDispatcher)、子譯碼器(SubDecoder)組件、控制器(Controller)對象與MPE-FEC運算單元(MPE-FECOperationUnit)所組成。

4.1傳輸串流分派器
傳輸串流分派器主要負責將DVB-H傳輸串流中各種類(lèi)型的封包轉遞給不同的子譯碼器進(jìn)行處理并從封包中過(guò)濾使用者所欲觀(guān)看的節目傳遞給DVB-H終端裝置。若在Burst傳輸期間,封包數據因噪聲干擾而損毀,或者傳送端于傳送時(shí)為符合服務(wù)的傳輸位率而添加一些填塞封包,因此為減少封包的處理時(shí)間,故在傳輸串流分派器取得封包之后,便先檢查此流封包是否發(fā)生錯誤與是否為填塞封包,若發(fā)生錯誤,則將封包丟棄,而整個(gè)執行程序將進(jìn)入到錯誤分類(lèi)機制(ErrorCategorizationmechanism)中,若為填塞封包則即早丟棄,避免填塞封包送入子譯碼器中花費不必要的處理時(shí)間。為簡(jiǎn)化子譯碼器的復雜度,傳輸串流分派器系使用分派表方式來(lái)注冊欲譯碼的封包子譯碼器類(lèi)型,并藉此分離各個(gè)子譯碼器之間的相依關(guān)系。分派表系采用雜湊表(Hashtable)的一種應用,使用雜湊表的優(yōu)點(diǎn)在于不論注冊數量的多寡,查詢(xún)時(shí)間花費永遠固定為常數值,因此將可廣泛支持未來(lái)規范中新增的窗體或電視臺所自訂的私有窗體。而整個(gè)傳輸串流分派器的分派處理動(dòng)作則如表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子譯碼器組件
于初始化時(shí)期,子譯碼器必須向傳輸串流分派器注冊封包類(lèi)型,以便從傳輸串流分派器中得到相對應的封包。
表2子譯碼器共通虛擬程序代碼
Function:DecodeFunction
從傳輸串流分派器中取得section中的第一個(gè)封包并譯碼。
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
從傳輸串流分派器中取得接續的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īng)注冊的子譯碼器信息來(lái)遞送封包給特定子譯碼器,子譯碼器則根據封包中所傳達的數據將訊息或組態(tài)釋出,并傳遞給控制器對象。當子譯碼器藉由解讀section的長(cháng)度字段得知該section數據長(cháng)度超過(guò)一個(gè)封包所能承載的數量時(shí),會(huì )將接續片段指針對象設定指向自己。此后,當傳輸串流分派器接收到封包后,將會(huì )檢視接續片段指針對象是否為空對象,若為空對象則從分派表中尋找負責解a此封包的子譯碼器。若非空對象,則將封包傳送給欲接續接收的子譯碼器,直到整個(gè)section數據接收完成之后,子譯碼器才會(huì )將接續片段指針對象重設為空對象,而從下一個(gè)封包開(kāi)始,將以正常程序尋找封包子譯碼器。
4.3控制器對象
控制器對象為DVB-H軟件接收器與使用者互動(dòng)的接口??刂破鞯闹饕δ艹藬X取使用者的輸入訊息之外,也實(shí)作訊息輸出接口。在控制行為部分,控制器僅與子譯碼器互動(dòng),在訊息輸出方面,則是與整個(gè)DVB-H軟件接收器中的所有組件連結在一起。另外,在實(shí)作設計上則不同于傳統將控制接口嵌入于播放器的作法,藉由此方式達到DVB-H軟件接收器與播放裝置各別獨立的能力。
4.4MPE-FEC運算單元
MPE-FEC運算單元主要負責進(jìn)行整個(gè)MPE-FEC機制的運作,如圖8而其又可分為三個(gè)運作單元,分別為:MPEsection數據收集單元、FECsection數據收集單元與所羅門(mén)譯碼單元(RSDecodingUnit)。
其中MPE與FECsection數據收集單元主要負責收集從子譯碼器解讀取出的section數據,當完成section數據收集后即填入位于所羅門(mén)譯碼單元中的MPE-FEC框架中,直到整個(gè)框架的所有section數據均已收集完成,則立即進(jìn)行每列的所羅門(mén)糾錯譯碼,藉此來(lái)修復于傳輸時(shí)因噪聲干擾所造成的數據錯誤。
評論