ExoPlayer 内嵌字幕切换指南:使用 MappingTrackSelector.ParametersBuilder
ExoPlayer 切换内嵌字幕指南:使用 MappingTrackSelector.ParametersBuilder
ExoPlayer 是一个强大的 Android 视频播放器库,它支持多种功能,包括内嵌字幕切换。在 ExoPlayer 中,使用 MappingTrackSelector.ParametersBuilder 的 setSelectionOverride 方法来选择不同的内嵌字幕轨道。
以下是如何切换内嵌字幕的步骤:
- 获取 ExoPlayer 的 TrackSelector:
TrackSelector trackSelector = exoPlayer.getTrackSelector();
- 获取当前媒体的轨道信息:
MappingTrackSelector.MappedTrackInfo mappedTrackInfo = trackSelector.getCurrentMappedTrackInfo();
- 获取内嵌字幕轨道的索引:
int subtitleIndex = getSubtitleIndex(mappedTrackInfo);
getSubtitleIndex 方法用于获取内嵌字幕轨道的索引,你可以根据需要自行实现。
- 构建参数并设置选择覆盖:
MappingTrackSelector.ParametersBuilder builder = trackSelector.buildUponParameters();
builder.setSelectionOverride(C.TRACK_TYPE_TEXT, mappedTrackInfo.getTrackGroups(C.TRACK_TYPE_TEXT).indexOf(mappedTrackInfo.getTrackGroups(C.TRACK_TYPE_TEXT).get(subtitleIndex)), null);
setSelectionOverride 方法需要传入三个参数:
- 轨道类型:
C.TRACK_TYPE_TEXT表示文本轨道,即内嵌字幕。 - 轨道索引:
subtitleIndex表示要选择的内嵌字幕轨道的索引。 - 选择器:
null表示使用默认选择器。
- 设置新的参数:
trackSelector.setParameters(builder.build());
完整示例代码:
// 获取 ExoPlayer 的 TrackSelector
TrackSelector trackSelector = exoPlayer.getTrackSelector();
// 获取当前媒体的轨道信息
MappingTrackSelector.MappedTrackInfo mappedTrackInfo = trackSelector.getCurrentMappedTrackInfo();
// 获取内嵌字幕轨道的索引
int subtitleIndex = getSubtitleIndex(mappedTrackInfo);
// 构建参数并设置选择覆盖
MappingTrackSelector.ParametersBuilder builder = trackSelector.buildUponParameters();
builder.setSelectionOverride(C.TRACK_TYPE_TEXT, mappedTrackInfo.getTrackGroups(C.TRACK_TYPE_TEXT).indexOf(mappedTrackInfo.getTrackGroups(C.TRACK_TYPE_TEXT).get(subtitleIndex)), null);
// 设置新的参数
trackSelector.setParameters(builder.build());
通过以上步骤,你就可以轻松地切换 ExoPlayer 的内嵌字幕。你可以根据需要自行实现 getSubtitleIndex 方法来获取不同的内嵌字幕轨道索引。
原文地址: https://www.cveoy.top/t/topic/jFuK 著作权归作者所有。请勿转载和采集!