GSYVideoPlayer 集成与全局配置指南多内核 Android 视频播放器的依赖引入、内核切换与能力矩阵全解析【免费下载链接】GSYVideoPlayerVideo players (IJKplayer, ExoPlayer, MediaPlayer), HTTPS, 16k page size, danmaku (bullet chat) support, external subtitles, support for filters, watermarks, and GIF screenshots, pre-roll and mid-roll ads, multiple simultaneous playback, basic seeking/dragging, volume and brightness adjustment, play-while-cache support项目地址: https://gitcode.com/GitHub_Trending/gs/GSYVideoPlayerGSYVideoPlayer 是支持 IJKPlayer、Media3EXOPlayer2、MediaPlayer、AliPlayer 四类播放内核的多功能 Android 视频播放器覆盖边播边缓存、弹幕、外挂字幕、滤镜、截图/GIF、广告、多路同时播放、小窗口与 DLNA 投屏等能力。本文以仓库根目录 README.md 与 README_CN.md 为主体骨架结合 doc/DEPENDENCIES.md、doc/USE.md 与核心源码系统讲解依赖托管方式、模块按需组合、全局代码切换、投屏与 Compose 接入、混淆配置及近期版本能力读完即可完成一次完整的工程接入与内核选型。一、项目概览能力矩阵与当前版本状态GSYVideoPlayer 以多内核架构为核心底层分别对接 [IJKPlayer]、Media3(EXOPlayer2)、系统 MediaPlayer 与阿里云 AliPlayer对外提供统一的播放器视图与全局配置入口。仓库当前通过 settings.gradle 组织十余个独立模块包括gsyVideoPlayer-java核心 Java 库、gsyVideoPlayer-ex_so增强 so、各 ABI 的 so 模块、gsyVideoPlayer-exo_player2、gsyVideoPlayer-aliplay、gsyVideoPlayer-cast投屏、gsyVideoPlayer-rtmp、gsyVideoPlayer-composeCompose 接入等发布版本为13.2.1。README 给出的官方能力矩阵继承自原文档逐项保留类型功能缓存边播边缓存使用 AndroidVideoCacheMedia3(ExoPlayer) 使用 SimpleCache。协议h263/4/5、Https、concat、rtsp、hls、rtmp、crypto、mpeg 等ijk 模式格式支持见 doc/DECODERS.md。滤镜简单滤镜马赛克、黑白、色彩过滤、高斯、模糊等 20 多种、GL 动画、水印、画面多重播放等。帧图视频第一帧、视频帧截图、播放器 UI 组合截图、视频生成 GIF。播放列表播放、列表连续播放、重力旋转与手动旋转、视频自身 rotation 属性、快播与慢播、网络加载速度显示。画面显示比例调整默认、16:9、4:3、填充播放时旋转画面角度0/90/180/270镜像旋转。内核IJKPlayer、Media3(EXOPlayer)、MediaPlayer、AliPlayer 切换支持自定义内核。布局全屏与非全屏两套布局切换、无任何操作控件的纯播放、弹幕功能、继承自定义任意布局。播放单例播放、多个同时播放、视频列表滑动自动播放、列表切换详情页无缝播放。窗口小窗口、多窗体下包括桌面的小窗口播放。广告片头广告、跳过广告支持、中间插入广告。字幕通用外挂字幕 OverlaySRT/WebVTT 可跨 IJK、Media3(EXOPlayer)、MediaPlayer 使用Media3 内嵌字幕可桥接到同一套 UI见 doc/SUBTITLE_CN.md。DashMedia3(exo2) 模式支持 dashDemo 支持 HLS master / DASH MPD 自适应清晰度轨道切换。Stream支持元数据播放。适配 16Kex_so 适配 16K Page Size。openssl目前 ex_so 的 arm64/x86_64 使用 openssl 1.1.1w。FFmpeg目前 ex_so 的 arm64/x86_64 使用 FFmpeg 4.3并支持 G711a(pcm_alaw)。投屏可选gsyvideoplayer-castDLNA/UPnP 模块基于 jUPnP 3.0.3核心只保留协议无关的CastCapability/CastProvider/CastSessionSPI不默认引入 Jetty见 doc/CAST_FEATURE_PLAN.md。更多暂停前后台切换不黑屏多 URL 清晰度切换Exo HLS/DASH 自适应清晰度无缝切换支持完成后保留最后一帧 Demo进度条 WebVTT 小窗口预览。自定义可自定义渲染层、管理层、播放层控制层、缓存层。其中 16K Page Size 与 FFmpeg 版本等细节在仓库中有直接落地证据gsyVideoPlayer-ex_so/src/main/jniLibs下按 arm64-v8a / armeabi / armeabi-v7a / x86 / x86_64 五套 ABI 提供libijkffmpeg.so、libijkplayer.so、libijksdl.so而16kpatch/目录保留了ndk_r22_16k_commit.patch、ndk_r22_ffmpeg_n4.3_ijk.patch等补丁印证了 ex_so 基于 NDK r22 与 FFmpeg 4.3 的 16K 页适配方案。二、依赖托管方式MavenCentral / GitHub Package / Jitpack 三选一仓库目前提供三种托管渠道README 明确指出其适用性与背景MavenCentral 自 11.0.0 起所有基类包均发布于此GitHub Package 自 9.1.0 起可用11.0.0 之前 GSYIjkJava 基础依赖仍托管在 jitpackJitpack IO 会继续发布但存在托管平台随机丢包问题参见 doc/DEPENDENCIES.md。因此推荐优先使用 MavenCentral。1. MavenCentral 引用推荐在项目根build.gradle的allprojects.repositories中添加allprojects { repositories { //... mavenCentral() maven { url https://maven.aliyun.com/repository/public } } }之后在 module 下的build.gradle中按需选择下文第三节的 A/B/C/D 任一组合。2. GitHub Package 依赖方式GitHub Package 需要 token 访问胜在稳定。仓库根build.gradle已支持从 Gradle 属性或环境变量读取凭据无需把 token 硬编码进源码# ~/.gradle/gradle.properties推荐本地使用 githubReadUser你的-github-账号 githubReadToken你的-classic-token-含-read:packages或在 CI 上使用环境变量export GITHUB_READ_USER你的-github-账号 export GITHUB_READ_TOKEN你的-classic-token-含-read:packages仓库内仍保留一对兜底凭据便于首次 clone 即可构建但它随时可能被撤销建议优先使用自己的 token。repositories 配置如下allprojects { repositories { maven { url https://maven.pkg.github.com/CarGuo/GSYVideoPlayer credentials { username your-github-name password your-classic-token-with-read:packages } } maven { url https://maven.aliyun.com/repository/public } mavenCentral() } }token 生成路径为 GitHub 右上角头像 → Settings → Developer Settings → Personal access tokens → tokens (classic) → Generate new token (classic)勾选read:packages权限过期时间建议选择永久。3. Jitpack 引入方法不推荐历史包可能出现随机丢包且不易补充仅作兜底allprojects { repositories { maven { url https://jitpack.io } maven { url https://maven.aliyun.com/repository/public } mavenCentral() } }三种方式的坐标前缀分别为io.github.carguo:MavenCentral、com.shuyu:GitHub Package、com.github.CarGuo.GSYVideoPlayer:Jitpack版本带v前缀完整对照详见 doc/DEPENDENCIES.md。三、四种依赖组合从完整包到按需裁剪无论使用哪种托管渠道module 下的build.gradle都可以选择以下四种组合之一以下以 MavenCentral 坐标为例。A. 直接引入完整版一个坐标即包含全部能力与默认内核// 完整版引入 implementation io.github.carguo:gsyvideoplayer:13.2.1 // 是否需要 AliPlayer 模式 implementation io.github.carguo:gsyvideoplayer-aliplay:13.2.1 // 是否需要 DLNA/UPnP 投屏可选真实 minSdk 26 implementation io.github.carguo:gsyvideoplayer-cast:13.2.1B. 添加 java 与按需 so 支持拆分为java核心库 各 ABI 独立 so 包可显著控制包体积implementation io.github.carguo:gsyvideoplayer-java:13.2.1 // 是否需要 ExoPlayer 模式 implementation io.github.carguo:gsyvideoplayer-exo2:13.2.1 // 可选直接依赖exo2 已经通过 api 传递 RTMP 模块 implementation io.github.carguo:gsyvideoplayer-rtmp:13.2.1 // 可选 DLNA/UPnP 投屏实现minSdk 26默认播放器不包含 Jetty implementation io.github.carguo:gsyvideoplayer-cast:13.2.1 // 是否需要 AliPlayer 模式 implementation io.github.carguo:gsyvideoplayer-aliplay:13.2.1 // 根据你的需求 ijk 模式的 so按 ABI 选择 implementation io.github.carguo:gsyvideoplayer-arm64:13.2.1 implementation io.github.carguo:gsyvideoplayer-armv7a:13.2.1 implementation io.github.carguo:gsyvideoplayer-armv5:13.2.1 implementation io.github.carguo:gsyvideoplayer-x86:13.2.1 implementation io.github.carguo:gsyvideoplayer-x64:13.2.1对应仓库内的 so 模块分别为gsyVideoPlayer-armv64arm64-v8a、gsyVideoPlayer-armv7aarmeabi-v7a、gsyVideoPlayer-armv5armeabi、gsyVideoPlayer-x86、gsyVideoPlayer-x86_64各模块的jniLibs目录结构与 README 描述一致。C. 支持其他格式协议ex_so含 16K Page SizeA、B 普通版本支持 263/264/265 等编码对于 mpeg 编码会出现有声音无画面的情况。C 引入的ex_so支持 mpeg 编码和补充协议mpeg、rtsp、concat、crypto并支持 16K Page Size代价是 so 包体积更大implementation io.github.carguo:gsyvideoplayer-java:13.2.1 // 是否需要 ExoPlayer 模式 implementation io.github.carguo:gsyvideoplayer-exo2:13.2.1 // 是否需要 AliPlayer 模式 implementation io.github.carguo:gsyvideoplayer-aliplay:13.2.1 // 更多 ijk 编码支持ex_so含 16K 适配 implementation io.github.carguo:gsyvideoplayer-ex_so:13.2.1普通 so 与 ex_so 的编码差异可直接查阅仓库根目录的编译配置普通版见 module-lite.sh增强版见 module-lite-more.sh格式支持细节见 doc/DECODERS.md。D. Jetpack Compose 支持可选gsyvideoplayer-compose模块自 v13.1.0 起随主版本发布可通过 Maven Central / GitHub Packages 引用也可在本仓库内开发时直接引用源码模块// Maven Central implementation io.github.carguo:gsyvideoplayer-compose:13.2.1 // 本地源码开发 implementation project(:gsyVideoPlayer-compose)gsyvideoplayer-compose依赖gsyvideoplayer-java如需 ExoPlayer / AliPlayer / 指定 IJK so仍需按上文方式额外引入对应模块。工具链方面该模块在 CI 上用 JDK 21 验证.github/workflows/*.yml中actions/setup-java的java-version: 21本地用 JDK 17 验证模块自身在 gsyVideoPlayer-compose/build.gradle 将sourceCompatibility / targetCompatibility / jvmTarget钉在 17因此只要本机 JDK 不低于 17即可跑通 Kotlin 2.0.21 AGP 8.6.1。详细接入说明见 doc/COMPOSE_USE.md能力缺口与推进路线图见 doc/COMPOSE_BACKLOG.md。四、全局切换内核、缓存、显示比例与渲染的代码配置README 给出了一套可在代码中全局生效的切换 API这些 API 在核心源码中均有直接实现支撑。1. 播放内核切换// EXOPlayer 内核支持格式更多 PlayerFactory.setPlayManager(Exo2PlayerManager.class); // 系统内核模式 PlayerFactory.setPlayManager(SystemPlayerManager.class); // ijk 内核默认模式 PlayerFactory.setPlayManager(IjkPlayerManager.class); // aliplay 内核 PlayerFactory.setPlayManager(AliPlayerManager.class);以 gsyVideoPlayer-java/src/main/java/com/shuyu/gsyvideoplayer/player/PlayerFactory.java 为例其内部持有一个Class? extends IPlayerManager静态字段setPlayManager负责写入getPlayManager在未设置时默认回退到IjkPlayerManager.class并通过反射newInstance()产出内核实例——这就是ijk 为默认内核与可自定义内核的源码依据。所有内核实现统一实现IPlayerManager接口接口定义于 gsyVideoPlayer-base/src/main/java/com/shuyu/gsyvideoplayer/player/IPlayerManager.java自定义内核只需实现该接口后通过PlayerFactory注入。2. 缓存模式切换// exo 缓存模式支持 m3u8只支持 exo需在 Exo 缓存创建前设置默认 512 MB ExoSourceManager.setCacheMaxSize(1024L * 1024L * 1024L); CacheFactory.setCacheManager(ExoPlayerCacheManager.class); // 代理缓存模式支持所有模式不支持 m3u8 等默认 CacheFactory.setCacheManager(ProxyCacheManager.class);两种模式对应 README 功能矩阵中的缓存能力ExoPlayer 使用 Media3 的 SimpleCacheExoPlayerCacheManager其余内核走基于 AndroidVideoCache 的代理缓存ProxyCacheManager后者对应仓库中的gsyVideoPlayer-proxy_cache模块com.danikula.videocache包下的HttpProxyCacheServer、ProxyCache等类。3. 显示比例与渲染模式切换// 切换显示比例 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 下自定义显示比例screenScaleRatio 为高宽比如 16:9 GSYVideoType.setScreenScaleRatio(float screenScaleRatio); // 切换绘制模式 GSYVideoType.setRenderType(GSYVideoType.SUFRACE); GSYVideoType.setRenderType(GSYVideoType.GLSURFACE); GSYVideoType.setRenderType(GSYVideoType.TEXTURE);这些常量在 gsyVideoPlayer-java/src/main/java/com/shuyu/gsyvideoplayer/utils/GSYVideoType.java 中有完整定义除 README 列出的值外源码还额外定义了SCREEN_TYPE_18_9 618:9 全面屏比例与SCREEN_TYPE_CUSTOM -5配合setScreenScaleRatio使用并声明渲染类型常量GLSURFACE 2、SURFACE 1、TEXTURE 0TextureView 为默认。同一文件还提供了硬解码开关enableMediaCodec()/disableMediaCodec()、智能硬解码enableSmartMediaCodec()/disableSmartMediaCodec()IJK 硬解明确失败时自动软解重建与enableMediaCodecTexture()等播放前调用即可生效——智能降级能力对应 v13.1.0 版本说明中的智能 MediaCodec 硬解失败自动降级软解 Demo。4. ijk 日志与 Exo 自定义 MediaSource// 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; } });getMediaSource的参数含义为dataSource播放链接、preview是否携带 header默认有 header 时自动为 true、cacheEnable是否需要缓存、isLooping是否循环、cacheDir自定义缓存目录。该监听器为 Exo 模式下的 HLS 多码率、DASH MPD 等自定义 MediaSource 场景提供了扩展点。五、投屏DLNA/UPnP与 Compose 接入1. 投屏模块的模块化演进自 v13.2.1 起协议无关的CastCapability/CastProvider/CastSessionSPI 保留在gsyvideoplayer-java而 jUPnP 与 Jetty 及默认 DLNA 实现JupnpDlnaProvider/JupnpDlnaSession迁入独立发布的gsyvideoplayer-cast模块。这意味着不投屏就不必引入 cast 模块默认播放器依赖不再传递 jUPnP/Jetty核心 SPI 仍可用于接入其他投屏 Provider。gsyvideoplayer-cast的 POM 会统一传递 jUPnP 3.0.3 与兼容版本的 Jetty无需手动声明。需要特别关注的集成约束源自 doc/DEPENDENCIES.md最低版本默认gsyvideoplayer受 Media3 1.10.1 约束最低 API 23显式添加投屏模块后Jetty 9.4.53 将真实下限提高到 API 26。网络权限接收端和发送端需要INTERNET、ACCESS_WIFI_STATE、CHANGE_WIFI_MULTICAST_STATE、ACCESS_NETWORK_STATE且需在同一 Wi-Fi 局域网内 SSDP 才能发现设备。Android 独立进程Demo 的 Loopback Receiver 运行在独立:dlna进程避免 jUPnP static 状态污染主进程自集成可参考 app/src/main/java/com/example/gsyvideoplayer/cast/DevReceiverService.java。Android 13内部广播需加RECEIVER_NOT_EXPORTED参考 app/src/main/java/com/example/gsyvideoplayer/cast/CastReceiverManager.java。悬浮窗接收端需要SYSTEM_ALERT_WINDOW权限正式集成建议改用 Activity 或 Surface 呈现。投屏能力细节见 doc/CAST_FEATURE_PLAN.md 与 doc/CAST_TEST_PLAYBOOK.mdDemo 参考 app/src/main/java/com/example/gsyvideoplayer/CastDemoActivity.java 与 app/src/main/java/com/example/gsyvideoplayer/video/SampleCastControlVideo.java。投屏典型调用链来自 doc/USE.mdCastMediaInfo携带不可变startPositionMs字段setMediaItem内部按SetAVTransportURI → Play → Seek(localPositionMs)的顺序执行保证本地播到 40% → 投屏后从 40% 继续断开后本地播放器在最近远端位置恢复一次。2. Compose 的两种接入模式gsyvideoplayer-compose模块在保留全部内核与 UI 能力的前提下提供两种接入方式Wrapper 模式一行GSYVideoPlayerView { ... }将StandardGSYVideoPlayer嵌入 Compose 屏自动桥接 Lifecycle 与 release可选的setUpKey: Any?参数实现幂等——仅当数据标识变化时才重跑setUp。Native 模式GSYComposeHostPlayer GSYPlayerController暴露GSYPlayerSnapshot状态流外加events: SharedFlowGSYPlayerEvent一次性边沿事件Prepared/AutoComplete/Error控制层可完全用 Compose 自绘画面与多内核仍走原 GSY 渲染管线。旧的setOnError / setOnComplete / setOnPrepared仍可用但已标记Deprecated推荐迁移到 Flow。App 模块的 Compose Demo 提供 24 个可运行 Activity覆盖 Wrapper 基础、Native 详情/列表/多窗口/自动连播/切流/无缝切换以及滤镜、缓存下载、前贴片广告、字幕、自绘弹幕、EXO 多源、竖屏短视频、悬浮窗、WebView 混合布局、纯音频、MediaCodec 硬解切换等场景其中DemoSamples.kt是共享的测试 URL 数据对象不是可运行 Activity。六、字幕、WebVTT 预览与其他近期能力1. 统一外挂字幕v13.0.0 起提供跨 IJK、System、Media3 的统一外挂字幕能力支持 SRT/WebVTT 两种格式Media3 内嵌字幕可桥接到同一套 UI。核心实现在gsyVideoPlayer-java的subtitle包GSYSubtitleController字幕控制器、GSYSubtitleParserFactory解析器工厂、GSYSrtSubtitleParser与GSYWebVttSubtitleParser两种格式解析器、GSYSubtitleView渲染视图并配套GSYSubtitleLoader、GSYSubtitleCue等基础类详见 doc/SUBTITLE_CN.md。2. WebVTT 进度条小窗口预览当前 Demo 使用 WebVTT 缩略图轨道实现进度条预览不再对原视频做客户端批量抽帧。VTT 可以指向独立图片也可以指向雪碧图坐标格式如下WEBVTT 00:00:00.000 -- 00:00:01.000 160p-00001.jpg#xywh0,0,284,160库层提供GSYVideoPreviewVttParserVTT 解析、GSYVideoPreviewProvider预览帧提供、GSYVideoPreviewFrame帧模型业务层只需把 VTT 解析成 provider再按拖动进度取出对应图片和裁剪区域Demo 参考PreViewGSYVideoPlayer#setPreviewVttUrl(String previewVttUrl)对应文件为 app/src/main/java/com/example/gsyvideoplayer/video/PreViewGSYVideoPlayer.java相关 API 位于gsyVideoPlayer-java的preview包。3. 其他常用 API完成保留最后一帧KeepLastFrameVideo#setKeepLastFrameWhenComplete(boolean)详见 doc/KEEP_LAST_FRAME.md。播放器 UI 组合截图player.taskShotPicWithView(listener)与player.saveFrameWithView(file, listener)。Exo 自适应清晰度GSYExoVideoManager.instance().getVideoTrackInfoList()获取轨道列表clearVideoTrackOverride()清除覆盖setVideoTrackOverride(groupIndex, trackIndex)指定轨道。无缝切换多 URL 清晰度切换 Demo适合多个独立 URL 的切换场景Exo HLS master / DASH MPD 自适应清晰度适合服务端提供标准多码率流的场景。近期新增与调整的播放能力汇总见 doc/RECENT_FEATURES.md。七、快速上手三种使用模式与生命周期要点开始前播放器所在 Activity 需要在 AndroidManifest.xml 中配置 configChanges避免旋转、分屏等配置变化导致 Activity 重建activity android:name.xxxxx android:configChangeskeyboard|keyboardHidden|orientation|screenSize|screenLayout|smallestScreenSize|uiMode android:screenOrientationportrait /1. 直接播放参考 app/src/main/java/com/example/gsyvideoplayer/simple/SimplePlayer.java布局中放置StandardGSYVideoPlayer调用setUp(url, cacheWithPlay, title)即可适合单个详情页或落地页视频。2. 列表播放两种模式模式一直接在列表 item 布局中嵌入播放控件SimpleListVideoActivityMode1通过setUpLazy(url, cacheWithPlay, null, null, title)懒加载配置配合setPlayTag(TAG)setPlayPosition(position)防止列表复用错位再在滚动监听中判断当前项滑出可视区后调用GSYVideoManager.releaseAllVideos()释放实现类似信息流的效果。模式二使用GSYVideoHelperGSYVideoHelperBuilder辅助类SimpleListVideoActivityMode2item 仅放封面图与播放按钮点击后addVideoPlayer(position, imageView, TAG, container, playerBtn)将播放器叠加到指定容器滑出可视区时自动收缩为小窗口播放showSmallVideo是小窗口 列表自动播放的推荐形态。3. 详情页播放builder 模式继承GSYBaseActivityDetailStandardGSYVideoPlayer后重载三个方法即可完成配置参考 app/src/main/java/com/example/gsyvideoplayer/simple/SimpleDetailActivityMode1.javaOverride public StandardGSYVideoPlayer getGSYVideoPlayer() { return detailPlayer; } Override public GSYVideoOptionBuilder getGSYVideoOptionBuilder() { ImageView imageView new ImageView(this); loadCover(imageView, url); return new GSYVideoOptionBuilder() .setThumbImageView(imageView) // 内置封面 .setUrl(url) .setCacheWithPlay(true) // 边播边缓存 .setVideoTitle( ) .setIsTouchWiget(true) // 触摸手势亮度/音量/进度 .setRotateViewAuto(false) // 重力旋转 .setLockLand(false) // 是否锁定横屏 .setShowFullAnimation(false) // 全屏动画 .setNeedLockFull(true) // 全屏锁定按钮 .setSeekRatio(1); // 滑动进度比例 } Override public boolean getDetailOrientationRotateAuto() { return true; // 是否启动旋转横屏 }也可不用 builder直接在onCreate中通过OrientationUtils配合GSYVideoOptionBuilder手动装配SimpleDetailActivityMode2OrientationUtils负责外部旋转辅助onPrepared回调后再放开旋转退出全屏时调用orientationUtils.backToProtVideo()归位。4. 生命周期约定无论哪种模式都建议按如下约定处理生命周期onPause中暂停播放GSYVideoManager.onPause()或getCurrentPlayer().onVideoPause()、onResume恢复、onBackPressed先处理全屏返回GSYVideoManager.backFromWindowFull(this)、onDestroy释放GSYVideoManager.releaseAllVideos()或getCurrentPlayer().release()。GSYVideoOptionBuilder的完整 API 定义于 gsyVideoPlayer-java/src/main/java/com/shuyu/gsyvideoplayer/builder/GSYVideoOptionBuilder.java播放器基类方法如setShowFullAnimation、setRotateViewAuto、setLockLand、setAutoFullWithSize等位于 gsyVideoPlayer-java/src/main/java/com/shuyu/gsyvideoplayer/video/base/GSYBaseVideoPlayer.java 与 gsyVideoPlayer-java/src/main/java/com/shuyu/gsyvideoplayer/video/base/GSYVideoControlView.java。八、混淆配置R8/ProGuard 开启时需要保留 GSY 播放器、ijk、Media3 与 AliPlayer 相关类以下规则继承自 README 原文-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 init(android.content.Context); public init(android.content.Context, java.lang.Boolean); public init(android.content.Context, android.util.AttributeSet); public init(android.content.Context, android.util.AttributeSet, int); }若使用阿里云播放器AliPlayer还需额外增加-keep class com.alivc.**{*;} -keep class com.aliyun.**{*;} -keep class com.cicada.**{*;} -dontwarn com.alivc.** -dontwarn com.aliyun.** -dontwarn com.cicada.**仓库对混淆的落地参考还包括 app/proguard-rules.pro 与 gsyVideoPlayer-cast/consumer-rules.procast 模块自带反射安全相关 R8 consumer rules以及 doc/R8_ANALYZER_REPORT.md 的专项分析。九、版本演进要点v11.0.0 → v13.2.1README 的近期版本记录集中体现了项目近一年的演进主线v13.2.12026-08-19将JupnpDlnaProvider、JupnpDlnaSession、jUPnP 与 Jetty 迁入独立发布的gsyvideoplayer-cast模块默认播放器不再传递 jUPnP/Jetty真实最低版本保持 API 23只有投屏模块要求 API 26修复 DLNA 起播阶段短暂STOPPED被误判结束的问题。v13.2.02026-08-19新增独立发布的gsyvideoplayer-rtmp模块NDK r22b 重建四 ABI 16K 兼容 sogsyvideoplayer-exo2通过 api 自动传递AliPlayer 升级至首个官方支持 16K Page Size 的 7.5.0新增 DLNA/UPnP 投屏一等公民能力与单机 Loopback Receiver 自测方案。v13.1.02026-06-30发布gsyvideoplayer-composeartifact新增 Compose Wrapper/Native 双模式与 24 个可运行 Demo Activity新增智能 MediaCodec 硬解失败自动降级软解 Demo。v13.0.02026-05-07新增 Exo HLS master / DASH MPD 自适应清晰度 Demo新增跨 IJK、System、Media3 的 SRT/WebVTT 通用外挂字幕新增 WebVTT 进度条预览、保留最后一帧、播放器截图Exo cache 目录被锁时回退到非缓存路径。v12.xMedia3 升级至 1.10.0/1.9.2ex_so 更新 FFmpeg 4.3、x86_64 支持 16K Page Size、armv7a 更新 FFmpeg n4.3minSdk 提升至 23。v11.x底层依赖更新迁移至 Media3 1.8.0MavenCentral 全量发布基类包。版本更新全量说明见 doc/UPDATE_VERSION.md发布自动化流程见 MAVEN_CENTRAL_AUTOMATION.md。十、文档导航与进一步阅读README 的文档 Wiki 汇总了全部官方资料入口均可在仓库doc/目录下直接阅读文档说明doc/USE.md简单使用、快速上手文档doc/GSYVIDEO_PLAYER_PROJECT_INFO.md项目解析说明含项目架构与分析doc/QUESTION.md问题集锦大部分常见问题都在此处解决doc/DECODERS.mdIJK so 文件配置格式说明doc/BUILD_SO.mdIJKPlayer 编译自定义 SO 入口doc/UPDATE_VERSION.md版本更新说明doc/CAST_FEATURE_PLAN.md投屏能力目标与协议架构doc/COMPOSE_USE.mdCompose 接入说明doc/SUBTITLE_CN.md外挂字幕能力说明doc/KEEP_LAST_FRAME.md保留最后一帧 Demo 说明doc/RECENT_FEATURES.md近期播放能力说明项目整体框架与模块划分如下框架图来自仓库 img/StructureChart2.jpg运行效果示例背景铺满模糊播放来自 img/99.png其余运行效果图旋转/镜像/填充、列表/详情模式、弹幕、滤镜与 GL 动画、进度条小窗口预览分别见 img/11.gif、img/22.gif、img/33.gif、img/44.gif、img/55.gif、img/09.gif、img/07.gif。若需本地构建与调试可通过git clone获取当前仓库后使用仓库根目录的 gradlew 直接构建app模块运行 Demo。【免费下载链接】GSYVideoPlayerVideo players (IJKplayer, ExoPlayer, MediaPlayer), HTTPS, 16k page size, danmaku (bullet chat) support, external subtitles, support for filters, watermarks, and GIF screenshots, pre-roll and mid-roll ads, multiple simultaneous playback, basic seeking/dragging, volume and brightness adjustment, play-while-cache support项目地址: https://gitcode.com/GitHub_Trending/gs/GSYVideoPlayer创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
