google / google/ExoPlayer

CastPlayer send correct selected audio track to receiver.

Open
#8,161 5 comments 0 reactions 1 assignee Claimed by @marcbaechinger View on GitHub
question
Dominant language
Java
Stars
21.9k
Forks
6k
PR merge metrics
No merged PRs in 30d

Description

I have media with multiple audio tracks in the manifest, but when I create the MediaItem, I can't see a way to specify the initial audio track. Besides, I would like to be able to change the audio track in the CastPlayer during the playback, in case the user uses the sender to change the audio.

**Exoplayer version:** 2.12.1

```
// If I don't set the metadata, the title doesn't appear in the castMiniController, whereas it did appear in exoplayer 2.11.x
MediaMetadata metadata = new MediaMetadata.Builder()
.setTitle(currentShow.getFormattedTitle())
.build();

MediaItem mediaItem = new MediaItem.Builder()
.setUri(uri)
.setDrmLicenseRequestHeaders(hm)
.setDrmLicenseUri(drmLicenseUrl)
.setDrmUuid(C.WIDEVINE_UUID)
.setMediaId(currentShow.getFormattedTitle())
.setMediaMetadata(metadata)
.setMimeType(mimeType)
.build();
```
I can't obtain the trackSelector in the CastPlayer's implementation, as it basically returns null:
![imagen](https://user-images.githubusercontent.com/2399679/98111043-4ff52a80-1ea0-11eb-9c21-f054beb866bc.png)

On the other hand, when we change audio tracks in settings for the local player, we do the following:

```
public void onAudioSelected(AudioCheckableItem audioItem) {
MappingTrackSelector.MappedTrackInfo mappedTrackInfo = trackSelector.getCurrentMappedTrackInfo();
if (mappedTrackInfo == null) {
return;
}

int rendererIndex = -1;
for (int i = 0; i < mappedTrackInfo.getRendererCount(); i++) {
TrackGroupArray trackGroups = mappedTrackInfo.getTrackGroups(i);
if (trackGroups.length != 0) {
switch (player.getRendererType(i)) {
case C.TRACK_TYPE_AUDIO:
rendererIndex = i;
break;
case C.TRACK_TYPE_VIDEO:
case C.TRACK_TYPE_TEXT:
default:
break;
}
}
}

if (rendererIndex == -1)
return;

TrackGroupArray trackGroups = mappedTrackInfo.getTrackGroups(rendererIndex);
DefaultTrackSelector.ParametersBuilder parametersBuilder = trackSelector.buildUponParameters();
parametersBuilder.setSelectionOverride(rendererIndex, trackGroups, new DefaultTrackSelector.SelectionOverride(audioItem.getGroupIndex(), audioItem.getTrackIndex()));
trackSelector.setParameters(parametersBuilder);
}
```

I can't find any documentation about this and the only question related (but with subtitles) is at SO and doesn't have any answers: https://stackoverflow.com/questions/61396776/change-subtitle-using-castplayer

Contributor guide

Open the contributing guide

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.