Create one HlsSampleStreamWrapper per track group
------------- Created by MOE: https://github.com/google/moe MOE_MIGRATED_REVID=133243031
This commit is contained in:
parent
6a099f1c57
commit
70351bfae2
@ -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,
|
||||||
|
@ -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();
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user