android exoplayer 获取及设置字幕和音轨
获取字幕和音轨列表:
TrackSelection.Factory trackSelectionFactory = new AdaptiveTrackSelection.Factory();
DefaultTrackSelector trackSelector = new DefaultTrackSelector(trackSelectionFactory);
SimpleExoPlayer player = ExoPlayerFactory.newSimpleInstance(context, trackSelector);
MappingTrackSelector.MappedTrackInfo mappedTrackInfo = trackSelector.getCurrentMappedTrackInfo();
if (mappedTrackInfo != null) {
int rendererCount = mappedTrackInfo.getRendererCount();
for (int i = 0; i < rendererCount; i++) {
TrackGroupArray trackGroups = mappedTrackInfo.getTrackGroups(i);
if (trackGroups.length != 0 && player.getRendererType(i) == C.TRACK_TYPE_VIDEO) {
TrackGroup trackGroup = trackGroups.get(0);
for (int j = 0; j < trackGroup.length; j++) {
Format format = trackGroup.getFormat(j);
String mimeType = format.sampleMimeType;
if (mimeType != null && mimeType.startsWith("text")) {
// 字幕
String language = format.language;
String label = format.label;
Uri uri = format.uri;
// TODO: 处理字幕
}
}
} else if (trackGroups.length != 0 && player.getRendererType(i) == C.TRACK_TYPE_AUDIO) {
TrackGroup trackGroup = trackGroups.get(0);
for (int j = 0; j < trackGroup.length; j++) {
Format format = trackGroup.getFormat(j);
String language = format.language;
String label = format.label;
Uri uri = format.uri;
// TODO: 处理音轨
}
}
}
}
设置字幕和音轨:
MappingTrackSelector.MappedTrackInfo mappedTrackInfo = trackSelector.getCurrentMappedTrackInfo();
if (mappedTrackInfo != null) {
int rendererIndex = C.INDEX_UNSET;
int trackIndex = C.INDEX_UNSET;
TrackGroupArray trackGroups = mappedTrackInfo.getTrackGroups(rendererIndex);
for (int i = 0; i < trackGroups.length; i++) {
TrackGroup trackGroup = trackGroups.get(i);
for (int j = 0; j < trackGroup.length; j++) {
Format format = trackGroup.getFormat(j);
String language = format.language;
String label = format.label;
Uri uri = format.uri;
// 根据需要设置字幕或音轨
if (language.equals("en")) {
trackIndex = j;
break;
}
}
if (trackIndex != C.INDEX_UNSET) {
rendererIndex = i;
break;
}
}
if (rendererIndex != C.INDEX_UNSET && trackIndex != C.INDEX_UNSET) {
trackSelector.setSelectionOverride(rendererIndex, trackGroups, new DefaultTrackSelector.SelectionOverride(trackIndex, 0));
}
}
原文地址: https://www.cveoy.top/t/topic/b7zQ 著作权归作者所有。请勿转载和采集!