Android動態小視頻設計

一.動態流中的視頻播放

1.列表中視頻播放的控件實現

Android原生提供的視頻播放空間VideoView ,繼承自SurfaceView,SurfaceView會單獨一個窗口用來繪制,它不在View hierachy中,顯示也不受View的屬性控制,不能進行平移,縮放等變換。因此在ListView 或者RecyclerView中不適合用SurfaceView來視頻播。
由于SurfaceView的不足,需要引入Android在4.0中加入的TextureView,它并沒有創建一個單獨的窗口用來繪制,這使得它可以像一般的View一樣執行一些變換操作,設置透明度等,也很方便的放在其它ViewGroup中。
所以要在ListView或者RecyclerView中播放視頻,我們就需要實現基于TextureView的VideoView

二.列表中播放交互

timeline中的視頻播放必須支持以下一些特性:

1.自動播放及停止

通過Listview或者RecyclerView中滑動來判斷video item是否在windows中來判定自動播放及暫停,要點如下:

  • 判斷滑動方向
  • item可見高度比(60% ~ 90%)
  • fling時忽略計算直到state -> idle

2.無聲播放

MediaPlayer來 setVolume(0,0)? 視頻云sdk支持

3.重新播放

設計緩存來支持

三.列表小視頻播放性能

1.播放控制線程設計

MediaPlayer的狀態圖如下:

mediaplayer_state_diagram.gif

MediaPlayer的prepare()、reset()、release()等操作都是耗時操作,不應該在UI線程中處理,解決辦法是單開PlayerHandler來處理所有操作,然后再將事件通知post到主線程中。

2.緩存設計

目前app里MV播放沒有緩存系統支持,導致每次重新播放都要重新加載,動態小視頻中必然需要引入一套緩存,這里可參考mp3播放緩存(分段緩存)來實現小視頻的緩存,提高用戶體驗,不需要內存緩存只需要文件緩存。

四.視頻云SDK接入

1.系統自帶的MediaPlayer來播放

缺點:

  • 支持格式少
  • 經常有用戶反饋黑屏、無聲音等問題
  • 廠商修改導致不穩定

優點:

  • 沿用當前MV播放方案,實現速度上會相對快一點

2.網易視頻云提供的播放SDK

  • 整合自解碼播放、直播等so
  • 穩定性測試

參考

VideoPlayerManage

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容