获取字幕和音轨列表:

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 著作权归作者所有。请勿转载和采集!

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