Skip to content
视频播放器(IJKplayer、ExoPlayer、MediaPlayer),HTTPS,支持弹幕,外挂字幕,支持滤镜、水印、gif截图,片头广告、中间广告,多个同时播放,支持基本的拖动,声音、亮度调节,支持边播边缓存,支持视频自带rotation的旋转(90,270之类),重力旋转与手动旋转的同步支持,支持列表播放 ,列表全屏动画,视频加载速度,列表小窗口支持拖动,动画效果,调整比例,多分辨率切换,支持切换播放器,进度条小窗口预览,列表切换详情页面无缝播放,rtsp、concat、mpeg。
Java Shell
Branch: master
Clone or download

Latest commit

Latest commit d867e7d Jun 3, 2020

Files

Permalink
Type Name Latest commit message Commit time
Failed to load latest commit information.
.github Update FUNDING.yml May 27, 2019
app 更新注释 Jun 3, 2020
doc prepare release 7.1.4 May 14, 2020
gradle/wrapper update gradle 3.3.0 Jan 15, 2019
gsyVideoPlayer-armv5 调整框架,剔除exoplayer到外部依赖 Aug 21, 2018
gsyVideoPlayer-armv64 调整框架,剔除exoplayer到外部依赖 Aug 21, 2018
gsyVideoPlayer-armv7a 调整框架,剔除exoplayer到外部依赖 Aug 21, 2018
gsyVideoPlayer-base prepare 7.1.0 Sep 1, 2019
gsyVideoPlayer-ex_so update ex_so Apr 12, 2020
gsyVideoPlayer-exo_player2 #2719 User-Agent May 13, 2020
gsyVideoPlayer-java release 7.1.4 May 14, 2020
gsyVideoPlayer-proxy_cache fix android Q storage Mar 26, 2020
gsyVideoPlayer-x86 调整框架,剔除exoplayer到外部依赖 Aug 21, 2018
gsyVideoPlayer-x86_64 调整框架,剔除exoplayer到外部依赖 Aug 21, 2018
gsyVideoPlayer 更新注释 Jun 3, 2020
img readme May 27, 2019
.gitignore add id to jcenter Nov 14, 2016
.travis.yml 6.0.3 Jan 15, 2019
LICENSE Create LICENSE Dec 19, 2017
README.md Update README.md Jun 3, 2020
bintray.gradle add jcenter Mar 13, 2017
build.gradle 6.0.3 Jan 15, 2019
debug.jks travis publish May 23, 2018
dependencies.gradle release 7.1.4 May 14, 2020
gradle.properties prepare release 7.1.4 May 14, 2020
gradlew release 7.1.1 Oct 12, 2019
gradlew.bat fix project Nov 11, 2016
issue_template.md readme Jan 10, 2020
module-lite-more.sh update Apr 10, 2020
module-lite.sh change .sh Mar 26, 2018
settings.gradle 修改module名称 Aug 21, 2018

README.md

基于IJKPlayer(兼容系统MediaPlayer与EXOPlayer2),实现了多功能的视频播放器。 (请仔细阅读下方各项说明,大多数问题可在下方找到解答)。

如果克隆太慢,可尝试从码云地址下载

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

Download Download Build Status

GitHub stars GitHub forks GitHub issues GitHub license

公众号 掘金 知乎 CSDN 简书
GSYTech 点我 点我 点我 点我

--------------Demo APK 下载地址---------------

一、使用依赖

7.0版本使用了anndroidx,support版本请看6.x.x,请查看:--- 版本更新说明 - 入口

1、JCenter 引入方法(推荐)

你可以选择下面三种的其中一种,在module下的build.gradle添加。

A、直接引入

//完整版引入
implementation 'com.shuyu:GSYVideoPlayer:7.1.4'

B、添加java和你想要的so支持:

implementation 'com.shuyu:gsyVideoPlayer-java:7.1.4'

//是否需要ExoPlayer模式
implementation 'com.shuyu:GSYVideoPlayer-exo2:7.1.4'

//根据你的需求ijk模式的so
implementation 'com.shuyu:gsyVideoPlayer-armv5:7.1.4'
implementation 'com.shuyu:gsyVideoPlayer-armv7a:7.1.4'
implementation 'com.shuyu:gsyVideoPlayer-arm64:7.1.4'
implementation 'com.shuyu:gsyVideoPlayer-x64:7.1.4'
implementation 'com.shuyu:gsyVideoPlayer-x86:7.1.4'

C、支持其他格式协议的(mpeg,rtsp, concat、crypto协议)

A、B普通版本支持263/264/265等,对于mpeg编码会有声音无画面情况。 C 引入的so支持mpeg编码和其他补充协议,但是so包相对变大。

implementation 'com.shuyu:gsyVideoPlayer-java:7.1.4'

//是否需要ExoPlayer模式
implementation 'com.shuyu:GSYVideoPlayer-exo2:7.1.4'

//更多ijk的编码支持
implementation 'com.shuyu:gsyVideoPlayer-ex_so:7.1.4'

代码中的全局切换支持(更多请参看下方文档和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;
/***
 * SCREEN_TYPE_CUSTOM 下自定义显示比例
 * @param screenScaleRatio  高宽比,如 16:9
 */
public static void setScreenScaleRatio(float screenScaleRatio)


//切换绘制模式
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;
    }
});

--- 更多依赖方式请点击 -

二、其他推荐

* QQ群,有兴趣的欢迎(平时吹水吐槽多,因为人数饱和,目前开启付费入群):174815284 。

* Flutter Github客户端React Native Github客户端Weex Github客户端原生 Kotlin Github客户端

* RxFFmpeg Android 的音视频编辑工具

* oarplayer Rtmp播放器,基于MediaCodec与srs-librtmp,不依赖ffmpeg

* RickText

* LazyRecyclerAdapter

三、文档Wiki

文档 传送门
使用说明 --- 简单使用,快速上手文档
建议阅读 --- 移动开发者必知的音视频基础知识
项目解析说明 --- 项目解析说明、包含项目架构和解析
接口文档入口 --- 使用说明、接口文档 - 入口
问题集锦入口 --- 问题集锦 - 入口(大部分你遇到的问题都在这里解决)
编码格式 --- IJK so文件配置格式说明
编译自定义SO --- IJKPlayer编译自定义SO - 入口
版本更新说明 --- 版本更新说明 - 入口

框架图

四、运行效果

  • 1、打开一个播放(旋转、镜像、填充)

  • 2、列表/详情模式(动画、旋转、小窗体)

  • 3、弹幕

  • 4、滤镜和GL动画

  • 6、背景铺满模糊播放

  • 7、进度条小窗口预览

五、近期版本

7.1.4 (2020-05-14)

  • fix #2719 support Exo User-Agent
  • fix #2559
  • update ex_so lib
  • fix proxy cache support Android Q
  • proxy cache skip ssl error
  • add ProxyCacheManager support DEFAULT_MAX_SIZE
  • add ProxyCacheManager FileNameGenerator support custom cache file name
  • add touchLongPress Api

7.1.3 (2020-03-19)

  • update exoplayer 2.11.3
  • fix #2588 setOverrideExtension 方法全屏失效问题
  • fix #2570 add OrientationOption 增加旋转灵敏度调节
  • add isShowDragProgressTextOnSeekBar 判断拖动进度条时,是否在 seekbar 开始部位显示拖动进度
  • exo 内核增加外挂字幕的支持
  • fix #2456 and update from 1869#issuecomment-569615314
  • fix #2489 优化网络监听
  • fix #2480 修复屏幕旋转问题

7.1.2(2019-12-02)

  • fix #2436 增加 exo 的 http timeout
ExoSourceManager

 public static void setHttpReadTimeout(int httpReadTimeout)
 
 public static void setHttpConnectTimeout(int httpConnectTimeout)

  • 优化视频尺寸显示计算
  • 增加 exo 支持 raw 文件播放
String url =  RawResourceDataSource.buildRawResourceUri(R.raw.test).toString();
  • 增加模拟下载共用缓存例子 DetailDownloadPlayer
  • 适配 android 10 的全屏
  • fix #2382、#2411、#2343、#2379、#2350、#2328
  • 增加设置自定义显示比例的支持
GSYVideoType.setScreenScaleRatio

7.1.1(2019-10-12)

  • fix #2244、#2252(resolveFullVideoShow 不执行情况)、#2279、#2280
  • fix #2303(去除 TimerTask)、#2306(某些机型退到后台返回不显示)
  • 增加 setNeedAutoAdaptation
    /**
     * 是否需要适配在竖屏横屏时,由于刘海屏或者打孔屏占据空间,导致标题显示被遮盖的问题
     *
     * @param needAutoAdaptation 默认false
     */
    public void setNeedAutoAdaptation(boolean needAutoAdaptation)

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());
            }
        }
    });

非 androidx 版本为 6.0.3 以下版本。更多兼容版本请查阅版本更新。

更多版本请查阅:版本更新说明

六、关于Issues

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

问题说明:

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

七、混淆

-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 tv.danmaku.ijk.** { *; }
-dontwarn tv.danmaku.ijk.**

-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);
}

温馨提示

如果克隆太慢,可尝试从码云地址下载

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

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

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

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

欢迎提出问题,谢谢。

依赖大小参考

建议使用ndk过滤,详细参考 参考第四条 : 4、NDK的so支持

非常感谢您的支持

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

GSY新书:《Flutter开发实战详解》上架啦

License

请参看IJKPlayer和AndroidVideoCache相关协议。
项目最开始是从jiecao过来的,改着改着直接重构了。
偶尔有一变量和方法名可能还有点jiaozi的影子,但是基本是一个新项目。
You can’t perform that action at this time.