新聞中心

EEPW首頁 > EDA/PCB > 設(shè)計應(yīng)用 > MPEG-2傳輸流解復(fù)用在內(nèi)嵌ARM核的FPGA上的實現(xiàn)

MPEG-2傳輸流解復(fù)用在內(nèi)嵌ARM核的FPGA上的實現(xiàn)

作者: 時間:2012-10-17 來源:網(wǎng)絡(luò) 收藏

及其PSI表

TS的結(jié)構(gòu)長度為188字節(jié),分成包頭和包負(fù)荷兩部分。包頭主要包括同步字節(jié)和PID以及其他的信息,同步字節(jié)用來指示一個TS包開始(0x47),PID表示TS包的類型。例如一個節(jié)目里的音頻PES包,在轉(zhuǎn)換成為TS包后會具備同樣的PID,這樣,接收端只需要接收具有此PID的TS包,就可以將該節(jié)目的音頻解出來了。包負(fù)荷是包的實際內(nèi)容,根據(jù)具體情況,可以放置PES包或PSI包。由一個或者多個節(jié)目構(gòu)成,而每一個節(jié)目由視頻流、音頻流、私有信息流以及其他的數(shù)據(jù)包構(gòu)成。

PSI包在傳輸流解復(fù)用中占據(jù)重要地位,它通過四個表格來定義碼流的結(jié)構(gòu),分別是節(jié)目關(guān)聯(lián)表(PAT)、節(jié)目映射表(PMT)、條件接收表(CAT)和網(wǎng)絡(luò)信息表(NIT)。其中最為關(guān)鍵的部分是PAT表和PMT表。

PAT表是PSI信息的索引表,PID值固定為0。在PAT表中列出了該傳輸碼流中所有節(jié)目的PMT表的PID值。如果接收方希望接收其中的一個節(jié)目,即可根據(jù)這個PID值解出對應(yīng)于該節(jié)目的PMT表,從中可以查詢到與該節(jié)目相關(guān)的所有音頻流、視頻流,以及私有信息的PID,在接收時就可以只接收具有這些PID值的包。

PAT表的PID值為0,根據(jù)PAT表可以得到各個節(jié)目對應(yīng)的PID值,如節(jié)目0,PID=122,對應(yīng)NIT網(wǎng)絡(luò)信息表;節(jié)目1,PID=60;節(jié)目20,PID=200等。如果希望看節(jié)目20,就根據(jù)200這個PID值得到節(jié)目20對應(yīng)的PMT表,再進(jìn)一步查到節(jié)目20的視頻、音頻及私有信息包對應(yīng)的PID值,分別為500、510和540。解有這些PID值的傳輸包就可以解出音頻和視頻的PES包,最終解出音頻流和視頻流。CAT表的PID值固定為1,用來傳遞加密信息,不在本文的討論范圍內(nèi)。

-2系統(tǒng)層解碼時,需要由一個解復(fù)用器按照上述的原理對PSI表進(jìn)行處理,同時將各個音、視頻基本流從傳輸流中分離出來,送入對應(yīng)的解碼器中,所以解復(fù)用器在-2解碼中占據(jù)重要的地位。

解復(fù)用系統(tǒng)的具體實現(xiàn)

本文設(shè)計的是DVB的SDTV系統(tǒng)集成解碼芯片,視頻解碼最高支持-2的MP@ML,分辨率為720×576,實時解碼;音頻解碼滿足AC-3標(biāo)準(zhǔn)。

從前面的部分可知,解復(fù)用器需要承擔(dān)將數(shù)據(jù)分流的工作,所以數(shù)據(jù)處理量相當(dāng)大,很多解復(fù)用器都采用DSP或者專用ASIC進(jìn)行處理。本文中,有別與以往的結(jié)構(gòu),利用EPXA10的片上處理器,以及片上內(nèi)嵌的SDRAM控制器和DMA控制器的特性,來實現(xiàn)對MPEG-2的傳輸流進(jìn)行解復(fù)用,同時由硬件完成對PID包過濾的任務(wù)。所有的數(shù)據(jù)分解過程都由系統(tǒng)軟件來完成,因此在數(shù)據(jù)處理方面更加靈活,保證了系統(tǒng)對于MPEG-2傳輸流解碼的靈活性,同時避免了語法上的不兼容。

系統(tǒng)硬件由PID過濾、片上緩存及DMA等構(gòu)成;系統(tǒng)軟件部分由實現(xiàn)。片外SDRAM用來存放數(shù)據(jù)。音/視頻解碼模塊使用硬件實現(xiàn),在本文中不涉及到相關(guān)內(nèi)容。

系統(tǒng)硬件的功能是:當(dāng)外部的8位傳輸流數(shù)據(jù)輸入到上時,根據(jù)傳輸流包頭進(jìn)行同步,并將同步好的數(shù)據(jù)送入到PID過濾器。如果在傳輸過程中有錯誤,也就是包頭中有sequence-error-code=1,就丟棄這個包;如果沒有,則檢查PID碼表的數(shù)據(jù),如果在碼表中有這個PID值,那么就將這個傳輸流的包送入到的片上緩存中;否則就丟棄這個包。PID過濾器工作完成后,數(shù)據(jù)送入片上緩存部分,為了加快數(shù)據(jù)處理速度,使用DMA將緩存中的數(shù)據(jù)傳輸?shù)狡蟂DRAM對應(yīng)的傳輸流緩沖區(qū)。

如果片外SDRAM的傳輸流緩存中有未處理的包,則取出該包,判斷PID的值。如果PID=0,表示當(dāng)前的包是PAT,那么就對該包進(jìn)行解析,根據(jù)選定的節(jié)目號,確定需要解碼的PMT包的PID,再更新FPGA上PID碼表中PMT的PID,并將PMT的狀態(tài)位設(shè)定為需要解碼。

如果PID等于PID碼表中PMT包的PID,則判斷PMT的狀態(tài)位。如果不需要解碼,就丟棄這個包;如果需要解碼,則進(jìn)入PMT包解析子程序,提取出該解碼對應(yīng)的音、視頻傳輸流包的PID,將提取出的音、視頻傳輸流包的PID值對FPGA片上的PID碼表進(jìn)行更新。

如果PID等于PID碼表中的音、視頻PID值,那么就進(jìn)入到音/視頻處理程序,對音、視頻的傳輸流包進(jìn)行解包,將解得的PES包的內(nèi)容(就是實際的音、視頻流)通過DMA發(fā)送到片外SDRAM的音/視頻緩沖區(qū)中,供下一級的音/視頻解碼器完成解碼功能,最終完成MPEG-2碼流的解碼過程。

結(jié)語

本文使用了Altera公司的一款具有硬核的FPGA器件EPXA10,提出了一種基于ARM微處理器的對MPEG-2的傳輸流進(jìn)行解復(fù)用的解復(fù)用器設(shè)計方案。根據(jù)傳輸流的特點,使用硬件實現(xiàn)了數(shù)據(jù)量操作比較大的PID包過濾、DMA傳輸?shù)热蝿?wù),并利用ARM處理器完成較為復(fù)雜的PAT、PMT包的解包工作,同時也將音、視頻包解包,并將解出的音、視頻發(fā)送到片外SDRAM上的音/視頻緩沖區(qū)中。

最終設(shè)計的解復(fù)用器能對碼率最高為19 Mbps的傳輸流進(jìn)行解復(fù)用,對系統(tǒng)層的數(shù)據(jù)和其他輔助數(shù)據(jù)進(jìn)行解碼。解復(fù)用得出的視頻流和音頻流可供下一級的音/視頻模塊進(jìn)行實時解碼。


上一頁 1 2 下一頁

關(guān)鍵詞: MPEG FPGA ARM 傳輸流

評論


相關(guān)推薦

技術(shù)專區(qū)

關(guān)閉