MPEG-2傳輸流解復用在內嵌ARM核的FPGA上的實(shí)現
傳輸流及其PSI表
傳輸流TS的結構長(cháng)度為188字節,分成包頭和包負荷兩部分。包頭主要包括同步字節和PID以及其他的信息,同步字節用來(lái)指示一個(gè)TS包開(kāi)始(0x47),PID表示TS包的類(lèi)型。例如一個(gè)節目里的音頻PES包,在轉換成為T(mén)S包后會(huì )具備同樣的PID,這樣,接收端只需要接收具有此PID的TS包,就可以將該節目的音頻解出來(lái)了。包負荷是包的實(shí)際內容,根據具體情況,可以放置PES包或PSI包。傳輸流由一個(gè)或者多個(gè)節目構成,而每一個(gè)節目由視頻流、音頻流、私有信息流以及其他的數據包構成。
PSI包在傳輸流解復用中占據重要地位,它通過(guò)四個(gè)表格來(lái)定義碼流的結構,分別是節目關(guān)聯(lián)表(PAT)、節目映射表(PMT)、條件接收表(CAT)和網(wǎng)絡(luò )信息表(NIT)。其中最為關(guān)鍵的部分是PAT表和PMT表。
PAT表是PSI信息的索引表,PID值固定為0。在PAT表中列出了該傳輸碼流中所有節目的PMT表的PID值。如果接收方希望接收其中的一個(gè)節目,即可根據這個(gè)PID值解出對應于該節目的PMT表,從中可以查詢(xún)到與該節目相關(guān)的所有音頻流、視頻流,以及私有信息的PID,在接收時(shí)就可以只接收具有這些PID值的包。
PAT表的PID值為0,根據PAT表可以得到各個(gè)節目對應的PID值,如節目0,PID=122,對應NIT網(wǎng)絡(luò )信息表;節目1,PID=60;節目20,PID=200等。如果希望看節目20,就根據200這個(gè)PID值得到節目20對應的PMT表,再進(jìn)一步查到節目20的視頻、音頻及私有信息包對應的PID值,分別為500、510和540。解有這些PID值的傳輸包就可以解出音頻和視頻的PES包,最終解出音頻流和視頻流。CAT表的PID值固定為1,用來(lái)傳遞加密信息,不在本文的討論范圍內。
在MPEG-2系統層解碼時(shí),需要由一個(gè)解復用器按照上述的原理對PSI表進(jìn)行處理,同時(shí)將各個(gè)音、視頻基本流從傳輸流中分離出來(lái),送入對應的解碼器中,所以解復用器在MPEG-2解碼中占據重要的地位。
解復用系統的具體實(shí)現
本文設計的是DVB的SDTV系統集成解碼芯片,視頻解碼最高支持MPEG-2的MP@ML,分辨率為720×576,實(shí)時(shí)解碼;音頻解碼滿(mǎn)足AC-3標準。
從前面的部分可知,解復用器需要承擔將數據分流的工作,所以數據處理量相當大,很多解復用器都采用DSP或者專(zhuān)用ASIC進(jìn)行處理。本文中,有別與以往的結構,利用EPXA10的片上ARM處理器,以及片上內嵌的SDRAM控制器和DMA控制器的特性,來(lái)實(shí)現對MPEG-2的傳輸流進(jìn)行解復用,同時(shí)由硬件完成對PID包過(guò)濾的任務(wù)。所有的數據分解過(guò)程都由系統軟件來(lái)完成,因此在數據處理方面更加靈活,保證了系統對于MPEG-2傳輸流解碼的靈活性,同時(shí)避免了語(yǔ)法上的不兼容。
系統硬件由PID過(guò)濾、片上緩存及DMA等構成;系統軟件部分由ARM實(shí)現。片外SDRAM用來(lái)存放數據。音/視頻解碼模塊使用硬件實(shí)現,在本文中不涉及到相關(guān)內容。
系統硬件的功能是:當外部的8位傳輸流數據輸入到FPGA上時(shí),根據傳輸流包頭進(jìn)行同步,并將同步好的數據送入到PID過(guò)濾器。如果在傳輸過(guò)程中有錯誤,也就是包頭中有sequence-error-code=1,就丟棄這個(gè)包;如果沒(méi)有,則檢查PID碼表的數據,如果在碼表中有這個(gè)PID值,那么就將這個(gè)傳輸流的包送入到FPGA的片上緩存中;否則就丟棄這個(gè)包。PID過(guò)濾器工作完成后,數據送入FPGA片上緩存部分,為了加快數據處理速度,使用DMA將緩存中的數據傳輸到片上SDRAM對應的傳輸流緩沖區。
如果片外SDRAM的傳輸流緩存中有未處理的包,則取出該包,判斷PID的值。如果PID=0,表示當前的包是PAT,那么就對該包進(jìn)行解析,根據選定的節目號,確定需要解碼的PMT包的PID,再更新FPGA上PID碼表中PMT的PID,并將PMT的狀態(tài)位設定為需要解碼。
如果PID等于PID碼表中PMT包的PID,則判斷PMT的狀態(tài)位。如果不需要解碼,就丟棄這個(gè)包;如果需要解碼,則進(jìn)入PMT包解析子程序,提取出該解碼對應的音、視頻傳輸流包的PID,將提取出的音、視頻傳輸流包的PID值對FPGA片上的PID碼表進(jìn)行更新。
如果PID等于PID碼表中的音、視頻PID值,那么就進(jìn)入到音/視頻處理程序,對音、視頻的傳輸流包進(jìn)行解包,將解得的PES包的內容(就是實(shí)際的音、視頻流)通過(guò)DMA發(fā)送到片外SDRAM的音/視頻緩沖區中,供下一級的音/視頻解碼器完成解碼功能,最終完成MPEG-2碼流的解碼過(guò)程。
結語(yǔ)
本文使用了Altera公司的一款具有ARM硬核的FPGA器件EPXA10,提出了一種基于A(yíng)RM微處理器的對MPEG-2的傳輸流進(jìn)行解復用的解復用器設計方案。根據傳輸流的特點(diǎn),使用硬件實(shí)現了數據量操作比較大的PID包過(guò)濾、DMA傳輸等任務(wù),并利用ARM處理器完成較為復雜的PAT、PMT包的解包工作,同時(shí)也將音、視頻包解包,并將解出的音、視頻發(fā)送到片外SDRAM上的音/視頻緩沖區中。
最終設計的解復用器能對碼率最高為19 Mbps的傳輸流進(jìn)行解復用,對系統層的數據和其他輔助數據進(jìn)行解碼。解復用得出的視頻流和音頻流可供下一級的音/視頻模塊進(jìn)行實(shí)時(shí)解碼。
評論