PTS PCR DTS

PTS PCR DTS 詳解

 

MPEG-2 TS/PS同步原理

一、引言

 

    MPEG-2系統用於視音頻同步以及系統時鐘恢復的時間標籤分別在ES,PES和TS這3個層次中。在ES層,與同步有關的主要是視頻緩衝驗證VBV(Video Buffer Verifier),用以防止解碼器的緩衝器出現上溢或者下溢;在PES層,主要是在PES頭信息裏出現的顯示時間標籤PTS(Presentation Time Stamp)和解碼時間標籤DTS(Decoding Time Stamp);在TS層中,TS頭信息包含了節目時鐘參考PCR(Program Clock Reference),用於恢復出與編碼端一致的系統時序時鐘STC(System Time Clock)。在節目流PS包頭中加入SCR,它的作用與PCR域相似。標準規定在原始音頻和視頻流中,PTS的間隔不能超過0.7s,而出現在TS包頭的PCR間隔不能超過0.1s。

    

    我們知道,MPEG-2對視頻的壓縮產生I幀、P幀、B幀。把幀順序I1幀-P4幀-B2幀-B3幀-P7幀-B5幀-B6幀的編碼ES,通過打包並在每個幀中插入PTS/DTS標誌,變成PES。在插入PTS/DTS標誌時,由於在B幀PTS和DTS是相等的,所以無須在B幀多插入DTS(參見圖1)。而對於I幀和P幀,由於經過複用後數據包的順序會發生變化,顯示前一定要存儲於視頻解碼器的從新排序緩存器中,經過從新排序後再顯示,所以一定要同時插入PTS和DTS作爲從新排序的依據。

 

二、同步機制

 

    編碼器中有一個系統時鐘STC(其頻率是27MHz),此時鐘用來產生指示音視頻的正確顯示和解碼的時間標籤,同時可用來指示在採樣過程中系統時鐘本身的瞬時值。指示音視頻顯示時間的時間標籤稱爲顯示時間標籤(PTS),指示音視頻的解碼時間標籤稱爲解碼時間標籤(DTS),指示系統時鐘本身的瞬時值的時間標籤稱爲節目參考時鐘標籤(PCR)。解碼器通過VBV_delay(視頻流延時值,在解碼時利用視頻流緩衝區把視頻流緩存到相應的vbv_delay時間後,再啓動解碼器解碼、顯示、實現音視頻的同步。vbv_delay存在於視頻ES的頭部,長度爲16bit)的數值來確定解碼的開始,用解碼時間標籤(DTS)和顯示時間標籤(PTS)來確定解碼和顯示的次序,用PCR來獲得系統時鐘的同步。解碼器中的系統時鐘及其同步就是依靠這些時間標籤來進行恢復和修正的。

 

    PCR的插入必須在PCR字段的最後離開復用器的那一時刻,同時把27MHz系統時鐘的採樣瞬時值作爲PCR字段插入到相應的PCR域。是放在TS包頭的自適應區中傳送。27 MHz時鐘經波形整理後分兩路,一路是由27MHz脈衝直接觸發計數器生成擴展域PCR_ext,長度爲9bits。另一路經一個300分頻器後的90 kHz脈衝送入一個33位計數器生成90KHZ基值,列入PCR_base(基值域),長度33bits,用於和PTS/DTS比較,產生解碼和顯示所需要的同步信號。這兩部分被置入PCR域,共同組成了42位的PCR。

 

    PTS域爲33bits,它也是一個33b的計數值,也是對系統時鐘的300分頻的時鐘的計數值。被編碼成爲3個獨立的字段,表示此分組中第一個訪問單元在系統目標解碼器中的預定顯示時間。

 

    DTS域也爲33bits,編碼成爲3個獨立的字段,表示此分組中第一個訪問單元在系統目標解碼器中的預定解碼時間。DTS就視頻來說,因爲視頻編碼的時候用到了雙向預測,一個圖像單元被解出,並非馬上就被顯示,可能在存儲器中留一段時間,作爲其餘圖像單元的解碼參考,在被參考完畢後,才被顯示。針對視頻的顯示,Mpeg還提出了一個視頻PTS。針對音頻和視頻的同步顯示,又提出了一個音頻PTS。由於聲音沒有用到雙向預測,它的解碼次序就是它的顯示次序,故對它只提出PTS的概念。

 

    解碼器在解碼時,首先利用PCR重建和編碼器同步的27 MHz系統時鐘,恢復27 MHz系統時鐘後,再利用PES流中的DTS,PTS進行音頻與視頻間的同步,同時利用VBV_Delay設置解碼器的緩衝時長,後啓動初始解碼。下圖是利用PCR恢復STC的原理圖。

 

 

 

圖2 用PCR恢復本地STC時鐘

 

    PCR-Base的作用是在解碼器切換節目時,提供對解碼器PCR計數器的初始值,以讓該PCR值與PTS、DTS最大可能地達到相同的時間起點。PCR-ext的作用是通過解碼器端的鎖相環電路修正解碼器的系統時鐘,使其達到和編碼器一致的27MHz。

 

    在PCR域的33 bits中的90 kHz部分(即PCR-Base域)用於與PTS和DTS作比較,當二者相同時,相應的單元被顯示或者解碼。但按照MPEG-2標準的規定,PTS/DTS位於PES包的包頭中,而解複用器所解出的PES包頭的字節不被送入到任何基本流解碼器的輸入緩衝區,僅用於控制各解碼器工作。每當解複用器解到一個PTS/DTS時,PTS/DTS就作爲其後送入各個基本流解碼器的輸入緩衝器中的數據的顯示/解碼時間,但此時送入信道緩衝器中的基本流並不一定立即被解碼,因此基本流解碼器必須記錄當前這個PTS/DTS及所對應的碼流位置,以利於後面的解碼和顯示同步。

 

    針對以上分析,我們採用如下方法來達到解碼與顯示的同步:在每一個基本流解碼器中建立一個33 bits的PTS/DTS先入先出存儲器(FIFO),用以存放PTS/DTS值,同時在解複用器中加入一個檢測電路,每當碼流開始新的一幀圖像時,則產生一個信號,用來通知基本流解碼器,並將該幀圖像的PTS/DTS寫入到FIFO中。每當解碼器解到一幀圖像時,就從FIFO中讀出相應的PTS/DTS,此PTS/DTS與STC進行比較,當兩者相等時,當前圖像就開始顯示/解碼。

 

    在MPEG-2標準中,並非每一個PES包或每一幀圖像均有PTS和DTS,一般PS流中每兩個PTS之間的間隔是0.7 s,而TS流中每兩個PTS之間的間隔是0.1 s,所以在沒有PTS和DTS的一幀圖像出現時,我們可以在前一PTS/DTS的基礎上加一增量得到對應該幀圖像的PTS/DTS,並將計算出來的新的PTS/DTS插入到存放PTS/DTS的FIFO中去,即:PTSn=PTSn-1+ΔPTS(n爲第n幀圖像)。

 

解碼器同步算法總結如下:

 

(1)解碼器從輸入碼流的包頭中解出時間信息PCR送入到系統時間時鐘恢復電路;系統時間時鐘恢復電路在接收到每一個新的PCR時,進行本地系統時間時鐘恢復和鎖相。

(2)解複用器後,從PES包頭中解出顯示時間標籤PTS和解碼時間標籤DTS,並送入到基本流解碼器中。

(3)基本流解碼器在接收到新的PTS/DTS後,存入對應的FIFO(先進先處存儲器)中進行管理;對於沒有PTS/DTS的顯示單元,需要對其時間標籤進行插值,並送入到FIFO中管理。

(4)每一顯示單元開始解碼前,用其對應的DTS與STC進行比較,當STC與DTS相等時開始解碼;

(5)每一顯示單元開始顯示前,用其對應的PTS與STC進行比較,當STC與PTS相等時開始顯示。

 

三、失同步處理

 

    27 MHz系統時鐘經過300分頻後,得到本地的33 bits PCR_Base,該時鐘與寄存器中當前圖像的PTS/DTS進行比較,系統軟件根據比較結果做出相應的處理:

(1)若當前的PTS/DTS比PCR計數器的值小於半幀以上,即PTS_Base≤-ΔPTS/2,此時說明系統解碼過慢,解碼器處於失步狀態,應根據該幀的結構做出相應的同步調整;

(2)若當前的PTS/DTS比PCR計數器的值在半幀時間以內,我們認爲此時系統解碼正常,立即顯示/解碼當前幀;

(3)若當前的PTS/DTS大於PCR計數器的值,則此時解碼器稍快,在這種情況下,只需等到PCR與PTS/DTS相等時,就可顯示/解碼。

發佈了11 篇原創文章 · 獲贊 4 · 訪問量 5萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章