Create one HlsSampleStreamWrapper per track group

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=133243031
This commit is contained in:
aquilescanta 2016-09-15 03:56:08 -07:00 committed by Oliver Woodman
parent 6a099f1c57
commit 70351bfae2
2 changed files with 39 additions and 31 deletions

View File

@ -239,13 +239,7 @@ import java.util.List;
eventDispatcher.loadCompleted(loadable.dataSpec, loadable.type, elapsedRealtimeMs, eventDispatcher.loadCompleted(loadable.dataSpec, loadable.type, elapsedRealtimeMs,
loadDurationMs, loadable.bytesLoaded()); loadDurationMs, loadable.bytesLoaded());
playlist = loadable.getResult(); playlist = loadable.getResult();
List<HlsSampleStreamWrapper> sampleStreamWrapperList = buildSampleStreamWrappers(); buildAndPrepareSampleStreamWrappers();
sampleStreamWrappers = new HlsSampleStreamWrapper[sampleStreamWrapperList.size()];
sampleStreamWrapperList.toArray(sampleStreamWrappers);
pendingPrepareCount = sampleStreamWrappers.length;
for (HlsSampleStreamWrapper sampleStreamWrapper : sampleStreamWrappers) {
sampleStreamWrapper.prepare();
}
} }
@Override @Override
@ -313,16 +307,16 @@ import java.util.List;
// Internal methods. // Internal methods.
private List<HlsSampleStreamWrapper> buildSampleStreamWrappers() { private void buildAndPrepareSampleStreamWrappers() {
ArrayList<HlsSampleStreamWrapper> sampleStreamWrappers = new ArrayList<>();
String baseUri = playlist.baseUri; String baseUri = playlist.baseUri;
if (playlist instanceof HlsMediaPlaylist) { if (playlist instanceof HlsMediaPlaylist) {
HlsMasterPlaylist.HlsUrl[] variants = new HlsMasterPlaylist.HlsUrl[] { HlsMasterPlaylist.HlsUrl[] variants = new HlsMasterPlaylist.HlsUrl[] {
HlsMasterPlaylist.HlsUrl.createMediaPlaylistHlsUrl(playlist.baseUri)}; HlsMasterPlaylist.HlsUrl.createMediaPlaylistHlsUrl(playlist.baseUri)};
sampleStreamWrappers.add(buildSampleStreamWrapper(C.TRACK_TYPE_DEFAULT, baseUri, variants, sampleStreamWrappers = new HlsSampleStreamWrapper[] {
null, null)); buildSampleStreamWrapper(C.TRACK_TYPE_DEFAULT, baseUri, variants, null, null)};
return sampleStreamWrappers; pendingPrepareCount = 1;
sampleStreamWrappers[0].prepare();
return;
} }
HlsMasterPlaylist masterPlaylist = (HlsMasterPlaylist) playlist; HlsMasterPlaylist masterPlaylist = (HlsMasterPlaylist) playlist;
@ -351,32 +345,37 @@ import java.util.List;
} else { } else {
// Leave the enabled variants unchanged. They're likely either all video or all audio. // Leave the enabled variants unchanged. They're likely either all video or all audio.
} }
List<HlsMasterPlaylist.HlsUrl> audioVariants = masterPlaylist.audios;
List<HlsMasterPlaylist.HlsUrl> subtitleVariants = masterPlaylist.subtitles;
sampleStreamWrappers = new HlsSampleStreamWrapper[(selectedVariants.isEmpty() ? 0 : 1)
+ audioVariants.size() + subtitleVariants.size()];
int currentWrapperIndex = 0;
pendingPrepareCount = sampleStreamWrappers.length;
if (!selectedVariants.isEmpty()) { if (!selectedVariants.isEmpty()) {
HlsMasterPlaylist.HlsUrl[] variants = new HlsMasterPlaylist.HlsUrl[selectedVariants.size()]; HlsMasterPlaylist.HlsUrl[] variants = new HlsMasterPlaylist.HlsUrl[selectedVariants.size()];
selectedVariants.toArray(variants); selectedVariants.toArray(variants);
sampleStreamWrappers.add(buildSampleStreamWrapper(C.TRACK_TYPE_DEFAULT, baseUri, variants, HlsSampleStreamWrapper sampleStreamWrapper = buildSampleStreamWrapper(C.TRACK_TYPE_DEFAULT,
masterPlaylist.muxedAudioFormat, masterPlaylist.muxedCaptionFormat)); baseUri, variants, masterPlaylist.muxedAudioFormat, masterPlaylist.muxedCaptionFormat);
sampleStreamWrapper.prepare();
sampleStreamWrappers[currentWrapperIndex++] = sampleStreamWrapper;
} }
// Build the audio stream wrapper if applicable. // Build audio stream wrappers.
List<HlsMasterPlaylist.HlsUrl> audioVariants = masterPlaylist.audios; for (int i = 0; i < audioVariants.size(); i++) {
if (!audioVariants.isEmpty()) { HlsSampleStreamWrapper sampleStreamWrapper = buildSampleStreamWrapper(C.TRACK_TYPE_AUDIO,
HlsMasterPlaylist.HlsUrl[] variants = new HlsMasterPlaylist.HlsUrl[audioVariants.size()]; baseUri, new HlsMasterPlaylist.HlsUrl[] {audioVariants.get(i)}, null, null);
audioVariants.toArray(variants); sampleStreamWrapper.prepare();
sampleStreamWrappers.add(buildSampleStreamWrapper(C.TRACK_TYPE_AUDIO, baseUri, variants, null, sampleStreamWrappers[currentWrapperIndex++] = sampleStreamWrapper;
null));
} }
// Build the text stream wrapper if applicable. // Build subtitle stream wrappers.
List<HlsMasterPlaylist.HlsUrl> subtitleVariants = masterPlaylist.subtitles; for (int i = 0; i < subtitleVariants.size(); i++) {
if (!subtitleVariants.isEmpty()) { HlsMasterPlaylist.HlsUrl url = subtitleVariants.get(i);
HlsMasterPlaylist.HlsUrl[] variants = new HlsMasterPlaylist.HlsUrl[subtitleVariants.size()]; HlsSampleStreamWrapper sampleStreamWrapper = buildSampleStreamWrapper(C.TRACK_TYPE_TEXT,
subtitleVariants.toArray(variants); baseUri, new HlsMasterPlaylist.HlsUrl[] {url}, null, null);
sampleStreamWrappers.add(buildSampleStreamWrapper(C.TRACK_TYPE_TEXT, baseUri, variants, null, sampleStreamWrapper.prepareSingleTrack(url.format);
null)); sampleStreamWrappers[currentWrapperIndex++] = sampleStreamWrapper;
} }
return sampleStreamWrappers;
} }
private HlsSampleStreamWrapper buildSampleStreamWrapper(int trackType, String baseUri, private HlsSampleStreamWrapper buildSampleStreamWrapper(int trackType, String baseUri,

View File

@ -137,6 +137,15 @@ import java.util.LinkedList;
continueLoading(lastSeekPositionUs); continueLoading(lastSeekPositionUs);
} }
/**
* Prepares a sample stream wrapper for which the master playlist provides enough information to
* prepare.
*/
public void prepareSingleTrack(Format format) {
track(0).format(format);
endTracks();
}
public void maybeThrowPrepareError() throws IOException { public void maybeThrowPrepareError() throws IOException {
maybeThrowError(); maybeThrowError();
} }