新闻详情

新闻详情

首页 / 资讯中心 / 详情

GSYVideoPlayer 外挂字幕快速接入:3 行代码让 SRT/WebVTT 字幕通吃 IJK、Exo 与 System 三大内核

发布时间:2026/9/29 13:46:36来源:尧图网络
GSYVideoPlayer 外挂字幕快速接入:3 行代码让 SRT/WebVTT 字幕通吃 IJK、Exo 与 System 三大内核
GSYVideoPlayer 外挂字幕快速接入3 行代码让 SRT/WebVTT 字幕通吃 IJK、Exo 与 System 三大内核【免费下载链接】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 是一款支持 IJK、Exo、System 三种内核的 Android 视频播放器它的外挂字幕能力挂在播放器 UI 基类上与内核完全解耦你在任意页面加三行代码就能挂上 SRT、WebVTT 字幕且字幕加载失败不会连累视频播放。读完本文你能用 3 行代码完成最小接入、看懂字幕读取 → 解析 → 查询 → 渲染上屏的完整链路并知道每个失败点系统如何兜底。一条字幕上屏要经过哪条链路结论先行字幕从文件到屏幕走读取 → 解析 → 查询 → 渲染四段固定链路加载与解析发生在后台查询与渲染发生在 UI 层内核只负责报位置。为什么能做。GSY 把播放内核收敛到IPlayerManager之后内核只干一件事吐出当前播放位置。UI 基类GSYVideoControlView上独立持有GSYSubtitleView本质是一个 TextView和GSYSubtitleController字幕系统整体挂在这两个对象上换内核时它们原样保留。具体怎么实现。全部代码集中在gsyVideoPlayer-java模块的subtitle目录每个类只管一件事GSYSubtitleSource描述一个字幕源GSYSubtitleLoader后台读文件GSYSubtitleParserFactory按类型产出解析器GSYSubtitleProvider回答此刻该显示什么GSYSubtitleView把文本画到画面。最小接入示例3 行代码上屏✅ 接入只有三步声明一个字幕源、绑定播放器、运行中按需开关。url必填其余可选不显式传mimeType时按后缀推断——.vtt/.webvtt走 WebVTT其余一律按 SRT 解析。GSYSubtitleSource source new GSYSubtitleSource.Builder(subtitleUrl) .setId(zh-main) // 稳定的业务 id切换字幕时靠它 .setDefault(true) // 多源接入时自动选中这条 .build(); player.setSubtitleSource(source); player.setSubtitleEnabled(true); // 只控制显示不打断 prepare/play运行中开关字幕是setSubtitleEnabled(bool)它只清空显示层不影响视频播放状态。数据流逐段拆解四环节各自的失败点读取GSYSubtitleLoader用后台单线程把字幕源读成字符串支持http/https15 秒超时、可带自定义请求头、file与本地路径、以及android.resource等任意 ContentResolver 地址字符集默认 UTF-8。失败点网络超时、404、文件不存在。解析GSYSubtitleParserFactory按 mimeType 选解析器产出按时间排好序的GSYSubtitleCue列表。失败点格式错误、解析结果为空。查询进度条每次刷新播放期间约每秒多次都会触发update(currentTime)把全局偏移与单条偏移加进当前毫秒数findText()取出覆盖该时刻的全部 cue 换行拼接拖动进度后refreshSubtitleAfterSeek立即重查字幕与视频不错位。渲染GSYSubtitleView把文本画在播放器画面上。失败点回到封面时clearSubtitleOnStop先清空视图避免最后一条字幕残留在封面上。多字幕切换、样式与时间偏移怎么配多源接入一次传整个列表播放器自动选中带default标记的那条。给每条源设稳定的idlanguage只表达语言label只用于界面展示切换传id最稳妥。ListGSYSubtitleSource list new ArrayList(); list.add(new GSYSubtitleSource.Builder(zhUrl) .setId(zh).setDefault(true).build()); list.add(new GSYSubtitleSource.Builder(enUrl) .setId(en).build()); player.setSubtitleSources(list); player.selectSubtitle(en); // 传 id 即可也兼容 language/label/url样式用GSYSubtitleStyle描述默认白色 16sp、黑色阴影、底部居中。setBottomMarginDp与setPosition指定重力加边距可把字幕挪到顶部可以并存GSYSubtitleStyle style new GSYSubtitleStyle.Builder() .setTextSizeSp(18) .setBottomMarginDp(64) // 距底边距离 .build(); player.setSubtitleStyle(style); player.setSubtitleOffsetMs(500); // 全局整体提前 0.5 秒时间偏移有两层setSubtitleOffsetMs是全局偏移字幕源上的setOffsetMs是单条偏移两者相加后生效适合整体校正加某一条单独校正的场景。失败兜底与内嵌字幕共存的坑⚠️ 最容易踩的两个坑加载失败会不会崩、Media3 内嵌字幕会不会打架。加载失败不影响播放。加载、网络、解析失败或解析为空时GSYSubtitleController只清空字幕显示并打一条 warning不抛异常也不影响视频的prepare/play。传入 404 或格式错误的地址预期结果就是无字幕 继续播放。它还为每次加载维护一个loadVersion版本号并丢弃过期回调快速切换字幕源时不会出现旧结果盖住新结果。Media3 内嵌字幕共用同一 overlay。走 Exo/Media3 内核时内嵌字幕的CueGroup会桥接到同一套字幕 overlay规则是已选中外挂字幕时外挂优先内嵌 cue 不覆盖外挂加载失败或解析为空时自动放行内嵌 cue不会用失败的外挂源压住 Media3 内嵌字幕进全屏、切小窗、退出全屏时字幕配置通过snapshot/restore原样复制切换后状态不丢。延伸资源完整设计与回归清单doc/SUBTITLE_CN.md覆盖本地 SRT、本地 VTT、网络 SRT 三种源切换、全屏跟随与异常场景。可运行示例IJK 通用字幕页 SubtitleDetailPlayer.javaExo/Media3 场景 GSYExoSubTitleDetailPlayer.java。离线字幕样例demo_subtitle.srt 与 demo_subtitle_vtt.vtt可无网络验证 SRT 与 WebVTT 解析。字幕子系统源码入口subtitle/。改动字幕相关代码后建议至少跑./gradlew :gsyVideoPlayer-java:testDebugUnitTest :app:assembleDebug再真机进入自定义EXO支持字幕和通用字幕非Exo两个页面手动验证。【免费下载链接】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),仅供参考
网站建设高端定制企业官网
RELATED

相关资讯

更多精彩内容,欢迎继续阅读

较早相关资讯

最新相关资讯

类型安全本地化:Spirula Studio如何把“漏翻译“变成编译错误 2026/9/29 13:46:35

类型安全本地化:Spirula Studio如何把“漏翻译“变成编译错误

类型安全本地化:Spirula Studio如何把"漏翻译"变成编译错误 【免费下载链接】spirula-studio Cross-vendor 3D Gaussian Splatting trainer - video to splat to mesh, Vulkan or CUDA. 项目地址: https://gitcode.com/GitHub_Trending/sp/spirula-stud…

阅读更多 →
华硕电脑开机蓝屏怎么修?从蓝屏代码到驱动BIOS排查全流程 2026/9/29 13:46:09

华硕电脑开机蓝屏怎么修?从蓝屏代码到驱动BIOS排查全流程

简介:这份doc文档面向遇到华硕电脑开机反复蓝屏、每次启动都自动进行磁盘自检的用户,属于实用型故障排查资料。内容围绕非正常关机引发的开机蓝屏与磁盘自检问题展开,涵盖原因分析、注册表取消检测磁盘、chkdsk命令修复磁盘错误等解决思路&am…

阅读更多 →
Res2Net多尺度海陆分割实战:从网络搭建到岸线IoU提升技巧 2026/9/29 13:45:43

Res2Net多尺度海陆分割实战:从网络搭建到岸线IoU提升技巧

简介:这份文档面向遥感影像处理、语义分割方向的研究者与工程人员,聚焦复杂背景下海陆边界分割不准确这一难点,提出基于Res2Net的多尺度海陆分割网络MSRNet。资源包内仅含1个docx文件,约345KB,完整呈现了从摘要、引言到…

阅读更多 →
IDEA 里配 TaoToken 接入 Claude Code 插件:settings.json 骨架与结对编程验证 2026/9/29 13:45:43

IDEA 里配 TaoToken 接入 Claude Code 插件:settings.json 骨架与结对编程验证

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

阅读更多 →
ESP32-CLAW零代码控制指南 2026/9/29 13:45:17

ESP32-CLAW零代码控制指南

ESP32-CLAW 是乐鑫推出的一款基于大语言模型(LLM)的交互框架,允许用户通过自然语言(如微信、网页聊天)直接控制 ESP32 开发板的外设。对于新手而言,无需编写复杂的底层代码,主要通过**“在线烧录…

阅读更多 →
你一定要看这篇打破信息差,太牛了我靠,快看博客里的视频,发现了一款神级ai-Flowith 直接平替monus,顺手把 API endpoint 改到 TaoToken 2026/9/29 13:44:53

你一定要看这篇打破信息差,太牛了我靠,快看博客里的视频,发现了一款神级ai-Flowith 直接平替monus,顺手把 API endpoint 改到 TaoToken

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

阅读更多 →

今日资讯

本周资讯

本月资讯

看完文章仍有疑问?

联系尧图顾问,获取一对一建站咨询

立即免费咨询 📞 400-888-8888
📞 ✉