Android主流視頻播放及緩存實現原理調研

前言

本文針對視頻播放及緩存方案進行調研,對于Android端常用的視頻播放器的緩存策略介紹及實現原理。

播放器直連

本地存儲形式緩存

流程圖

image

優點

實現簡單,邏輯易懂。

缺點

  1. 用戶播放視頻的時候等待時間較長,起播慢
  2. 需要大量的控制視頻播放的邏輯來進行輔助,與播放器代碼耦合嚴重
  3. 每次seek(用戶拖動進度條的行為)切源耗時,seek后會切換到從網絡上讀取狀態,體驗較慢。

AndroidVideoCache

在播放器與視頻源服務器之間加了一層代理服務器,截取視頻播放器發送的請求,根據截取的請求,向網絡服務器請求數據,然后寫到本地。本地代理服務器從文件中讀取數據并發送給播放器進行播放。

AndroidVideoCache實現原理

流程圖

AndroidVideCache流程圖

Seek過程解析

Seek階段

Seek階段總流程圖

Seek開始

image

Seek1

image

Seek2

image

補洞階段

補洞階段是對于Seek階段遺留下來的,片段小于20kb的下載長度進行補充到片段數組的過程。

在第二次播放時,如果文件中有空洞,無論片段再小,也會保存到片段中,最后當配置數組為{0, length}的時候,length為視頻長度大小,也會存到片段中。

優勢

  1. 數據流是本地代理控制,方便加入緩存、預加載、防盜鏈等業務邏輯。提高了視頻下載的成功率,減少了視頻緩沖時間,提升用戶體驗。
  2. 與播放器邏輯完全解耦,對于播放器只是一個地址。

Qzon

Qzone的日均視頻播放量破十億,其中Android端的總播放量占比超過70%。所以Qzone的實現方案對我們來說很有借鑒意義。

最初的傳統的本地代理方案

QZon

帶來的問題

  1. 視頻下載和播放的業務邏輯復雜,過多的邏輯和下載本身耦合。
  2. 不容易接入第三方下載器和對下載過程進行監控。

優化過程

優化主要從如下幾個方面入手:

視頻優化過程

防盜鏈預拉取

防盜鏈預拉取

緩存分片

這里主要解決的問題是,之前單個的順序存儲方式無法對于播放空洞(非順序播放場景,例如拖動、續播等)進行緩存,降低了緩存率和命中率。

緩存分片

私有通道方案

私有通道方案

流量控制

流量控制

H265編碼

H265是新一代視頻編碼標準,相比原有使用H264編碼的視頻,具有更高的壓縮比,在畫質近似的前提下,H265編碼的視頻文件體積只有H264的一半甚至更少,因此,播放H265編碼的視頻能極大減少帶寬消耗。

具體編碼相關內容,請看直播技術點之編解碼基礎(一)

引用

  1. 一種邊播變下的播放策略
  2. Qzone視頻下載如何做到多快好省?
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。