PTS和DTS是時標(biāo),每秒增加90k 這個在MPEG2文檔中可以查到 The PTS/DTS flags in the packet header are set to indicate the presence of PTS alone or both PTS and DTS time stamp. Audio packets may contain several access units and the packet header contains a PTS. Because audio packets are never trans-mitted out of sequence, there is no DTS in an audio packet.
視頻流中的DTS/PTS到底是什么
DTS(解碼時間戳)和PTS(顯示時間戳)分別是解碼器進(jìn)行解碼和顯示幀時相對于SCR(系統(tǒng)參考)的時間戳。
SCR可以理解為解碼器應(yīng)該開始從磁盤讀取數(shù)據(jù)時的時間。
mpeg文件中的每一個包都有一個SCR時間戳并且這個時間戳就是讀取這個數(shù)據(jù)包時的系統(tǒng)時間。通常情況下,解碼器會在它開始讀取mpeg流時啟動系統(tǒng)時鐘(系統(tǒng)時鐘的初始值是第一個數(shù)據(jù)包的SCR值,通常為0但也可以不從0開始)。
DTS時間戳決定了解碼器在SCR時間等于DTS時間時進(jìn)行解碼,PTS時間戳也是類似的。
通常,DTS/PTS時間戳指示的是晚于音視頻包中的SCR的 一個時間。例如,如果一個視頻數(shù)據(jù)包的SCR是 100ms(意味著此包是播放100ms以后從磁盤中讀取的),那么DTS/PTS值就差不多是200 /280ms,表明當(dāng)SCR到200ms時這個視頻數(shù)據(jù)應(yīng)該被解碼并在80ms以后被顯示出來(視頻數(shù)據(jù)在一個buffer中一直保存到開始解碼)
下溢通常發(fā)生在設(shè)置的視頻數(shù)據(jù)流相關(guān)mux率太高。如果mux率是1000000bits/sec(意味著解碼器要以 1000000bits/sec的速 率讀取文件),可是視頻速率是2000000bits/sec(意味著需要以2000000bits/sec的速率顯示視頻數(shù)據(jù)),從磁盤中讀取視頻數(shù)據(jù) 時速度不夠快以至于1秒鐘內(nèi)不能夠讀取足夠的視頻數(shù)據(jù)
。這種情況下DTS/PTS時間戳就會指示視頻在從硬盤中讀出來之前進(jìn)行解碼或顯示(DTS/PTS時間戳就要比包含它們的數(shù)據(jù)包中的SCR時間要早了)。
如今依靠解碼器,著基本已經(jīng)不是什么問題了(盡管MPEG文件因為應(yīng)該沒有下溢而并不完全符合MPEG標(biāo)準(zhǔn))。一些解碼器(很多著名的基于PC的播放器)盡可能快的讀取文件以便顯示視頻,可以的話直接忽略SCR。
注意在你提供的列表中,平均的視頻流速率為~3Mbps(3000000bits/sec)但是它的峰值達(dá)到了14Mbps(相當(dāng)大,DVD限制在 9.8Mbps內(nèi))。這意味著mux率需要調(diào)整足夠大以處理14Mbps的部分, bbMPEG計算出來的mux率有時候太低而導(dǎo)致下溢。
你計劃讓視頻流速率這么高么?這已經(jīng)超過了DVD的說明了,而且很可能在大多數(shù)獨立播放其中都不能播放。如果你不是這么計劃,我會從1增加mquant的值并且在視頻設(shè)置中將最大碼流設(shè)置為9Mbps以保持一個小一點的碼流。
如果你確實想讓視頻碼率那么高,你需要增大mux率。從提供的列表可以得出bbMPEG使用 14706800bits/sec或者 1838350bytes/sec的mux率(總數(shù)據(jù)速率為:1838350bytes/sec(14706800bits/sec)行)。你在強(qiáng)制 mux率字段設(shè)置的值應(yīng)該是以bytes/sec為單位并被50整除。所以我會從36767(1838350/50)開始,一直增加直到不會再出現(xiàn)下溢錯 誤為止。
基本概念
|---------------------------------------------------------------|
| TS/PS: Transport stream |
| Packetized Stream |
| |-------------------------------------------------------| |
| | PES: Packetized Elementary Stream | |
| | |-----------------------------------------------| | |
| | | ES:Elementary stream | | |
| | | |------------------------------------| | | |
| | | | | | | |
| | | | GOP:Group of pictures | | | |
| | | |------------------------------------| | | |
| | | | | |
| | |------------------------------------------------| | |
| | | |
| |--------------------------------------------------------| |
| |
|----------------------------------------------------------------|
TS: DVB
PS:DVD
PTS:Presentation Time Stamp
DTS:Decoding Time Stamp
PCR:Program Clock Reference
STC:System Time Clock
1. SCR
SCR是存在于PS中的,即PS的pack里面的一個field。他用來指定這個PS的pack期望的到達(dá)decoder的時間。
2. ESCR
ESCR是位于PES里面的,即PES的header里面可能會有,當(dāng)PES的packet要表示一個PES stream的時候,PES packet里面的ESCR就表示這個PES packet的所期望的到達(dá)decoder的時間。
3.PCR
PCR是TS里面的,即TS packet的header里面可能會有,他用來指定所期望的該ts packet到達(dá)decoder的時間,他的作用于SCR類似。
4.DTS, PTS
對于一個ES來說,比如視頻,他又許多I,P,B幀,而P, B幀都是以I,P幀作為參考。由于B幀是前向后向參考,因此要對B幀作decode的話,就必須先decode該B幀后面的P,或者I幀,于是,decode的時間與幀的真正的present的時間就不一致了,按照DTS一次對各個幀進(jìn)行decode,然后再按照PTS對各個幀進(jìn)行展現(xiàn)。
有時候PES包頭里面也會有DTS,PTS,對于PTS來說,他代表了這個PES包得payload里面的第一個完整地audio access unit或者video access unit的PTS時間(并不是每個audio/video access unit都帶有PTS/DTS,因此,你可以在PES里面指定一個,作為開始)。
PES包頭的DTS也是這個原理,只不過注意的是:對于video來說他的DTS和PTS是可以不一樣的,因為B幀的存在使其順序可以倒置。而對于audio來說,audio沒有雙向的預(yù)測,他的DTS和PTS可以看成是一個順序的,因此可一直采用一個,即可只采用PTS。
Mpeg-2的同步及時間恢復(fù)--STC,PCR,DTS,PTS
摘要:Mpeg-2同步及時間恢復(fù)在編碼、傳輸和解碼中占有重要的地位,它不僅直接影響視音頻的解碼質(zhì)量,還是衡量整個傳輸網(wǎng)絡(luò)優(yōu)劣的重要指標(biāo)。本文將從原理上介紹Mpeg-2同步及時間恢復(fù)方法,并給出PCR測量的幾個項目。關(guān)鍵字:STC,PCR,DTS,PTS 一、引言 Mpeg-2用于視音頻同步以及系統(tǒng)時鐘恢復(fù)的時間標(biāo)簽分別在ES,PES和TS這3個層次 中。在ES層,與同步有關(guān)的主要是視頻緩沖驗證VBV(Video Buffer Verifier),用以防止解碼器的緩沖器出現(xiàn)上溢或者下溢;在PES層,主要是在PES頭信息里出現(xiàn)的顯示時間標(biāo)簽PTS(Presentation Time Stamp)和解碼時間標(biāo)簽DTS(Decoding Time Stamp);在TS層中,TS頭信息包含了節(jié)目時鐘參考PCR(Program Clock Reference),用于恢復(fù)出與編碼端一致的系統(tǒng)時序時鐘STC(System Time Clock)。 通常的視頻壓縮算法都采用了可變長編碼,編碼生成的視頻碼流是可變碼率的。為了能夠在實際的 固定碼率信道或者可變碼率信道上傳輸,需要引入緩沖區(qū)緩存視頻碼流數(shù)據(jù)。因此,視頻編碼算法必須提供一個有效的緩沖區(qū)管理策略,確保緩沖區(qū)不會發(fā)生上溢和 下溢。編碼器通過碼率控制算法,調(diào)整生成的視頻碼流滿足既定的緩沖區(qū)管理策略;同時在碼率控制算法中使用自適應(yīng)量化方法,確保壓縮視頻的質(zhì)量。 緩沖區(qū)管理策略通常都是建立在一個假想的解碼器模型上,該解碼器模型直接和編碼器的輸出相連 接,緩沖區(qū)管理策略通過控制編碼視頻數(shù)據(jù)流移入和移出解碼器緩沖區(qū)的時間以保證解碼器模型的數(shù)據(jù)緩沖區(qū)不上溢也不下溢。在Mpeg標(biāo)準(zhǔn)中,該解碼器模型稱 為VBV。VBV在ES層中定義。 在Mpeg-2編碼器中有單一的共同系統(tǒng)時鐘,此時鐘用來產(chǎn)生指示音頻和視頻的正確顯示和解 碼時序的時間標(biāo)簽,同時可用來指示在抽樣瞬間系統(tǒng)時鐘時間的瞬時值。正是編碼器中共同系統(tǒng)時鐘的出現(xiàn),以及解碼器中時鐘的重新生成和時間標(biāo)簽的正確使用, 才為解碼器中操作的正確同步提供了基準(zhǔn)。 Mpeg-2規(guī)定的系統(tǒng)時鐘頻率為27MHz,傳輸流中的PCR,PTS/DTS等均為對該 共同系統(tǒng)時鐘的采樣值。解碼端捕獲PCR,恢復(fù)出本地的STC,作為音視頻同步控制的基準(zhǔn),并依據(jù)PTS(DTS)時間標(biāo)簽來安排解碼和顯示時間表,使音 視頻分別同步于STC,以實現(xiàn)音視頻之間的同步。標(biāo)準(zhǔn)規(guī)定在原始音頻和視頻流中,PTS的間隔不能超過0.7s,而出現(xiàn)在TS包頭的PCR間隔不能超過 0.1s。 二、STC與PCR STC是視音頻同步控制的基準(zhǔn),它是一串頻率為27MHz的脈沖,觸發(fā)計數(shù)器而形成一個二進(jìn) 制表示的時間基準(zhǔn),再通過對該時間基準(zhǔn)SCT進(jìn)行取樣得到PCR、PTS和DTS等時間標(biāo)簽。在編碼和解碼端,系統(tǒng)時鐘脈沖是由振蕩器等硬件產(chǎn)生,在解碼 端STC通過在碼流中定時傳送的PCR利用鎖相環(huán)(PLL)技術(shù)來與編碼端STC保持一致。 PCR是由對系統(tǒng)時鐘脈沖觸發(fā)的計數(shù)器狀態(tài)抽樣而來,是放在TS包頭的自適應(yīng)區(qū)中傳送。 PCR共占6Bytes,其中6bits預(yù)留,42bits有效位。42bits的PCR分為兩部分:33bits的PCR-Base和9bits的 PCR-Ext。PCR-Base是由27MHz脈沖經(jīng)300分頻后的90kHz脈沖觸發(fā)計數(shù)器,再對計數(shù)器狀態(tài)進(jìn)行取樣得到的。PCR-Ext是由 27MHz脈沖直接觸發(fā)計數(shù)器,再對計數(shù)器狀態(tài)進(jìn)行取樣得到的。PCR的具體編碼方式如下(編碼在PCR(i)中的數(shù)值代表了t(i),i指包含PCR- Base字段的最后一位的字節(jié)): PCR-Base(i)=90kHz×t(i), mod(233) PCR-Ext(i)=27MHz×t(i), mod(300) PCR(i)=PCR-Base(i)×300+PCR-Ext(i) 當(dāng)新節(jié)目的PCR到達(dá)解碼器時,需要更新時間基點,STC就被置位。通常第一個從解復(fù)用器中 解出的PCR被直接裝入到STC計數(shù)器,其后PLL閉環(huán)操作。每當(dāng)一個新節(jié)目的PCR到達(dá)解碼器時,此值被認(rèn)為是鎖相環(huán)的參考頻率,用來與STC的當(dāng)前值 比較,產(chǎn)生的差值e經(jīng)過脈寬調(diào)制后被輸入低通濾波器并經(jīng)放大,輸出控制信號f,用來控制振蕩器(VCO)的瞬時頻率,VCO輸出的頻率是在27MHz左右 振蕩的信號,作為解碼器的系統(tǒng)時鐘。27MHz時鐘經(jīng)過波形整理后輸入到計數(shù)器中,產(chǎn)生當(dāng)前的STC值,其33bits的90kHz部分用于和 PTS/DTS比較,產(chǎn)生解碼和顯示的同步信號。 PCR-Base的作用是在解碼器切換節(jié)目時,提供對解碼器PCR計數(shù)器的初始值,以讓該P(yáng)CR值與PTS、DTS最大可能地達(dá)到相同的時間起點。PCR-ext的作用是通過解碼器端的鎖相環(huán)電路修正解碼器的系統(tǒng)時鐘,使其達(dá)到和編碼器一致的27MHz。 圖1顯示了解碼器如何用PCR 來重建每個節(jié)目的遠(yuǎn)地27MHz時鐘。 圖略 圖1 用PCR重建遠(yuǎn)地27MHz時鐘 三、DTS和PTS DTS是編碼器在編碼時定義的,為解碼器預(yù)定的解碼時間。該時間標(biāo)記出現(xiàn)在PES層,在 PES頭部時間域中存在。它也是一個33bits的計數(shù)值,也是對系統(tǒng)時鐘的300分頻的時鐘的計數(shù)值。由于它和PCR有相同的起點,在PCR值連續(xù)的情 況下,可以起到時間定時的作用,當(dāng)本機(jī)PCR值(連續(xù))和DTS值相等時,表示它們計算了同樣的時鐘,也即它們經(jīng)過了相同的時間。本機(jī)PCR起到的是連續(xù) 計數(shù)的功能,DTS則是在等待這個時間,一旦等到這個時間,就表明它的解碼次序排好了,因為這個解碼次序是在編碼的時候規(guī)定的,對編碼的具體細(xì)節(jié)我們可以 不做了解,我們只要查詢到DTS就可以進(jìn)行下一步的工作。這個也有利于編碼器和解碼器研發(fā)的獨立性,少了一些捆綁,多了一些兼容。DTS就視頻來說,因為 視頻編碼的時候用到了雙向預(yù)測,一個圖像單元被解出,并非馬上就被顯示,可能在存儲器中留一段時間,作為其余圖像單元的解碼參考,在被參考完畢后,才被顯 示。針對視頻的顯示,Mpeg還提出了一個視頻PTS。針對音頻和視頻的同步顯示,又提出了一個音頻PTS。由于聲音沒有用到雙向預(yù)測,它的解碼次序就是 它的顯示次序,故對它只提出PTS的概念。 PTS是編碼器定義的,為解碼器規(guī)定某個單元的顯示時間。它也是一個33b的計數(shù)值,也是對 系統(tǒng)時鐘的300分頻的時鐘的計數(shù)值。要注意的是,PCR、DTS、PTS應(yīng)該具有相同的時間起點,選在模擬圖像的場同步處開始計時是很好的辦法。一個單 元解碼后被顯示,PCR計數(shù)器重新計數(shù),開始下一個單元的工作。 四、PCR測量 ㈠PCR 精度(PCR_AC):接收PCR中所含27MHz時鐘的不準(zhǔn)確度,但不包含任何傳輸定時損傷。測量時傳輸碼流中PCR字節(jié)位置作為起點,計算出PCR 到達(dá)時間。 ㈡PCR 漂移率(PCR_DR):PCR漂移率測量指的是PCR中的低頻誤差并計入了由PCR發(fā)生和再生引起的誤差以及由傳輸損傷所引起的到達(dá)時間誤差。即PCR 內(nèi)所含27MHz時鐘的低頻變化速率,測量時以某一穩(wěn)定外部基準(zhǔn)作為參考,因此包含了任何傳輸定時變化。下面的例子可用來說明PCR 漂移率的重要性: 我們來看一下由PLL控制的本地時鐘再生器。再生器輸出端的信號頻率應(yīng)當(dāng)跟蹤輸入信號頻率, 隨著輸入信號頻率的變化,PLL也隨之作出響應(yīng),本地再生器將跟蹤輸入信號,隨著輸入信號變化速率的增加,PLL的跟蹤能力會有所降低,最后將導(dǎo)致本地發(fā) 生信號失鎖而丟失節(jié)目。PCR 漂移率的測量給出了一種測定方法,即如何更好地使去復(fù)用器/ 解碼器或再復(fù)用器的節(jié)目時鐘鎖定于輸入TS中所包含的PCR(注意這里指的是漂移率的測量而不是絕對頻率的測量,接收機(jī)端的PLL電路可以鎖定于系統(tǒng)時 鐘,該時鐘有著固定的頻率誤差-如果是快速變化或漂移率大,則會出現(xiàn)問題)。 ㈢PCR 總抖動(PCR_OJ):PCR內(nèi)所含27MHz時鐘的高頻變化,測量時以某一穩(wěn)定外部基準(zhǔn)作為參考,因此包含了任何傳輸定時變化。它是PCR測量中最重 要的一項,是PCR中高頻誤差的總體測量并且還包括來自PCR發(fā)生和PCR 再生的誤差以及由傳輸損傷引起的到達(dá)時間誤差。例如該項傳輸損傷可能會引入到接收機(jī)中的RF解調(diào)器中。接收機(jī)內(nèi)再生的TS時鐘以及去復(fù)用器/解碼器所使用 的TS時鐘可能包含有基本高頻變化,它會對PCR的恢復(fù)帶來直接影響。在這種情形下,解碼器在復(fù)原PCR 中所發(fā)現(xiàn)的PCR 到達(dá)時間誤差可能是±500ns容限的許多倍,給PCR精度帶來不利。任何解碼器均靠接收PCR以準(zhǔn)確再生其節(jié)目時鐘并提供穩(wěn)定的視頻輸出。與此相同,任 何再復(fù)用器均靠接收PCR以在其輸出端精確地重新作出PCR標(biāo)記。PCR的到達(dá)時間是嚴(yán)格的;因此,測量包含有到達(dá)時間誤差和精度誤差的總抖動 (PCR_OJ)就是非常必要的。 在理想運(yùn)行系統(tǒng)中,傳輸損傷應(yīng)當(dāng)是可以設(shè)計的。然而在目前典型的分配網(wǎng)絡(luò)中,包含有再復(fù)用器、ATM 層等各級鏈路,它們均會引入誤差。PCR_AC是在復(fù)用器輸出端直接測量的數(shù)值,不過它在網(wǎng)絡(luò)中的運(yùn)行監(jiān)視常會使人迷惑不解,因為按照定義,它應(yīng)當(dāng)消除一切傳輸損傷。 ㈣PCR頻率偏置(PCR_FO):即PCR中所含27MHz 時鐘的頻率偏置,測量時以某一穩(wěn)定的外部基準(zhǔn)作為參考
|