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);
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章