ExoPlayer 2.14.0无法加载.srt格式字幕问题求助
结论
不需要单独使用SubtitleView,PlayerView自带的SubtitleView完全可以实现srt字幕的显示功能,你当前无法显示是代码配置遗漏导致的,以下是具体问题和修复方案:
问题1:轨道选择器未开启字幕轨道自动选择
ExoPlayer默认的DefaultTrackSelector不会自动选中字幕轨道,需要手动配置轨道选择参数,允许匹配对应语言的字幕轨:
// 初始化ExoPlayer前先配置轨道选择器 DefaultTrackSelector trackSelector = new DefaultTrackSelector(this); DefaultTrackSelector.Parameters params = trackSelector.buildUponParameters() .setSelectUndeterminedTextLanguage(true) // 未指定语言的字幕也会被选中 .setPreferredTextLanguage("en") // 匹配你字幕配置的"en"语言标记 .build(); trackSelector.setParameters(params); // 初始化播放器时传入配置好的轨道选择器 simpleExoPlayer = new ExoPlayer.Builder(this) .setTrackSelector(trackSelector) .build();
问题2:addTextOutput代码冗余且存在崩溃风险
你不需要手动调用setCues、setVisibility等方法操作SubtitleView,只要完成playerView.setPlayer(simpleExoPlayer)绑定,PlayerView会自动把字幕传递给自带的SubtitleView渲染,手动操作反而可能导致异常。
如果需要保留字幕日志,简化后的代码如下,同时规避空列表的崩溃问题:
simpleExoPlayer.addTextOutput(cues -> { if (!cues.isEmpty() && cues.get(0).text != null) { Log.d("subtitles", cues.get(0).text.toString()); } });
问题3:字幕构建逻辑可优化
你当前的MergingMediaSource写法是可行的,不过更简洁的方式是直接把字幕配置添加到MediaItem中,不需要手动合并媒体源:
public void buildMediaSourceV3(Uri uri){ String subtitlesUri = sharedPreferencesSubtitles.getString(videoName.getText().toString(), ""); DataSource.Factory factory = new DefaultDataSourceFactory(VideoPlayer.this, getPackageName(), new DefaultBandwidthMeter()); MediaItem.Builder mediaItemBuilder = new MediaItem.Builder().setUri(uri); if(!subtitlesUri.equals("")) { MediaItem.Subtitle subtitle = new MediaItem.Subtitle( Uri.parse(subtitlesUri), MimeTypes.APPLICATION_SUBRIP, "en", C.SELECTION_FLAG_DEFAULT // 增加默认选中标记,提高轨道匹配优先级 ); mediaItemBuilder.setSubtitles(Collections.singletonList(subtitle)); } MediaSource videoSource = new ProgressiveMediaSource.Factory(factory).createMediaSource(mediaItemBuilder.build()); simpleExoPlayer.addMediaSource(videoSource); }
额外排查点
- 确保你已经调用了
playerView.setPlayer(simpleExoPlayer)完成播放器和视图的绑定 - 检查srt文件的编码格式为UTF-8,非UTF-8编码的字幕文件会解析失败
- 如果日志能正常打印字幕内容但界面不显示,检查是否给SubtitleView设置了和背景一致的文字颜色,或者文字尺寸为0的异常配置
内容的提问来源于stack exchange,提问作者Rag
相关产品推荐
相关产品推荐

