mirror of
https://github.com/samsonjs/media.git
synced 2026-04-01 10:35:48 +00:00
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:
parent
bd76ec8b13
commit
fa500791c5
6 changed files with 46 additions and 63 deletions
|
|
@ -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());
|
||||
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
}
|
||||
|
||||
}
|
||||
Loading…
Reference in a new issue