Android MediaPlayer addTimedTextSource仅触发字幕开始无结束回调问题
问题原因
Android 原生 MediaPlayer 的 OnTimedTextListener 本身的设计逻辑就是仅在新字幕条目开始展示时触发 onTimedText 回调,不会在字幕条目展示结束时主动推送回调,这是系统层面的实现逻辑,和你的代码、SRT 文件格式都没有关系。
原生 SRT 解析模块只会为每个字幕的起始时间点注册事件触发点,不会为字幕的结束时间点单独注册回调,你预期的「结束时间返回空/Null 文本」的逻辑原生并未实现。
替代解决方案
除了你目前使用的插入特殊清空字幕的方案外,还有两种更易维护的实现方式:
- 每次收到
onTimedText回调时,先展示当前字幕,同时从回调的TimedText对象中读取当前字幕的结束时间,用Handler.postDelayed注册一个延迟任务,到达结束时间时自动清空字幕。注意每次收到新字幕回调时,要先移除之前未执行的延迟任务,避免出现字幕显示异常。 - 提前自行解析 SRT 文件得到所有字幕的时间轴列表,开启一个低频率的轮询任务(比如每100毫秒查询一次当前播放进度),自行匹配当前时间对应的字幕,主动控制字幕的显示和隐藏,该方案可控性最高,不会受系统播放器逻辑限制。
- 如果后续有更复杂的字幕定制需求,可以直接迁移到 ExoPlayer,ExoPlayer 原生支持字幕结束事件回调,不需要额外做适配。
内容的提问来源于stack exchange,提问作者Iain Stanford
相关产品推荐
相关产品推荐

