
舉例來(lái)說(shuō),主播開(kāi)播,那他就是視頻的上行,從上行的開(kāi)始,要去申請(qǐng)很多很多流程,同時(shí)要把這個(gè)視頻流做一些格式的封裝和解碼,這就需要處理時(shí)間。同時(shí),視頻資源比較大, 不能以普通的服務(wù)器來(lái)承載,要用CDN這種方式來(lái)承載,這時(shí)流的傳送也是一個(gè)時(shí)延。
在下行端也一樣,CDN的架構(gòu)會(huì)有很多很多的云,用戶接入時(shí)候需要從異地云上拉取資源,這也有時(shí)間等待。這里面的時(shí)間最終會(huì)體現(xiàn)在用戶的拉取時(shí)延上面,打開(kāi)視頻,可能要等3秒、5秒、10秒。

視頻要怎么優(yōu)化?互動(dòng)時(shí)延和加載時(shí)延的問(wèn)題要怎么解決?
直播業(yè)務(wù)里面有一個(gè)比較關(guān)鍵的數(shù)據(jù)——GOP關(guān)鍵幀,就是一組動(dòng)畫(huà)關(guān)鍵幀。在播放器播放時(shí),是按關(guān)鍵幀解析,非關(guān)鍵幀無(wú)法獨(dú)立解析,必須依賴關(guān)鍵幀才能去渲染。在移動(dòng)端H5的播放時(shí)需要3個(gè)HLS分片,分片是關(guān)鍵幀在服務(wù)端經(jīng)過(guò)轉(zhuǎn)碼之后打包后出來(lái)的。因此,要解決互動(dòng)時(shí)延的問(wèn)題,其實(shí)就是優(yōu)化關(guān)鍵幀的間隔。比如5秒一個(gè)HLS分片,3個(gè)就是15秒,那主播說(shuō)一句話,用戶要等15秒后才能聽(tīng)到。加載時(shí)延就是上面提到的流的分配,能不能優(yōu)化主動(dòng)去push到這些節(jié)點(diǎn)而不是等用戶去拉取。而且上行很多時(shí)候是不穩(wěn)定的,更需要去做很多很多處理,假設(shè)丟包了,很多畫(huà)面解析不出來(lái),這時(shí)候還要補(bǔ)幀。
另外就是回放,回放和直播唯一的不同是不需要互動(dòng)性,主要需要優(yōu)化加載時(shí)延。這涉及到另外一個(gè)概念,就是MP4的格式。MP4是按個(gè)塊封裝,可以理解為一個(gè)一個(gè)的指針,指針的位置是需要相乘,MP4的文件頭需要下載下來(lái)才能播,如果指針的信息越來(lái)越多,索引越來(lái)越多的話,不利于加載,這就需要在服務(wù)端處理。
四、直播高效研發(fā)之道
前面既然說(shuō)了這么多需要做的優(yōu)化工作,那自然是希望能夠不用每個(gè)業(yè)務(wù)都去做一遍,這就需要去做一些研發(fā)效率方面的事情,幫助技術(shù)人員快速去做這些事情。
研發(fā)效率怎么理解?首先需要有完整的構(gòu)建體系。這個(gè)體系里的工具是根據(jù)業(yè)務(wù)的特點(diǎn)來(lái)選擇,沒(méi)有好壞之分,沒(méi)只有合適之分。同時(shí),需要組件體系來(lái)管理組件,你的前后端復(fù)用最終都是要以組件的方式存在,組件可以把業(yè)務(wù)分解到非常細(xì)的密度,利于更好的復(fù)用。在組件的使用上面需要更快捷的使用方式,上傳、更新以后,在需要的時(shí)候能快速更新到業(yè)務(wù)里面去。這些所有的其實(shí)都是基于技術(shù)棧的統(tǒng)一。


體系建立以后,怎么在業(yè)務(wù)中使用呢?
業(yè)務(wù)組件分兩種:一是基礎(chǔ)組件,就是沒(méi)有業(yè)務(wù)區(qū)分、通用的,這種不涉及邏輯,只有UI組件,使用的時(shí)候可以直接引入U(xiǎn)I組件。二是業(yè)務(wù)組件,需要去做合理的拆分。通常的直播間要拆分為很多很多點(diǎn),視頻、點(diǎn)贊、送禮等等。拆分后如果以后有業(yè)務(wù)不需要點(diǎn)贊功能,把點(diǎn)贊組件引用去掉就可以,這樣就能快速組成新的業(yè)務(wù)。在引用的時(shí)候有3個(gè)原則,第一是以快速的搭建為目標(biāo),第二是用戶只要install下來(lái)就能用,三是運(yùn)行要簡(jiǎn)單,不需要某個(gè)的時(shí)候把它干掉就好。
五、優(yōu)化無(wú)極限
最后,每個(gè)業(yè)務(wù)都有不同的業(yè)務(wù)要求,作為技術(shù)人員,要思考的點(diǎn)是優(yōu)化有沒(méi)有極限?沒(méi)有!但是業(yè)務(wù)是有極限的,業(yè)務(wù)的目標(biāo)是什么?業(yè)務(wù)負(fù)責(zé)人要充分的考慮這些點(diǎn)。
團(tuán)隊(duì)研發(fā)也是一樣的,你的目標(biāo)是要解決什么問(wèn)題?最終要讓團(tuán)隊(duì)達(dá)到什么樣的目標(biāo)或lever,都是需要考慮的。最終在業(yè)務(wù)里面使用的時(shí)候,要細(xì)分到每個(gè)場(chǎng)景,關(guān)注每個(gè)細(xì)節(jié),根據(jù)這些細(xì)分的場(chǎng)景和方案,做業(yè)務(wù)的支持。