在網(wǎng)絡(luò)視頻直播系統(tǒng)中常見編碼器有H264/H265/VP8/VP9,,其中H264和H265用的比較多,,VP8和VP9用的比較少,H265的出現(xiàn)雖然時(shí)間短,,但很多開發(fā)公司都一開始嘗試使用H265作為直播編碼的一種方式,,但H264依然是主流的一種編碼方式。下面給大家普及一下關(guān)于H264格式的知識(shí),。 在網(wǎng)絡(luò)視頻直播系統(tǒng)中H264格式的編碼器中其實(shí)是有兩個(gè)層面,,一個(gè)是VLC視頻編碼層,NAL層是網(wǎng)絡(luò)抽象層,,VLC主要任務(wù)就是編碼,,NAL層是負(fù)責(zé)格式化數(shù)據(jù),而H264的每幀數(shù)據(jù)就是一個(gè)NAL單元,,在H264的實(shí)際的數(shù)據(jù)幀中,,幀前面會(huì)有分隔符來分隔每一幀,一般來說編碼器編出的首幀數(shù)據(jù)為SPS和PPS,,后面就是屬于I幀,。
1、I幀:I幀就是幀內(nèi)編碼幀,,也就是說它的編碼和其他幀的數(shù)據(jù)沒有關(guān)系的,,它只是在某一幀內(nèi)做編碼,也就是說他和單張圖片是類似的,,所以說我們只需要用I幀的數(shù)據(jù)就可以恢復(fù)出一個(gè)完整的圖像,。 2、P幀:而P幀需要依賴前一陣的數(shù)據(jù)來解碼圖像,,因?yàn)樗谋4媸桥c前一幀差別的數(shù)據(jù),,所以它被稱為前項(xiàng)預(yù)測(cè)編碼幀,。 3、B幀:B幀是前項(xiàng)和后項(xiàng)雙向的預(yù)測(cè)編碼幀,,所以說要解碼B幀的話就需要前一幀和后一幀兩份數(shù)據(jù)才能夠解碼,。
總結(jié)來說I幀、P幀,、B幀這三種是常見的幀類型,,這三種編碼方式是明顯不同的,一個(gè)是完全單獨(dú)的幀內(nèi)編碼,,而另一個(gè)是需要前一幀數(shù)據(jù)來解碼自己的,,B幀則是需要兩邊的數(shù)據(jù)才能夠解碼自己的。 在網(wǎng)絡(luò)視頻直播系統(tǒng)中這三種解碼方式的不同,,可以明顯看出來壓縮比的不同,,I幀的壓縮比其實(shí)和GPG差不多,壓縮前和壓縮后的比能夠達(dá)到7:1,,P幀較大一些達(dá)到20:1,,B幀則能達(dá)到50:1。 講完了關(guān)于“幀”的概念,,還有一個(gè)GOP概念,,指的是兩個(gè)I幀之間的圖像組,現(xiàn)在有很多SDK都強(qiáng)調(diào)秒開,,其實(shí)就是在服務(wù)端或CDN的邊緣去緩存這一對(duì)GOP,,緩存后就避免播放端在播放時(shí)找不到I幀時(shí)等待或回源,回源的意思就是你需要到中心界面找到這個(gè)信息然后再拉流,,有了緩存的GOP之后,,拉流時(shí)先播放這組GOP,在網(wǎng)絡(luò)視頻直播系統(tǒng)中就可以給人一種秒開的感覺,。
為什么要緩存GOP呢,,因?yàn)槊總€(gè)播放器播放時(shí)對(duì)于H264解碼首先需要一個(gè)I幀去顯示圖像,然后后面的P幀之類的依據(jù)I幀前面一幀的數(shù)據(jù)差,,然后才能解碼P幀出來顯示完整圖像,,有了I幀之后顯示出來速度就很快,給人秒開的感覺,,提高網(wǎng)絡(luò)視頻直播系統(tǒng)體驗(yàn)性,。這也是一種比較常見的直播優(yōu)化手段。 以上內(nèi)容為作者“云豹短視頻嘉興” 原創(chuàng),,未經(jīng)作者本人同意,,禁止轉(zhuǎn)載,否則將追究相關(guān)法律責(zé)任 |
|