視頻就是一個(gè)快速連續(xù)播放的圖片, 當(dāng)每秒播放的速度足夠快時(shí),人眼就會(huì)覺(jué)得圖片是“動(dòng)”的(要求>24幀/秒)。隨時(shí)間連續(xù)變換的多張畫(huà)面中每張畫(huà)面就叫一幀,如果把這些幀數(shù)據(jù)轉(zhuǎn)換成圖片文件并按順序排列就是一個(gè)視頻文件。如果把這個(gè)視頻文件在網(wǎng)絡(luò)上進(jìn)行傳輸,那么數(shù)據(jù)必然就很大并且相鄰的幀有需要重復(fù)的地方,所以有人就專門(mén)寫(xiě)了些算法對(duì)視頻文件進(jìn)行編碼,常見(jiàn)的就是H.264編碼,H.264編碼將保留一張基本幀,其他的幀只是記錄差別的地方。
在H.264編碼中,得到的文件可以看做是連續(xù)的一組幀的集合,在這組幀當(dāng)中,通常第一幀就是記錄基本畫(huà)面,是最重要的一幀數(shù)據(jù),叫做I幀(Inter Frame),其他的幀數(shù)據(jù)是P幀(P-Frame)或B幀(B幀),P幀和B幀需要參考其他的幀數(shù)據(jù)才能還原畫(huà)面。
所以獲得I幀數(shù)據(jù)就可以進(jìn)行播放了,從I幀數(shù)據(jù)開(kāi)始到下個(gè)I幀數(shù)據(jù)之前所有的數(shù)據(jù)就一個(gè)GOP,即一個(gè)幀數(shù)據(jù)組。當(dāng)我們看一個(gè)直播時(shí)通常會(huì)希望點(diǎn)開(kāi)直播就能看到畫(huà)面,即所謂的秒開(kāi),一般秒開(kāi)的實(shí)現(xiàn)是拿到I幀就立馬進(jìn)行顯示的。但是對(duì)于觀看直播的用戶來(lái)將進(jìn)入直播間的時(shí)間是隨機(jī)的,也許進(jìn)來(lái)時(shí)剛好請(qǐng)求到I幀,立馬可以拿到I幀, 也許進(jìn)來(lái)時(shí)剛好I幀結(jié)束,那么他就需要等一個(gè)GOP時(shí)間之后才能拿到下組的I幀進(jìn)行觀看。這就產(chǎn)生了一個(gè)問(wèn)題,GOP時(shí)間到底需要設(shè)置多長(zhǎng)才合理?以及Gop的大小對(duì)直播到底有什么影響?
我們知道Gop時(shí)長(zhǎng)就是指的2個(gè)I幀之間的時(shí)間差,一個(gè)Gop組中只有一個(gè)I幀。
如果Gop時(shí)間設(shè)置比較大時(shí),顯然B幀和P幀會(huì)有很多,則其對(duì)于的壓縮比就比較高了,所耗費(fèi)的流量就相對(duì)較小。但這樣做的話,對(duì)于在I幀結(jié)束后進(jìn)入直播間的用戶來(lái)將就需要等待比較久的時(shí)間,等待時(shí)間就比較久了,達(dá)不到秒開(kāi)的效果。
如果 GoP設(shè)置比較小時(shí),由于GoP設(shè)置小可以降低I幀間隔時(shí)間,對(duì)于直播來(lái)說(shuō)可以實(shí)現(xiàn)秒開(kāi)的功能。但是由于GoP時(shí)間比較短,會(huì)導(dǎo)致I幀的比例增高,壓縮比降低。同樣碼率情況下視頻的質(zhì)量會(huì)有所下降。數(shù)據(jù)流量也比較大了。
一般來(lái)講Gop一般會(huì)設(shè)置為1-2秒比較合適。
上面講到的秒開(kāi)是針對(duì)客戶端進(jìn)行的一些設(shè)置, 對(duì)應(yīng)服務(wù)器端也可以做些配置來(lái)實(shí)現(xiàn)秒開(kāi)。在服務(wù)器端一般可以設(shè)置Gop緩存,即在服務(wù)器上保存上一個(gè)Gop組數(shù)據(jù),當(dāng)用戶進(jìn)入直播間時(shí),立即拿到上一個(gè)Gop的I幀,這樣客戶端進(jìn)入直播間的瞬間永遠(yuǎn)是I幀開(kāi)頭的數(shù)據(jù),從而達(dá)到秒開(kāi)。但是這種方案對(duì)于延遲要求比較高的場(chǎng)景不不適合了,畢竟拿到的是上一Gop的I幀,這就會(huì)增加了一個(gè)延遲,而且這個(gè)延遲和Gop大小有關(guān)。
所以如果要實(shí)時(shí)性的話,還是只能通過(guò)減少關(guān)鍵幀間隔來(lái)進(jìn)行優(yōu)化了。