視頻體驗由開始的視頻清晰流暢,演變到現(xiàn)在的視頻快速響應(yīng)、即點即放、快速切換等等。基于這些優(yōu)化林勇平將介紹播放器的一些技巧,使得視頻體驗在較少改動的情況下就能達(dá)到極致體驗的效果。
本文主要分為四個部分:一是服務(wù)端優(yōu)化;二是播放器優(yōu)化;三是播放策略優(yōu)化;四是緩存優(yōu)化。將這幾部分組合起來就可以保視頻秒開、無縫滑動等等優(yōu)化,保證在整體上進(jìn)行較少改動的情況下達(dá)到一個較好的效果。
1. 服務(wù)端優(yōu)化
第一部分提到的是服務(wù)端優(yōu)化,主要分為三個部分,首先是服務(wù)數(shù)據(jù)優(yōu)化,即服務(wù)端數(shù)據(jù)的基礎(chǔ)準(zhǔn)備。在格式選擇方面,有MP4、FMP4、DASH、HLS和自定義格式,對于短視頻類的視頻格式大部分是MP4,對于長視頻類的格式可能有HLS、DASH、自定義格式。因為長文件的頭是比較大的,所以一般用上面說的描述文件,或者是分段MP4及FMP4文件,使MOOV頭信息變小,可以保證視頻即點即開。
現(xiàn)有的大部分短視頻使用的是MP4格式,選擇MP4格式主要是文件信息頭MOOV的信息應(yīng)該是前移的而不是在文件末尾,所以需要整個服務(wù)端進(jìn)行一遍轉(zhuǎn)碼。對于數(shù)目chunk而言,一個chunk可能包含幾幀,如果設(shè)置不對,對于某些播放器就需要下載一個chunk才可以播放,這就需要下載很多的數(shù)據(jù),從而影響第一段的播放或者前面的播放。很多音頻特別容易出現(xiàn)這種情況,有些播放器中所有的幀都在一個chunk里面,這就需要下載這個chunk才能播放,就增加了等待的時間。
在編碼器的選擇上,現(xiàn)在的編碼器一般都是H.264或者H.265,這需要根據(jù)各家公司的選擇。H.264主要是比較通用,H.265則是碼率比較好。在數(shù)據(jù)和信息的預(yù)取方面,如果一個頁面有很多視頻的時候,當(dāng)點擊一個視頻時,該視頻里面的table等信息是可以預(yù)取的,方便后面點開播放進(jìn)行前期準(zhǔn)備。
第二是cdn的調(diào)度優(yōu)化,在視頻播放之前,首先要對dns進(jìn)行解析,通過服務(wù)器調(diào)度把最近的或者熱流地方的IP進(jìn)行解析。網(wǎng)絡(luò)切換,就是假如在4G、WiFi之間進(jìn)行切換的時候,先對IP的解析進(jìn)行預(yù)取,網(wǎng)絡(luò)切換情況如果是WiFi到4G,需要有一些提示;從4G到WiFi則不需要提示,而是需要及時地將這批IP切下去,因為不同服務(wù)商的cdn可能不一樣。
第三是P2P的點播,這主要是為了節(jié)省cdn費(fèi)用,一般可以節(jié)省25%以上的費(fèi)用,對于視頻和音頻公司來說,這些寬帶費(fèi)用是很高的。
這張圖展示的是信息的預(yù)取,就是獲取table里視頻頁中可以獲取的數(shù)據(jù),以保證視頻秒開,即點即放,即預(yù)取一定的數(shù)據(jù),點開就播放。48k相當(dāng)于大概不到一秒的數(shù)據(jù),先下載后點開,就直接播放了。
2. 播放器優(yōu)化
第二部分是播放器優(yōu)化,首先是點播優(yōu)化,它主要是各個模塊的一些優(yōu)化。其次是直播優(yōu)化,它不僅包含各個模塊優(yōu)化,還要有一個播放速率的控制,以保證較低延遲。
直播播放的大體框架就是由下載管理、文件解析、緩存管理、視頻解碼、視頻渲染、音頻解碼、音頻處理、音頻渲染這幾部分組成。對于直播來說多了“緩存管理”這一模塊,當(dāng)緩存管理大到一定程度,需要進(jìn)行變速或者丟幀。一般的情況下,如果緩存管理大于兩秒,就可以把這個兩秒的數(shù)據(jù)一直丟到I幀,以保證其低延遲。如果緩存管理大過一秒,這時就可以控制播放速率,可以播快一定的速度使其追上來,以保證低延遲。總之,緩存管理就是檢查現(xiàn)有的播放器里的緩存的大小,以判斷延遲的的大小是否正常,若不正常是否需要丟幀或者加速。
2.1 文件解析優(yōu)化
對于文件解析優(yōu)化這部分,首先是緩存管理,有的播放器是解析一幀數(shù)據(jù)就丟一幀數(shù)據(jù),這時若推到后臺再推到前臺時,對于已經(jīng)丟棄的數(shù)據(jù),當(dāng)前幀需要返回重新下載,而緩存管理不將過去的數(shù)據(jù)全部丟棄,至少保留某一個I幀。
其次是時間對齊,MP4 文件有時候音頻時間從0開始,但是視頻可能是從100ms開始,這時開始播放視頻,假如第一幀視頻出現(xiàn),但音頻就要從0開始播放到100再播放到33才有第二幀,這時大概有133毫秒的停頓,對于視頻來說相當(dāng)于播第一下的時候就會卡頓一下,所以時間對齊就是MP4在一定時間,即音頻大概多于多少的時候,可以把它丟掉,保證一開始播放時視頻和音頻同時起步,就不會引起第一幀卡頓的感覺。
三是后臺播放,它在直播場景中比較常見的,后臺播放時無需解碼,但需要AV同步,可以用原始幀時間同步,但也要保留至前一個I幀,然后再用解碼幀進(jìn)行AV同步。對于點播,推到后臺時一般是暫停的,但是對于后臺有些時候不能用硬解碼,回到前臺的時候,可以直接用seek(getPosition)。
四是斷點重連,是直播中常見的一個。點播中斷點重連影響不大,直播中斷點重連就是在直播中發(fā)生連接中斷了,重連時的時間戳從0開始下載,新下載的數(shù)據(jù)需要加一個tag,說明時間已經(jīng)發(fā)生變化,表示這一幀不用保證AV同步,對用戶來說是感覺不到是否發(fā)生中斷的。
圖中是一個MP4文件,圖中的左邊介紹了box類型,右邊是對其的說明。文件里的chunk offset表示每個chunk的文件偏移,一般短視頻的moov較小,對于MP4來說,其前面的頭信息還是較多的,其中ctts是為了I、B、P幀設(shè)置的。
圖中是一個FLV文件,圖中上部是FLV Header,下部是FLV Body。
2.2 解碼器優(yōu)化
關(guān)于解碼器優(yōu)化,首先硬件解碼主要有MediaCodec、AudioToolbox、后臺播放。其次軟件解碼優(yōu)化中的多線程優(yōu)化主要有兩種:Frame Module、Slice Module。快速第一幀是第一幀進(jìn)去之后不會立馬出來,這時候就需要不斷塞數(shù)據(jù)讓第一幀快速出來,因為視頻解碼有參考幀概念。
2.3 渲染優(yōu)化
渲染優(yōu)化主要體現(xiàn)在一些選擇方式上,對于安卓來說有native windows、Opengles、MediaCodec三種;而IOS可以選擇Opengles,但要考慮前臺、后臺播放問題。其中native windows和Opengles相比,Opengles的限制比較多,而native windows沒有現(xiàn)成的限制。
3. 播放策略優(yōu)化
第三部分是播放策略優(yōu)化,對于直播來說,首先是cdn調(diào)度預(yù)取,當(dāng)前頁面直播列表要調(diào)度所有直播鏈接,獲取直播地址,直接用當(dāng)前的cdn的IP進(jìn)行播放。其次翻頁播放選擇多播放器進(jìn)行翻頁播放,當(dāng)前頁播放時翻到下一頁,點擊時下一個播放器已經(jīng)啟動播放,相當(dāng)于兩個播放器同時播放,上滑播放上一個播放器,下滑播放下一個播放器,只不過下一個播放器的音量在非當(dāng)前頁面時為0,當(dāng)點擊結(jié)束時,下一播放器在當(dāng)前頁面時的音量從0變?yōu)?。
對于點播來說,首先頁面預(yù)取加速就是點播在當(dāng)前頁面會有一個數(shù)據(jù)的預(yù)取,大概500毫秒數(shù)據(jù)時就可以點擊播放,一般需要獲取多少數(shù)據(jù)由服務(wù)器決定。其次翻頁多播放器,不同于直播時的兩個播放器同時進(jìn)行播放,點播翻頁播放在播放當(dāng)前頁面的時候,可以把上一個和下一個直接準(zhǔn)備好,上滑時準(zhǔn)備好上一個播放器,下滑時準(zhǔn)備好下一個播放器,翻頁時直接就準(zhǔn)備播放。
對于消息返回和打點,首先如果碰到異常情況,播放器不能處理的時候,將消息拋到客戶端,由客戶端反饋給用戶一些提示,如網(wǎng)絡(luò)或者文件錯誤等情況。其次打點對于cdn的連接時間、http的請求時間,下載第一幀數(shù)據(jù)、第一幀解碼和展示所有花費(fèi)的時間都由服務(wù)器打點,由服務(wù)器統(tǒng)計決定哪些地方還需要再優(yōu)化,或者哪個cdn需要再進(jìn)一步優(yōu)化。直播一般十秒打一個十秒的信息,對當(dāng)前播放的音頻碼率、視頻碼率、原始碼率是否有丟幀、卡頓等信息都會進(jìn)行打點,這對服務(wù)器進(jìn)行后續(xù)檢查直播或者點播中各種問題和進(jìn)行各種優(yōu)化都很有幫助。所以直播和點播打點,就是對各個方面和各個數(shù)據(jù)進(jìn)行打點,以便后續(xù)的找出合理的方式進(jìn)行優(yōu)化。
4. 緩存優(yōu)化
第四部分是緩存優(yōu)化,緩存優(yōu)化優(yōu)點很明顯,首先是節(jié)省cdn經(jīng)費(fèi),即邊播放邊緩存文件,推到前臺或者往回seek的時候,邊播邊存的優(yōu)勢就會顯示出來。其次是分塊存取,即播放當(dāng)前頁時需要快速拖動,需要保存所拖動地方的文件,保證緩存空間和下載的數(shù)據(jù)是對應(yīng)的,以保證回放時節(jié)省流量。
責(zé)任編輯:pj
-
視頻
+關(guān)注
關(guān)注
6文章
1948瀏覽量
72964 -
服務(wù)
+關(guān)注
關(guān)注
0文章
75瀏覽量
18518 -
優(yōu)化
+關(guān)注
關(guān)注
0文章
220瀏覽量
23924
發(fā)布評論請先 登錄
相關(guān)推薦
評論