一步到位的 Android 视频播放:GSYVideoPlayer 快速上手指南

发布时间:2026/11/6 1:43:46

一步到位的 Android 视频播放:GSYVideoPlayer 快速上手指南 一步到位的 Android 视频播放GSYVideoPlayer 快速上手指南【免费下载链接】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在 Android 应用里做视频播放你要同时应付内核选型、边播边缓存、全屏旋转、列表自动播放一堆事情。GSYVideoPlayer 把 IJKPlayer、ExoPlayerMedia3、MediaPlayer 统一封装到 UI 和 Manager 两层之下弹幕、外挂字幕、滤镜、投屏这些能力也一并内置。目标是让开发者只管页面逻辑、不管内核差异适合任何要在 App 里认真做视频播放的场景。项目全景一张图看懂设计GSYVideoPlayer 把播放链路拆成几层每层都可以独立替换。最上面是 UI 层GSYVideoPlayer继承GSYBaseVideoPlayer处理大小屏切换业务往下依次叠GSYVideoControlView控制按钮、GSYVideoView再往下是渲染层TextureView/SurfaceView/GLSurfaceView三选一。UI 之下是播放内核层IjkMediaPlayer、ExoPlayer2、MediaPlayer都实现同一个IPlayerManager接口本地缓存同样有ICacheManager接口默认ProxyCacheManagerExo 场景换ExoPlayerCacheManager。工厂加接口内核为什么能热插拔这个项目有个挺巧的设计业务代码从不直接new内核一律从PlayerFactory、CacheFactory拿对象具体实现按注册的类在运行时反射实例化。所以换内核只是一行全局设置页面代码一行不用改。想接自己的内核实现IPlayerManager注册进去就行——分层的价值就在这里。五分钟跑起来环境准备Maven Central 已经发布了整包依赖就一行allprojects { repositories { mavenCentral() } } // 模块 dependencies 里引入完整版 dependencies { implementation io.github.carguo:gsyvideoplayer:14.0.0 }想控制包体积也可以拆成gsyvideoplayer-java加gsyvideoplayer-arm64这类 so 模块按需组合别给同一 ABI 同时引入两套 native 库。另外播放页的 Activity 要在 manifest 里声明configChangesorientation|screenSize等否则旋转全屏时页面被系统重建播放状态就丢了。核心代码布局里放一个标准控件全类名com.shuyu.gsyvideoplayer.video.StandardGSYVideoPlayer宽度match_parent高度自定。Activity 里StandardGSYVideoPlayer videoPlayer findViewById(R.id.video_player); videoPlayer.setUp(videoUrl, true, 测试视频); // 设置封面图 ImageView cover new ImageView(this); cover.setImageResource(R.mipmap.xxx1); videoPlayer.setThumbImageView(cover); videoPlayer.startPlayLogic(); // 开始播放 // onPause 调 onVideoPause()onResume 调 onVideoResume() // onDestroy 调 GSYVideoManager.releaseAllVideos()setUp(url, cacheWithPlay, title)第二个参数就是是否边播边缓存到这里一条可播放的视频已经跑通了。验证效果仓库里app模块是个几十种场景的 Demo先跑SimplePlayer最直接一个播放器、封面、标题、全屏按钮和全部控制条都开箱即用。更完整的清单可以看 doc/USE.md直接播放、列表、详情页三种入口各给了模式一/模式二两套写法。视频播放核心能力拆解三大播放内核切换这是 GSYVideoPlayer 最大的卖点IJK 基于 FFmpeg 兼容性最好当前 n5.1.10Media3 自适应码率和 DASH 做得好系统内核最稳定。切换内核是一行全局设置PlayerFactory.setPlayManager(Exo2PlayerManager.class); // Media3 内核 PlayerFactory.setPlayManager(SystemPlayerManager.class); // 系统 MediaPlayer有阿里播放器的话还能注册AliPlayerManager。设置之后所有setUp都走新内核同一套业务代码不用动。边播边缓存两套实现二选一网络视频每次重新拉流太浪费。项目给两条缓存路径都走CacheFactory切换// 代理缓存所有内核通用但不支持 m3u8 CacheFactory.setCacheManager(ProxyCacheManager.class); // Exo 缓存支持 m3u8需在创建缓存前设置上限默认 512MB ExoSourceManager.setCacheMaxSize(1024L * 1024L * 1024L); CacheFactory.setCacheManager(ExoPlayerCacheManager.class);两者共享preloadUrl、clearCache、getCacheFile这套接口换成自己实现的缓存管理器业务代码同样不用动。GL 渲染滤镜、LUT 与美颜默认渲染是TextureView做滤镜特效时切到GLSurfaceView就能挂自己的 shader// 创建渲染 View 前切到 GL 渲染 GSYVideoType.setRenderType(GSYVideoType.GLSURFACE); GSYVideoGLViewMultiPassRender render new GSYVideoGLViewMultiPassRender(); render.setMultiPassEffect(new GaussianBlurMultiPassEffect(6.0f)); player.setCustomGLRenderer(render);LUT 调色、美颜、Glitch、CRT 这类单 pass 效果走setEffectFilter仓库还自带lut/cyberpunk.png等 LUT 素材完整清单见 doc/RECENT_FEATURES.md。外挂字幕也不挑内核——SRT/WebVTT 由 UI 层统一解析渲染IJK、Exo、系统内核下位置行为一致。真实场景怎么用信息流列表视频自动播放信息流页面每个 item 一个小播放区滑进来自动播、滑走就释放。关键是给每个 player 打上setPlayTag加setPlayPosition的身份标记再在列表滚动回调里判断是否滑出可视区videoList.setOnScrollListener(new OnScrollListener() { Override public void onScroll(AbsListView view, int first, int count, int total) { int lastVisibleItem first count; // 正在播放的视频滑出屏幕就释放 int pos GSYVideoManager.instance().getPlayPosition(); if (pos 0 (pos first || pos lastVisibleItem)) { GSYVideoManager.releaseAllVideos(); adapter.notifyDataSetChanged(); } } });如果还想在滑出屏幕后用小窗继续播用GSYVideoHelper托管播放器即可对应 Demo 是SimpleListVideoActivityMode2。详情页全屏与沉浸背景详情页标配两件事全屏动画和沉浸式模糊背景。全屏内置在控件里startWindowFullscreen会反射复刻出全屏播放器不用自己管理两个实例OrientationUtils负责横竖屏旋转返回键回竖屏也是现成的。这里有个隐藏的好用点仓库内置的背景模糊填充播放Demo把当前帧放大填充背景再加模糊竖屏详情页的观感一下就不一样了。✨详情页的标准写法是 Activity 继承GSYBaseActivityDetail参数全走GSYVideoOptionBuilder链式配置封面、URL、setCacheWithPlay等生命周期和全屏回调都在基类收口了。DLNA 投屏到电视需要做投屏到电视时加上可选模块gsyvideoplayer-cast真实 minSdk 为 26核心库保持协议无关只暴露CastCapability/CastProvider/CastSession这套 SPI。连上设备后SetAVTransportURI → Play → Seek链路会把本地当前进度带过去断开时本地从远端最后位置恢复播放。Demo 自带 Loopback Receiver没有真电视也能端到端自测。避坑与调优混淆后 ClassNotFoundException→GSYBaseVideoPlayer靠反射复刻全屏实例PlayerFactory用Class.newInstance实例化内核R8 会把它们优化掉 → 按 README 加 keep 规则ijk 包整体保留播放器类保留(Context[, Boolean])构造器IPlayerManager/ICacheManager实现类保留无参构造。so 重复打包→ex_so已包含 arm64-v8a / armeabi-v7a / x86_64 三套完整库再叠加gsyvideoplayer-arm64等独立模块同一 so 进包两份体积翻倍 →ex_so和独立 ABI 模块二选一别混引。m3u8 开缓存后一直转圈→ 代理缓存ProxyCacheManager不支持 m3u8这是代理方案本身的限制 → m3u8 场景换 Exo 缓存ExoPlayerCacheManager且setCacheMaxSize要在缓存创建前调用。旋转全屏后播放中断或黑屏→ manifest 没写configChanges旋转时系统重建了 Activity → 播放页补齐keyboard|keyboardHidden|orientation|screenSize|screenLayout|smallestScreenSize|uiMode需要自控旋转再配合onConfigurationChanged处理。IJK 日志刷屏→ IJK 模式下 native 层日志极吵release 包里 App 自己的日志全被淹没 →IjkPlayerManager.setLogLevel(IjkMediaPlayer.IJK_LOG_SILENT)直接静音调试期再按需放开。写在最后GSYVideoPlayer 解决的是内核可换、接口不变这件事缓存、内核、渲染、UI 四层各自可替换业务侧只关心页面逻辑。边播边缓存、内核切换、全屏动画、DLNA 投屏都是现成的列表和详情页各给了两种成熟写法。如果准备在 Android 上做视频业务先去仓库的app模块跑一遍 Demo那是最好的教程遇到问题先翻 doc/QUESTION.mdFAQ 基本都有答案再提 Issue 时带上 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),仅供参考
延伸阅读

更多相关文章

2026/11/6 1:43:46

Java中如何校验非法字符

校验名称或规格时,核心思路是用正则表达式匹配“非法字符”,只要匹配到就判定不通过。下面直接给你可用的写法。 ✅ 正则校验:不允许出现逗号、换行、回车、空格 // 校验字符串是否包含非法字符(逗号、换行、回车、空格&#xff0…

2026/11/6 1:48:49

轻负载型领航快换盘:轻量化设计,精密自动化产线的柔性换具方案

精密产线柔性升级,中小机器人末端亟待轻量化精密自动化产线正向小型化、多品种柔性生产迭代。协作机器人与中小型六轴机器人末端负载余量有限,制约精密工位节拍与柔性。领航中小型快换盘以轻量化本体为核心,兼顾承载、精度、安全,…

2026/11/6 1:48:49

别只堆 MCP:用高星 Agent Skills 拼一条「研究→交付」闭环

别只堆 MCP:用高星 Agent Skills 拼一条「研究→交付」闭环 周末手又痒想折腾 Agent 时,最容易做的两件事是:再装一堆 MCP,或者再下一堆「神级提示词」。过两周你会发现,上下文被工具 schema 吃光,模型开始…

2026/11/5 15:39:06

面向复杂光照与角度的宠物面部识别鲁棒性增强策略

在智慧养宠时代,基于视觉的宠物身份识别技术正逐步从实验室走向家庭应用。然而,与配合度高的人类不同,宠物是典型的“非合作生物识别对象”——它们不会主动配合摄像头调整姿态,更无法控制光照环境。实际应用中,我们常…

2026/11/4 21:04:25

SSM电子书店源码全解析:结构、原理、部署与排错实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/11/6 1:03:39

MCU晶振电路设计全解析:从负载电容计算到PCB布局调试

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/11/5 15:39:06

面向复杂光照与角度的宠物面部识别鲁棒性增强策略

在智慧养宠时代,基于视觉的宠物身份识别技术正逐步从实验室走向家庭应用。然而,与配合度高的人类不同,宠物是典型的“非合作生物识别对象”——它们不会主动配合摄像头调整姿态,更无法控制光照环境。实际应用中,我们常…

2026/11/4 21:04:25

SSM电子书店源码全解析:结构、原理、部署与排错实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

还想了解更多?直接咨询顾问

免费诊断 + 免费方案 + 透明报价。

全国咨询热线400-8866-253
免费获取方案
☎咨询二维码 ☎ ↑