日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

TS流的解码过程-ES-PES-DTS-PTS-PCR

發布時間:2025/7/25 编程问答 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 TS流的解码过程-ES-PES-DTS-PTS-PCR 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

from: http://blog.chinaunix.net/uid-9688646-id-1998407.html

TS 流解碼過程:

1. 獲取TS中的PAT

2. 獲取TS中的PMT

3. 根據PMT可以知道當前網絡中傳輸的視頻(音頻)類型(H264),相應的PID,PCR的PID等信息。

4. 設置demux 模塊的視頻Filter 為相應視頻的PID和stream type等。

5.從視頻Demux Filter 后得到的TS數據包中的payload 數據就是 one piece of PES,在TSheader中有一些關于此 payload屬于哪個 PES的 第多少個數據包。因此軟件中應該將此payload中的數據copy到PES的buffer中,用于拼接一個PES包。

6. 拼接好的PES包的包頭會有 PTS,DTS信息,去掉PES的header就是 ES。

7. 直接將 被被拔掉 PES包頭的ES包送給decoder就可以進行解碼。解碼出來的數據就是一幀一幀的視頻數據,這些數據至少應當與PES中的PTS關聯一下,以便進行視音頻同步。

8. I,B,B,P 信息是在ES中的。

?

ES是直接從編碼器出來的數據流,可以是編碼過的視頻數據流,音頻數據流,或其他編碼數據流的統稱。ES流經過PES打包器之后,被轉換成PES包。PES包由包頭和payload組成.


PES層,主要是在PES包頭信息中加入PTS(顯示時間標簽)DTS(解碼時間標簽)用于視頻、音頻同步。其實,Mpeg-2用于視音頻同步以及系統時鐘恢復的時間標簽分別在ESPESTS3個層次中。在ES層,與同步有關的主要是視頻緩沖驗證VBVVideo Buffer Verifier),用以防止解碼器的緩沖器出現上溢或下溢;在PES層,主要是在PES頭信息里出現的顯示時間標簽PTSPresentation Time Stamp)和解碼時間標簽DTSDecoding Time Stamp);在TS層中,TS頭信息包含了節目時鐘參考PCRProgram Clock Reference),用于恢復出與編碼端一致的系統時序時鐘STCSystem Time Clock)。

基本流程如下:首先MPEG-2壓縮編碼得到的ES基本流,這個數據流很大,并且只是IPB的這些視頻幀或音頻取樣信息,然后加入一些同步信息,打包成長度可變長度的數據包PES,原來是流的格式,現在成了數據包的分割形式。同時要注意的是,ES是只包含一種內容的數據流,如只含視頻,或只含音頻等,打包之后的PES也是只含一種性質的ES,如只含視頻ESPES,只含音頻ESPES等。可以知道,ES是編碼視頻數據流或音頻數據流,每個ES都由若干個存取單元(AU)組成,每個視頻AU或音頻AU都是由頭部和編碼數據兩部分組成,1AU相當于編碼的1幅視頻圖像或1個音頻幀,也可以說,每個AU實際上是編碼數據流的顯示單元,即相當于解碼的1幅視頻圖像或1個音頻幀的取樣。PEG-2對視頻的壓縮產生I幀、P幀、B幀。把幀順序I1,P4,B2,B3,P7,B5,B6幀的編碼ES,通過打包并在每個幀中插入?PTS/DTS標志,變成PES。在插入PTS/DTS標志時,由于在BPTSDTS相等,所以無須在B幀多插入DTS。而對于I?P幀,由于經過復用后數據包的順序會發生變化,顯示前一定要存儲于視頻解碼器的從新排序緩存器中,經過從新排序后再顯示,所以一定要同時插入PTS?DTS作為從新排序的依據。

?

其中,有否PTS/DTS標志,是解決視音頻同步顯示、防止解碼器輸入緩存器上溢或下溢的關鍵所在。PTS表明顯示單元出現在系統目標解碼器(STD- System?Target?Decoder)的時間,?DTS表明將存取單元全部字節從STDES解碼緩存器移走的時刻。視頻編碼圖像幀次序為?I1,P4,B2,B3,P7,B5,B6,I10,B8,B9ES,加入PTS/DTS后,打包成一個個視頻PES包。每個PES包都有一個包頭,用于定義PES內的數據內容,提供定時資料。每個IPB幀的包頭都有一個PTSDTS,但PTSDTSB幀都是一樣的,無須標出B幀的DTS。對I幀和P幀,顯示前一定要存儲于視頻解碼器的重新排序緩存器中,經過延遲(重新排序)后再顯示,一定要分別標明PTSDTS。例如,解碼器輸入的圖像幀次序為I1,P4,B2,B3,P7,B5,B6,I10,B8,B9,依解碼器輸出的幀次序,應該P4B2B3在先,但顯示時P4一定要比B2B3在后,即P4要在提前插入數據流中的時間標志指引下,經過緩存器重新排序,以重建編碼前視頻幀次序I1,B2,B3,P4,B5,B6,P7,B8,B9,I10。顯然,PTS/DTS標志表明對確定事件或確定信息解碼的專用時標的存在,依靠專用時標解碼器,可知道該確定事件或確定信息開始解碼或顯示的時刻。例如,PTS/DTS標志可用于確定編碼、多路復用、解碼、重建的時間。

?????? PCR??

PCRTS里面的,即TS packetheader里面可能會有,他用來指定所期望的該ts packet到達decoder的時間,他的作用于SCR類似。

DTS, PTS

對于一個ES來說,比如視頻,他又許多I,P,B幀,而P, B幀都是以IP幀作為參考。由于B幀是前向后向參考,因此要對B幀作decode的話,就必須先decodeB幀后面的P,或者I幀,于是,decode的時間與幀的真正的present的時間就不一致了,按照DTS一次對各個幀進行decode,然后再按照PTS對各個幀進行展現。

有時候PES包頭里面也會有DTSPTS,對于PTS來說,他代表了這個PES包得payload里面的第一個完整地audio access unit或者video access unitPTS時間(并不是每個audio/video access unit都帶有PTS/DTS,因此,你可以在PES里面指定一個,作為開始)。

PES包頭的DTS也是這個原理,只不過注意的是:對于video來說他的DTSPTS是可以不一樣的,因為B幀的存在使其順序可以倒置。而對于audio來說,audio沒有雙向的預測,他的DTSPTS可以看成是一個順序的,因此可一直采用一個,即可只采用PTS。


總結

以上是生活随笔為你收集整理的TS流的解码过程-ES-PES-DTS-PTS-PCR的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。