CarGuo/GSYVideoPlayer
GitHub: CarGuo/GSYVideoPlayer
一个集成了多种播放内核和丰富功能的 Android 视频播放器库,用于简化视频应用开发。
Stars: 21437 | Forks: 4320

**[中文文档](README_CN.md)**
## 支持 [IJKPlayer](https://github.com/CarGuo/ijkplayer)、[Media3(EXOPlayer2)](https://github.com/androidx/media)、MediaPlayer、AliPlayer,实现多功能视频播放器。(请仔细阅读以下说明,大多数问题都能在下方找到答案)。
## * 鸿蒙版本 [openharmony-tpc/GSYVideoPlayer](https://gitcode.com/openharmony-tpc/openharmony_tpc_samples/tree/master/GSYVideoPlayer)
功能 | 说明
-------------|-------------------------------------------------------------------------------------------------------------------------------------------------
**缓存** | **边播边缓存,使用 [AndroidVideoCache](https://github.com/danikula/AndroidVideoCache);Media3(ExoPlayer) 使用 SimpleCache。**
**协议** | **h263\4\5、Https、concat、rtsp、hls、rtmp、crypto、mpeg 等。[(ijk 模式格式支持)](https://github.com/CarGuo/GSYVideoPlayer/blob/master/doc/DECODERS.md)**
**滤镜** | **简单滤镜(马赛克、黑白、色彩滤镜、高斯、模糊等 20 多种),动画,(水印、多屏播放等)。**
**帧图** | **视频首帧、视频帧截图、包含UI的播放器组合截图,以及视频转 gif 功能。**
**播放** | **列表播放、连续列表播放、重力旋转和手动旋转、视频自身旋转属性、快放慢放、网络视频加载速度。**
**屏幕** | **调节显示比例:默认、16:9、4:3、填充;播放中旋转屏幕角度(0,90,180,270);镜像旋转。**
**内核** | **IJKPlayer、Media3(EXOPlayer)、MediaPlayer、AliPlayer 切换,自定义内核**
**布局** | **全屏与非全屏两套布局切换,纯播放无任何操作控件支持,弹幕功能,继承自定义任意布局。**
**播放** | **单例播放、多个同时播放、视频列表滑动自动播放、列表切换详情页无缝播放。**
**窗口** | **小窗口,多个窗口小窗口播放(含桌面)。**
**广告** | **开场广告、跳过广告支持,插播广告功能。**
**字幕** | **统一外部字幕覆盖,支持 SRT/WebVTT,跨 IJK、Media3(EXOPlayer) 和 MediaPlayer;Media3 嵌入式 cue 点可桥接到同一 UI。**
**Dash** | **Media3(exo2) 模式支持 dash;演示支持 HLS 主列表 / DASH MPD 自适应码率轨道切换。**
**流** | **支持 metadata 播放**
**适配 16k** | **ex_so 适配 16K 页大小**
**openssl** | **当前 ex_so 的 arm64/x86_64 使用 openssl 1.1.1w**
**FFmpeg** | **当前 ex_so 的 arm64/x86_64 使用 FFmpeg 4.3**
**FFmpeg** | **当前 ex_so 的 arm64/x86_64 支持 G711a(pcm_alaw)**
**更多** | **前后台切换暂停无黑屏;多 URL 码率切换;Exo HLS/DASH 自适应码率;无缝切换支持;保留最后一帧演示;WebVTT 进度条预览。**
**自定义** | **自定义渲染层、自定义管理层、自定义播放层(控制层)、自定义缓存层。**
[](https://central.sonatype.com/artifact/io.github.carguo/gsyvideoplayer)
[](https://jitpack.io/#CarGuo/GSYVideoPlayer)
[](https://app.travis-ci.com/CarGuo/GSYVideoPlayer)
[](https://github.com/CarGuo/GSYVideoPlayer/actions)
[]()
[](https://github.com/CarGuo/GSYVideoPlayer/stargazers)
[](https://github.com/CarGuo/GSYVideoPlayer/network)
[](https://github.com/CarGuo/GSYVideoPlayer/issues)
[](https://github.com/CarGuo/GSYVideoPlayer/blob/master/LICENSE)
[]()
[](https://gitcode.com/ZuoYueLiang/GSYVideoPlayer/overview)

| 公众号 | 掘金 | 知乎 | CSDN | 简书
|---------|-------------------------------------------------------------|-------------------------------------------|-----------------------------------------|----------------------------------------------|
| GSYTech | [点我](https://juejin.im/user/582aca2ba22b9d006b59ae68/posts) | [点我](https://www.zhihu.com/people/carguo) | [点我](https://blog.csdn.net/ZuoYueLiang) | [点我](https://www.jianshu.com/u/6e613846e1ea)

### [--------------Demo APK 下载地址---------------](https://github.com/CarGuo/GSYVideoPlayer/releases)
## 一、使用依赖
目前有三种托管方式:
- MavenCentral:11.0.0 版本后可用,所有基础类包都发布托管在此。
- Github Package:9.1.0 版本开始可用,但在 11.0.0 版本之前,GSYIjkJava 的基础依赖仍在 jitpack。
- Jitpack IO:将持续发布,但托管平台存在随机丢包问题。
#### [--- 版本更新说明 --- ](https://github.com/CarGuo/GSYVideoPlayer/blob/master/doc/UPDATE_VERSION.md)
#### [--- 近期播放功能 --- ](https://github.com/CarGuo/GSYVideoPlayer/blob/master/doc/RECENT_FEATURES_EN.md)
### 1. MavenCentral 引用(推荐)
由于 jitpack 不断丢包,已迁移到 MavenCentral。使用方式如下:
#### 首先添加
```
allprojects {
repositories {
///...
mavenCentral()
maven { url "https://maven.aliyun.com/repository/public" }
}
}
```
**以下三者选其一,添加到模块下的 build.gradle。**
#### A. 直接引入
```
//Complete version introduction
implementation 'io.github.carguo:gsyvideoplayer:13.0.0'
//Whether AliPlayer mode is needed
implementation 'io.github.carguo:gsyvideoplayer-aliplay:13.0.0'
```
### 2. Github Package 依赖方式(推荐)
**由于 Jitpack 经常存在历史包随机丢失的问题,新增 Github Package 依赖方式。使用方式如下**:
```
allprojects {
repositories {
//...
maven {
url 'https://maven.pkg.github.com/CarGuo/GSYVideoPlayer'
// You can also use your own GitHub account and token
// For convenience, I have provided a token for an infrequently used account here
credentials {
// your github name
username = 'carsmallguo'
// your github generate new token
password = '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'
}
}
maven {
url "https://maven.aliyun.com/repository/public"
}
mavenCentral()
}
}
```
- 生成自己的 token 可见:https://docs.github.com/zh/authentication/keeping-your-account-and-data-secure/managing-your-personal-access-tokens
**以下三者选其一,添加到模块下的 build.gradle。**
#### A. 直接引入
```
//Complete version introduction
implementation 'com.shuyu:gsyvideoplayer:13.0.0'
//Whether AliPlayer mode is needed
implementation 'com.shuyu:gsyvideoplayer-aliplay:13.0.0'
```
### 3. Jitpack 引入方式(将持续发布,但不太推荐)
历史包可能存在随机丢包,且不易补充,见 [#4144](https://github.com/CarGuo/GSYVideoPlayer/issues/4144):
#### 首先在项目下的 build.gradle 添加
```
allprojects {
repositories {
//...
maven { url 'https://jitpack.io' }
maven { url "https://maven.aliyun.com/repository/public" }
mavenCentral()
}
}
```
**以下三者选其一,添加到模块下的 build.gradle。**
#### A. 直接引入
```
//Complete version introduction
implementation 'com.github.CarGuo.GSYVideoPlayer:gsyvideoplayer:v13.0.0'
//Whether AliPlayer mode is needed
implementation 'com.github.CarGuo.GSYVideoPlayer:gsyvideoplayer-aliplay:v13.0.0'
```
### [--- 更多依赖方式请点击 - ](https://github.com/CarGuo/GSYVideoPlayer/blob/master/doc/DEPENDENCIES.md)
## 二、其他推荐
### * QQ 群,有兴趣的欢迎加入(通常是一堆吐槽,因为人数饱和,就是日常水群,没人解决问题):~~
174815284~~ ,新群:992451658 。
### * [Flutter GitHub 客户端](https://github.com/CarGuo/gsy_github_app_flutter) ,[Compose GitHub 客户端](https://github.com/CarGuo/GSYGithubAppCompose) ,[React Native GitHub 客户端](https://github.com/CarGuo/GSYGithubAPP) ,[Weex GitHub 客户端](https://github.com/CarGuo/GSYGithubAPPWeex) ,[原生 Kotlin GitHub 客户端](https://github.com/CarGuo/GSYGithubAPPKotlin)
### * [RxFFmpeg Android 音视频编辑工具](https://github.com/microshow/RxFFmpeg)
### * [oarplayer Rtmp 播放器,基于 MediaCodec 和 srs-librtmp,不依赖 ffmpeg](https://github.com/qingkouwei/oarplayer)
### * 鸿蒙版本 [openharmony-tpc/GSYVideoPlayer](https://gitcode.com/openharmony-tpc/openharmony_tpc_samples/tree/master/GSYVideoPlayer)
## 三、文档 Wiki
文档 | 入口
---------------|----------------------------------------------------------------------------------------------------------------------------------------------------
**使用说明** | ***[--- 简单使用,快速上手文档](https://github.com/CarGuo/GSYVideoPlayer/blob/master/doc/USE.md)***
**推荐阅读** | ***[--- 移动开发者必须知道的基础音视频知识 1](https://juejin.cn/post/7057132141875822622)、[--- 移动开发者必须知道的基础音视频知识 2](https://mp.weixin.qq.com/s/HjSdmAsHuvixCH_EWdvk3Q)***
**项目解析说明** | ***[--- 项目解析说明,包含项目架构和分析](https://github.com/CarGuo/GSYVideoPlayer/blob/master/doc/GSYVIDEO_PLAYER_PROJECT_INFO.md)***
API 文档入口 | **[--- 使用说明,API 文档 - 入口](https://github.com/CarGuo/GSYVideoPlayer/wiki)**
**常见问题入口** | ***[--- 常见问题 - 入口(你遇到的大部分问题都在这里解决)](https://github.com/CarGuo/GSYVideoPlayer/blob/master/doc/QUESTION.md)***
编码格式 | **[--- IJK so 文件配置格式说明](https://github.com/CarGuo/GSYVideoPlayer/blob/master/doc/DECODERS.md)**
编译自定义 SO | **[--- IJKPlayer 编译自定义 SO - 入口](https://github.com/CarGuo/GSYVideoPlayer/blob/master/doc/BUILD_SO.md)**
版本更新说明 | **[--- 版本更新说明 - 入口](https://github.com/CarGuo/GSYVideoPlayer/blob/master/doc/UPDATE_VERSION.md)**
compileSdk 过高 | --- **[#3514](https://github.com/CarGuo/GSYVideoPlayer/issues/3514)**





## 四、运行效果
* 1. 打开一个播放(旋转、镜像、填充)
* 2. 列表/详情模式(动画、旋转、小窗口)
* 3. 弹幕
* 4. 滤镜和 GL 动画
* 6. 背景高斯模糊播放
* 7. 进度条小窗口预览
演示现在使用 WebVTT 缩略图轨道进行 seek 预览,而不是在客户端从原始视频中提取许多帧。VTT 可以指向单独的图片或 sprite 坐标:
```
WEBVTT
00:00:00.000 --> 00:00:01.000
160p-00001.jpg#xywh=0,0,284,160
```
## 五、近期版本
### v13.0.0 版本 (2026-05-07)
- 添加 Exo HLS 主列表 / DASH MPD 自适应码率演示及近期播放功能指南。
- 添加统一的 SRT/WebVTT 外部字幕支持,跨 IJK、System 和 Media3。
- 添加 WebVTT seek 预览、保留最后一帧演示、播放器截图及 GL 效果改进。
- 改进多 URL 码率切换、播放器内核错误处理、Exo 缓存生命周期及 GIF 清理。
- 修复字幕加载器在分离、全屏和小窗口过渡期间的释放/恢复问题。
- 当 Exo 缓存文件夹被锁定时回退到无缓存播放,并避免陈旧的 hadCached 状态。
- 修复 SurfaceView 截图位图清理和陈旧的预览 VTT 异步提供者覆盖问题。
### v12.1.0 版本 (2026-04-01)
- 更新 media3 1.10.0
- ex_so: 修复 ex_so (x86_64) https #4238
### v12.0.0 版本 (2026-03-13)
- ex_so: 更新 ffmpeg 4.3
- ex_so: x86_64 支持 16k 页大小
- ex_so: armv7a 更新 ffmpeg n4.3
- ex_so: #4224 为 64 位链接器标志添加 common-page-size 用于 Stack Canary
- 修复 #4225 ff_hevc_sao_band_filter_neon_8+100)
- #4178 exo player rtmp 修复 16k
- #4226 修复 Kotlin 实现的 ExoMediaSourceInterceptListener 中的 NPE
- #4228 修复全屏播放器需要点击两次才能从暂停状态恢复的问题
- 更新 mediaVersion 至 1.9.2
- 修复 #4218 支持导出 exo 缓存
- 更新 minSdk 至 23,media 版本至 1.9
### v11.3.0 版本 (2025-12-05)
- 关联 #3019
- 修复 #4211
### v11.2.0 版本 (2025-11-25)
- 修复 #4169
- 修复 #4174
- 修复 #4171
- 添加新功能 clearVideoSurface [IjkExo2MediaPlayer]
- 修复 #4199
- 修复 #4204
### v11.1.0 版本 (2025-08-04)
- 更新 media3 1.8.0
### v11.0.0 版本 (2025-07-10)
- 更新并迁移底层依赖
- 修复 #4140
### 更多版本,请查看:[版本更新说明](https://github.com/CarGuo/GSYVideoPlayer/blob/master/doc/UPDATE_VERSION.md)
## 六、关于 Issues
```
Before asking questions, please refer to the documents and instructions above, and reproduce the problem in the Demo.
Problem description:
1. Which page in which Demo.
2. Problem manifestation and reproduction steps.
3. Supplementary video stream url and screenshots of the problem.
4. Supplementary model and Android version of the problem.
```
## 七、混淆
```
-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.**
-keep class com.shuyu.gsyvideoplayer.player.** {*;}
-dontwarn com.shuyu.gsyvideoplayer.player.**
-keep class tv.danmaku.ijk.** { *; }
-dontwarn tv.danmaku.ijk.**
-keep class androidx.media3.** {*;}
-keep interface androidx.media3.**
-keep class com.shuyu.alipay.** {*;}
-keep interface com.shuyu.alipay.**
-keep public class * extends android.view.View{
*** get*();
void set*(***);
public (android.content.Context);
public (android.content.Context, java.lang.Boolean);
public (android.content.Context, android.util.AttributeSet);
public (android.content.Context, android.util.AttributeSet, int);
}
```
如果是阿里云播放器,可参考其文档 (https://help.aliyun.com/document_detail/124711.html?spm=a2c4g.124711.0.0.7fa0125dkwUPoU
),需要添加一些 keep 规则:
```
-keep class com.alivc.**{*;}
-keep class com.aliyun.**{*;}
-keep class com.cicada.**{*;}
-dontwarn com.alivc.**
-dontwarn com.aliyun.**
-dontwarn com.cicada.**
```
## 温馨提示
#### [如果 clone 太慢,可以尝试从 Gitee 下载](https://gitee.com/CarGuo/GSYVideoPlayer)
```
Regarding customization and problems, please refer to the FAQ, demo, and issues first.
Learn more about basic audio and video common sense, and understand containers, audio and video encoding, ffmpeg, and the differences in mediacodec.
Try to avoid asking why others can play.
The player is highly customizable. For customization, please refer to the demo and read the source code. There are many functions now, and the demo is constantly being updated.
Some new functions and project structures are also constantly being adjusted.
Welcome to ask questions, thank you.
```
## 依赖大小参考
## 温馨提示
## 许可证
```
Please refer to the IJKPlayer and AndroidVideoCache related agreements.
The project started from jiecao, and was refactored after some changes.
Occasionally, some variable and method names may still have a shadow of jiaozi, but it is basically a new project.
```
* 2. 列表/详情模式(动画、旋转、小窗口)
* 4. 滤镜和 GL 动画
* 6. 背景高斯模糊播放
* 7. 进度条小窗口预览
演示现在使用 WebVTT 缩略图轨道进行 seek 预览,而不是在客户端从原始视频中提取许多帧。VTT 可以指向单独的图片或 sprite 坐标:
```
WEBVTT
00:00:00.000 --> 00:00:01.000
160p-00001.jpg#xywh=0,0,284,160
```
## 五、近期版本
### v13.0.0 版本 (2026-05-07)
- 添加 Exo HLS 主列表 / DASH MPD 自适应码率演示及近期播放功能指南。
- 添加统一的 SRT/WebVTT 外部字幕支持,跨 IJK、System 和 Media3。
- 添加 WebVTT seek 预览、保留最后一帧演示、播放器截图及 GL 效果改进。
- 改进多 URL 码率切换、播放器内核错误处理、Exo 缓存生命周期及 GIF 清理。
- 修复字幕加载器在分离、全屏和小窗口过渡期间的释放/恢复问题。
- 当 Exo 缓存文件夹被锁定时回退到无缓存播放,并避免陈旧的 hadCached 状态。
- 修复 SurfaceView 截图位图清理和陈旧的预览 VTT 异步提供者覆盖问题。
### v12.1.0 版本 (2026-04-01)
- 更新 media3 1.10.0
- ex_so: 修复 ex_so (x86_64) https #4238
### v12.0.0 版本 (2026-03-13)
- ex_so: 更新 ffmpeg 4.3
- ex_so: x86_64 支持 16k 页大小
- ex_so: armv7a 更新 ffmpeg n4.3
- ex_so: #4224 为 64 位链接器标志添加 common-page-size 用于 Stack Canary
- 修复 #4225 ff_hevc_sao_band_filter_neon_8+100)
- #4178 exo player rtmp 修复 16k
- #4226 修复 Kotlin 实现的 ExoMediaSourceInterceptListener 中的 NPE
- #4228 修复全屏播放器需要点击两次才能从暂停状态恢复的问题
- 更新 mediaVersion 至 1.9.2
- 修复 #4218 支持导出 exo 缓存
- 更新 minSdk 至 23,media 版本至 1.9
### v11.3.0 版本 (2025-12-05)
- 关联 #3019
- 修复 #4211
### v11.2.0 版本 (2025-11-25)
- 修复 #4169
- 修复 #4174
- 修复 #4171
- 添加新功能 clearVideoSurface [IjkExo2MediaPlayer]
- 修复 #4199
- 修复 #4204
### v11.1.0 版本 (2025-08-04)
- 更新 media3 1.8.0
### v11.0.0 版本 (2025-07-10)
- 更新并迁移底层依赖
- 修复 #4140
### 更多版本,请查看:[版本更新说明](https://github.com/CarGuo/GSYVideoPlayer/blob/master/doc/UPDATE_VERSION.md)
## 六、关于 Issues
```
Before asking questions, please refer to the documents and instructions above, and reproduce the problem in the Demo.
Problem description:
1. Which page in which Demo.
2. Problem manifestation and reproduction steps.
3. Supplementary video stream url and screenshots of the problem.
4. Supplementary model and Android version of the problem.
```
## 七、混淆
```
-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.**
-keep class com.shuyu.gsyvideoplayer.player.** {*;}
-dontwarn com.shuyu.gsyvideoplayer.player.**
-keep class tv.danmaku.ijk.** { *; }
-dontwarn tv.danmaku.ijk.**
-keep class androidx.media3.** {*;}
-keep interface androidx.media3.**
-keep class com.shuyu.alipay.** {*;}
-keep interface com.shuyu.alipay.**
-keep public class * extends android.view.View{
*** get*();
void set*(***);
public 标签:域名枚举, 安全测试工具