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

ExoPlayer加载SRT/VTT/TTML格式字幕无法显示问题咨询

ExoPlayer字幕不显示问题排查方案
  • 匹配字幕MIME类型
    你当前代码固定使用MimeTypes.APPLICATION_TTML,需要和你实际加载的字幕文件格式对应:
    • SRT格式替换为MimeTypes.APPLICATION_SUBRIP
    • VTT格式替换为MimeTypes.TEXT_VTT
      MIME类型不匹配会直接导致字幕解析失败,不会显示。
  • 验证本地字幕文件路径有效性
    打印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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 01:36:10