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

PLC產(chǎn)品故障問題測(cè)試的四個(gè)部分

【開源分享】用ESP32復(fù)刻一個(gè)iPod :便攜式音樂播放器Tangara

Made with KiCad:Tangara 便攜式音樂播放器
模數(shù)轉(zhuǎn)換電路的四個(gè)過程
海貝HiBy R1播放器體驗(yàn)

畢業(yè)設(shè)計(jì)競賽選題推薦 | 嵌入式Linux應(yīng)用之音樂播放器項(xiàng)目實(shí)戰(zhàn)(含文檔及源碼)

海貝R1便攜音樂播放器開箱

變速播放器1和2的區(qū)別
為什么好的播放器還要配解碼器
數(shù)字播放器和解碼器

評(píng)論