一種mpeg ts流pid重映射實(shí)現(xiàn)系統(tǒng)及方法
【技術(shù)領(lǐng)域】
[0001]本發(fā)明涉及一種MPEG TS流PID重映射實(shí)現(xiàn)系統(tǒng)及方法,特別是涉及一種適用于DVB系統(tǒng)中MPEG TS流PID的重映射實(shí)現(xiàn)系統(tǒng)及方法。
【背景技術(shù)】
[0002]目前通用PID重映射方法,把PID輸入輸出的映射關(guān)系存于FPGA內(nèi)部一塊RAM中。當(dāng)一個(gè)TS流包輸入FPGA后,F(xiàn)PGA開始提取包中的PID,在存有PID映射關(guān)系的RAM中去查詢此輸入PID對(duì)應(yīng)的輸出PID。由于MPEG2中,每個(gè)TS流的包長為188,所以當(dāng)要處理的PID超過188個(gè)時(shí),就需要對(duì)每個(gè)TS包進(jìn)行寄存,以增加查詢所需時(shí)間。
[0003]以處理2048個(gè)PID為例,就要格外開辟存儲(chǔ)空間來寄存每個(gè)TS包,這樣才能將RAM中2048個(gè)PID查詢完,以Altera的FPGA Cyclone IV EP4CE40為例,需要多消耗2個(gè)M9K的存儲(chǔ)器資源,并加大系統(tǒng)的延時(shí),這就給設(shè)計(jì)帶來了時(shí)序和資源的浪費(fèi)。
【發(fā)明內(nèi)容】
[0004]本發(fā)明要解決的技術(shù)問題是提供一種查詢時(shí)間短,節(jié)省時(shí)序和資源的MPEG TS流PID重映射實(shí)現(xiàn)系統(tǒng)及方法。
[0005]本發(fā)明采用的技術(shù)方案如下:一種MPEG TS流PID重映射實(shí)現(xiàn)系統(tǒng),器特征在于,包括
PID提取模塊,解析TS流并提取TS流中PID為old PID ;
映射表生成模塊,將提取出的old PID和在映射過程中會(huì)被替換成的new PID組成PID映射表;
PID映射表排序模塊,將PID映射表根據(jù)old PID的值按照從小到大的順序進(jìn)行排序; PID映射表存儲(chǔ)模塊,存儲(chǔ)排序好的PID映射表;
PID查詢模塊,當(dāng)有TS流包輸入時(shí),提取所述TS流包中的PID并查詢存儲(chǔ)模塊中的PID映射表;
PID比較模塊,將TS流中提取的PID的值與查詢的PID映射表某一地址中的old PID的值進(jìn)行比對(duì)。
[0006]一種MPEG TS流PID重映射實(shí)現(xiàn)方法,具體方法步驟為,
步驟一、解析TS流并提取TS流中PID為old PID ;
步驟二、將提取出的old PID和在映射過程中會(huì)被替換成的new PID組成PID映射表; 步驟三、將PID映射表根據(jù)old PID的值按照從小到大的順序進(jìn)行排序并存儲(chǔ);
步驟四、當(dāng)有TS流包輸入時(shí),提取所述TS流包中的PID并查詢存儲(chǔ)模塊中的PID映射表;將TS流中提取的PID的值與查詢的PID映射表某一地址中的old PID的值進(jìn)行比對(duì),判斷是否相等,相等,貝1J退出查詢,用new PID替換提取出的PID,否則進(jìn)入下一步;
步驟五、根據(jù)比對(duì)大小和映射表地址大小來決定向上或向下查詢,并繼續(xù)查詢和比對(duì)。
[0007]作為優(yōu)選,所述步驟四中,將TS流中提取的PID的值與查詢的PID映射表中間地址中的old PID的值進(jìn)行比對(duì)。
[0008]作為優(yōu)選,所述步驟五中,根據(jù)比對(duì)大小和映射表地址大小來決定向上或向下查詢,查詢地址為排除查詢地址后所剩下查詢地址范圍的中間地址,并以此類推繼續(xù)查詢和比對(duì)。
[0009]與現(xiàn)有技術(shù)相比,本發(fā)明的有益效果是:對(duì)比傳統(tǒng)的查詢方式,去除了資源浪費(fèi),節(jié)省了大量的存儲(chǔ)器資源開銷和減小了系統(tǒng)的延時(shí)。
【附圖說明】
[0010]圖1為本發(fā)明其中一實(shí)施例的PID映射表存儲(chǔ)結(jié)構(gòu)示意圖。
[0011]圖2為圖1所示實(shí)施例中的PID查詢示意圖。
[0012]圖3為圖1所示實(shí)施例的實(shí)現(xiàn)方法流程圖。
【具體實(shí)施方式】
[0013]為了使本發(fā)明的目的、技術(shù)方案及優(yōu)點(diǎn)更加清楚明白,以下結(jié)合附圖及實(shí)施例,對(duì)本發(fā)明進(jìn)行進(jìn)一步詳細(xì)說明。應(yīng)當(dāng)理解,此處所描述的具體實(shí)施例僅用以解釋本發(fā)明,并不用于限定本發(fā)明。
[0014]本說明書(包括任何附加權(quán)利要求、摘要和附圖)中公開的任一特征,除非特別敘述,均可被其他等效或者具有類似目的的替代特征加以替換。即,除非特別敘述,每個(gè)特征只是一系列等效或類似特征中的一個(gè)例子而已。
[0015]—種MPEG TS流PID重映射實(shí)現(xiàn)系統(tǒng),包括PID提取模塊,解析TS流并提取TS流中PID為old PID ;映射表生成模塊,將提取出的old PID和在映射過程中會(huì)被替換成的newPID組成PID映射表;PID映射表排序模塊,將PID映射表根據(jù)old PID的值按照從小到大的順序進(jìn)行排序;PID映射表存儲(chǔ)模塊,存儲(chǔ)排序好的PID映射表;PID查詢模塊,當(dāng)有TS流包輸入時(shí),提取所述TS流包中的PID并查詢存儲(chǔ)模塊中的PID映射表;PID比較模塊,將TS流中提取的PID的值與查詢的PID映射表某一地址中的old PID的值進(jìn)行比對(duì)。
[0016]如圖1所示,圖中代表一個(gè)存儲(chǔ)器資源,在本具體實(shí)施例中,PID映射表根據(jù)oldPID按照從小到大的順序存在存儲(chǔ)器中,排序的過程是CPU進(jìn)行的排序,排好序后將PID映射表傳到FPGA的RAM中。
[0017]一種MPEG TS流PID重映射實(shí)現(xiàn)方法,具體方法步驟為,
步驟一、解析TS流并提取TS流中PID為old PID ;
步驟二、將提取出的old PID和在映射過程中會(huì)被替換成的new PID組成PID映射表; 步驟三、將PID映射表根據(jù)old PID的值按照從小到大的順序進(jìn)行排序并存儲(chǔ);
步驟四、當(dāng)有TS流包輸入時(shí),提取所述TS流包中的PID并查詢存儲(chǔ)模塊中的PID映射表;將TS流中提取的PID的值與查詢的PID映射表某一地址中的old PID的值進(jìn)行比對(duì),判斷是否相等,相等,貝lJ退出查詢,用new PID替換提取出的PID,否則進(jìn)入下一步;
步驟五、根據(jù)比對(duì)大小和映射表地址大小來決定向上或向下查詢,并繼續(xù)查詢和比對(duì)。
[0018]節(jié)省了用于寄存TS包的存儲(chǔ)器資源,同時(shí)也節(jié)省了相應(yīng)的時(shí)序資源。
[0019]在本具體實(shí)施例中,所述步驟四中,將TS流中提取的PID的值與查詢的PID映射表中間地址中的old PID的值進(jìn)行比對(duì)。
[0020]在本具體實(shí)施例中,所述步驟五中,根據(jù)比對(duì)大小和映射表地址大小來決定向上或向下查詢,查詢地址為排除查詢地址后所剩下查詢地址范圍的中間地址,并以此類推繼續(xù)查詢和比對(duì)。
[0021]以查詢2048個(gè)PID為例,當(dāng)開始查詢時(shí),如圖2所示,第一次取出地址為1024中的數(shù)據(jù)進(jìn)行對(duì)比,如果不對(duì),繼續(xù)下一次查詢,直到查詢到對(duì)應(yīng)的PID后退出,或者沒查詢到,但遍歷完畢退出,具體流程如圖3所示,當(dāng)有TS流輸入進(jìn)來時(shí),我們會(huì)提取出TS流包中的PID,這里稱它為TS_PID。提取完成后,進(jìn)入PID查詢過程,查詢的初始地址為地址長度的中間值,即初始地址為addr=1024。這里還有一個(gè)偏移地址,這里稱之為flag,flag的初始值為地址長度的1/4,即初始偏移地址flag=512,同時(shí)flag也是查詢完成的標(biāo)志。
[0022]將TS_PID與addr=1024中的old_PID進(jìn)行對(duì)比,是否相等,如果相等,完成查詢,退出此次查詢,如果不相等,比對(duì)大小,如果TS_PID>old_PID,則addr加上flag,形成下一個(gè)查詢的地址,flag與addr完成相加后flag的值要進(jìn)行右移一位;如果TS_PID〈old_PID,則addr減去flag,形成下一個(gè)查詢的地址,flag與addr完成相減后flag的值也要進(jìn)行右移一位。這樣重復(fù)上面的過程,直至查詢到相應(yīng)的PID,退出查詢,或者flag標(biāo)志等于0,退出查詢。每次addr與flag進(jìn)行運(yùn)算后flag的值都要進(jìn)行右移一位,直到flag的值等于0,此時(shí)標(biāo)志著查詢過程結(jié)束,此時(shí)沒有查詢到相應(yīng)的PID,退出。如果在查詢過程中查詢到TS_PID等于old_PID,立刻退出查詢,用new_PID替換TS_PID。
[0023]如果比所查詢的old PID大,則把查詢范圍縮小到地址范圍1025~2047,如果比所查詢的old PID小,則把查詢范圍縮小到地址范圍0~1023,第二次查詢依然從中間地址開始查詢,比如如果在地址范圍1025~2047,則查詢地址為1536中的PID ;如果在地址范圍0~1023,則查詢地址為512中的PID。依此類推,這樣不斷分割,查詢完2048個(gè)PID理論上只需要12個(gè)時(shí)鐘周期。在實(shí)際應(yīng)用中從TS包中提取PID,加上從RAM中讀取PID并對(duì)比,還要花去一部分延時(shí),總的算下來查詢完2048個(gè)PID至少需要26個(gè)時(shí)鐘周期。對(duì)比傳統(tǒng)的查詢方式,節(jié)省了大量的存儲(chǔ)器資源開銷和減小了系統(tǒng)的延時(shí)。
【主權(quán)項(xiàng)】
1.一種MPEG TS流PID重映射實(shí)現(xiàn)系統(tǒng),器特征在于,包括 PID提取模塊,解析TS流并提取TS流中PID為old PID ; 映射表生成模塊,將提取出的old PID和在映射過程中會(huì)被替換成的new PID組成PID映射表; PID映射表排序模塊,將PID映射表根據(jù)old PID的值按照從小到大的順序進(jìn)行排序; PID映射表存儲(chǔ)模塊,存儲(chǔ)排序好的PID映射表; PID查詢模塊,當(dāng)有TS流包輸入時(shí),提取所述TS流包中的PID并查詢存儲(chǔ)模塊中的PID映射表; PID比較模塊,將TS流中提取的PID的值與查詢的PID映射表某一地址中的old PID的值進(jìn)行比對(duì)。
2.—種MPEG TS流PID重映射實(shí)現(xiàn)方法,具體方法步驟為, 步驟一、解析TS流并提取TS流中PID為old PID ; 步驟二、將提取出的old PID和在映射過程中會(huì)被替換成的new PID組成PID映射表; 步驟三、將PID映射表根據(jù)old PID的值按照從小到大的順序進(jìn)行排序并存儲(chǔ); 步驟四、當(dāng)有TS流包輸入時(shí),提取所述TS流包中的PID并查詢存儲(chǔ)模塊中的PID映射表;將TS流中提取的PID的值與查詢的PID映射表某一地址中的old PID的值進(jìn)行比對(duì),判斷是否相等,相等,貝1J退出查詢,用new PID替換提取出的PID,否則進(jìn)入下一步; 步驟五、根據(jù)比對(duì)大小和映射表地址大小來決定向上或向下查詢,并繼續(xù)查詢和比對(duì)。
3.根據(jù)權(quán)利要求2所述的MPEGTS流PID重映射實(shí)現(xiàn)方法,所述步驟四中,將TS流中提取的PID的值與查詢的PID映射表中間地址中的old PID的值進(jìn)行比對(duì)。
4.根據(jù)權(quán)利要求2或3所述的MPEGTS流PID重映射實(shí)現(xiàn)方法,所述步驟五中,根據(jù)比對(duì)大小和映射表地址大小來決定向上或向下查詢,查詢地址為排除查詢地址后所剩下查詢地址范圍的中間地址,并以此類推繼續(xù)查詢和比對(duì)。
【專利摘要】本發(fā)明提供了一種MPEG TS流PID重映射實(shí)現(xiàn)系統(tǒng)及方法。解析TS流并提取TS流中PID為old PID;將提取出的old PID和在映射過程中會(huì)被替換成的new PID組成PID映射表;將PID映射表根據(jù)old PID的值按照從小到大的順序進(jìn)行排序并存儲(chǔ);當(dāng)有TS流包輸入時(shí),提取所述TS流包中的PID并查詢存儲(chǔ)模塊中的PID映射表;將TS流中提取的PID的值與查詢的PID映射表某一地址中的old PID的值進(jìn)行比對(duì),相等則退出查詢,用new PID替換提取出的PID,否則根據(jù)比對(duì)大小和映射表地址大小來決定向上或向下查詢,并繼續(xù)查詢和比對(duì)。對(duì)比傳統(tǒng)的查詢方式,去除了資源浪費(fèi),節(jié)省了大量的存儲(chǔ)器資源開銷和減小了系統(tǒng)的延時(shí)。
【IPC分類】G06F12-08, G06F17-30
【公開號(hào)】CN104536910
【申請?zhí)枴緾N201410760411
【發(fā)明人】李俊, 牛偉
【申請人】成都德芯數(shù)字科技有限公司
【公開日】2015年4月22日
【申請日】2014年12月12日