Discard preparation chunk if track selection does not include it

This avoids breaking the player if the first variant is not
supported by the device.

Issue:#2353

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=148025791
This commit is contained in:
aquilescanta 2017-02-20 08:45:13 -08:00 committed by Oliver Woodman
parent 55a3fca6f9
commit 72e1eae6f5

View file

@ -182,6 +182,7 @@ import java.util.LinkedList;
} }
} }
// Enable new tracks. // Enable new tracks.
TrackSelection primaryTrackSelection = null;
boolean selectedNewTracks = false; boolean selectedNewTracks = false;
for (int i = 0; i < selections.length; i++) { for (int i = 0; i < selections.length; i++) {
if (streams[i] == null && selections[i] != null) { if (streams[i] == null && selections[i] != null) {
@ -189,6 +190,7 @@ import java.util.LinkedList;
int group = trackGroups.indexOf(selection.getTrackGroup()); int group = trackGroups.indexOf(selection.getTrackGroup());
setTrackGroupEnabledState(group, true); setTrackGroupEnabledState(group, true);
if (group == primaryTrackGroupIndex) { if (group == primaryTrackGroupIndex) {
primaryTrackSelection = selection;
chunkSource.selectTracks(selection); chunkSource.selectTracks(selection);
} }
streams[i] = new HlsSampleStream(this, group); streams[i] = new HlsSampleStream(this, group);
@ -205,6 +207,14 @@ import java.util.LinkedList;
sampleQueues.valueAt(i).disable(); sampleQueues.valueAt(i).disable();
} }
} }
if (primaryTrackSelection != null && !mediaChunks.isEmpty()) {
primaryTrackSelection.updateSelectedTrack(0);
int chunkIndex = chunkSource.getTrackGroup().indexOf(mediaChunks.getLast().trackFormat);
if (primaryTrackSelection.getSelectedIndexInTrackGroup() != chunkIndex) {
// The loaded preparation chunk does match the selection. We discard it.
seekTo(lastSeekPositionUs);
}
}
} }
// Cancel requests if necessary. // Cancel requests if necessary.
if (enabledTrackCount == 0) { if (enabledTrackCount == 0) {