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

【開源分享】用ESP32復刻一個iPod :便攜式音樂播放器Tangara

Made with KiCad:Tangara 便攜式音樂播放器
模數轉換電路的四個過程
海貝HiBy R1播放器體驗

畢業設計競賽選題推薦 | 嵌入式Linux應用之音樂播放器項目實戰(含文檔及源碼)

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

評論