Android項目探索系列之《GSYVideoPlayer開源項目》

GSYVideoPlayer開源項目

項目是基於ijkplayer編譯的so,ijkplayer基於FFmpeg

GSYVideoPlayer

一、 依賴方法

7.0版本使用了anndroidx,support版本請看6.x.x

JCenter 引入方法(推薦)

//完整版引入
implementation 'com.shuyu:GSYVideoPlayer:7.1.1'

二、 項目說明

項目經過多版本調整之後,目前大致結構分爲如下 :

  • Player 播放內核層:IjkMediaPlayer、ExoPlayr2、MediaPlayer(IPlayerManager)。
  • Cache 緩存層:ProxyCacheManager、ExoPlayerCacheManager(ICacheManager)。
  • Manager 內核管理層:GSYVideoManager(GSYVideoBaseManager <- GSYVideoViewBridge)。
  • Video 播放器控件層:GSYTextureRenderVIew 到 GSYVideoPlayer 五層。
  • Render 渲染控件層:TextureView、SurfaceView、GLSurfaceView(GSYRenderView <- IGSYRenderView)。

目前整個video層即是傳統controller層,也是大部分時候自定義實現需要繼承的層

結構如下圖:

框架圖

從這裏看出,項目的播放內核、管理器、渲染層都是可以自定義替換的。

三、 使用模式

1.直接播放

SimplePlayer

2.詳情頁播放

(1)模式一(全屏是豎直的)

SimpleDetailActivityMode1

(2)模式二(全屏是橫向的)

SimpleDetailActivityMode2

3.列表中使用

(1)模式一(全屏是豎直的)

SimpleListVideoActivityMode1

(2)模式二(全屏是橫向的)

SimpleListVideoActivityMode2

四、更多使用

1.切換內核

//PlayerFactory.setPlayManager(new Exo2PlayerManager());//EXO模式
//PlayerFactory.setPlayManager(new SystemPlayerManager());//系統模式
//PlayerFactory.setPlayManager(new IjkPlayerManager());//ijk模式

2.調整代碼結構,CacheFactory 更方便自定義,默認 ProxyCacheManager。

//CacheFactory.setCacheManager(new ExoPlayerCacheManager());//exo緩存模式,支持m3u8,只支持exo
//CacheFactory.setCacheManager(new ProxyCacheManager());//代理緩存模式,支持所有模式,不支持m3u8等

3.增加 ExoMediaSourceInterceptListener,方便 Exo 模式下使用自定義的 MediaSource。

ExoSourceManager.setExoMediaSourceInterceptListener(new ExoMediaSourceInterceptListener() {
           /**
            * @param dataSource  鏈接
            * @param preview     是否帶上header,默認有header自動設置爲true
            * @param cacheEnable 是否需要緩存
            * @param isLooping   是否循環
            * @param cacheDir    自定義緩存目錄
            * @return 返回不爲空時,使用返回的自定義mediaSource
            */
            @Override
            public MediaSource getMediaSource(String dataSource, boolean preview, boolean cacheEnable, boolean isLooping, File cacheDir) {
                return null;
            }
});

4.切換比例

 
//默認顯示比例
GSYVideoType.setShowType(GSYVideoType.SCREEN_TYPE_DEFAULT);
    
//16:9 
GSYVideoType.setShowType(GSYVideoType.SCREEN_TYPE_16_9);

//全屏裁減顯示,爲了顯示正常 CoverImageView 建議使用FrameLayout作爲父佈局
GSYVideoType.setShowType(GSYVideoType.SCREEN_TYPE_FULL);

//全屏拉伸顯示,使用這個屬性時,surface_container建議使用FrameLayout
GSYVideoType.setShowType(GSYVideoType.SCREEN_MATCH_FULL); 

 //4:3
GSYVideoType.setShowType(GSYVideoType.SCREEN_TYPE_4_3); 

5.切換渲染

//默認TextureView
GSYVideoType.setRenderType(GSYVideoType.TEXTURE);

//SurfaceView,動畫切換等時候效果比較差
GSYVideoType.setRenderType(GSYVideoType.SUFRACE);

//GLSurfaceView、支持濾鏡
GSYVideoType.setRenderType(GSYVideoType.GLSURFACE);
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章