GSYVideoPlayer项目说明

GSYVideoPlayer项目说明(Beta1)

项目经过多版本调整之后,目前大致结构分为如下 :

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

结构如下图:

结构图

* 管理层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吧!

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏用户2442861的专栏

chrome调试工具常用功能整理

chrome devtools 中 Elements panel 是审查 dom 元素和 css 的, 可以实时修改 dom/css.

911
来自专栏北京马哥教育

Linux cat命令

豌豆贴心提醒,本文阅读时间3分钟,文末有秘密! ? 文 | 豌豆 图 | 来源网络 ? Linux cat命令 命令:cat cat 命令用...

3894
来自专栏彭湖湾的编程世界

【javascript】原生js更改css样式的两种方式

下面我给大家介绍的是原生js更改CSS样式的两种方式: 1通过在javascript代码中的node.style.cssText="css表达式1;css表达式...

2198
来自专栏IT笔记

SpringMvc+Velocity的一些配置总结

前言 公司用了许久的struts2+hibernate,前两年时间SpringMvic+Shiro也有做过,大多都是基于JSP实现的界面展示层,最近一段使用使用...

3637
来自专栏君赏技术博客

百思不得姐数据挖掘第一篇

这是此文档的第一篇文章,写在之前要说的话。里面设计的技术点可能有些新人不是太了解,我只会说我遇到的难点和思路,文章也是想到那里写到那里。

663
来自专栏源哥的专栏

如何在js文件中写加载Applet控件(js与jsp分离技术)

                        如何在js文件中写加载Applet控件(js与jsp分离技术)

974
来自专栏大前端_Web

前端路由相关实现

版权声明:本文为吴孔云博客原创文章,转载请注明出处并带上链接,谢谢。 https://blog.csdn.net/wkyseo/articl...

992
来自专栏大内老A

ASP.NET:创建Linked ValidationSummary, 深入理解ASP.NET的Validation

我想对于ASP.NET的Validator控件已经熟悉的不能再熟悉了。我们 已经习惯了用Validator控件来验证我们在表单的输入,并通过Validation...

3248
来自专栏狮乐园

codereview-s8

之后再efficiencyView方法中调用stopPropagation方法阻止事件冒泡

893
来自专栏CSDN技术头条

前端知识点总结——Vue

作用:将表达式执行的结果 输出当调用元素的 innerHTML 中;还可以将数据绑定到视图。

1252

扫码关注云+社区

领取腾讯云代金券