直播APP開發(fā),GOP序列和P幀的更深概念
在H.264中,圖像以序列為單位進行組織,一個序列是一段圖像編碼后的數(shù)據(jù)流,一個序列的第一個圖像叫做IDR圖像,其中IDR圖像都是I幀。H.264之所以引入IDR圖像是為了解碼的重同步,當(dāng)解碼器解碼到IDR圖像時,立即將參考幀隊列清空,將已解碼的數(shù)據(jù)全部輸出或拋棄,重新查找參數(shù)集,開始一個新的序列。
?

一、GOP序列和IDR
直播APP開發(fā)的序列是一段內(nèi)容差異不太大的圖像編碼后生成的一串?dāng)?shù)據(jù)流,當(dāng)運動變化較少時,一個序列可以很長,因為運動變化少就代表著圖像畫面的內(nèi)容變動很小,那么就可以編成一個I幀,然后一直傳輸P幀、B幀即可。
當(dāng)運動變化多時,直播APP開發(fā)可能一個序列就比較短了,在視頻編碼序列中,GOP指的是兩個I幀之間的距離,而參考周期指的是兩個P幀之間的距離,兩個I幀之間形成一組圖片,就是GOP。
?

二、PTS和DTS
P幀需要參考前面的I幀或P幀才能生成一張完整的圖片,而B幀需要參考前面I幀或P幀及其后面的一個P幀才可以生成一張完整的圖片。那么問題在于,先到來的B幀無法立即解鎖,需要等待它依賴的后面的I、P、幀先解碼完成,這樣一來播放時間與解碼時間就存在不一致性,順序打亂了,那這些幀該如何播放呢?這時就引入了DTS和PTS的概念。
1、PTS,指的是顯示時間戳,這個時間戳高速直播APP開發(fā)的播放器該在什么時候顯示這一幀的數(shù)據(jù)。
2、DTS,解碼時間戳,這個時間戳的意義在于告訴播放器該在什么時候解碼這一幀的數(shù)據(jù)。
?

其實在直播APP開發(fā)的日常運營工作中,并不需要了解這么多內(nèi)容,只需要知道幀類型,也就是I幀、P幀、B幀分別代表著什么就可以了,另外在了解一下關(guān)于幀內(nèi)預(yù)測、幀間預(yù)測兩種去除冗余的方法,就足以應(yīng)付直播APP開發(fā)的使用。
聲明:以上內(nèi)容為云豹科技作者本人原創(chuàng),未經(jīng)作者本人同意,禁止轉(zhuǎn)載,否則將追究相關(guān)法律責(zé)任