要获取视频中的字幕,可以使用ExoPlayer的SubtitleView类。以下是获取字幕的示例代码:

SubtitleView subtitleView = findViewById(R.id.subtitle_view);
Subtitle subtitle = player.getCurrentSubtitle();
if (subtitle != null) {
    subtitleView.setVisibility(View.VISIBLE);
    subtitleView.setSubtitle(subtitle);
} else {
    subtitleView.setVisibility(View.GONE);
}

要切换字幕,可以使用ExoPlayer的TrackSelector类。以下是切换字幕的示例代码:

TrackSelection.Factory trackSelectionFactory = new DefaultTrackSelector(this);
DefaultTrackSelector trackSelector = new DefaultTrackSelector(trackSelectionFactory);
player.setTrackSelector(trackSelector);

MappingTrackSelector.MappedTrackInfo mappedTrackInfo = trackSelector.getCurrentMappedTrackInfo();
if (mappedTrackInfo != null) {
    int rendererIndex = C.TRACK_TYPE_TEXT;
    int[] tracks = getTracksForRenderer(mappedTrackInfo, rendererIndex);
    if (tracks.length > 1) {
        int currentTrackIndex = getCurrentTrackIndex(mappedTrackInfo, rendererIndex);
        int nextTrackIndex = getNextTrackIndex(currentTrackIndex, tracks.length);
        trackSelector.setParameters(trackSelector.buildUponParameters()
                .setSelectionOverride(rendererIndex, mappedTrackInfo.getTrackGroups(rendererIndex), new DefaultTrackSelector.SelectionOverride(nextTrackIndex, 0))
                .build());
    }
}

private int[] getTracksForRenderer(MappingTrackSelector.MappedTrackInfo mappedTrackInfo, int rendererIndex) {
    TrackGroupArray trackGroups = mappedTrackInfo.getTrackGroups(rendererIndex);
    int[] tracks = new int[trackGroups.length];
    for (int i = 0; i < trackGroups.length; i++) {
        tracks[i] = i;
    }
    return tracks;
}

private int getCurrentTrackIndex(MappingTrackSelector.MappedTrackInfo mappedTrackInfo, int rendererIndex) {
    TrackGroupArray trackGroups = mappedTrackInfo.getTrackGroups(rendererIndex);
    TrackSelectionArray trackSelections = player.getCurrentTrackSelections();
    if (trackSelections != null && trackSelections.length > rendererIndex) {
        TrackSelection trackSelection = trackSelections.get(rendererIndex);
        if (trackSelection != null) {
            for (int i = 0; i < trackGroups.length; i++) {
                if (trackGroups.get(i) == trackSelection.getTrackGroup()) {
                    return i;
                }
            }
        }
    }
    return 0;
}

private int getNextTrackIndex(int currentTrackIndex, int trackCount) {
    return (currentTrackIndex + 1) % trackCount;
}
android exoplayer 285 版本中 如何获取视频中的字幕 及 切换字幕

原文地址: https://www.cveoy.top/t/topic/b7Ar 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录