README.md 13.3 KB
Newer Older
S
readme  
shuyu 已提交
1

G
readme  
guoshuyu 已提交
2
![](https://github.com/CarGuo/GSYVideoPlayer/blob/master/img/home_logo.png)
S
readme  
shuyu 已提交
3

S
Shuyu Guo 已提交
4
## 基于[IJKPlayer](https://github.com/Bilibili/ijkplayer)(兼容系统MediaPlayer与EXOPlayer2),实现了多功能的视频播放器。 (请仔细阅读下方各项说明,大多数问题可在下方找到解答)。
S
Shuyu Guo 已提交
5

S
Shuyu Guo 已提交
6
类型 | 功能
S
Shuyu Guo 已提交
7
-------- | ---
G
readme  
guoshuyu 已提交
8
**缓存**|**边播边缓存,使用了[AndroidVideoCache](https://github.com/danikula/AndroidVideoCache);ExoPlayer使用SimpleCache。**
S
Shuyu Guo 已提交
9
**协议**|**h263\4\5、Https、concat、rtsp、hls、rtmp、crypto、mpeg等等。[(ijk模式格式支持)](https://github.com/CarGuo/GSYVideoPlayer/blob/master/doc/DECODERS.md)**
G
readme  
guoshuyu 已提交
10 11 12 13 14 15
**滤镜**|**简单滤镜(马赛克、黑白、色彩过滤、高斯、模糊、模糊等等20多种)、动画、(水印、画面多重播放等)。**
**帧图**|**视频第一帧、视频帧截图功能,视频生成gif功能。**
**播放**|**列表播放、列表连续播放、重力旋转与手动旋转、视频本身rotation旋转属性、快播和慢播、网络视频加载速度。**
**画面**|**调整显示比例:默认、16:9、4:3、填充;播放时旋转画面角度(0,90,180,270);镜像旋转。**
**内核**|**IJKPlayer、EXOPlayer、MediaPlayer切换、自定义内核**
**布局**|**全屏与非全屏两套布局切换、没有任何操作控件的纯播放支持、弹幕功能、继承自定义任何布局。**
S
Shuyu Guo 已提交
16
**播放**|**单例播放、多个同时播放、视频列表滑动自动播放、列表切换详情页面无缝播放。**
G
readme  
guoshuyu 已提交
17 18 19 20
**窗口**|**小窗口、多窗体下(包括桌面)的小窗口播放。**
**广告**|**片头广告、跳过广告支持、中间插入广告功能。**
**更多**|**暂停前后台切换不黑屏;调整不同清晰度的支持;无缝切换支持;锁定/解锁全屏点击功能;进度条小窗口预览(测试)。**
**自定义**|**可自定义渲染层、自定义管理层、自定义播放层(控制层)、自定义缓存层。**
G
readme  
guoshuyu 已提交
21

S
Shuyu Guo 已提交
22
[ ![Download](https://api.bintray.com/packages/carguo/GSYVideoPlayer/gsyVideoPlayer-java/images/download.svg) ](https://bintray.com/carguo/GSYVideoPlayer/gsyVideoPlayer-java/_latestVersion)
S
shuyu 已提交
23
[![](https://jitpack.io/v/CarGuo/GSYVideoPlayer.svg)](https://jitpack.io/#CarGuo/GSYVideoPlayer)
S
shuyu 已提交
24
[ ![Download](https://api.bintray.com/packages/carguo/GSYVideoPlayer/gsyVideoPlayer/images/download.svg) ](https://bintray.com/carguo/GSYVideoPlayer/gsyVideoPlayer/_latestVersion)
S
readme  
shuyu 已提交
25
[![Build Status](https://travis-ci.org/CarGuo/GSYVideoPlayer.svg?branch=master)](https://travis-ci.org/CarGuo/GSYVideoPlayer)
S
shuyu 已提交
26

S
Shuyu Guo 已提交
27 28 29 30 31 32
[]()
[![GitHub stars](https://img.shields.io/github/stars/CarGuo/GSYVideoPlayer.svg)](https://github.com/CarGuo/GSYVideoPlayer/stargazers)
[![GitHub forks](https://img.shields.io/github/forks/CarGuo/GSYVideoPlayer.svg)](https://github.com/CarGuo/GSYVideoPlayer/network)
[![GitHub issues](https://img.shields.io/github/issues/CarGuo/GSYVideoPlayer.svg)](https://github.com/CarGuo/GSYVideoPlayer/issues)
[![GitHub license](https://img.shields.io/github/license/CarGuo/GSYVideoPlayer.svg)](https://github.com/CarGuo/GSYVideoPlayer/blob/master/LICENSE)

S
Shuyu Guo 已提交
33
### [-----------------微信赞赏链接-----------------](https://github.com/CarGuo/GSYVideoPlayer/blob/master/img/thanks.jpg)
G
readme  
guoshuyu 已提交
34

S
Shuyu Guo 已提交
35
### [--------------Demo APK 下载地址---------------](https://github.com/CarGuo/GSYVideoPlayer/releases)
S
Shuyu Guo 已提交
36

S
Shuyu Guo 已提交
37
## 一、使用依赖
S
readme  
shuyu 已提交
38

S
Shuyu Guo 已提交
39
#### 7.0版本使用了anndroidx,support版本请看6.x.x,请查看:[--- 版本更新说明 - 入口](https://github.com/CarGuo/GSYVideoPlayer/blob/master/doc/UPDATE_VERSION.md)。
40

41
### 1、JCenter 引入方法(推荐)
S
shuyu 已提交
42

S
Shuyu Guo 已提交
43
**你可以选择下面三种的其中一种,在module下的build.gradle添加。**
44

S
shuyu 已提交
45
#### A、直接引入
S
shuyu 已提交
46
```
S
shuyu 已提交
47
//完整版引入
S
shuyu 已提交
48
implementation 'com.shuyu:GSYVideoPlayer:7.1.0'
S
readme  
shuyu 已提交
49

S
shuyu 已提交
50 51
```

S
shuyu 已提交
52
#### B、添加java和你想要的so支持:
53 54

```
S
shuyu 已提交
55
implementation 'com.shuyu:gsyVideoPlayer-java:7.1.0'
56

G
guoshuyu 已提交
57
//是否需要ExoPlayer模式
S
shuyu 已提交
58
implementation 'com.shuyu:GSYVideoPlayer-exo2:7.1.0'
G
guoshuyu 已提交
59 60

//根据你的需求ijk模式的so
S
shuyu 已提交
61 62 63 64 65
implementation 'com.shuyu:gsyVideoPlayer-armv5:7.1.0'
implementation 'com.shuyu:gsyVideoPlayer-armv7a:7.1.0'
implementation 'com.shuyu:gsyVideoPlayer-arm64:7.1.0'
implementation 'com.shuyu:gsyVideoPlayer-x64:7.1.0'
implementation 'com.shuyu:gsyVideoPlayer-x86:7.1.0'
66 67 68

```

S
shuyu 已提交
69
#### C、支持其他格式协议的(mpeg,rtsp, concat、crypto协议)
70

S
Shuyu Guo 已提交
71 72
A、B普通版本支持263/264/265等,对于mpeg编码会有声音无画面情况。
C 引入的so支持mpeg编码和其他补充协议,但是so包相对变大。
73 74
 
```
S
shuyu 已提交
75
implementation 'com.shuyu:gsyVideoPlayer-java:7.1.0'
G
guoshuyu 已提交
76 77

//是否需要ExoPlayer模式
S
shuyu 已提交
78
implementation 'com.shuyu:GSYVideoPlayer-exo2:7.1.0'
79

G
guoshuyu 已提交
80
//更多ijk的编码支持
S
shuyu 已提交
81
implementation 'com.shuyu:gsyVideoPlayer-ex_so:7.1.0'
82 83 84

```

85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139
#### D、代码中的全局切换支持(更多请参看下方文档和demo)

```

//EXOPlayer内核,支持格式更多
PlayerFactory.setPlayManager(Exo2PlayerManager.class);
//系统内核模式
PlayerFactory.setPlayManager(SystemPlayerManager.class);
//ijk内核,默认模式
PlayerFactory.setPlayManager(IjkPlayerManager.class);


//exo缓存模式,支持m3u8,只支持exo
CacheFactory.setCacheManager(ExoPlayerCacheManager.class);
//代理缓存模式,支持所有模式,不支持m3u8等,默认
CacheFactory.setCacheManager(ProxyCacheManager.class);



//切换渲染模式
GSYVideoType.setShowType(GSYVideoType.SCREEN_MATCH_FULL);
//默认显示比例
GSYVideoType.SCREEN_TYPE_DEFAULT = 0;
//16:9
GSYVideoType.SCREEN_TYPE_16_9 = 1;
//4:3
GSYVideoType.SCREEN_TYPE_4_3 = 2;
//全屏裁减显示,为了显示正常 CoverImageView 建议使用FrameLayout作为父布局
GSYVideoType.SCREEN_TYPE_FULL = 4;
//全屏拉伸显示,使用这个属性时,surface_container建议使用FrameLayout
GSYVideoType.SCREEN_MATCH_FULL = -4;



//切换绘制模式
GSYVideoType.setRenderType(GSYVideoType.SUFRACE);
GSYVideoType.setRenderType(GSYVideoType.GLSURFACE);
GSYVideoType.setRenderType(GSYVideoType.TEXTURE);


//ijk关闭log
IjkPlayerManager.setLogLevel(IjkMediaPlayer.IJK_LOG_SILENT);


//exoplayer自定义MediaSource
ExoSourceManager.setExoMediaSourceInterceptListener(new ExoMediaSourceInterceptListener() {
    @Override
    public MediaSource getMediaSource(String dataSource, boolean preview, boolean cacheEnable, boolean isLooping, File cacheDir) {
        //可自定义MediaSource
        return null;
    }
});

```

G
readme  
guoshuyu 已提交
140
### [--- 更多依赖方式请点击 - ](https://github.com/CarGuo/GSYVideoPlayer/blob/master/doc/DEPENDENCIES.md)
S
Shuyu Guo 已提交
141

S
Shuyu Guo 已提交
142
## 二、其他推荐
S
Shuyu Guo 已提交
143

S
Shuyu Guo 已提交
144
### * QQ群,有兴趣的欢迎(平时吹水吐槽多,因为人数饱和,目前开启付费入群):174815284 。
S
Shuyu Guo 已提交
145
### * [Flutter Github客户端](https://github.com/CarGuo/GSYGithubAPPFlutter) 、[React Native Github客户端](https://github.com/CarGuo/GSYGithubAPP) 、 [Weex Github客户端](https://github.com/CarGuo/GSYGithubAPPWeex) 、 [原生 Kotlin Github客户端](https://github.com/CarGuo/GSYGithubAPPKotlin)
S
Shuyu Guo 已提交
146 147
### * [RickText](https://github.com/CarGuo/RickText)
### * [LazyRecyclerAdapter](https://github.com/CarGuo/LazyRecyclerAdapter)
S
Shuyu Guo 已提交
148

S
Shuyu Guo 已提交
149
## 三、文档Wiki
S
readme  
shuyu 已提交
150

G
readme  
guoshuyu 已提交
151 152
文档 | 传送门
-------- | ---
G
guoshuyu 已提交
153
**使用说明**|***[--- 简单使用,快速上手文档](https://github.com/CarGuo/GSYVideoPlayer/blob/master/doc/USE.md)***
S
Shuyu Guo 已提交
154
**项目解析说明**|***[--- 项目解析说明、包含项目架构和解析](https://github.com/CarGuo/GSYVideoPlayer/blob/master/doc/GSYVIDEO_PLAYER_PROJECT_INFO.md)***
G
readme  
guoshuyu 已提交
155
接口文档入口|**[--- 使用说明、接口文档 - 入口](https://github.com/CarGuo/GSYVideoPlayer/wiki)**
S
Shuyu Guo 已提交
156
**问题集锦入口**|***[--- 问题集锦 - 入口(大部分你遇到的问题都在这里解决) ](https://github.com/CarGuo/GSYVideoPlayer/blob/master/doc/QUESTION.md)***
G
guoshuyu 已提交
157
编码格式|**[--- IJK so文件配置格式说明](https://github.com/CarGuo/GSYVideoPlayer/blob/master/doc/DECODERS.md)**
G
readme  
guoshuyu 已提交
158 159 160
编译自定义SO|**[--- IJKPlayer编译自定义SO - 入口](http://www.jianshu.com/p/bd289e25d272)**
版本更新说明|**[--- 版本更新说明 - 入口](https://github.com/CarGuo/GSYVideoPlayer/blob/master/doc/UPDATE_VERSION.md)**

S
readme  
shuyu 已提交
161

G
readme  
guoshuyu 已提交
162
![框架图](https://raw.githubusercontent.com/CarGuo/GSYVideoPlayer/master/img/StructureChart2.jpg)
G
guoshuyu 已提交
163

S
Shuyu Guo 已提交
164
## 四、运行效果
S
readme  
shuyu 已提交
165

S
Shuyu Guo 已提交
166
* ### 1、打开一个播放(旋转、镜像、填充)
G
readme  
guoshuyu 已提交
167
<img src="https://github.com/CarGuo/GSYVideoPlayer/blob/master/img/11.gif" width="240px" height="426px"/>
S
1.1.5  
shuyu 已提交
168

S
Shuyu Guo 已提交
169
* ### 2、列表/详情模式(动画、旋转、小窗体)
S
Shuyu Guo 已提交
170 171

<div>
G
readme  
guoshuyu 已提交
172 173 174
<img src="https://github.com/CarGuo/GSYVideoPlayer/blob/master/img/22.gif" width="240px" height="426px"/>
<img src="https://github.com/CarGuo/GSYVideoPlayer/blob/master/img/33.gif" width="240px" height="426px"/>
<img src="https://github.com/CarGuo/GSYVideoPlayer/blob/master/img/44.gif" width="240px" height="426px"/>
S
Shuyu Guo 已提交
175
</div>
S
shuyu 已提交
176

S
shuyu 已提交
177
* ### 3、弹幕
G
readme  
guoshuyu 已提交
178
<img src="https://github.com/CarGuo/GSYVideoPlayer/blob/master/img/55.gif" width="240px" height="426px"/>
S
shuyu 已提交
179

G
guoshuyu 已提交
180
* ### 4、滤镜和GL动画
G
readme  
guoshuyu 已提交
181
<img src="https://github.com/CarGuo/GSYVideoPlayer/blob/master/img/09.gif"/>
G
guoshuyu 已提交
182

G
readme  
guoshuyu 已提交
183 184
* ### 6、背景铺满模糊播放

G
readme  
guoshuyu 已提交
185
<img src="https://github.com/CarGuo/GSYVideoPlayer/blob/master/img/99.png" width="426px" height="240px"/>
G
readme  
guoshuyu 已提交
186 187

* ### 7、进度条小窗口预览
G
readme  
guoshuyu 已提交
188
<img src="https://github.com/CarGuo/GSYVideoPlayer/blob/master/img/07.gif" height="240px"/>
S
shuyu 已提交
189

S
Shuyu Guo 已提交
190
## 五、近期版本
S
shuyu 已提交
191

S
shuyu 已提交
192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214

### 7.1.0(2019-09-01)

* update ExoPlayer to 2.10.4
* 添加沉浸式支持
* 增加 IPlayerInitSuccessListener 播放器初始化成果回调
```
GSYVideoManager
    .instance()
    .setPlayerInitSuccessListener(new IPlayerInitSuccessListener() {
        ///播放器初始化成果回调,可用于播放前的自定义设置
        @Override
        public void onPlayerInitSuccess(IMediaPlayer player, GSYModel model) {
            if (player instanceof IjkExo2MediaPlayer) {
                ((IjkExo2MediaPlayer) player).setTrackSelector(new DefaultTrackSelector());
                ((IjkExo2MediaPlayer) player).setLoadControl(new DefaultLoadControl());
            }
        }
    });
```
* fix #2142
* 增加硬解码不花屏幕 [RecyclerView3Activity](https://github.com/CarGuo/GSYVideoPlayer/blob/master/app/src/main/java/com/example/gsyvideoplayer/RecyclerView3Activity.java)

S
shuyu 已提交
215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238
### 7.0.2(2019-07-01)
* update ExoPlayer 到 2.10.0
* 增加 allowCrossProtocolRedirects

```
Map<String, String> header = new HashMap<>();
        header.put("allowCrossProtocolRedirects", "true");

 xxx.setMapHeadData(header)
```

* 调整 onVideoResume 内部方法
* 修改默认亮度布局和布局兼容问题
* 升级一些依赖
* exo player setSeekParameter

```
 //设置 seek 的临近帧。
if(detailPlayer.getGSYVideoManager().getPlayer() instanceof Exo2PlayerManager) {
    ((Exo2PlayerManager) detailPlayer.getGSYVideoManager().getPlayer()).setSeekParameter(SeekParameters.NEXT_SYNC);
    Debuger.printfError("***** setSeekParameter **** ");
}
```

G
6.0.3  
guoshuyu 已提交
239

S
shuyu 已提交
240 241 242 243 244 245 246 247 248 249 250 251 252 253
### 7.0.1(2019-04-07)
* 升级 ExoPlayer 到 2.9.6
* ExoPlayer 增加 SSL 证书忽略支持
``` 
ExoSourceManager.setSkipSSLChain(true);
```
* 修复全屏动画过程中按下返回键问题 #1938
* 修复全屏下的弹窗消失问题 #1927
* 修复全屏切换过程过程中的音频焦点问题 #1912
* 修复按键判空问题 #1919
* 修复全屏切换surface的release问题



S
shuyu 已提交
254
### 非 androidx 版本为 6.0.3 以下版本。更多兼容版本请查阅版本更新。
G
guoshuyu 已提交
255

G
readme  
guoshuyu 已提交
256
### 更多版本请查阅:[版本更新说明](https://github.com/CarGuo/GSYVideoPlayer/blob/master/doc/UPDATE_VERSION.md)
S
readme  
shuyu 已提交
257

S
Shuyu Guo 已提交
258
## 六、关于Issues
S
shuyu 已提交
259 260 261 262 263 264 265 266 267 268 269 270

```
提问题前可先查阅上方文档和说明,请在Demo中复现问题。

问题说明:

1、说明那个Demo中哪个页面。
2、问题显现和重现步骤。
3、补充问题的视频流url,截图。
4、补充问题的机型,android版本。
```

S
Shuyu Guo 已提交
271
## 七、混淆
S
shuyu 已提交
272

S
shuyu 已提交
273
```
G
guoshuyu 已提交
274 275 276 277 278 279
-keep class com.shuyu.gsyvideoplayer.video.** { *; }
-dontwarn com.shuyu.gsyvideoplayer.video.**
-keep class com.shuyu.gsyvideoplayer.video.base.** { *; }
-dontwarn com.shuyu.gsyvideoplayer.video.base.**
-keep class com.shuyu.gsyvideoplayer.utils.** { *; }
-dontwarn com.shuyu.gsyvideoplayer.utils.**
S
shuyu 已提交
280 281
-keep class tv.danmaku.ijk.** { *; }
-dontwarn tv.danmaku.ijk.**
G
guoshuyu 已提交
282 283 284 285 286 287 288 289

-keep public class * extends android.view.View{
    *** get*();
    void set*(***);
    public <init>(android.content.Context);
    public <init>(android.content.Context, android.util.AttributeSet);
    public <init>(android.content.Context, android.util.AttributeSet, int);
}
S
todo  
shuyu 已提交
290
```
291

S
Shuyu Guo 已提交
292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307
## 温馨提示

```
关于自定义和出现问题的请先看问题集锦、demo、issue。

多了解一些音视频的基础常识,对容器,音视频编码,ffmpeg先做一些了解,以及mediacodec等的不同。
尽量少出现为什么别的能播的问题哟。

播放器的可自定义还是挺高的,定制请参考demo,多看源码。现在的功能有些多,demo也在不断的更新。

一些新功能和项目结构也在不断的调整。

欢迎提出问题,谢谢。

```

S
Shuyu Guo 已提交
308
## 依赖大小参考
S
Shuyu Guo 已提交
309
建议使用ndk过滤,详细参考 [参考第四条 : 4、NDK的so支持](http://www.jianshu.com/p/86e4b336c17d)
S
Shuyu Guo 已提交
310 311 312
![](https://ooo.0o0.ooo/2017/06/15/5941f343a39f5.png)


G
readme  
guoshuyu 已提交
313 314 315 316
## 非常感谢您的支持

#### 撸码不易,如果对你有所帮助,欢迎您的赞赏

G
readme  
guoshuyu 已提交
317
![](https://github.com/CarGuo/GSYVideoPlayer/blob/master/img/thanks.jpg)
G
readme  
guoshuyu 已提交
318 319


320 321 322 323
## License

```
请参看IJKPlayer和AndroidVideoCache相关协议。
G
readme  
guoshuyu 已提交
324 325
项目最开始是从jiecao过来的,改着改着直接重构了。
偶尔有一变量和方法名可能还有点jiaozi的影子,但是基本是一个新项目。
S
Shuyu Guo 已提交
326
```