Rename Variant to HlsUrl and move into HlsMasterPlaylist

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=132049545
This commit is contained in:
aquilescanta 2016-09-02 04:17:57 -07:00 committed by Oliver Woodman
parent bd76ec8b13
commit fa500791c5
6 changed files with 46 additions and 63 deletions

View file

@ -56,7 +56,7 @@ public class HlsMasterPlaylistParserTest extends TestCase {
HlsMasterPlaylist masterPlaylist = (HlsMasterPlaylist) playlist;
List<Variant> variants = masterPlaylist.variants;
List<HlsMasterPlaylist.HlsUrl> variants = masterPlaylist.variants;
assertNotNull(variants);
assertEquals(5, variants.size());

View file

@ -31,9 +31,9 @@ import com.google.android.exoplayer2.source.TrackGroup;
import com.google.android.exoplayer2.source.chunk.Chunk;
import com.google.android.exoplayer2.source.chunk.ChunkedTrackBlacklistUtil;
import com.google.android.exoplayer2.source.chunk.DataChunk;
import com.google.android.exoplayer2.source.hls.playlist.HlsMasterPlaylist;
import com.google.android.exoplayer2.source.hls.playlist.HlsMediaPlaylist;
import com.google.android.exoplayer2.source.hls.playlist.HlsPlaylistParser;
import com.google.android.exoplayer2.source.hls.playlist.Variant;
import com.google.android.exoplayer2.trackselection.BaseTrackSelection;
import com.google.android.exoplayer2.trackselection.TrackSelection;
import com.google.android.exoplayer2.upstream.DataSource;
@ -107,7 +107,7 @@ import java.util.Locale;
private final DataSource dataSource;
private final HlsPlaylistParser playlistParser;
private final PtsTimestampAdjusterProvider timestampAdjusterProvider;
private final Variant[] variants;
private final HlsMasterPlaylist.HlsUrl[] variants;
private final HlsMediaPlaylist[] variantPlaylists;
private final TrackGroup trackGroup;
private final long[] variantLastPlaylistLoadTimesMs;
@ -135,7 +135,7 @@ import java.util.Locale;
* multiple {@link HlsChunkSource}s are used for a single playback, they should all share the
* same provider.
*/
public HlsChunkSource(String baseUri, Variant[] variants, DataSource dataSource,
public HlsChunkSource(String baseUri, HlsMasterPlaylist.HlsUrl[] variants, DataSource dataSource,
PtsTimestampAdjusterProvider timestampAdjusterProvider) {
this.baseUri = baseUri;
this.variants = variants;

View file

@ -34,7 +34,6 @@ import com.google.android.exoplayer2.source.hls.playlist.HlsMasterPlaylist;
import com.google.android.exoplayer2.source.hls.playlist.HlsMediaPlaylist;
import com.google.android.exoplayer2.source.hls.playlist.HlsPlaylist;
import com.google.android.exoplayer2.source.hls.playlist.HlsPlaylistParser;
import com.google.android.exoplayer2.source.hls.playlist.Variant;
import com.google.android.exoplayer2.trackselection.TrackSelection;
import com.google.android.exoplayer2.upstream.Allocator;
import com.google.android.exoplayer2.upstream.DataSource;
@ -321,7 +320,8 @@ import java.util.List;
if (playlist instanceof HlsMediaPlaylist) {
Format format = Format.createContainerFormat("0", MimeTypes.APPLICATION_M3U8, null, null,
Format.NO_VALUE);
Variant[] variants = new Variant[] {new Variant(playlist.baseUri, format, null)};
HlsMasterPlaylist.HlsUrl[] variants = new HlsMasterPlaylist.HlsUrl[] {
new HlsMasterPlaylist.HlsUrl(playlist.baseUri, format, null)};
sampleStreamWrappers.add(buildSampleStreamWrapper(C.TRACK_TYPE_DEFAULT, baseUri, variants,
null, null));
return sampleStreamWrappers;
@ -330,11 +330,11 @@ import java.util.List;
HlsMasterPlaylist masterPlaylist = (HlsMasterPlaylist) playlist;
// Build the default stream wrapper.
List<Variant> selectedVariants = new ArrayList<>(masterPlaylist.variants);
ArrayList<Variant> definiteVideoVariants = new ArrayList<>();
ArrayList<Variant> definiteAudioOnlyVariants = new ArrayList<>();
List<HlsMasterPlaylist.HlsUrl> selectedVariants = new ArrayList<>(masterPlaylist.variants);
ArrayList<HlsMasterPlaylist.HlsUrl> definiteVideoVariants = new ArrayList<>();
ArrayList<HlsMasterPlaylist.HlsUrl> definiteAudioOnlyVariants = new ArrayList<>();
for (int i = 0; i < selectedVariants.size(); i++) {
Variant variant = selectedVariants.get(i);
HlsMasterPlaylist.HlsUrl variant = selectedVariants.get(i);
if (variant.format.height > 0 || variantHasExplicitCodecWithPrefix(variant, "avc")) {
definiteVideoVariants.add(variant);
} else if (variantHasExplicitCodecWithPrefix(variant, "mp4a")) {
@ -354,25 +354,25 @@ import java.util.List;
// Leave the enabled variants unchanged. They're likely either all video or all audio.
}
if (!selectedVariants.isEmpty()) {
Variant[] variants = new Variant[selectedVariants.size()];
HlsMasterPlaylist.HlsUrl[] variants = new HlsMasterPlaylist.HlsUrl[selectedVariants.size()];
selectedVariants.toArray(variants);
sampleStreamWrappers.add(buildSampleStreamWrapper(C.TRACK_TYPE_DEFAULT, baseUri, variants,
masterPlaylist.muxedAudioFormat, masterPlaylist.muxedCaptionFormat));
}
// Build the audio stream wrapper if applicable.
List<Variant> audioVariants = masterPlaylist.audios;
List<HlsMasterPlaylist.HlsUrl> audioVariants = masterPlaylist.audios;
if (!audioVariants.isEmpty()) {
Variant[] variants = new Variant[audioVariants.size()];
HlsMasterPlaylist.HlsUrl[] variants = new HlsMasterPlaylist.HlsUrl[audioVariants.size()];
audioVariants.toArray(variants);
sampleStreamWrappers.add(buildSampleStreamWrapper(C.TRACK_TYPE_AUDIO, baseUri, variants, null,
null));
}
// Build the text stream wrapper if applicable.
List<Variant> subtitleVariants = masterPlaylist.subtitles;
List<HlsMasterPlaylist.HlsUrl> subtitleVariants = masterPlaylist.subtitles;
if (!subtitleVariants.isEmpty()) {
Variant[] variants = new Variant[subtitleVariants.size()];
HlsMasterPlaylist.HlsUrl[] variants = new HlsMasterPlaylist.HlsUrl[subtitleVariants.size()];
subtitleVariants.toArray(variants);
sampleStreamWrappers.add(buildSampleStreamWrapper(C.TRACK_TYPE_TEXT, baseUri, variants, null,
null));
@ -382,7 +382,7 @@ import java.util.List;
}
private HlsSampleStreamWrapper buildSampleStreamWrapper(int trackType, String baseUri,
Variant[] variants, Format muxedAudioFormat, Format muxedCaptionFormat) {
HlsMasterPlaylist.HlsUrl[] variants, Format muxedAudioFormat, Format muxedCaptionFormat) {
DataSource dataSource = dataSourceFactory.createDataSource();
HlsChunkSource defaultChunkSource = new HlsChunkSource(baseUri, variants, dataSource,
timestampAdjusterProvider);
@ -391,7 +391,8 @@ import java.util.List;
eventDispatcher);
}
private static boolean variantHasExplicitCodecWithPrefix(Variant variant, String prefix) {
private static boolean variantHasExplicitCodecWithPrefix(HlsMasterPlaylist.HlsUrl variant,
String prefix) {
String codecs = variant.codecs;
if (TextUtils.isEmpty(codecs)) {
return false;

View file

@ -24,15 +24,15 @@ import java.util.List;
*/
public final class HlsMasterPlaylist extends HlsPlaylist {
public final List<Variant> variants;
public final List<Variant> audios;
public final List<Variant> subtitles;
public final List<HlsUrl> variants;
public final List<HlsUrl> audios;
public final List<HlsUrl> subtitles;
public final Format muxedAudioFormat;
public final Format muxedCaptionFormat;
public HlsMasterPlaylist(String baseUri, List<Variant> variants, List<Variant> audios,
List<Variant> subtitles, Format muxedAudioFormat, Format muxedCaptionFormat) {
public HlsMasterPlaylist(String baseUri, List<HlsUrl> variants, List<HlsUrl> audios,
List<HlsUrl> subtitles, Format muxedAudioFormat, Format muxedCaptionFormat) {
super(baseUri, HlsPlaylist.TYPE_MASTER);
this.variants = Collections.unmodifiableList(variants);
this.audios = Collections.unmodifiableList(audios);
@ -41,4 +41,21 @@ public final class HlsMasterPlaylist extends HlsPlaylist {
this.muxedCaptionFormat = muxedCaptionFormat;
}
/**
* Represents a url in an HLS master playlist.
*/
public static final class HlsUrl {
public final String url;
public final Format format;
public final String codecs;
public HlsUrl(String url, Format format, String codecs) {
this.url = url;
this.format = format;
this.codecs = codecs;
}
}
}

View file

@ -122,9 +122,9 @@ public final class HlsPlaylistParser implements ParsingLoadable.Parser<HlsPlayli
private static HlsMasterPlaylist parseMasterPlaylist(LineIterator iterator, String baseUri)
throws IOException {
ArrayList<Variant> variants = new ArrayList<>();
ArrayList<Variant> audios = new ArrayList<>();
ArrayList<Variant> subtitles = new ArrayList<>();
ArrayList<HlsMasterPlaylist.HlsUrl> variants = new ArrayList<>();
ArrayList<HlsMasterPlaylist.HlsUrl> audios = new ArrayList<>();
ArrayList<HlsMasterPlaylist.HlsUrl> subtitles = new ArrayList<>();
int bitrate = 0;
String codecs = null;
int width = Format.NO_VALUE;
@ -163,7 +163,7 @@ public final class HlsPlaylistParser implements ParsingLoadable.Parser<HlsPlayli
String language = parseOptionalStringAttr(line, REGEX_LANGUAGE);
Format format = Format.createTextContainerFormat(subtitleName, MimeTypes.APPLICATION_M3U8,
MimeTypes.TEXT_VTT, null, bitrate, selectionFlags, language);
subtitles.add(new Variant(uri, format, codecs));
subtitles.add(new HlsMasterPlaylist.HlsUrl(uri, format, codecs));
} else if (TYPE_AUDIO.equals(type)) {
// We assume all audios belong to the same group.
String uri = parseOptionalStringAttr(line, REGEX_URI);
@ -174,7 +174,7 @@ public final class HlsPlaylistParser implements ParsingLoadable.Parser<HlsPlayli
null, null, audioBitrate, Format.NO_VALUE, Format.NO_VALUE, null, selectionFlags,
language);
if (uri != null) {
audios.add(new Variant(uri, format, codecs));
audios.add(new HlsMasterPlaylist.HlsUrl(uri, format, codecs));
} else {
muxedAudioFormat = format;
}
@ -207,7 +207,7 @@ public final class HlsPlaylistParser implements ParsingLoadable.Parser<HlsPlayli
}
Format format = Format.createVideoContainerFormat(name, MimeTypes.APPLICATION_M3U8, null,
null, bitrate, width, height, Format.NO_VALUE, null);
variants.add(new Variant(line, format, codecs));
variants.add(new HlsMasterPlaylist.HlsUrl(line, format, codecs));
bitrate = 0;
codecs = null;
name = null;

View file

@ -1,35 +0,0 @@
/*
* Copyright (C) 2016 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.google.android.exoplayer2.source.hls.playlist;
import com.google.android.exoplayer2.Format;
/**
* Variant stream reference.
*/
public final class Variant {
public final String url;
public final Format format;
public final String codecs;
public Variant(String url, Format format, String codecs) {
this.url = url;
this.format = format;
this.codecs = codecs;
}
}