FFmpeg中的時間戳(DTS和PTS)

最近在開發基於FFmpeg的播放器,對FFmpeg裏的時間戳(time stamp)做了較多的瞭解。下面是總結。

FFmpeg裏有兩種時間戳:DTS(Decoding Time Stamp)和PTS(Presentation Time Stamp)。 顧名思義,前者是解碼的時間,後者是顯示的時間。要仔細理解這兩個概念,需要先了解FFmpeg中的packet和frame的概念。

FFmpeg中用AVPacket結構體來描述解碼前或編碼後的壓縮包,用AVFrame結構體來描述解碼後或編碼前的信號幀。 對於視頻來說,AVFrame就是視頻的一幀圖像。這幀圖像什麼時候顯示給用戶,就取決於它的PTS。DTS是AVPacket裏的一個成員,表示這個壓縮包應該什麼時候被解碼。 如果視頻裏各幀的編碼是按輸入順序(也就是顯示順序)依次進行的,那麼解碼和顯示時間應該是一致的。可事實上,在大多數編解碼標準(如H.264或HEVC)中,編碼順序和輸入順序並不一致。 於是纔會需要PTS和DTS這兩種不同的時間戳。

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