【AV SYNC】數字電視中的編解碼器同步機制

數字電視中的編解碼器同步機制

1MPEG-2流結構
   
在數字電視系統中,模擬視音頻信號按照MPEG-2的標準,經過抽樣、量化及壓縮編碼形成基本碼流ES,基本碼流ES是不分段的連續碼流。把基本碼流分割成段,並加上相應的頭文件打包形成的打包基本碼流PES(如圖1所示),PES包和包之間可以是不連續的。在傳輸時將PES包再分段打成有固定長度188B的傳送碼流TS或可變長度的節目流包(PS包)。PES只是PS轉換爲TSTS轉換爲PS的中間步驟或橋樑,時MPEG-2數據流互換的邏輯結構。TSPS這兩種碼流分別適應於不同的場合應用,節目流PS適合在相對出錯較少的環境下使用,其長度是變化的,而傳送流TS能夠把多個節目在基於一個或多個時間標識的基礎上構成一個流,傳送流適合於出錯較多的場合下使用。用數據包傳輸的優點是:網絡中信息可佔用不同的連接線路和簡單暫存。通過數據包交織把多個數據流複用成一個新的數據流。便於解碼器按照相應順序對數據包進行靈活的整理,從而,爲數據流同步和複用奠定了基礎。

MPEG-2的結構可分爲壓縮層和系統層,其中ES屬於壓縮層,PESTS/PS屬於系統層
PES層,主要是在PES包頭信息中加入PTS(顯示時間標籤)DTS(解碼時間標籤)用於視頻、音頻同步

而在TS流中,TS包頭加入了PCR(節目時鐘參考),用於解碼器的系統時鐘恢復。

在節目流PS包頭中加入SCR,它的作用與PCR域相似
    ES
是編碼視頻數據流或音頻數據流,每個ES都由若干個存取單元(AU)組成,每個視頻AU或音頻AU都是由頭部和編碼數據兩部分組成,1AU相當於編碼的1幅視頻圖像或1個音頻幀,也可以說,每個AU實際上是編碼數據流的顯示單元,即相當於解碼的1幅視頻圖像或1個音頻幀的取樣。
   
我們知道,MPEG-2對視頻的壓縮產生I幀、P幀、B幀。把幀順序I1-P4-B2-B3-P7-B5-B6幀的編碼ES,通過打包並在每個幀中插入PTS/DTS標誌,變成PES。在插入PTS/DTS標誌時,由於在BPTSDTS是相等的,所以無須在B幀多插入DTS(參見圖1)。而對於I幀和P幀,由於經過複用後數據包的順序會發生變化,顯示前一定要存儲於視頻解碼器的從新排序緩存器中,經過從新排序後再顯示,所以一定要同時插入PTSDTS作爲從新排序的依據。例如,解碼器輸入的圖像幀順序爲I1-P4-B2-B3-P7-B5-B6,但顯示時P4一定要在B2B3之後,在PSTDTS的指引下,經過緩存器從新排序,以從建視頻幀順序爲:I1-B2-B3-P4- P7-B5-B6
   
PES包再打成更小的具固定長度的TS包時在其包頭位置加入了PCRPID(包標識)PID的值是由用戶確定的,解碼器根據PIDTS(多節目傳輸流)上不同節目的TS包區分出來,以重建原來的ES。另外,TS的包頭包含一個4bit的連續計數器,連續計數器可對PID包傳送順序計數,據計數器讀數,接收端可判斷是否有包丟失及包傳送順序錯誤。所以TS的包頭具有同步、識別、檢錯等功能。


2
、時間模型
   
MPEG-2系統層時間模型中,它的端到端延遲——從信號進入編碼器到信號從解碼器輸出是一個常數,信號總共經過編碼器、編碼緩衝器、多路複用器、傳輸或存儲、解複用器、解碼緩衝器以及解碼器等器件的延遲。如圖2所示。


   
所有的視頻和音頻經過採樣(A/D變換)進入編碼器後,經一恆定的延遲,在解碼器分別輸出顯示,採樣後的碼率在編碼器和解碼器中應嚴格相等。在MPEG-2中,所有的時序被定義成一個共同的系統時鐘(STC),故編碼器、解碼器的系統時鐘必須同步。解碼器的系統時鐘應由編碼器的系統時鐘經恆定延遲後恢復出來,以服從於編碼器
   
對於PS(節目流)而言,這個時鐘可以與視頻或音頻採樣時鐘之間有一個嚴格的特定比率,或者稍有區別,但仍足以提供精確的端到端的時序和時鐘恢復。而在TS(傳輸流)中,此係統時鐘頻率與視頻或音頻的採樣時鐘之間任何時候都必須有嚴格的比率關係,其目的是爲了在解碼器中恢復視音頻採樣後的碼率。


3
、時間標籤定義及同步機制
   
編碼器中有一個系統時鐘(其頻率是27MHz),此時鐘用來產生指示音視頻的正確顯示和解碼的時間標籤,同時可用來指示在採樣過程中系統時鐘本身的瞬時值。指示音視頻顯示時間的時間標籤稱爲顯示時間標籤(PTS),指示音視頻的解碼時間標籤稱爲解碼時間標籤(DTS),指示系統時鐘本身的瞬時值的時間標籤稱爲節目參考時鐘標籤(PCR)。解碼器通過VBV_delay(視頻流延時值,在解碼時利用視頻流緩衝區把視頻流緩存到相應的vbv_delay時間後,再啓動解碼器解碼、顯示、實現音視頻的同步。vbv_delay存在於視頻ES的頭部,長度爲16bit)的數值來確定解碼的開始,用解碼時間標籤(DTS)和顯示時間標籤(PTS)來確定解碼和顯示的次序,用PCR來獲得系統時鐘的同步。解碼器中的系統時鐘及其同步就是依靠這些時間標籤來進行恢復和修正的。
PCR
PTSDTS具體構成如下:
    PCR
的插入必須在PCR字段的最後離開復用器的那一時刻,同時把27 MHz系統時鐘的採樣瞬時值作爲PCR字段插入到相應的PCR域。27 MHz時鐘經波形整理後分兩路,一路是由27MHz脈衝直接觸發計數器生成擴展域PCR_ext,長度爲9bits。另一路經一個300分頻器後的90 kHz脈衝送入一個33位計數器生成90KHZ基值,列入PCR_base(基值域),長度33bits,用於和PTS/DTS比較,產生解碼和顯示所需要的同步信號。這兩部分被置入PCR域,共同組成了42位的PCR
    PTS
域爲33bits,編碼成爲3個獨立的字段,表示此分組中第一個訪問單元在系統目標解碼器中的預定顯示時間。
    DTS
域也爲33bits,編碼成爲3個獨立的字段,表示此分組中第一個訪問單元在系統目標解碼器中的預定解碼時間。
   
解碼器在解碼時,首先利用PCR重建和編碼器同步的27 MHz系統時鐘,恢復27 MHz系統時鐘後,再利用PES流中的DTSPTS進行音頻與視頻間的同步,同時利用VBV_Delay設置解碼器的緩衝時長,後啓動初始解碼。
解碼器同步算法如下:
1) 解碼器從輸入碼流的包頭中解出時間信息PCR送入到系統時間時鐘恢復電路;系統時間時鐘恢復電路在接收到每一個新的PCR時,進行本地系統時間時鐘恢復和鎖相。
2) 解複用器後,從PES包頭中解出顯示時間標籤PTS和解碼時間標籤DTS,並送入到基本流解碼器中。
3) 基本流解碼器在接收到新的PTS/DTS後,存入對應的FIFO(先進先處存儲器)中進行管理;對於沒有PTS/DTS的顯示單元,需要對其時間標籤進行插值,並送入到FIFO中管理。
4) 每一顯示單元開始解碼前,用其對應的DTSSTC進行比較,當STCDTS相等時開始解碼;
5) 每一顯示單元開始顯示前,用其對應的PTSSTC進行比較,當STCPTS相等時開始顯示。
   
在理想情況下,PTSDTS的值應該是相同的,但由於實際解碼器在解碼時需要一定的時間,所以PTSDTS的值是不同的。如果在PES包頭中只出現了PTS,我們就認爲DTS=PTS


4
、系統時鐘(STC)恢復
   
在解碼器中,STC的恢復是同步的關鍵。如果解碼器中的時鐘頻率和編碼器的時鐘頻率嚴格匹配,那麼視頻和音頻的解碼和顯示將自動和編碼器保持相同的速率,此時,端到端的延遲是一個常數。在實際中,是利用接收到的PCR的值來使解碼器時鐘服從於編碼器的系統時鐘,其典型方法是通過鎖相環(PLL)。
   
當一個新節目的PCR到達解碼器時,就需要更新時間基點,STC要設置爲PCR中的當前值。通常第一個從解複用器中解出的PCR被直接裝入到STC的計數器,PCR的值作爲鎖相環的參考頻率,用來和STC的當前值比較,產生的差值e,經過脈寬調製後輸入到低通濾波器並經放大,成爲控制信號f用來控制振盪器(VCO)的瞬時頻率,VCO輸出的頻率是在27 MHz左右振盪信號,它作爲解碼器的系統時鐘。如圖3所示。


5
DTS/PTS的管理
   
PCR域的33 bits中的90 kHz部分(即PCR-Base域)用於與PTSDTS作比較,當二者相同時,相應的單元被顯示或者解碼。但按照MPEG-2標準的規定,PTS/DTS位於PES包的包頭中,而解複用器所解出的PES包頭的字節不被送入到任何基本流解碼器的輸入緩衝區,僅用於控制各解碼器工作。每當解複用器解到一個PTS/DTS時,PTS/DTS就作爲其後送入各個基本流解碼器的輸入緩衝器中的數據的顯示/解碼時間,但此時送入信道緩衝器中的基本流並不一定立即被解碼,因此基本流解碼器必須記錄當前這個PTS/DTS及所對應的碼流位置,以利於後面的解碼和顯示同步。
   
針對以上分析,我們採用如下方法來達到解碼與顯示的同步:在每一個基本流解碼器中建立一個33 bitsPTS/DTS先入先出存儲器(FIFO),用以存放PTS/DTS值,同時在解複用器中加入一個檢測電路,每當碼流開始新的一幀圖像時,則產生一個信號,用來通知基本流解碼器,並將該幀圖像的PTS/DTS寫入到FIFO中。每當解碼器解到一幀圖像時,就從FIFO中讀出相應的PTS/DTS,此PTS/DTSSTC進行比較,當兩者相等時,當前圖像就開始顯示/解碼。
   
MPEG-2標準中,並非每一個PES包或每一幀圖像均有PTSDTS,一般PS流中每兩個PTS之間的間隔是0.7 s,而TS流中每兩個PTS之間的間隔是0.1 s,所以在沒有PTSDTS的一幀圖像出現時,我們可以在前一PTS/DTS的基礎上加一增量得到對應該幀圖像的PTS/DTS,並將計算出來的新的PTS/DTS插入到存放PTS/DTSFIFO中去,即:PTSn=PTSn1+ΔPTSn爲第n幀圖像)。


6
PTS/DTS同步實現和失步處理
    27 MHz
系統時鐘經過300分頻後,得到本地的33 bits PCR_Base,該時鐘與寄存器中當前圖像的PTS/DTS進行比較,系統軟件根據比較結果做出相應的處理:
1) 若當前的PTS/DTSPCR計數器的值小於半幀以上,即PTS_Base≤-ΔPTS/2,此時說明系統解碼過慢,解碼器處於失步狀態,應根據該幀的結構做出相應的同步調整;
2) 若當前的PTS/DTSPCR計數器的值在半幀時間以內,我們認爲此時系統解碼正常,立即顯示/解碼當前幀;
3) 若當前的PTS/DTS大於PCR計數器的值,則此時解碼器稍快,在這種情況下,只需等到PCRPTS/DTS相等時,就可顯示/解碼

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章