ExoPlayer 2.18.5 获取并切换音轨指南
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为渲染器的索引,j为TrackGroup的索引,k为音轨在TrackGroup中的索引。setRendererDisabled(i, false)表示启用渲染器i。setSelectionOverride(i, trackGroups, override)设置渲染器i的音轨选择。
通过以上步骤,您可以轻松地在 ExoPlayer 中获取所有音轨信息并切换到指定的音轨。
原文地址: https://www.cveoy.top/t/topic/njFS 著作权归作者所有。请勿转载和采集!