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

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

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

圖3 時鐘跟蹤調整框圖
解碼端實現跟蹤源端時鐘后,即可保證轉碼系統長時間不偏離源端時鐘穩定運行,才具備直通音頻實施的系統基礎。直通音頻設計實現如下圖4所示,主要包含2部分:Transcode System為原來的轉碼系統;BypAud_System為直通音頻部分。

圖4 直通音頻設計實現
該設計中主要模塊功能如下。
(1)TS_SRC為待轉碼的TS流,整個TS流會送給原有轉碼系統實施轉碼,轉碼后的輸出TS流為TS_ENC。
(2)Tbase_Gen模塊是一個時基產生模塊,從TS_SRC中獲取節目PCR包并取出其PCR值作為計數器的初始值,以27 MHz時鐘按照PCR計數器的規則進行實時計數,此處計為T1。
(3)Aud_Filte模塊負責從TS_SRC中過濾出需要直通的音頻TS包。
(4)Aud_Add_Tbase模塊負責將Tbase_Gen模塊產生的計數值標記到直通音頻包的自定義包頭中,以此作為該直通音頻包緩存入BUF的時間點,此處計為T2。
(5)Byp_Aud_Buf負責緩存直通音頻。
(6)Aud_Out_Ctl負責控制直通音頻的輸出。假設TS_SRC進入原轉碼系統,轉碼完成后到從TS_ENC輸出,其延時為Tdelay。在設計中,預先從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建立關系。
當TS_ENC中的PCR包到達時刻,鎖存Tbase_Gen當前的計數值,即當前時刻值T1_enc,同時以PCR_enc為計數器初始值,以27 MHz時鐘按照PCR計數器的規則進行實時計數,此處計為T3。由于直通音頻的PTS未做修改,PCR修正按照如下公式:

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

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