基于CMMB數(shù)據(jù)廣播平臺的數(shù)據(jù)接收程序設(shè)計(jì)
摘要:為了實(shí)時(shí)接收應(yīng)用系統(tǒng)所需要的數(shù)據(jù)和圖片,采用了以CMMB數(shù)據(jù)廣播為平臺的接收方法,該方法用軟件實(shí)現(xiàn)解析CMMB數(shù)據(jù)廣播業(yè)務(wù)數(shù)據(jù)。做了測試數(shù)據(jù)的接收實(shí)驗(yàn),驗(yàn)證了數(shù)據(jù)接收的正確性,該程序方便各種應(yīng)用系統(tǒng)使用,用軟件編程代替硬件解碼不僅減少了硬件的成本,而且降低了系統(tǒng)實(shí)現(xiàn)的復(fù)雜度。
關(guān)鍵詞:CMMB;MFS;數(shù)據(jù)廣播;解復(fù)用;XPE包
0 引言
2006年10月24日,國家廣電總局正式頒布了中國移動多媒體廣播行業(yè)標(biāo)準(zhǔn),確定采用我國自主研發(fā)的移動多媒體廣播行業(yè)標(biāo)準(zhǔn)。CMMB技術(shù)的核心是STIMI技術(shù),它是利用大功率S波段信號實(shí)現(xiàn)信號的全國覆蓋,利用地面上的增補(bǔ)轉(zhuǎn)發(fā)器來彌補(bǔ)衛(wèi)星信號的盲區(qū),再加上無線移動通信網(wǎng)絡(luò)構(gòu)建的回傳通道,這樣就組成了一個(gè)完美的體系——單向廣播和雙向交互相結(jié)合的移動多媒體網(wǎng)絡(luò)。
CMMB標(biāo)準(zhǔn)的第五部分是數(shù)據(jù)廣播,它是CMMB的一項(xiàng)增值業(yè)務(wù)。本文簡單介紹了CMMB的相關(guān)知識,詳細(xì)研究了復(fù)用幀結(jié)構(gòu)和數(shù)據(jù)廣播的XPE包結(jié)構(gòu),結(jié)合廣播信道的特點(diǎn),重點(diǎn)講述了如何解析數(shù)據(jù)廣播業(yè)務(wù)數(shù)據(jù)。
1 CMMB相關(guān)技術(shù)簡介
1.1 復(fù)用結(jié)構(gòu)介紹
復(fù)用的功能是完成音頻、視頻、數(shù)據(jù)、電子業(yè)務(wù)指南等信息的封裝和排列,把多路節(jié)目及每一路節(jié)目中多路視頻、音頻數(shù)據(jù)有效地復(fù)合在一起,使其更好地共享信道資源,適應(yīng)信道傳輸。復(fù)用子幀是復(fù)用幀的基本組成單元,承載一個(gè)業(yè)務(wù)的業(yè)務(wù)數(shù)據(jù)(音頻流、視頻流和數(shù)據(jù)流)或者控制信息表的數(shù)據(jù)。電子業(yè)務(wù)指南、用戶管理等輔助信息分別封裝在不同的復(fù)用子幀中,控制信息封裝在復(fù)用幀0中,CMMB復(fù)用協(xié)議可以承載多種音視頻碼流,支持靈活的數(shù)據(jù)業(yè)務(wù)。
圖1為復(fù)用幀的結(jié)構(gòu),每個(gè)廣播信道幀由多個(gè)復(fù)用幀構(gòu)成,每個(gè)復(fù)用幀又由多個(gè)復(fù)用子幀或者控制信息表組成。其中復(fù)用子幀包括子幀頭、視頻段、音頻段和數(shù)據(jù)段,而控制信息表則包括網(wǎng)絡(luò)信息表(NIT)、持續(xù)業(yè)務(wù)復(fù)用配置表(CMCT)、持續(xù)業(yè)務(wù)配置表(CSCT)、短時(shí)間業(yè)務(wù)復(fù)用配置表(SMCT)、短時(shí)間業(yè)務(wù)配置表(SSCT)、ESG基本描述表、緊急廣播等。
1.2 CMMB數(shù)據(jù)廣播
數(shù)據(jù)廣播,顧名思義就是要把多樣的內(nèi)容按照一定的格式、一定的策略發(fā)送到移動多媒體的前端系統(tǒng)中,是一項(xiàng)利用廣播信道傳輸數(shù)據(jù)流或數(shù)據(jù)文件的增值業(yè)務(wù),CMMB數(shù)據(jù)推送業(yè)務(wù)就是CMMB數(shù)據(jù)廣播業(yè)務(wù),它是指以點(diǎn)對面的廣播方式推送傳輸文本、圖像、音頻、視頻等多媒體信息數(shù)據(jù)到用戶終端的一種技術(shù)方式,基于CMMB數(shù)據(jù)廣播平臺的應(yīng)用非常廣泛,如股票咨詢、交通導(dǎo)航、氣象服務(wù)、網(wǎng)站廣播等,如圖2所示。數(shù)據(jù)廣播XPE包的結(jié)構(gòu)圖如圖3所示。這里要注意的是,當(dāng)開始標(biāo)志為1時(shí)有擴(kuò)展字段,當(dāng)開始標(biāo)志為1并且結(jié)束標(biāo)志為0時(shí)有數(shù)據(jù)包總長度字段,當(dāng)CRC指示為1時(shí)有CRC_32字段。
XPE包頭有7個(gè)比特是保留的,在這里可以將它進(jìn)行自定義以便傳送不同服務(wù)類型的數(shù)據(jù),其中2個(gè)比特用來標(biāo)識數(shù)據(jù)的格式,如文本、圖片、網(wǎng)頁等,另外的5個(gè)比特則用來定義服務(wù)類型,具體定義方式如表1和表2所示。
2 解析數(shù)據(jù)廣播業(yè)務(wù)數(shù)據(jù)的軟件實(shí)現(xiàn)
解析數(shù)據(jù)廣播業(yè)務(wù)數(shù)據(jù)主要就是解析復(fù)用幀碼流。它的解析過程可分為以下幾個(gè)模塊:復(fù)用幀流提取、CRC檢測、控制信息解復(fù)用、業(yè)務(wù)信息解復(fù)用。首先要對控制信息進(jìn)行解復(fù)用,然后再根據(jù)控制信息中的關(guān)鍵信息來解析業(yè)務(wù)信息。
2.1 控制信息的解復(fù)用
解復(fù)用控制信息時(shí)首先要解析的是復(fù)用幀頭,在這里可以定義一個(gè)結(jié)構(gòu)體來保存相關(guān)的信息,同樣的為了保存各個(gè)表的參數(shù)信息以便解復(fù)用業(yè)務(wù)信息時(shí)使用,將控制信息中的每個(gè)表和緊急廣播也都對應(yīng)地定義一個(gè)結(jié)構(gòu)體,其中CMCT和SMCT的構(gòu)造相同可共用一個(gè)結(jié)構(gòu)體,CSCT和SSCT也可共用一個(gè)結(jié)構(gòu)體。在結(jié)構(gòu)體中定義好各個(gè)表對應(yīng)的參數(shù),在讀取碼流時(shí),先保存復(fù)用幀頭的相關(guān)參數(shù)信息,然后再保存控制信息表的信息,具體做法是根據(jù)表標(biāo)識號來判斷表的類型,確定類型后將碼流里對應(yīng)的參數(shù)存入到定義好的結(jié)構(gòu)體參數(shù)中。然后對各表進(jìn)行分析,最終獲得頻點(diǎn)編號、中心頻率、復(fù)用幀所占用的時(shí)隙號以及子幀與業(yè)務(wù)ID之間的對應(yīng)關(guān)系等信息,以方便用戶接收所選的業(yè)務(wù)數(shù)據(jù)。
2.2 業(yè)務(wù)信息的解復(fù)用
業(yè)務(wù)信息處理模塊如圖4所示。首先是模塊的初始化,這時(shí)讀線程函數(shù)也被開啟了,接著就進(jìn)入了處理數(shù)據(jù)的循環(huán),先判斷業(yè)務(wù)數(shù)據(jù)是否處理完畢(這里定義了一個(gè)布爾變量來標(biāo)記),如果處理完則將分類好的音視頻數(shù)據(jù)和其他數(shù)據(jù)做相應(yīng)的處理。如果未處理完畢,則讀取下一個(gè)幀的數(shù)據(jù),倘若此時(shí)沒有數(shù)據(jù)則阻塞等待,直到有數(shù)據(jù)到來,接著對這一幀數(shù)據(jù)進(jìn)行解復(fù)用,得到業(yè)務(wù)數(shù)據(jù)流,將數(shù)據(jù)歸類,放在不同的緩沖區(qū)。
解析一個(gè)幀的數(shù)據(jù)步驟如下:
第一步:解析復(fù)用幀頭。首先讀取碼流中的復(fù)用幀幀頭,并將相關(guān)參數(shù)保存到已定義好的結(jié)構(gòu)體中。
第二步:解析復(fù)用子幀。由于復(fù)用子幀的個(gè)數(shù)不止一個(gè),所以可以用一個(gè)循環(huán)來處理,同業(yè)務(wù)數(shù)據(jù)處理的總框圖類似,設(shè)置一個(gè)布爾變量來標(biāo)識復(fù)用子幀是否處理完畢,先解析子幀的幀頭,提取視頻段、音頻段和數(shù)據(jù)段數(shù)據(jù),然后判斷復(fù)用子幀是否處理完畢,如果處理完則跳出循環(huán)往下執(zhí)行,如果沒處理完則繼續(xù)處理,處理完畢后提取出視頻段、音頻段和數(shù)據(jù)段數(shù)據(jù)。
第三步:解析視頻段、音頻段和數(shù)據(jù)段。由于采用的是數(shù)據(jù)廣播來傳送,因此這里只對數(shù)據(jù)段進(jìn)行解析,先根據(jù)子幀頭中的信息將數(shù)據(jù)段提取出來,這里數(shù)據(jù)單元的內(nèi)容即為XPE包。
第四步:解析XPE包。仍然需要先解讀包頭信息,另外要注意的是首包包頭還額外攜帶了數(shù)據(jù)包總長度,業(yè)務(wù)模式指示等信息,接到首包時(shí)要記錄下來,然后根據(jù)包頭信息對業(yè)務(wù)數(shù)據(jù)進(jìn)行組裝。
3 結(jié)論
經(jīng)過以上對CMMB復(fù)用幀和XPE包結(jié)構(gòu)的剖析,用VC++編寫了解析數(shù)據(jù)廣播業(yè)務(wù)數(shù)據(jù)的程序。實(shí)驗(yàn)輸入測試用的是離線MFS流,接收顯示了一些測試數(shù)據(jù),該軟件可以植入應(yīng)用系統(tǒng)中來接收所需要的數(shù)據(jù)和圖片,靈活方便,另外采用軟件編寫降低了硬件的成本,而且可擴(kuò)展性強(qiáng)。