視頻就是一個快速連續(xù)播放的圖片, 當每秒播放的速度足夠快時染簇,人眼就會覺得圖片是“動”的(要求>24幀/秒)吨岭。隨時間連續(xù)變換的多張畫面中每張畫面就叫一幀隧甚,如果把這些幀數據轉換成圖片文件并按順序排列就是一個視頻文件车荔。如果把這個視頻文件在網絡上進行傳輸,那么數據必然就很大并且相鄰的幀有需要重復的地方戚扳,所以有人就專門寫了些算法對視頻文件進行編碼忧便,常見的就是H.264編碼,H.264編碼將保留一張基本幀帽借,其他的幀只是記錄差別的地方珠增。
在H.264編碼中,得到的文件可以看做是連續(xù)的一組幀的集合砍艾,在這組幀當中蒂教,通常第一幀就是記錄基本畫面,是最重要的一幀數據脆荷,叫做I幀(Inter Frame)凝垛,其他的幀數據是P幀(P-Frame)或B幀(B幀),P幀和B幀需要參考其他的幀數據才能還原畫面。
所以獲得I幀數據就可以進行播放了蜓谋,從I幀數據開始到下個I幀數據之前所有的數據就一個GOP梦皮,即一個幀數據組。當我們看一個直播時通常會希望點開直播就能看到畫面桃焕,即所謂的秒開届氢,一般秒開的實現(xiàn)是拿到I幀就立馬進行顯示的。但是對于觀看直播的用戶來將進入直播間的時間是隨機的覆旭,也許進來時剛好請求到I幀,立馬可以拿到I幀岖妄, 也許進來時剛好I幀結束型将,那么他就需要等一個GOP時間之后才能拿到下組的I幀進行觀看。這就產生了一個問題荐虐,GOP時間到底需要設置多長才合理七兜?以及Gop的大小對直播到底有什么影響?
我們知道Gop時長就是指的2個I幀之間的時間差福扬,一個Gop組中只有一個I幀腕铸。
如果Gop時間設置比較大時,顯然B幀和P幀會有很多铛碑,則其對于的壓縮比就比較高了狠裹,所耗費的流量就相對較小。但這樣做的話汽烦,對于在I幀結束后進入直播間的用戶來將就需要等待比較久的時間涛菠,等待時間就比較久了,達不到秒開的效果。
如果 GoP設置比較小時俗冻,由于GoP設置小可以降低I幀間隔時間礁叔,對于直播來說可以實現(xiàn)秒開的功能。但是由于GoP時間比較短迄薄,會導致I幀的比例增高琅关,壓縮比降低。同樣碼率情況下視頻的質量會有所下降讥蔽。數據流量也比較大了涣易。
一般來講Gop一般會設置為1-2秒比較合適。
上面講到的秒開是針對客戶端進行的一些設置勤篮, 對應服務器端也可以做些配置來實現(xiàn)秒開都毒。在服務器端一般可以設置Gop緩存,即在服務器上保存上一個Gop組數據碰缔,當用戶進入直播間時账劲,立即拿到上一個Gop的I幀,這樣客戶端進入直播間的瞬間永遠是I幀開頭的數據金抡,從而達到秒開瀑焦。但是這種方案對于延遲要求比較高的場景不不適合了,畢竟拿到的是上一Gop的I幀梗肝,這就會增加了一個延遲榛瓮,而且這個延遲和Gop大小有關。
所以如果要實時性的話巫击,還是只能通過減少關鍵幀間隔來進行優(yōu)化了禀晓。