Check the type of the (non-initial) loaded HLS playlist
This prevents illegal casts. Issue:#2702 ------------- Created by MOE: https://github.com/google/moe MOE_MIGRATED_REVID=154078240
This commit is contained in:
parent
f0a72c4908
commit
d3fe20cc64
@ -70,7 +70,6 @@ public class HlsMediaPlaylistParserTest extends TestCase {
|
||||
try {
|
||||
HlsPlaylist playlist = new HlsPlaylistParser().parse(playlistUri, inputStream);
|
||||
assertNotNull(playlist);
|
||||
assertEquals(HlsPlaylist.TYPE_MEDIA, playlist.type);
|
||||
|
||||
HlsMediaPlaylist mediaPlaylist = (HlsMediaPlaylist) playlist;
|
||||
assertEquals(HlsMediaPlaylist.PLAYLIST_TYPE_VOD, mediaPlaylist.playlistType);
|
||||
|
@ -55,7 +55,7 @@ public final class HlsMasterPlaylist extends HlsPlaylist {
|
||||
|
||||
public HlsMasterPlaylist(String baseUri, List<HlsUrl> variants, List<HlsUrl> audios,
|
||||
List<HlsUrl> subtitles, Format muxedAudioFormat, List<Format> muxedCaptionFormats) {
|
||||
super(baseUri, HlsPlaylist.TYPE_MASTER);
|
||||
super(baseUri);
|
||||
this.variants = Collections.unmodifiableList(variants);
|
||||
this.audios = Collections.unmodifiableList(audios);
|
||||
this.subtitles = Collections.unmodifiableList(subtitles);
|
||||
|
@ -97,7 +97,7 @@ public final class HlsMediaPlaylist extends HlsPlaylist {
|
||||
long startTimeUs, boolean hasDiscontinuitySequence, int discontinuitySequence,
|
||||
int mediaSequence, int version, long targetDurationUs, boolean hasEndTag,
|
||||
boolean hasProgramDateTime, Segment initializationSegment, List<Segment> segments) {
|
||||
super(baseUri, HlsPlaylist.TYPE_MEDIA);
|
||||
super(baseUri);
|
||||
this.playlistType = playlistType;
|
||||
this.startTimeUs = startTimeUs;
|
||||
this.hasDiscontinuitySequence = hasDiscontinuitySequence;
|
||||
|
@ -15,30 +15,15 @@
|
||||
*/
|
||||
package com.google.android.exoplayer2.source.hls.playlist;
|
||||
|
||||
import android.support.annotation.IntDef;
|
||||
import java.lang.annotation.Retention;
|
||||
import java.lang.annotation.RetentionPolicy;
|
||||
|
||||
/**
|
||||
* Represents an HLS playlist.
|
||||
*/
|
||||
public abstract class HlsPlaylist {
|
||||
|
||||
/**
|
||||
* The type of playlist.
|
||||
*/
|
||||
@Retention(RetentionPolicy.SOURCE)
|
||||
@IntDef({TYPE_MASTER, TYPE_MEDIA})
|
||||
public @interface Type {}
|
||||
public static final int TYPE_MASTER = 0;
|
||||
public static final int TYPE_MEDIA = 1;
|
||||
|
||||
public final String baseUri;
|
||||
@Type public final int type;
|
||||
|
||||
protected HlsPlaylist(String baseUri, @Type int type) {
|
||||
protected HlsPlaylist(String baseUri) {
|
||||
this.baseUri = baseUri;
|
||||
this.type = type;
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -477,9 +477,15 @@ public final class HlsPlaylistTracker implements Loader.Callback<ParsingLoadable
|
||||
@Override
|
||||
public void onLoadCompleted(ParsingLoadable<HlsPlaylist> loadable, long elapsedRealtimeMs,
|
||||
long loadDurationMs) {
|
||||
processLoadedPlaylist((HlsMediaPlaylist) loadable.getResult());
|
||||
HlsPlaylist result = loadable.getResult();
|
||||
if (result instanceof HlsMediaPlaylist) {
|
||||
processLoadedPlaylist((HlsMediaPlaylist) result);
|
||||
eventDispatcher.loadCompleted(loadable.dataSpec, C.DATA_TYPE_MANIFEST, elapsedRealtimeMs,
|
||||
loadDurationMs, loadable.bytesLoaded());
|
||||
} else {
|
||||
onLoadError(loadable, elapsedRealtimeMs, loadDurationMs,
|
||||
new ParserException("Loaded playlist has unexpected type."));
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
|
Loading…
x
Reference in New Issue
Block a user