袁金保,黃化吉,楊雪松
(偉樂視訊科技股份有限公司,廣東 惠州 516003)
在數(shù)字電視前端的轉(zhuǎn)碼系統(tǒng)中,經(jīng)常存在3種需要擴展音頻升級的場景:場景1,新發(fā)布的音頻格式,隨著計算機技術(shù)的快速發(fā)展,不斷有新的音頻編碼格式與標準出現(xiàn),如我國的DRA音頻標準;場景2,客戶希望保持轉(zhuǎn)碼前的音頻輸出而不做任何修改;場景3,轉(zhuǎn)碼系統(tǒng)規(guī)格限制,無法實現(xiàn)某些音頻格式的轉(zhuǎn)碼。為解決這3種場景的轉(zhuǎn)碼系統(tǒng)音頻問題,本文設(shè)計一種直通音頻方案,對音頻實施直通,并與轉(zhuǎn)碼后的音視頻進行重同步,從而使原轉(zhuǎn)碼系統(tǒng)輕松實現(xiàn)音頻格式的擴展升級。
圖像和聲音數(shù)字化后,數(shù)據(jù)量巨大,隨之出現(xiàn)了各種壓縮標準和算法。目前使用最廣泛的壓縮標準是MPEG2,壓縮后的數(shù)據(jù)通常用TS流(Transport Stream)格式傳送。整個音視頻系統(tǒng)按照處理先后順序大致可以分為編碼、傳輸及解碼3個部分。如把傳輸部分理想化,則可忽略掉傳輸部分的影響,將系統(tǒng)進一步簡化為編碼和解碼2個部分。
MPEG2協(xié)議規(guī)定,編碼端定期將本端的時間信息插入到TS流的固定位置,起到為解碼端報時的作用,需要接收端“對表”同步。如圖1所示,編碼器中有一個27 MHz的系統(tǒng)時鐘,用該時鐘產(chǎn)生一個PCR計數(shù)器,計數(shù)器由PCR_Ext和PCR_Bas組成。PCR_Ext為27 MHz時鐘進行模300計數(shù)分頻,即計數(shù)器從0累加299,再回到0,獲得9位二進制值。PCR_Ext每計數(shù)到299時,進行模233計數(shù),獲得33位計數(shù)值PCR_Bas。在每個新編碼的PES分組中,在其頭信息里插入當前的PCR_Bas作為PTS/DTS值,表示該包數(shù)據(jù)是在x點x分x秒打包;除了在PES頭中插入PTS/DTS,按照協(xié)議要求,通常每隔10~100 ms需要把PCR_Bas值插入到TS數(shù)據(jù)流中一次。

圖1 編碼端插入PTS和PCR時戳
解碼端也有一個和發(fā)送端類似的PCR時鐘計數(shù)系統(tǒng),如圖2所示。接收端從接收到的流中解析出PCR包,與本地的PCR計數(shù)比較。如果有偏差,就會調(diào)整本地的27 MHz時鐘,從而使本地PCR去同步跟蹤編碼端(信源端)的PCR,以此保證解碼端27 MHz時鐘與編碼端的27 MHz時鐘一直保持在一定的偏差內(nèi)。解碼器根據(jù)本地的PCR與數(shù)據(jù)包中的時間標簽PTS對比,就可在正確的時間進行播出。

圖2 解碼端PCR時戳對表
解碼器根據(jù)本地時鐘的PCR計數(shù)值與待解碼TS流中的PCR比對,根據(jù)比對結(jié)果動態(tài)調(diào)節(jié)本地時鐘,以此達到解碼端時鐘與TS流源端(編碼端)時鐘同步。因此對于這種機制的解碼器,解碼端時鐘會跟蹤編碼端時鐘,其輸入時鐘無需特殊處理。
為了簡化設(shè)計,市面上很多解碼器并沒有根據(jù)PCR來動態(tài)調(diào)節(jié)時鐘以跟蹤編碼端,而是以音頻作為參考進行音視頻解碼。由于未跟蹤源端PCR來調(diào)節(jié)本地時鐘,解碼器長時間運行后,就會出現(xiàn)視頻Buffer上溢或下溢。對此,當Buffer上溢時,解碼器進行丟幀處理;而當Buffer下溢時,則進行幀重讀處理,以此保證解碼的正常運行。利用人眼視覺的不敏感性,長時間內(nèi)丟一幀/重讀一幀處理,并不會影響觀看效果。但從實際項目運行來看,該種方案在運行一段時間后會出現(xiàn)音視頻解碼異常的情況,停止幾分鐘之后自動恢復。為保持系統(tǒng)長時間穩(wěn)定運行,需要采用解碼端跟蹤編碼端時鐘的根本性解決方案。
如圖3所示,采用IDT高精度可編程時鐘芯片IDT5P49V5901實現(xiàn)解碼器時鐘跟蹤信源時鐘,其實現(xiàn)原理實際如圖2所述。具體過程為:TS_PCR_EXACT模塊提取待解碼TS流的PCR,LOCAL_PCR_CNT模塊為解碼時鐘進行本地PCR計數(shù)。ADJUST_CTRL模塊負責比較TS流的PCR和本地PCR計數(shù),得到偏差。之后通過I2C總線控制IDT5P49V5901進行時鐘高精度調(diào)整。

圖3 時鐘跟蹤調(diào)整框圖
解碼端實現(xiàn)跟蹤源端時鐘后,即可保證轉(zhuǎn)碼系統(tǒng)長時間不偏離源端時鐘穩(wěn)定運行,才具備直通音頻實施的系統(tǒng)基礎(chǔ)。直通音頻設(shè)計實現(xiàn)如下圖4所示,主要包含2部分:Transcode System為原來的轉(zhuǎn)碼系統(tǒng);BypAud_System為直通音頻部分。

圖4 直通音頻設(shè)計實現(xiàn)
該設(shè)計中主要模塊功能如下。
(1)TS_SRC為待轉(zhuǎn)碼的TS流,整個TS流會送給原有轉(zhuǎn)碼系統(tǒng)實施轉(zhuǎn)碼,轉(zhuǎn)碼后的輸出TS流為TS_ENC。
(2)Tbase_Gen模塊是一個時基產(chǎn)生模塊,從TS_SRC中獲取節(jié)目PCR包并取出其PCR值作為計數(shù)器的初始值,以27 MHz時鐘按照PCR計數(shù)器的規(guī)則進行實時計數(shù),此處計為T1。
(3)Aud_Filte模塊負責從TS_SRC中過濾出需要直通的音頻TS包。
(4)Aud_Add_Tbase模塊負責將Tbase_Gen模塊產(chǎn)生的計數(shù)值標記到直通音頻包的自定義包頭中,以此作為該直通音頻包緩存入BUF的時間點,此處計為T2。
(5)Byp_Aud_Buf負責緩存直通音頻。
(6)Aud_Out_Ctl負責控制直通音頻的輸出。假設(shè)TS_SRC進入原轉(zhuǎn)碼系統(tǒng),轉(zhuǎn)碼完成后到從TS_ENC輸出,其延時為Tdelay。在設(shè)計中,預先從Byp_Aud_Buf中讀取直通音頻的包頭,獲取包頭中標記的存入緩存的時間點T2,并在獲取T2的時刻,鎖存Tbase_Gen當前的時刻值T1_byp。當T1_byp-T2≥Tdelay,表示直通音頻包在緩存中滯留的時間已達到Tdelay,此時該直通音頻包可以輸出,從而保證直通音頻包的物理到達時間和編碼后的音視頻包匹配。
(7)Pcr_Pts_Dts_Adj模塊負責修改編碼后TS流的PCR、PTS及DTS,從而保證音視頻同步。因為直通音頻的PTS是未做修改的,所以TS_ENC需要與TS_SRC建立關(guān)系。
當TS_ENC中的PCR包到達時刻,鎖存Tbase_Gen當前的計數(shù)值,即當前時刻值T1_enc,同時以PCR_enc為計數(shù)器初始值,以27 MHz時鐘按照PCR計數(shù)器的規(guī)則進行實時計數(shù),此處計為T3。由于直通音頻的PTS未做修改,PCR修正按照如下公式:

由式(1)可知,TS_ENC修正后的PCR值為TS_SRC的PCR作為時基參考計數(shù)減去Tdelay得到,其關(guān)系可以保證PCR和PTS的同步關(guān)系。
當TS_ENC中的PTS、DTS到達時刻,分別將T1和T3的計數(shù)值鎖存下來,計為T1_pts/T3_pts和T1_dts/T3_dts。則PTS和DTS修正按照如下公式:

由前文可知,本系統(tǒng)唯一不確定的參數(shù)值為Tdelay,該值為轉(zhuǎn)碼系統(tǒng)的延遲值。在不同的轉(zhuǎn)碼系統(tǒng)中,其值是不一樣的。為此,在調(diào)試時,可以在終端連接分析儀,根據(jù)分析儀上報的PCR/PTS/DTS之間的關(guān)系,調(diào)試Tdelay值,直到滿足標準要求;如果不具備分析儀,則可以通過終端解碼,根據(jù)聽覺,動態(tài)調(diào)整Tdelay值,直至音視頻同步。
本文分析了音視頻同步的關(guān)鍵技術(shù)點,并詳細介紹用FPGA實現(xiàn)解碼端跟蹤信源時鐘的方案以及直通音頻的設(shè)計實現(xiàn)。所述方案已成功應(yīng)用到偉樂公司DMP等媒體平臺設(shè)備中。實踐證明該系統(tǒng)長時間穩(wěn)定運行,均能保證音視頻同步,為原轉(zhuǎn)碼系統(tǒng)實現(xiàn)音頻規(guī)格的擴展升級提供了很好的解決方案。