音視頻秒開方案

本文對應(yīng)的音視頻預(yù)加載方案實現(xiàn)開源地址:https://github.com/zhuozp/VideoPreload

首先看下播放流程,了解播放過程中秒開的耗時在哪?如下圖,視頻從加載到播放的過程。

IO:為流獲取,可以從本地或者服務(wù)獲取

Parser:解析,如解析相關(guān)媒體格式,協(xié)議

渲染:展示內(nèi)容,顯示屏展示畫面,揚(yáng)聲器耳機(jī)播放聲音

流做到本地化就可以大大提高秒開的性能。因此,需要處理兩個事情,如何預(yù)加載以及播放器如何做到先從預(yù)加載播放,再從服務(wù)獲取流播放。

關(guān)于預(yù)加載緩存播放切換到服務(wù)獲取播放:

加入中間代理服務(wù),Proxy做到有本地緩存的數(shù)據(jù),從本地緩存數(shù)據(jù)返回,沒有的請求下,從服務(wù)獲取后,寫入到本地緩存中,再返回給播放器,這也是邊播邊緩存的情況。

在播放器中加入中間代理模塊,用的是AndroidVideoCache實現(xiàn)原理。中間代理開啟了8個并發(fā)線程的線程池做處理,因此,建議在播放的同時,可以同時預(yù)加載載接下來的7個視頻流。

預(yù)加載處理

緩存播放到自然切換到服務(wù)播放有了,那么要解決的是,如何做到預(yù)加載的能力,這個不是依靠播放器提供的。如下圖的方案:

通過返回的各個視頻參數(shù)中的url或videoId生成md5校驗值,根據(jù)md5判斷是否已存在任務(wù),沒有則生成任務(wù)并提交到線程池等待處理。線程池的線程處理主要是根據(jù)視頻Url生成本地代理Url,利用播放器的Proxy能力發(fā)起Http請求,從服務(wù)返回數(shù)據(jù)。

預(yù)加載的過程需要處理Wifi切換到非wifi,線程停止下載,快速滑動的情況,之前的任務(wù)停止等。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 一、簡歷準(zhǔn)備 1、個人技能 (1)自定義控件、UI設(shè)計、常用動畫特效 自定義控件 ①為什么要自定義控件? Andr...
    lucas777閱讀 5,396評論 2 54
  • 今天是3月26日,我收到了生命中的一份大禮,就是看到我生命中所有我認(rèn)為的,給我最大傷害的人,其實是在用他們一生來為...
    清理放下閱讀 438評論 0 0
  • 測試應(yīng)用的啟動時間 adb shell am start -W packagename/activity,eg:a...
    張明云閱讀 8,953評論 1 24
  • 夜不能寐 翻來覆去只為一個夢 夢與夢之間差一個現(xiàn)實 想象中總是那么美好 一切不可能成為眼前 懦弱變?yōu)橥?無能變?yōu)?..
    妳不在原地閱讀 120評論 0 0
  • 明明知道我喜歡她,就一直享受著我對她好,在這同時她說她有喜歡的人還是對我曖昧,我想進(jìn)一步的時候,她就拒絕,還說需要...
    詩如閱讀 331評論 0 5

友情鏈接更多精彩內(nèi)容