From 7edc4b1f1e9eeeafd03947cebc7c8b4389a83fde Mon Sep 17 00:00:00 2001 From: olly Date: Mon, 27 Jul 2020 17:04:23 +0100 Subject: [PATCH] FLV: Ignore invalid SCRIPTDATA name type, rather than fail playback Issue: #7675 PiperOrigin-RevId: 323371286 --- RELEASENOTES.md | 2 ++ .../exoplayer2/extractor/flv/ScriptTagPayloadReader.java | 7 +++---- 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/RELEASENOTES.md b/RELEASENOTES.md index 59f53d3717..0a436987a1 100644 --- a/RELEASENOTES.md +++ b/RELEASENOTES.md @@ -206,6 +206,8 @@ * Ogg: Allow non-contiguous pages ([#7230](https://github.com/google/ExoPlayer/issues/7230)). * Matroska: Remove support for "Invisible" block header flag. +* FLV: Ignore SCRIPTDATA segments with invalid name types, rather than failing + playback ([#7675](https://github.com/google/ExoPlayer/issues/7675)). * Extractors: * Add `IndexSeeker` for accurate seeks in VBR MP3 streams ([#6787](https://github.com/google/ExoPlayer/issues/6787)). This seeker diff --git a/library/extractor/src/main/java/com/google/android/exoplayer2/extractor/flv/ScriptTagPayloadReader.java b/library/extractor/src/main/java/com/google/android/exoplayer2/extractor/flv/ScriptTagPayloadReader.java index c6e654dd80..54594ed50f 100644 --- a/library/extractor/src/main/java/com/google/android/exoplayer2/extractor/flv/ScriptTagPayloadReader.java +++ b/library/extractor/src/main/java/com/google/android/exoplayer2/extractor/flv/ScriptTagPayloadReader.java @@ -17,7 +17,6 @@ package com.google.android.exoplayer2.extractor.flv; import androidx.annotation.Nullable; import com.google.android.exoplayer2.C; -import com.google.android.exoplayer2.ParserException; import com.google.android.exoplayer2.extractor.DummyTrackOutput; import com.google.android.exoplayer2.util.ParsableByteArray; import java.util.ArrayList; @@ -65,11 +64,11 @@ import java.util.Map; } @Override - protected boolean parsePayload(ParsableByteArray data, long timeUs) throws ParserException { + protected boolean parsePayload(ParsableByteArray data, long timeUs) { int nameType = readAmfType(data); if (nameType != AMF_TYPE_STRING) { - // Should never happen. - throw new ParserException(); + // Ignore segments with unexpected name type. + return false; } String name = readAmfString(data); if (!NAME_METADATA.equals(name)) {