1. 程式人生 > >Android 視訊播放框架之TigerVideoPlayer

Android 視訊播放框架之TigerVideoPlayer

github專案地址:https://github.com/huyongli/TigerVideo

TigerVideoPlayer

Library實現了Android中的視訊播放模組,視訊播放控制與介面顯示充分解耦,可自定義自己喜歡的核心播放器來實現播放功能(MediaPlayer,ExoPlayer等)。

歡迎大家加群交流:106510493

功能

目前該庫主要實現視訊播放中的如下功能:

  1. 列表中播放視訊
  2. 列表滑動時如果正在播放視訊,則列表中播放的視訊自動切換為小視窗浮動播放,滑動可恢復為正常播放
  3. 支援配置開啟或關閉小視窗播放功能,預設關閉
  4. 各種播放模式切換到全屏播放
  5. 實現了視訊播放中的暫停,進度顯示等各種常規操作
  6. 視訊全屏播放時支援左右滑動實現視訊的快進和後退,支援右邊上下滑動調整播放音量,左邊上下滑動調整播放器的亮度等手勢控制操作
  7. 視訊全屏播放時支援鎖定當前播放狀態
  8. 支援直接進入全屏播放
  9. 使用AndroidVideoCache實現視訊快取功能,該功能預設關閉,使用配置即可開啟該快取功能
  10. 因視訊播放核心與視訊操作介面充分解耦,因此完全支援自定義自己喜歡的播放核心來實現視訊播放
  11. 該庫實現了基於MediaPlayerExoPlayer兩個核心的視訊播放器,可以根據自己的需求配置。因為ExoPlayer需要Context
    ,所以該庫預設使用MediaPlayer核心播放器播放 11.支援自定義頭部Title顯示相關檢視,支援自定義底部播放控制條檢視,支援自定義全屏播放時手勢操作相關顯示檢視,支援替換預覽圖ImageView,支援自定義載入失敗顯示檢視

TigerVideoPlayer的使用

該庫實現了一行程式碼實現視訊播放,一行程式碼開啟小視窗播放,使用簡單。

Gradle

compile 'cn.ittiger:TigerVideoPlayer:1.7'

視訊播放

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
              android:orientation="vertical"
              android:layout_width="match_parent"
              android:layout_height="match_parent">

    <cn.ittiger.player.VideoPlayerView
        android:id="@+id/video_player_view"
        android:layout_width="match_parent"
        android:layout_height="match_parent"/>

</LinearLayout>
//繫結視訊地址和標題,這樣視訊播放功能就整合完成了,剩下的工作全部交由VideoPlayerView完成
mVideoPlayerView.bind(video.getVideoUrl(), video.getVideoTitle());
//顯示視訊預覽圖
Glide.with(mContext).load(video.getVideoThumbUrl()).into(holder.mPlayerView.getThumbImageView());

自定義播放器相關檢視

<cn.ittiger.player.VideoPlayerView
        android:id="@+id/video_player_view"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        app:vpFullScreenGestureViewLayoutRes="@layout/my_fullscreen_gesture_view"
        app:vpVideoThumbViewLayoutRes="@layout/fresco_image_view"
        .../>

如上程式碼所示,如果要自定義全屏手勢操作相關View,只需要在佈局中新增自定義屬性app:vpFullScreenGestureViewLayoutRes即可

  1. 自定義佈局my_fullscreen_gesture_view的根檢視必須繼承自FullScreenGestureView
  2. 自定義底部播放控制條View時,必須繼承自VideoControllerView
  3. 自定義視訊縮圖,必須繼承自ImageView
  4. 自定義載入失敗View,不需要繼承任何View
  5. 自定義頭部View時,必須繼承自VideoHeaderView

自定義播放配置

//該配置最好在Application中實現
PlayerManager.loadConfig(
    new Config.Builder(this)
    .buildPlayerFactory(new ExoPlayerFactory(this))//使用ExoPlayer核心作為視訊播放器,預設使用MediaPlayer
    .enableSmallWindowPlay()//開啟小視窗播放,預設不開其
    .cache(true)//開啟快取功能,預設不開啟
    .cacheProxy(HttpProxyCacheServer)//自定義快取配置,不設定則採用預設的快取配置
    .build()
);

自定義不同核心的播放器

  1. 實現播放器抽象類AbsSimplePlayer,根據你需要的核心實現視訊播放的相關功能
  2. 實現IPlayerFactory介面,在方法public AbsSimplePlayer create();中返回對應的播放器物件
  3. 通過配置.buildPlayerFactory()設定該播放器工廠

使用注意點

  1. 對於需要使用全屏播放的Activity,需要在AndroidManifest中對該Activity配置android:configChanges="orientation|screenSize|keyboardHidden"
  2. 不要使用預設的ActionBar,如有需要請使用v7包中的ToolBar(該問題後面會改進),否則全屏播放會顯示有問題
  3. 對於Activity中視訊播放時,最好在onResume, onPause, onDestroy方法中通過PlayerManager加上對應的方法:resume, pause, release
  4. 對於在Fragment中播放視訊時,在onDestroyView方法中呼叫PlayerManager.getInstance.stop();

以上是TigerVideoPlayer使用的簡單說明,具體使用請參考Demo


TigerVideo

基於多個開源庫實現的一個視訊播放App,練手專案

主要使用的開源庫

Mosby(一個MVP框架)、RxJava、Retrofit2、ButterKnife、Glide、Systembartint、TigerDB、TigerVideoPlayer、Material Design相關控制元件