袁金保,黃化吉,楊雪松
(偉樂(lè)視訊科技股份有限公司,廣東 惠州 516003)
在數(shù)字電視前端的轉(zhuǎn)碼系統(tǒng)中,經(jīng)常存在3種需要擴(kuò)展音頻升級(jí)的場(chǎng)景:場(chǎng)景1,新發(fā)布的音頻格式,隨著計(jì)算機(jī)技術(shù)的快速發(fā)展,不斷有新的音頻編碼格式與標(biāo)準(zhǔn)出現(xiàn),如我國(guó)的DRA音頻標(biāo)準(zhǔn);場(chǎng)景2,客戶希望保持轉(zhuǎn)碼前的音頻輸出而不做任何修改;場(chǎng)景3,轉(zhuǎn)碼系統(tǒng)規(guī)格限制,無(wú)法實(shí)現(xiàn)某些音頻格式的轉(zhuǎn)碼。為解決這3種場(chǎng)景的轉(zhuǎn)碼系統(tǒng)音頻問(wèn)題,本文設(shè)計(jì)一種直通音頻方案,對(duì)音頻實(shí)施直通,并與轉(zhuǎn)碼后的音視頻進(jìn)行重同步,從而使原轉(zhuǎn)碼系統(tǒng)輕松實(shí)現(xiàn)音頻格式的擴(kuò)展升級(jí)。
圖像和聲音數(shù)字化后,數(shù)據(jù)量巨大,隨之出現(xiàn)了各種壓縮標(biāo)準(zhǔn)和算法。目前使用最廣泛的壓縮標(biāo)準(zhǔn)是MPEG2,壓縮后的數(shù)據(jù)通常用TS流(Transport Stream)格式傳送。整個(gè)音視頻系統(tǒng)按照處理先后順序大致可以分為編碼、傳輸及解碼3個(gè)部分。如把傳輸部分理想化,則可忽略掉傳輸部分的影響,將系統(tǒng)進(jìn)一步簡(jiǎn)化為編碼和解碼2個(gè)部分。
MPEG2協(xié)議規(guī)定,編碼端定期將本端的時(shí)間信息插入到TS流的固定位置,起到為解碼端報(bào)時(shí)的作用,需要接收端“對(duì)表”同步。如圖1所示,編碼器中有一個(gè)27 MHz的系統(tǒng)時(shí)鐘,用該時(shí)鐘產(chǎn)生一個(gè)PCR計(jì)數(shù)器,計(jì)數(shù)器由PCR_Ext和PCR_Bas組成。PCR_Ext為27 MHz時(shí)鐘進(jìn)行模300計(jì)數(shù)分頻,即計(jì)數(shù)器從0累加299,再回到0,獲得9位二進(jìn)制值。PCR_Ext每計(jì)數(shù)到299時(shí),進(jìn)行模233計(jì)數(shù),獲得33位計(jì)數(shù)值PCR_Bas。在每個(gè)新編碼的PES分組中,在其頭信息里插入當(dāng)前的PCR_Bas作為PTS/DTS值,表示該包數(shù)據(jù)是在x點(diǎn)x分x秒打包;除了在PES頭中插入PTS/DTS,按照協(xié)議要求,通常每隔10~100 ms需要把PCR_Bas值插入到TS數(shù)據(jù)流中一次。
圖1 編碼端插入PTS和PCR時(shí)戳
解碼端也有一個(gè)和發(fā)送端類似的PCR時(shí)鐘計(jì)數(shù)系統(tǒng),如圖2所示。接收端從接收到的流中解析出PCR包,與本地的PCR計(jì)數(shù)比較。如果有偏差,就會(huì)調(diào)整本地的27 MHz時(shí)鐘,從而使本地PCR去同步跟蹤編碼端(信源端)的PCR,以此保證解碼端27 MHz時(shí)鐘與編碼端的27 MHz時(shí)鐘一直保持在一定的偏差內(nèi)。解碼器根據(jù)本地的PCR與數(shù)據(jù)包中的時(shí)間標(biāo)簽PTS對(duì)比,就可在正確的時(shí)間進(jìn)行播出。
圖2 解碼端PCR時(shí)戳對(duì)表
解碼器根據(jù)本地時(shí)鐘的PCR計(jì)數(shù)值與待解碼TS流中的PCR比對(duì),根據(jù)比對(duì)結(jié)果動(dòng)態(tài)調(diào)節(jié)本地時(shí)鐘,以此達(dá)到解碼端時(shí)鐘與TS流源端(編碼端)時(shí)鐘同步。因此對(duì)于這種機(jī)制的解碼器,解碼端時(shí)鐘會(huì)跟蹤編碼端時(shí)鐘,其輸入時(shí)鐘無(wú)需特殊處理。
為了簡(jiǎn)化設(shè)計(jì),市面上很多解碼器并沒(méi)有根據(jù)PCR來(lái)動(dòng)態(tài)調(diào)節(jié)時(shí)鐘以跟蹤編碼端,而是以音頻作為參考進(jìn)行音視頻解碼。由于未跟蹤源端PCR來(lái)調(diào)節(jié)本地時(shí)鐘,解碼器長(zhǎng)時(shí)間運(yùn)行后,就會(huì)出現(xiàn)視頻Buffer上溢或下溢。對(duì)此,當(dāng)Buffer上溢時(shí),解碼器進(jìn)行丟幀處理;而當(dāng)Buffer下溢時(shí),則進(jìn)行幀重讀處理,以此保證解碼的正常運(yùn)行。利用人眼視覺(jué)的不敏感性,長(zhǎng)時(shí)間內(nèi)丟一幀/重讀一幀處理,并不會(huì)影響觀看效果。但從實(shí)際項(xiàng)目運(yùn)行來(lái)看,該種方案在運(yùn)行一段時(shí)間后會(huì)出現(xiàn)音視頻解碼異常的情況,停止幾分鐘之后自動(dòng)恢復(fù)。為保持系統(tǒng)長(zhǎng)時(shí)間穩(wěn)定運(yùn)行,需要采用解碼端跟蹤編碼端時(shí)鐘的根本性解決方案。
如圖3所示,采用IDT高精度可編程時(shí)鐘芯片IDT5P49V5901實(shí)現(xiàn)解碼器時(shí)鐘跟蹤信源時(shí)鐘,其實(shí)現(xiàn)原理實(shí)際如圖2所述。具體過(guò)程為:TS_PCR_EXACT模塊提取待解碼TS流的PCR,LOCAL_PCR_CNT模塊為解碼時(shí)鐘進(jìn)行本地PCR計(jì)數(shù)。ADJUST_CTRL模塊負(fù)責(zé)比較TS流的PCR和本地PCR計(jì)數(shù),得到偏差。之后通過(guò)I2C總線控制IDT5P49V5901進(jìn)行時(shí)鐘高精度調(diào)整。
圖3 時(shí)鐘跟蹤調(diào)整框圖
解碼端實(shí)現(xiàn)跟蹤源端時(shí)鐘后,即可保證轉(zhuǎn)碼系統(tǒng)長(zhǎng)時(shí)間不偏離源端時(shí)鐘穩(wěn)定運(yùn)行,才具備直通音頻實(shí)施的系統(tǒng)基礎(chǔ)。直通音頻設(shè)計(jì)實(shí)現(xiàn)如下圖4所示,主要包含2部分:Transcode System為原來(lái)的轉(zhuǎn)碼系統(tǒng);BypAud_System為直通音頻部分。
圖4 直通音頻設(shè)計(jì)實(shí)現(xiàn)
該設(shè)計(jì)中主要模塊功能如下。
(1)TS_SRC為待轉(zhuǎn)碼的TS流,整個(gè)TS流會(huì)送給原有轉(zhuǎn)碼系統(tǒng)實(shí)施轉(zhuǎn)碼,轉(zhuǎn)碼后的輸出TS流為TS_ENC。
(2)Tbase_Gen模塊是一個(gè)時(shí)基產(chǎn)生模塊,從TS_SRC中獲取節(jié)目PCR包并取出其PCR值作為計(jì)數(shù)器的初始值,以27 MHz時(shí)鐘按照PCR計(jì)數(shù)器的規(guī)則進(jìn)行實(shí)時(shí)計(jì)數(shù),此處計(jì)為T1。
(3)Aud_Filte模塊負(fù)責(zé)從TS_SRC中過(guò)濾出需要直通的音頻TS包。
(4)Aud_Add_Tbase模塊負(fù)責(zé)將Tbase_Gen模塊產(chǎn)生的計(jì)數(shù)值標(biāo)記到直通音頻包的自定義包頭中,以此作為該直通音頻包緩存入BUF的時(shí)間點(diǎn),此處計(jì)為T2。
(5)Byp_Aud_Buf負(fù)責(zé)緩存直通音頻。
(6)Aud_Out_Ctl負(fù)責(zé)控制直通音頻的輸出。假設(shè)TS_SRC進(jìn)入原轉(zhuǎn)碼系統(tǒng),轉(zhuǎn)碼完成后到從TS_ENC輸出,其延時(shí)為Tdelay。在設(shè)計(jì)中,預(yù)先從Byp_Aud_Buf中讀取直通音頻的包頭,獲取包頭中標(biāo)記的存入緩存的時(shí)間點(diǎn)T2,并在獲取T2的時(shí)刻,鎖存Tbase_Gen當(dāng)前的時(shí)刻值T1_byp。當(dāng)T1_byp-T2≥Tdelay,表示直通音頻包在緩存中滯留的時(shí)間已達(dá)到Tdelay,此時(shí)該直通音頻包可以輸出,從而保證直通音頻包的物理到達(dá)時(shí)間和編碼后的音視頻包匹配。
(7)Pcr_Pts_Dts_Adj模塊負(fù)責(zé)修改編碼后TS流的PCR、PTS及DTS,從而保證音視頻同步。因?yàn)橹蓖ㄒ纛l的PTS是未做修改的,所以TS_ENC需要與TS_SRC建立關(guān)系。
當(dāng)TS_ENC中的PCR包到達(dá)時(shí)刻,鎖存Tbase_Gen當(dāng)前的計(jì)數(shù)值,即當(dāng)前時(shí)刻值T1_enc,同時(shí)以PCR_enc為計(jì)數(shù)器初始值,以27 MHz時(shí)鐘按照PCR計(jì)數(shù)器的規(guī)則進(jìn)行實(shí)時(shí)計(jì)數(shù),此處計(jì)為T3。由于直通音頻的PTS未做修改,PCR修正按照如下公式:
由式(1)可知,TS_ENC修正后的PCR值為TS_SRC的PCR作為時(shí)基參考計(jì)數(shù)減去Tdelay得到,其關(guān)系可以保證PCR和PTS的同步關(guān)系。
當(dāng)TS_ENC中的PTS、DTS到達(dá)時(shí)刻,分別將T1和T3的計(jì)數(shù)值鎖存下來(lái),計(jì)為T1_pts/T3_pts和T1_dts/T3_dts。則PTS和DTS修正按照如下公式:
由前文可知,本系統(tǒng)唯一不確定的參數(shù)值為Tdelay,該值為轉(zhuǎn)碼系統(tǒng)的延遲值。在不同的轉(zhuǎn)碼系統(tǒng)中,其值是不一樣的。為此,在調(diào)試時(shí),可以在終端連接分析儀,根據(jù)分析儀上報(bào)的PCR/PTS/DTS之間的關(guān)系,調(diào)試Tdelay值,直到滿足標(biāo)準(zhǔn)要求;如果不具備分析儀,則可以通過(guò)終端解碼,根據(jù)聽(tīng)覺(jué),動(dòng)態(tài)調(diào)整Tdelay值,直至音視頻同步。
本文分析了音視頻同步的關(guān)鍵技術(shù)點(diǎn),并詳細(xì)介紹用FPGA實(shí)現(xiàn)解碼端跟蹤信源時(shí)鐘的方案以及直通音頻的設(shè)計(jì)實(shí)現(xiàn)。所述方案已成功應(yīng)用到偉樂(lè)公司DMP等媒體平臺(tái)設(shè)備中。實(shí)踐證明該系統(tǒng)長(zhǎng)時(shí)間穩(wěn)定運(yùn)行,均能保證音視頻同步,為原轉(zhuǎn)碼系統(tǒng)實(shí)現(xiàn)音頻規(guī)格的擴(kuò)展升級(jí)提供了很好的解決方案。