Audio and subtitles series¶
Audio and subtitle selection¶
Keeping track of tracks¶
The current PlaybackSession manages available and selected audio/subtitle tracks.
public interface IPlaybackSession {
...
List<ISubtitleTrack> getSubtitleTracks();
ISubtitleTrack getSelectedSubtitleTrack();
List<IAudioTrack> getAudioTracks();
IAudioTrack getSelectedAudioTrack();
...
}
The IPlaybackSessionListener interface also contains events for when these values change.
public interface IPlaybackSessionListener {
...
void onSubtitleTracks(List<ISubtitleTrack> tracks);
void onSelectedSubtitleTrackChanged(ISubtitleTrack oldSelectedTrack, ISubtitleTrack newSelectedTrack);
void onAudioTracks(List<IAudioTrack> tracks);
void onSelectedAudioTrackChanged(IAudioTrack oldSelectedTrack, IAudioTrack newSelectedTrack);
...
}
These events can be used to initiate and update UI elements.
Note¶
onSubtitleTracks(...)andonAudioTracks(...)can get called at any time. This is dependent on the current stream and the playerImplementation.
Example - Audio¶
In this example the variable audioTrackUi represents some object or callback used for updating the UI.
public void setupAudioSelector(IEnigmaPlayer enigmaPlayer) {
enigmaPlayer.addListener(new BaseEnigmaPlayerListener() {
//Listener for currently active PlaybackSession
private final IPlaybackSessionListener activePlaybackSessionListener = new BasePlaybackSessionListener() {
@Override
public void onAudioTracks(List<IAudioTrack> tracks) {
//Update UI
audioTrackUi.setAvailableAudioLanguages(tracks);
}
@Override
public void onSelectedAudioTrackChanged(IAudioTrack oldSelectedTrack, IAudioTrack newSelectedTrack) {
//Update UI
audioTrackUi.setSelectedAudioLanguage(newSelectedTrack);
}
};
@Override
public void onPlaybackSessionChanged(IPlaybackSession from, IPlaybackSession to) {
if(from != null) {
//Remove listener from old PlaybackSession
from.removeListener(activePlaybackSessionListener);
}
if(to != null) {
//Update UI
audioTrackUi.setAvailableAudioLanguages(to.getAudioTracks());
audioTrackUi.setSelectedAudioLanguage(to.getSelectedAudioTrack());
//Add listener to new PlaybackSession
to.addListener(activePlaybackSessionListener, handler);
}
}
}, handler);
}
While this example is only for audio, the same pattern applies to subtitles as well.
Changing selected audio/subtitle track¶
To change the selected audio/subtitle track, simply send one of the available audio/subtitle track-objects into IEnigmaPlayerControls#set{Audio/Subtitle}Track(...).
public void selectSubtitleTrack(ISubtitleTrack subtitleTrack) {
enigmaPlayer.getControls().setSubtitleTrack(subtitleTrack);
}
public void selectSubtitleTrack(String trackId) {
enigmaPlayer.getControls().setSubtitleTrackById(trackId);
}
public void selectAudioTrack(IAudioTrack audioTrack) {
enigmaPlayer.getControls().setAudioTrack(audioTrack);
}
public void selectAudioTrack(String trackId) {
enigmaPlayer.getControls().setSubtitleTrackById(trackId);
}
To turn off subtitles, simply select null as the subtitle track.
public void turnOffSubtitles() {
enigmaPlayer.getControls().setSubtitleTrack(null);
}
This is only allowed for subtitle tracks. A request to setAudioTrack(null) will be rejected.
Note¶
Objects passed to
set{Audio/Subtitle}Track(...)must originate from EnigmaPlayer. Using a custom implementation ofIAudioTrackorISubtitleTrackwill result in a rejected request.
Working example¶
Here is a working example project using what is described in this tutorial:
audioAndSubtitles
Table of Contents
Prerequisites
• Audio and subtitle selection (current)