ExoPlayer加载SRT/VTT/TTML格式字幕无法显示问题咨询
ExoPlayer字幕不显示问题排查方案
- 匹配字幕MIME类型
你当前代码固定使用MimeTypes.APPLICATION_TTML,需要和你实际加载的字幕文件格式对应:- SRT格式替换为
MimeTypes.APPLICATION_SUBRIP - VTT格式替换为
MimeTypes.TEXT_VTT
MIME类型不匹配会直接导致字幕解析失败,不会显示。
- SRT格式替换为
- 验证本地字幕文件路径有效性
打印filePath日志确认路径指向的文件存在且可读,私有目录文件建议通过Uri.fromFile(new File(实际本地存储路径))生成Uri,避免字符串路径解析错误。 - 配置轨道选择器自动选中字幕轨
仅设置SELECTION_FLAG_AUTOSELECT不一定能触发字幕选中,需要在初始化ExoPlayer时配置TrackSelector强制优先选中字幕轨:DefaultTrackSelector trackSelector = new DefaultTrackSelector(context); trackSelector.setParameters( trackSelector.buildUponParameters() .setPreferredTextLanguage("en-US") // 和你设置的字幕语言一致 .setSelectUndeterminedTextLanguage(true) .setRendererDisabled(C.TRACK_TYPE_TEXT, false) ); ExoPlayer exoPlayer = new ExoPlayer.Builder(context) .setTrackSelector(trackSelector) .build(); videoPlayer.setPlayer(exoPlayer); - 补充PlayerView的字幕属性配置
在XML布局的PlayerView标签中添加app:use_subtitle_view="true"属性,确保内置字幕视图被启用,无需手动调用setVisibility(View.VISIBLE)。 - 检查字幕样式避免被遮挡
如果字幕颜色和背景重合或者尺寸为0,也会导致看起来没有显示,可主动配置字幕样式:SubtitleView subtitleView = videoPlayer.getSubtitleView(); // 配置白字黑描边样式 subtitleView.setStyle(new CaptionStyleCompat( Color.WHITE, Color.TRANSPARENT, Color.TRANSPARENT, CaptionStyleCompat.EDGE_TYPE_OUTLINE, Color.BLACK, null )); // 设置字幕大小为控件高度的5% subtitleView.setTextSize(CaptionStyleCompat.TEXT_SIZE_TYPE_FRACTIONAL, 0.05f); // 提升字幕视图层级避免被其他控件遮挡 subtitleView.setZ(10f); - 验证字幕文件本身有效性
可先将测试用字幕文件放到assets目录直接加载测试,排除文件下载损坏、格式不符合规范、时间轴和视频不匹配的问题。
内容的提问来源于stack exchange,提问作者Amit Pandey
相关产品推荐
相关产品推荐

