GSYVideoPlayer项目说明

作者: 恋猫月亮 | 来源:发表于2018-05-11 16:22 被阅读458次

    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吧!

    相关文章

      网友评论

      • GoAllOutInWork:大神能不能加你QQ 想问你一些问题  关于这个播放器的   
      • GoAllOutInWork:老哥  我想界面用一个Textureview 然后用这个播放器能不能实现
      • 五月槐花香:羡慕大神:+1: :+1:
        恋猫月亮:@五月槐花香 没有大神,就是个工地搬砖的
      • GoAllOutInWork:楼主 我想问一下如何主动触发视频在播放到某一个时间段时做操作 有没有监听的回调接口呢?
        GoAllOutInWork:@恋猫月亮 楼主 我不想用这个自带的网络监听方法,我也调用了取消网络监听方法 可为什么没有起作用
        GoAllOutInWork:@恋猫月亮 谢谢 没找这个回调 不过找到了有个onProgressChanged实现了我的需求 嘿嘿
        恋猫月亮:setGSYVideoProgressListener
      • S_ZY:大神 缓存 seek到哪从哪开始缓存 怎么做? 能提示一下么
      • cc9b42b6f8e3:怎么单独管理离线缓存呢? 自己写文件下载功能吗?gsy提供么
      • 03fc7d87eea6:非常感谢~很值得学习和借鉴
        恋猫月亮:@haohaozaici 互相学习而已🙂,其实我播放器还要有一个controller控制器…只是因为有view层分的多了就一直懒的加上…
      • liubaoyua:项目里遇到要播放 多段mp4视频组成的一个大视频,不知道大神有没有更好的解决方案
        恋猫月亮:@liubaoyua m3u8 或者concat
      • zzl93:👍👍👍
        恋猫月亮:@zzl93 😉😉😉

      本文标题:GSYVideoPlayer项目说明

      本文链接:https://www.haomeiwen.com/subject/jtjxlftx.html