GSYVIDEO_PLAYER_PROJECT_INFO.md 3.7 KB
Newer Older
G
info  
guoshuyu 已提交
1 2 3 4
## GSYVideoPlayer项目说明(Beta1)

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

G
readme  
guoshuyu 已提交
5
* **Player 播放内核层**:IjkMediaPlayer、ExoPlayr2、MediaPlayer(IPlayerManager)。
G
readme  
guoshuyu 已提交
6
* **Cache 缓存层**:ProxyCacheManager、ExoPlayerCacheManager(ICacheManager)。
G
readme  
guoshuyu 已提交
7 8 9
* **Manager 内核管理层**:GSYVideoManager(GSYVideoBaseManager <- GSYVideoViewBridge)。
* **Video  播放器控件层**:GSYTextureRenderVIew 到 GSYVideoPlayer 五层。
* **Render 渲染控件层**:TextureView、SurfaceView、GLSurfaceView(GSYRenderView <- IGSYRenderView)。
G
info  
guoshuyu 已提交
10 11 12 13 14

#### 结构如下图:

![框架图](https://raw.githubusercontent.com/CarGuo/GSYVideoPlayer/master/StructureChartImg.jpg)

G
readme  
guoshuyu 已提交
15 16
```

G
info  
guoshuyu 已提交
17
* 管理层GSVideoManager继承GSYVideoBaseManager,通过IPlayerManager控制播放内核。
G
readme  
guoshuyu 已提交
18

G
info  
guoshuyu 已提交
19
* 管理层GSVideoManager实现了GSYVideoViewBridge,和UI层交互(主要通过UI层的GSYVideoPlayer)。
G
readme  
guoshuyu 已提交
20

G
readme  
guoshuyu 已提交
21 22
* Cache层主要是对缓存的实现和管理,目前有通用的代理缓存,与exo的CacheDataSourceFactory。

G
info  
guoshuyu 已提交
23
* UI层GSYTextureRenderView通过GSYRenderView,内置IGSYRenderView实现类,和渲染层交互。
G
readme  
guoshuyu 已提交
24

G
info  
guoshuyu 已提交
25 26
* UI层逐层继承实现各层逻辑,内部大部分方法为protect。

G
readme  
guoshuyu 已提交
27 28 29
```

**从这里看出,项目的播放内核、管理器、渲染层都是可以自定义替换的。**
G
info  
guoshuyu 已提交
30

31
### 自定义流程
G
info  
guoshuyu 已提交
32

33
#### 1、通过API实现
G
info  
guoshuyu 已提交
34 35 36
项目目前内部主要提供控制API和少量配置API:
[API地址](https://github.com/CarGuo/GSYVideoPlayer/wiki/%E5%9F%BA%E7%A1%80Player-API)

37
#### 2、通过继承实现自定义UI
G
info  
guoshuyu 已提交
38 39 40 41 42 43 44 45 46 47
项目目前UI层大部分方法和变量都是protect,虽然就封装性而言这并不是很好,但你可以继承后快捷实现你的自定义。

例如:

* 重写`getLayoutId()`方法,返回你的自定义布局,重用逻辑的控件只要控件Id一致即可。若需要新增控件,可重载`init(Context context)`方法参考源码实现,其中注意如有自定义参数,需要重载`cloneParams`实现大小屏同步,更甚至可以重载`startWindowFullscreen``resolveNormalVideoShow`,参考源码和demo,这很简单, 如Demo中: [SampleCoverVideo](https://github.com/CarGuo/GSYVideoPlayer/blob/master/app/src/main/java/com/example/gsyvideoplayer/video/SampleCoverVideo.java)

* 如Demo中:[EmptyControlVideo](https://github.com/CarGuo/GSYVideoPlayer/blob/master/app/src/main/java/com/example/gsyvideoplayer/video/EmptyControlVideo.java),重载 `touchSurfaceMoveFullLogic``touchDoubleUp`,实现了触摸相关的自定义。

* 同样`showWifiDialog``showProgressDialog``showVolumeDialog`等重写实现你的自定义弹窗;onClickUiToggle`、`changeUiTo****`、`OnClick`、`OnTouch`、`touchDoubleUp`等方法重载可自定义手势行为。

48
#### 3、通过替换实现
G
info  
guoshuyu 已提交
49 50 51 52

如上图所示,前面说过播放内核Player层、Manger层、渲染层都是可以替换的,只要实现了对应的接口,继承后替换对应的实现类,就可以替换对应层的内部实现逻辑。
例如Demo中: [ListMultiVideoActivity](https://github.com/CarGuo/GSYVideoPlayer/blob/master/app/src/main/java/com/example/gsyvideoplayer/ListMultiVideoActivity.java)[CustomManager](https://github.com/CarGuo/GSYVideoPlayer/blob/master/app/src/main/java/com/example/gsyvideoplayer/video/manager/CustomManager.java)[MultiSampleVideo](https://github.com/CarGuo/GSYVideoPlayer/blob/master/app/src/main/java/com/example/gsyvideoplayer/video/MultiSampleVideo.java)  就演示了如何通过自定义Manager实现,多个播放内核同时播放的效果。

G
readme  
guoshuyu 已提交
53 54 55 56 57 58 59

### 4、整套的自定义demo

[演示整套自定义的Demo](https://github.com/CarGuo/GSYVideoPlayer/tree/master/app/src/main/java/com/example/gsyvideoplayer/exo)


#### 5、还无法解决(`・ω・´),那就提个issue吧!
G
info  
guoshuyu 已提交
60