android exoplayer 285 版本中 如何获取视频中的字幕 及 切换字幕
要获取视频中的字幕,可以使用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;
}
原文地址: https://www.cveoy.top/t/topic/b7Ar 著作权归作者所有。请勿转载和采集!