為什么需要DTS和PTS?
如果視頻里各幀的編碼是按輸入順序(也就是顯示順序)依次進行的金拒,那么解碼和顯示時間應(yīng)該是一致的豁翎。可事實上,在大多數(shù)編解碼標準(如H.264或HEVC)中爽茴,編碼順序和輸入順序并不一致蛙卤。 于是才會需要PTS和DTS這兩種不同的時間戳煮甥。
FFmpeg里有兩種時間戳:DTS(Decoding Time Stamp)和PTS(Presentation Time Stamp)鬓照。 顧名思義,前者是解碼的時間秽之,后者是顯示的時間当娱。要仔細理解這兩個概念,需要先了解FFmpeg中的packet和frame的概念考榨。
FFmpeg中用AVPacket結(jié)構(gòu)體來描述解碼前或編碼后的壓縮包跨细,用AVFrame結(jié)構(gòu)體來描述解碼后或編碼前的信號幀。 對于視頻來說河质,AVFrame就是視頻的一幀圖像冀惭。這幀圖像什么時候顯示給用戶,就取決于它的PTS掀鹅。DTS是AVPacket里的一個成員散休,表示這個壓縮包應(yīng)該什么時候被解碼。 如果視頻里各幀的編碼是按輸入順序(也就是顯示順序)依次進行的乐尊,那么解碼和顯示時間應(yīng)該是一致的戚丸。可事實上扔嵌,在大多數(shù)編解碼標準(如H.264或HEVC)中限府,編碼順序和輸入順序并不一致。 于是才會需要PTS和DTS這兩種不同的時間戳痢缎。