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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

视频流中的DTS、PTS到底是什么

發布時間:2024/9/30 编程问答 44 豆豆
生活随笔 收集整理的這篇文章主要介紹了 视频流中的DTS、PTS到底是什么 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

視頻流中的DTS、PTS到底是什么

I、P、B 幀

要搞懂 DTS 和 PTS ,首先要先了解一下 I、P、B 幀。

  • I 幀 : 幀內編碼幀 又稱intra picture,I 幀通常是每個 GOP(MPEG 所使用的一種視頻壓縮技術)的第一個幀,經過適度地壓縮,做為隨機訪問的參考點,可以當成圖象。I幀可以看成是一個圖像經過壓縮后的產物。可獨立解碼。
  • P 幀 : 前向預測編碼幀 又稱predictive-frame,P 幀圖像只采用前向時間預測,可以提高壓縮效率和圖像質量。
  • B 幀 : 雙向預測內插編碼幀 又稱bi-directional interpolated prediction frame,可以大大提高壓縮倍數。

I P B 幀的不同:
I 幀:自身可以通過視頻解壓算法解壓成一張單獨的完整的圖片。
P 幀:需要參考其前面的一個 I 幀 或者 P 幀來生成一張完整的圖片。
B 幀:則要參考其前一個 I 或者 P 幀及其后面的一個 P 幀來生成一張完整的圖片。
兩個 I frame 之間形成一個 GOP,在 x264 中同時可以通過參數來設定bf的大小,即:I 和 P 或者兩個 P 之間 B 的數量。

通過上述基本可以說明如果有 B frame 存在的情況下一個 GOP 的最后一個 frame 一定是 P.

這就帶來一個問題:在視頻流中,先到來的 B 幀無法立即解碼,需要等待它依賴的后面的 I、P 幀先解碼完成,這樣一來播放時間與解碼時間不一致了,順序打亂了,那這些幀該如何播放呢?這時就需要我們來了解另外兩個概念:DTS 和 PTS。

DTS、PTS

DTS、PTS 的概念如下所述:

  • DTS(Decoding Time Stamp):即解碼時間戳,這個時間戳的意義在于告訴播放器該在什么時候解碼這一幀的數據。
  • PTS(Presentation Time Stamp):即顯示時間戳,這個時間戳用來告訴播放器該在什么時候顯示這一幀的數據。

雖然 DTS、PTS 是用于指導播放端的行為,但它們是在編碼的時候由編碼器生成的。

在視頻采集的時候是錄制一幀就編碼一幀發送一幀的,在編碼的時候會生成 PTS,這里需要特別注意的是 frame(幀)的編碼方式,在通常的場景中,編解碼器編碼一個 I 幀,然后向前跳過幾個幀,用編碼 I 幀作為基準幀對一個未來 P 幀進行編碼,然后跳回到 I 幀之后的下一個幀。編碼的 I 幀和 P 幀之間的幀被編碼為 B 幀。之后,編碼器會再次跳過幾個幀,使用第一個 P 幀作為基準幀編碼另外一個 P 幀,然后再次跳回,用 B 幀填充顯示序列中的空隙。這個過程不斷繼續,每 12 到 15 個 P 幀和 B 幀內插入一個新的 I 幀。P 幀由前一個 I 幀或 P 幀圖像來預測,而 B 幀由前后的兩個 P 幀或一個 I 幀和一個 P 幀來預測,因而編解碼和幀的顯示順序有所不同,如下所示:

假設這里視頻采集到的幀是這樣子的

I B B P B B P

那么它的 PTS 對應的就是

PTS:1 2 3 4 5 6 7

編碼順序是:

1 4 2 3 7 5 6

推流順序也是按照編碼順序去推的,即

I P B B P B B

那么接收斷收到的視頻流也就是

I P B B P B B

這時候去解碼,也是按照收到的視頻流一幀一幀去解的了,接收一幀解碼一幀,因為在編碼的時候已經按照 I、B、P 的依賴關系編好了,接收到數據直接解碼就好了。

那么解碼的順序就是:

I P B B P B B DTS:1 2 3 4 5 6 7 PTS:1 4 2 3 7 5 6

可以看到解碼出來對應的 PTS 不是順序的,為了正確顯示視頻流,這時候我們就必須按照 PTS 調整解碼后的 frame(幀),即

I B B P B B P DTS:1 3 4 2 6 7 5 PTS:1 2 3 4 5 6 7

還不明白的話可以看下面的圖:

如上圖:

I frame 的解碼不依賴于任何的其它的幀.而 p frame 的解碼則依賴于其前面的 I frame 或者 P frame. B frame 的解碼則依賴于其前的最近的一個 I frame 或者 P frame 及其后的最近的一個 P frame.

音視頻同步:

上面說了視頻幀、DTS、PTS 相關的概念。我們都知道在一個媒體流中,除了視頻以外,通常還包括音頻。音頻的播放,也有 DTS、PTS 的概念,但是音頻沒有類似視頻中 B 幀,不需要雙向預測,所以音頻幀的 DTS、PTS 順序是一致的。

音頻視頻混合在一起播放,就呈現了我們常常看到的廣義的視頻。在音視頻一起播放的時候,我們通常需要面臨一個問題:怎么去同步它們,以免出現畫不對聲的情況。

要實現音視頻同步,通常需要選擇一個參考時鐘,參考時鐘上的時間是線性遞增的,編碼音視頻流時依據參考時鐘上的時間給每幀數據打上時間戳。在播放時,讀取數據幀上的時間戳,同時參考當前參考時鐘上的時間來安排播放。這里的說的時間戳就是我們前面說的 PTS。實踐中,我們可以選擇:同步視頻到音頻、同步音頻到視頻、同步音頻和視頻到外部時鐘。

總結

以上是生活随笔為你收集整理的视频流中的DTS、PTS到底是什么的全部內容,希望文章能夠幫你解決所遇到的問題。

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