You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Android MediaPlayer addTimedTextSource仅触发字幕开始无结束回调问题

问题原因

Android 原生 MediaPlayer 的 OnTimedTextListener 本身的设计逻辑就是仅在新字幕条目开始展示时触发 onTimedText 回调,不会在字幕条目展示结束时主动推送回调,这是系统层面的实现逻辑,和你的代码、SRT 文件格式都没有关系。

原生 SRT 解析模块只会为每个字幕的起始时间点注册事件触发点,不会为字幕的结束时间点单独注册回调,你预期的「结束时间返回空/Null 文本」的逻辑原生并未实现。


替代解决方案

除了你目前使用的插入特殊清空字幕的方案外,还有两种更易维护的实现方式:

  • 每次收到 onTimedText 回调时,先展示当前字幕,同时从回调的 TimedText 对象中读取当前字幕的结束时间,用 Handler.postDelayed 注册一个延迟任务,到达结束时间时自动清空字幕。注意每次收到新字幕回调时,要先移除之前未执行的延迟任务,避免出现字幕显示异常。
  • 提前自行解析 SRT 文件得到所有字幕的时间轴列表,开启一个低频率的轮询任务(比如每100毫秒查询一次当前播放进度),自行匹配当前时间对应的字幕,主动控制字幕的显示和隐藏,该方案可控性最高,不会受系统播放器逻辑限制。
  • 如果后续有更复杂的字幕定制需求,可以直接迁移到 ExoPlayer,ExoPlayer 原生支持字幕结束事件回调,不需要额外做适配。

内容的提问来源于stack exchange,提问作者Iain Stanford

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.17 23:45:10