基于CMMB數(shù)據(jù)廣播平臺的數(shù)據(jù)接收程序設計
XPE包頭有7個比特是保留的,在這里可以將它進行自定義以便傳送不同服務類型的數(shù)據(jù),其中2個比特用來標識數(shù)據(jù)的格式,如文本、圖片、網(wǎng)頁等,另外的5個比特則用來定義服務類型,具體定義方式如表1和表2所示。本文引用地址:http://butianyuan.cn/article/156480.htm
2 解析數(shù)據(jù)廣播業(yè)務數(shù)據(jù)的軟件實現(xiàn)
解析數(shù)據(jù)廣播業(yè)務數(shù)據(jù)主要就是解析復用幀碼流。它的解析過程可分為以下幾個模塊:復用幀流提取、CRC檢測、控制信息解復用、業(yè)務信息解復用。首先要對控制信息進行解復用,然后再根據(jù)控制信息中的關鍵信息來解析業(yè)務信息。
2.1 控制信息的解復用
解復用控制信息時首先要解析的是復用幀頭,在這里可以定義一個結(jié)構(gòu)體來保存相關的信息,同樣的為了保存各個表的參數(shù)信息以便解復用業(yè)務信息時使用,將控制信息中的每個表和緊急廣播也都對應地定義一個結(jié)構(gòu)體,其中CMCT和SMCT的構(gòu)造相同可共用一個結(jié)構(gòu)體,CSCT和SSCT也可共用一個結(jié)構(gòu)體。在結(jié)構(gòu)體中定義好各個表對應的參數(shù),在讀取碼流時,先保存復用幀頭的相關參數(shù)信息,然后再保存控制信息表的信息,具體做法是根據(jù)表標識號來判斷表的類型,確定類型后將碼流里對應的參數(shù)存入到定義好的結(jié)構(gòu)體參數(shù)中。然后對各表進行分析,最終獲得頻點編號、中心頻率、復用幀所占用的時隙號以及子幀與業(yè)務ID之間的對應關系等信息,以方便用戶接收所選的業(yè)務數(shù)據(jù)。
2.2 業(yè)務信息的解復用
業(yè)務信息處理模塊如圖4所示。首先是模塊的初始化,這時讀線程函數(shù)也被開啟了,接著就進入了處理數(shù)據(jù)的循環(huán),先判斷業(yè)務數(shù)據(jù)是否處理完畢(這里定義了一個布爾變量來標記),如果處理完則將分類好的音視頻數(shù)據(jù)和其他數(shù)據(jù)做相應的處理。如果未處理完畢,則讀取下一個幀的數(shù)據(jù),倘若此時沒有數(shù)據(jù)則阻塞等待,直到有數(shù)據(jù)到來,接著對這一幀數(shù)據(jù)進行解復用,得到業(yè)務數(shù)據(jù)流,將數(shù)據(jù)歸類,放在不同的緩沖區(qū)。
解析一個幀的數(shù)據(jù)步驟如下:
第一步:解析復用幀頭。首先讀取碼流中的復用幀幀頭,并將相關參數(shù)保存到已定義好的結(jié)構(gòu)體中。
第二步:解析復用子幀。由于復用子幀的個數(shù)不止一個,所以可以用一個循環(huán)來處理,同業(yè)務數(shù)據(jù)處理的總框圖類似,設置一個布爾變量來標識復用子幀是否處理完畢,先解析子幀的幀頭,提取視頻段、音頻段和數(shù)據(jù)段數(shù)據(jù),然后判斷復用子幀是否處理完畢,如果處理完則跳出循環(huán)往下執(zhí)行,如果沒處理完則繼續(xù)處理,處理完畢后提取出視頻段、音頻段和數(shù)據(jù)段數(shù)據(jù)。
第三步:解析視頻段、音頻段和數(shù)據(jù)段。由于采用的是數(shù)據(jù)廣播來傳送,因此這里只對數(shù)據(jù)段進行解析,先根據(jù)子幀頭中的信息將數(shù)據(jù)段提取出來,這里數(shù)據(jù)單元的內(nèi)容即為XPE包。
第四步:解析XPE包。仍然需要先解讀包頭信息,另外要注意的是首包包頭還額外攜帶了數(shù)據(jù)包總長度,業(yè)務模式指示等信息,接到首包時要記錄下來,然后根據(jù)包頭信息對業(yè)務數(shù)據(jù)進行組裝。
3 結(jié)論
經(jīng)過以上對CMMB復用幀和XPE包結(jié)構(gòu)的剖析,用VC++編寫了解析數(shù)據(jù)廣播業(yè)務數(shù)據(jù)的程序。實驗輸入測試用的是離線MFS流,接收顯示了一些測試數(shù)據(jù),該軟件可以植入應用系統(tǒng)中來接收所需要的數(shù)據(jù)和圖片,靈活方便,另外采用軟件編寫降低了硬件的成本,而且可擴展性強。
評論