Commit fa500791 by aquilescanta Committed by Oliver Woodman

Rename Variant to HlsUrl and move into HlsMasterPlaylist

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=132049545
parent bd76ec8b
...@@ -56,7 +56,7 @@ public class HlsMasterPlaylistParserTest extends TestCase { ...@@ -56,7 +56,7 @@ public class HlsMasterPlaylistParserTest extends TestCase {
HlsMasterPlaylist masterPlaylist = (HlsMasterPlaylist) playlist; HlsMasterPlaylist masterPlaylist = (HlsMasterPlaylist) playlist;
List<Variant> variants = masterPlaylist.variants; List<HlsMasterPlaylist.HlsUrl> variants = masterPlaylist.variants;
assertNotNull(variants); assertNotNull(variants);
assertEquals(5, variants.size()); assertEquals(5, variants.size());
......
...@@ -31,9 +31,9 @@ import com.google.android.exoplayer2.source.TrackGroup; ...@@ -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.Chunk;
import com.google.android.exoplayer2.source.chunk.ChunkedTrackBlacklistUtil; import com.google.android.exoplayer2.source.chunk.ChunkedTrackBlacklistUtil;
import com.google.android.exoplayer2.source.chunk.DataChunk; 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.HlsMediaPlaylist;
import com.google.android.exoplayer2.source.hls.playlist.HlsPlaylistParser; 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.BaseTrackSelection;
import com.google.android.exoplayer2.trackselection.TrackSelection; import com.google.android.exoplayer2.trackselection.TrackSelection;
import com.google.android.exoplayer2.upstream.DataSource; import com.google.android.exoplayer2.upstream.DataSource;
...@@ -107,7 +107,7 @@ import java.util.Locale; ...@@ -107,7 +107,7 @@ import java.util.Locale;
private final DataSource dataSource; private final DataSource dataSource;
private final HlsPlaylistParser playlistParser; private final HlsPlaylistParser playlistParser;
private final PtsTimestampAdjusterProvider timestampAdjusterProvider; private final PtsTimestampAdjusterProvider timestampAdjusterProvider;
private final Variant[] variants; private final HlsMasterPlaylist.HlsUrl[] variants;
private final HlsMediaPlaylist[] variantPlaylists; private final HlsMediaPlaylist[] variantPlaylists;
private final TrackGroup trackGroup; private final TrackGroup trackGroup;
private final long[] variantLastPlaylistLoadTimesMs; private final long[] variantLastPlaylistLoadTimesMs;
...@@ -135,7 +135,7 @@ import java.util.Locale; ...@@ -135,7 +135,7 @@ import java.util.Locale;
* multiple {@link HlsChunkSource}s are used for a single playback, they should all share the * multiple {@link HlsChunkSource}s are used for a single playback, they should all share the
* same provider. * same provider.
*/ */
public HlsChunkSource(String baseUri, Variant[] variants, DataSource dataSource, public HlsChunkSource(String baseUri, HlsMasterPlaylist.HlsUrl[] variants, DataSource dataSource,
PtsTimestampAdjusterProvider timestampAdjusterProvider) { PtsTimestampAdjusterProvider timestampAdjusterProvider) {
this.baseUri = baseUri; this.baseUri = baseUri;
this.variants = variants; this.variants = variants;
......
...@@ -34,7 +34,6 @@ import com.google.android.exoplayer2.source.hls.playlist.HlsMasterPlaylist; ...@@ -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.HlsMediaPlaylist;
import com.google.android.exoplayer2.source.hls.playlist.HlsPlaylist; 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.HlsPlaylistParser;
import com.google.android.exoplayer2.source.hls.playlist.Variant;
import com.google.android.exoplayer2.trackselection.TrackSelection; import com.google.android.exoplayer2.trackselection.TrackSelection;
import com.google.android.exoplayer2.upstream.Allocator; import com.google.android.exoplayer2.upstream.Allocator;
import com.google.android.exoplayer2.upstream.DataSource; import com.google.android.exoplayer2.upstream.DataSource;
...@@ -321,7 +320,8 @@ import java.util.List; ...@@ -321,7 +320,8 @@ import java.util.List;
if (playlist instanceof HlsMediaPlaylist) { if (playlist instanceof HlsMediaPlaylist) {
Format format = Format.createContainerFormat("0", MimeTypes.APPLICATION_M3U8, null, null, Format format = Format.createContainerFormat("0", MimeTypes.APPLICATION_M3U8, null, null,
Format.NO_VALUE); 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, sampleStreamWrappers.add(buildSampleStreamWrapper(C.TRACK_TYPE_DEFAULT, baseUri, variants,
null, null)); null, null));
return sampleStreamWrappers; return sampleStreamWrappers;
...@@ -330,11 +330,11 @@ import java.util.List; ...@@ -330,11 +330,11 @@ import java.util.List;
HlsMasterPlaylist masterPlaylist = (HlsMasterPlaylist) playlist; HlsMasterPlaylist masterPlaylist = (HlsMasterPlaylist) playlist;
// Build the default stream wrapper. // Build the default stream wrapper.
List<Variant> selectedVariants = new ArrayList<>(masterPlaylist.variants); List<HlsMasterPlaylist.HlsUrl> selectedVariants = new ArrayList<>(masterPlaylist.variants);
ArrayList<Variant> definiteVideoVariants = new ArrayList<>(); ArrayList<HlsMasterPlaylist.HlsUrl> definiteVideoVariants = new ArrayList<>();
ArrayList<Variant> definiteAudioOnlyVariants = new ArrayList<>(); ArrayList<HlsMasterPlaylist.HlsUrl> definiteAudioOnlyVariants = new ArrayList<>();
for (int i = 0; i < selectedVariants.size(); i++) { 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")) { if (variant.format.height > 0 || variantHasExplicitCodecWithPrefix(variant, "avc")) {
definiteVideoVariants.add(variant); definiteVideoVariants.add(variant);
} else if (variantHasExplicitCodecWithPrefix(variant, "mp4a")) { } else if (variantHasExplicitCodecWithPrefix(variant, "mp4a")) {
...@@ -354,25 +354,25 @@ import java.util.List; ...@@ -354,25 +354,25 @@ import java.util.List;
// 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.
} }
if (!selectedVariants.isEmpty()) { if (!selectedVariants.isEmpty()) {
Variant[] variants = new Variant[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, sampleStreamWrappers.add(buildSampleStreamWrapper(C.TRACK_TYPE_DEFAULT, baseUri, variants,
masterPlaylist.muxedAudioFormat, masterPlaylist.muxedCaptionFormat)); masterPlaylist.muxedAudioFormat, masterPlaylist.muxedCaptionFormat));
} }
// Build the audio stream wrapper if applicable. // Build the audio stream wrapper if applicable.
List<Variant> audioVariants = masterPlaylist.audios; List<HlsMasterPlaylist.HlsUrl> audioVariants = masterPlaylist.audios;
if (!audioVariants.isEmpty()) { if (!audioVariants.isEmpty()) {
Variant[] variants = new Variant[audioVariants.size()]; HlsMasterPlaylist.HlsUrl[] variants = new HlsMasterPlaylist.HlsUrl[audioVariants.size()];
audioVariants.toArray(variants); audioVariants.toArray(variants);
sampleStreamWrappers.add(buildSampleStreamWrapper(C.TRACK_TYPE_AUDIO, baseUri, variants, null, sampleStreamWrappers.add(buildSampleStreamWrapper(C.TRACK_TYPE_AUDIO, baseUri, variants, null,
null)); null));
} }
// Build the text stream wrapper if applicable. // Build the text stream wrapper if applicable.
List<Variant> subtitleVariants = masterPlaylist.subtitles; List<HlsMasterPlaylist.HlsUrl> subtitleVariants = masterPlaylist.subtitles;
if (!subtitleVariants.isEmpty()) { if (!subtitleVariants.isEmpty()) {
Variant[] variants = new Variant[subtitleVariants.size()]; HlsMasterPlaylist.HlsUrl[] variants = new HlsMasterPlaylist.HlsUrl[subtitleVariants.size()];
subtitleVariants.toArray(variants); subtitleVariants.toArray(variants);
sampleStreamWrappers.add(buildSampleStreamWrapper(C.TRACK_TYPE_TEXT, baseUri, variants, null, sampleStreamWrappers.add(buildSampleStreamWrapper(C.TRACK_TYPE_TEXT, baseUri, variants, null,
null)); null));
...@@ -382,7 +382,7 @@ import java.util.List; ...@@ -382,7 +382,7 @@ import java.util.List;
} }
private HlsSampleStreamWrapper buildSampleStreamWrapper(int trackType, String baseUri, private HlsSampleStreamWrapper buildSampleStreamWrapper(int trackType, String baseUri,
Variant[] variants, Format muxedAudioFormat, Format muxedCaptionFormat) { HlsMasterPlaylist.HlsUrl[] variants, Format muxedAudioFormat, Format muxedCaptionFormat) {
DataSource dataSource = dataSourceFactory.createDataSource(); DataSource dataSource = dataSourceFactory.createDataSource();
HlsChunkSource defaultChunkSource = new HlsChunkSource(baseUri, variants, dataSource, HlsChunkSource defaultChunkSource = new HlsChunkSource(baseUri, variants, dataSource,
timestampAdjusterProvider); timestampAdjusterProvider);
...@@ -391,7 +391,8 @@ import java.util.List; ...@@ -391,7 +391,8 @@ import java.util.List;
eventDispatcher); eventDispatcher);
} }
private static boolean variantHasExplicitCodecWithPrefix(Variant variant, String prefix) { private static boolean variantHasExplicitCodecWithPrefix(HlsMasterPlaylist.HlsUrl variant,
String prefix) {
String codecs = variant.codecs; String codecs = variant.codecs;
if (TextUtils.isEmpty(codecs)) { if (TextUtils.isEmpty(codecs)) {
return false; return false;
......
...@@ -24,15 +24,15 @@ import java.util.List; ...@@ -24,15 +24,15 @@ import java.util.List;
*/ */
public final class HlsMasterPlaylist extends HlsPlaylist { public final class HlsMasterPlaylist extends HlsPlaylist {
public final List<Variant> variants; public final List<HlsUrl> variants;
public final List<Variant> audios; public final List<HlsUrl> audios;
public final List<Variant> subtitles; public final List<HlsUrl> subtitles;
public final Format muxedAudioFormat; public final Format muxedAudioFormat;
public final Format muxedCaptionFormat; public final Format muxedCaptionFormat;
public HlsMasterPlaylist(String baseUri, List<Variant> variants, List<Variant> audios, public HlsMasterPlaylist(String baseUri, List<HlsUrl> variants, List<HlsUrl> audios,
List<Variant> subtitles, Format muxedAudioFormat, Format muxedCaptionFormat) { List<HlsUrl> subtitles, Format muxedAudioFormat, Format muxedCaptionFormat) {
super(baseUri, HlsPlaylist.TYPE_MASTER); super(baseUri, HlsPlaylist.TYPE_MASTER);
this.variants = Collections.unmodifiableList(variants); this.variants = Collections.unmodifiableList(variants);
this.audios = Collections.unmodifiableList(audios); this.audios = Collections.unmodifiableList(audios);
...@@ -41,4 +41,21 @@ public final class HlsMasterPlaylist extends HlsPlaylist { ...@@ -41,4 +41,21 @@ public final class HlsMasterPlaylist extends HlsPlaylist {
this.muxedCaptionFormat = muxedCaptionFormat; 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;
}
}
} }
...@@ -122,9 +122,9 @@ public final class HlsPlaylistParser implements ParsingLoadable.Parser<HlsPlayli ...@@ -122,9 +122,9 @@ public final class HlsPlaylistParser implements ParsingLoadable.Parser<HlsPlayli
private static HlsMasterPlaylist parseMasterPlaylist(LineIterator iterator, String baseUri) private static HlsMasterPlaylist parseMasterPlaylist(LineIterator iterator, String baseUri)
throws IOException { throws IOException {
ArrayList<Variant> variants = new ArrayList<>(); ArrayList<HlsMasterPlaylist.HlsUrl> variants = new ArrayList<>();
ArrayList<Variant> audios = new ArrayList<>(); ArrayList<HlsMasterPlaylist.HlsUrl> audios = new ArrayList<>();
ArrayList<Variant> subtitles = new ArrayList<>(); ArrayList<HlsMasterPlaylist.HlsUrl> subtitles = new ArrayList<>();
int bitrate = 0; int bitrate = 0;
String codecs = null; String codecs = null;
int width = Format.NO_VALUE; int width = Format.NO_VALUE;
...@@ -163,7 +163,7 @@ public final class HlsPlaylistParser implements ParsingLoadable.Parser<HlsPlayli ...@@ -163,7 +163,7 @@ public final class HlsPlaylistParser implements ParsingLoadable.Parser<HlsPlayli
String language = parseOptionalStringAttr(line, REGEX_LANGUAGE); String language = parseOptionalStringAttr(line, REGEX_LANGUAGE);
Format format = Format.createTextContainerFormat(subtitleName, MimeTypes.APPLICATION_M3U8, Format format = Format.createTextContainerFormat(subtitleName, MimeTypes.APPLICATION_M3U8,
MimeTypes.TEXT_VTT, null, bitrate, selectionFlags, language); 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)) { } else if (TYPE_AUDIO.equals(type)) {
// We assume all audios belong to the same group. // We assume all audios belong to the same group.
String uri = parseOptionalStringAttr(line, REGEX_URI); String uri = parseOptionalStringAttr(line, REGEX_URI);
...@@ -174,7 +174,7 @@ public final class HlsPlaylistParser implements ParsingLoadable.Parser<HlsPlayli ...@@ -174,7 +174,7 @@ public final class HlsPlaylistParser implements ParsingLoadable.Parser<HlsPlayli
null, null, audioBitrate, Format.NO_VALUE, Format.NO_VALUE, null, selectionFlags, null, null, audioBitrate, Format.NO_VALUE, Format.NO_VALUE, null, selectionFlags,
language); language);
if (uri != null) { if (uri != null) {
audios.add(new Variant(uri, format, codecs)); audios.add(new HlsMasterPlaylist.HlsUrl(uri, format, codecs));
} else { } else {
muxedAudioFormat = format; muxedAudioFormat = format;
} }
...@@ -207,7 +207,7 @@ public final class HlsPlaylistParser implements ParsingLoadable.Parser<HlsPlayli ...@@ -207,7 +207,7 @@ public final class HlsPlaylistParser implements ParsingLoadable.Parser<HlsPlayli
} }
Format format = Format.createVideoContainerFormat(name, MimeTypes.APPLICATION_M3U8, null, Format format = Format.createVideoContainerFormat(name, MimeTypes.APPLICATION_M3U8, null,
null, bitrate, width, height, Format.NO_VALUE, 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; bitrate = 0;
codecs = null; codecs = null;
name = null; name = null;
......
/*
* 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;
}
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or sign in to comment