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 {
|
try {
|
||||||
HlsPlaylist playlist = new HlsPlaylistParser().parse(playlistUri, inputStream);
|
HlsPlaylist playlist = new HlsPlaylistParser().parse(playlistUri, inputStream);
|
||||||
assertNotNull(playlist);
|
assertNotNull(playlist);
|
||||||
assertEquals(HlsPlaylist.TYPE_MEDIA, playlist.type);
|
|
||||||
|
|
||||||
HlsMediaPlaylist mediaPlaylist = (HlsMediaPlaylist) playlist;
|
HlsMediaPlaylist mediaPlaylist = (HlsMediaPlaylist) playlist;
|
||||||
assertEquals(HlsMediaPlaylist.PLAYLIST_TYPE_VOD, mediaPlaylist.playlistType);
|
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,
|
public HlsMasterPlaylist(String baseUri, List<HlsUrl> variants, List<HlsUrl> audios,
|
||||||
List<HlsUrl> subtitles, Format muxedAudioFormat, List<Format> muxedCaptionFormats) {
|
List<HlsUrl> subtitles, Format muxedAudioFormat, List<Format> muxedCaptionFormats) {
|
||||||
super(baseUri, HlsPlaylist.TYPE_MASTER);
|
super(baseUri);
|
||||||
this.variants = Collections.unmodifiableList(variants);
|
this.variants = Collections.unmodifiableList(variants);
|
||||||
this.audios = Collections.unmodifiableList(audios);
|
this.audios = Collections.unmodifiableList(audios);
|
||||||
this.subtitles = Collections.unmodifiableList(subtitles);
|
this.subtitles = Collections.unmodifiableList(subtitles);
|
||||||
|
@ -97,7 +97,7 @@ public final class HlsMediaPlaylist extends HlsPlaylist {
|
|||||||
long startTimeUs, boolean hasDiscontinuitySequence, int discontinuitySequence,
|
long startTimeUs, boolean hasDiscontinuitySequence, int discontinuitySequence,
|
||||||
int mediaSequence, int version, long targetDurationUs, boolean hasEndTag,
|
int mediaSequence, int version, long targetDurationUs, boolean hasEndTag,
|
||||||
boolean hasProgramDateTime, Segment initializationSegment, List<Segment> segments) {
|
boolean hasProgramDateTime, Segment initializationSegment, List<Segment> segments) {
|
||||||
super(baseUri, HlsPlaylist.TYPE_MEDIA);
|
super(baseUri);
|
||||||
this.playlistType = playlistType;
|
this.playlistType = playlistType;
|
||||||
this.startTimeUs = startTimeUs;
|
this.startTimeUs = startTimeUs;
|
||||||
this.hasDiscontinuitySequence = hasDiscontinuitySequence;
|
this.hasDiscontinuitySequence = hasDiscontinuitySequence;
|
||||||
|
@ -15,30 +15,15 @@
|
|||||||
*/
|
*/
|
||||||
package com.google.android.exoplayer2.source.hls.playlist;
|
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.
|
* Represents an HLS playlist.
|
||||||
*/
|
*/
|
||||||
public abstract class HlsPlaylist {
|
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;
|
public final String baseUri;
|
||||||
@Type public final int type;
|
|
||||||
|
|
||||||
protected HlsPlaylist(String baseUri, @Type int type) {
|
protected HlsPlaylist(String baseUri) {
|
||||||
this.baseUri = baseUri;
|
this.baseUri = baseUri;
|
||||||
this.type = type;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -477,9 +477,15 @@ public final class HlsPlaylistTracker implements Loader.Callback<ParsingLoadable
|
|||||||
@Override
|
@Override
|
||||||
public void onLoadCompleted(ParsingLoadable<HlsPlaylist> loadable, long elapsedRealtimeMs,
|
public void onLoadCompleted(ParsingLoadable<HlsPlaylist> loadable, long elapsedRealtimeMs,
|
||||||
long loadDurationMs) {
|
long loadDurationMs) {
|
||||||
processLoadedPlaylist((HlsMediaPlaylist) loadable.getResult());
|
HlsPlaylist result = loadable.getResult();
|
||||||
eventDispatcher.loadCompleted(loadable.dataSpec, C.DATA_TYPE_MANIFEST, elapsedRealtimeMs,
|
if (result instanceof HlsMediaPlaylist) {
|
||||||
loadDurationMs, loadable.bytesLoaded());
|
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
|
@Override
|
||||||
|
Loading…
x
Reference in New Issue
Block a user