ExoPlayer 2.18.5 获取所有音轨并切换音轨

本文将详细介绍如何在 ExoPlayer 2.18.5 中获取所有音轨信息并切换到指定音轨。

获取所有音轨

要获取所有音轨,可以使用 ExoPlayer 的 TrackSelector 类和 TrackGroupArray 类。以下示例代码展示了如何获取所有音轨的信息:

TrackSelector trackSelector = player.getTrackSelector();
MappedTrackInfo mappedTrackInfo = trackSelector.getCurrentMappedTrackInfo();
if (mappedTrackInfo != null) {
    for (int i = 0; i < mappedTrackInfo.getRendererCount(); i++) {
        TrackGroupArray trackGroups = mappedTrackInfo.getTrackGroups(i);
        if (trackGroups.length > 0) {
            for (int j = 0; j < trackGroups.length; j++) {
                TrackGroup trackGroup = trackGroups.get(j);
                for (int k = 0; k < trackGroup.length; k++) {
                    Format format = trackGroup.getFormat(k);
                    // 输出音轨信息
                    Log.d(TAG, 'Track ' + i + ' - ' + format.sampleMimeType + ' - ' + format.language);
                }
            }
        }
    }
}

切换音轨

要切换音轨,可以使用 TrackSelection 类和 TrackSelectionArray 类。以下示例代码展示了如何切换到指定的音轨(例如,切换到 AAC 音频音轨):

TrackSelector trackSelector = player.getTrackSelector();
MappedTrackInfo mappedTrackInfo = trackSelector.getCurrentMappedTrackInfo();
if (mappedTrackInfo != null) {
    for (int i = 0; i < mappedTrackInfo.getRendererCount(); i++) {
        TrackGroupArray trackGroups = mappedTrackInfo.getTrackGroups(i);
        if (trackGroups.length > 0) {
            DefaultTrackSelector.ParametersBuilder builder = trackSelector.buildUponParameters();
            TrackSelectionArray trackSelectionArray = trackSelector.getCurrentTrackSelections();
            for (int j = 0; j < trackGroups.length; j++) {
                TrackGroup trackGroup = trackGroups.get(j);
                for (int k = 0; k < trackGroup.length; k++) {
                    Format format = trackGroup.getFormat(k);
                    if (format.sampleMimeType.equals(MimeTypes.AUDIO_AAC)) {
                        // 切换到指定的音轨
                        builder.setRendererDisabled(i, false);
                        DefaultTrackSelector.SelectionOverride override = new DefaultTrackSelector.SelectionOverride(j, k);
                        builder.setSelectionOverride(i, trackGroups, override);
                        trackSelector.setParameters(builder.build());
                    }
                }
            }
        }
    }
}

注意:

  • MimeTypes.AUDIO_AAC 为 AAC 音频的 MIME 类型,请根据您的实际需求进行修改。
  • i 为渲染器的索引,jTrackGroup 的索引,k 为音轨在 TrackGroup 中的索引。
  • setRendererDisabled(i, false) 表示启用渲染器 i
  • setSelectionOverride(i, trackGroups, override) 设置渲染器 i 的音轨选择。

通过以上步骤,您可以轻松地在 ExoPlayer 中获取所有音轨信息并切换到指定的音轨。

ExoPlayer 2.18.5 获取并切换音轨指南

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

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