前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >GSYVideoPlayer项目说明

GSYVideoPlayer项目说明

作者头像
GSYTech
发布2018-08-22 11:48:04
1.2K0
发布2018-08-22 11:48:04
举报
文章被收录于专栏:移动开发之家移动开发之家

GSYVideoPlayer项目说明(Beta1)

项目经过多版本调整之后,目前大致结构分为如下 :
  • Player 播放内核层:IjkMediaPlayer、ExoPlayr2、MediaPlayer(IPlayerManager)。
  • Cache 缓存层:ProxyCacheManager、ExoPlayerCacheManager(ICacheManager)。
  • Manager 内核管理层:GSYVideoManager(GSYVideoBaseManager <- GSYVideoViewBridge)。
  • Video 播放器控件层:GSYTextureRenderVIew 到 GSYVideoPlayer 五层。
  • Render 渲染控件层:TextureView、SurfaceView、GLSurfaceView(GSYRenderView <- IGSYRenderView)。
结构如下图:

结构图

代码语言:javascript
复制
* 管理层GSVideoManager继承GSYVideoBaseManager,通过IPlayerManager控制播放内核。

* 管理层GSVideoManager实现了GSYVideoViewBridge,和UI层交互(主要通过UI层的GSYVideoPlayer)。

* Cache层主要是对缓存的实现和管理,目前有通用的代理缓存,与exo的CacheDataSourceFactory。

* UI层GSYTextureRenderView通过GSYRenderView,内置IGSYRenderView实现类,和渲染层交互。

* UI层逐层继承实现各层逻辑,内部大部分方法为protect。

从这里看出,项目的播放内核、管理器、渲染层都是可以自定义替换的。

自定义流程

1、通过API实现

项目目前内部主要提供控制API和少量配置API: API地址

2、通过继承实现自定义UI

项目目前UI层大部分方法和变量都是protect,虽然就封装性而言这并不是很好,但你可以继承后快捷实现你的自定义。

例如:

  • 重写getLayoutId()方法,返回你的自定义布局,重用逻辑的控件只要控件Id一致即可。若需要新增控件,可重载init(Context context)方法参考源码实现,其中注意如有自定义参数,需要重载cloneParams实现大小屏同步,更甚至可以重载startWindowFullscreenresolveNormalVideoShow,参考源码和demo,这很简单, 如Demo中: SampleCoverVideo
  • 如Demo中:EmptyControlVideo,重载 touchSurfaceMoveFullLogictouchDoubleUp,实现了触摸相关的自定义。
  • 同样showWifiDialogshowProgressDialogshowVolumeDialog等重写实现你的自定义弹窗;onClickUiTogglechangeUiTo****OnClickOnTouchtouchDoubleUp`等方法重载可自定义手势行为。
3、通过替换实现

如上图所示,前面说过播放内核Player层、Manger层、渲染层都是可以替换的,只要实现了对应的接口,继承后替换对应的实现类,就可以替换对应层的内部实现逻辑。 例如Demo中: ListMultiVideoActivityCustomManagerMultiSampleVideo 就演示了如何通过自定义Manager实现,多个播放内核同时播放的效果。

4、整套的自定义demo

演示整套自定义的Demo

5、还无法解决(`・ω・´),那就提个issue吧!
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2018.05.11 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • GSYVideoPlayer项目说明(Beta1)
    • 项目经过多版本调整之后,目前大致结构分为如下 :
      • 结构如下图:
        • 自定义流程
          • 1、通过API实现
          • 2、通过继承实现自定义UI
          • 3、通过替换实现
        • 4、整套的自定义demo
          • 5、还无法解决(`・ω・´),那就提个issue吧!
      领券
      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档