From ab00a4da03bfc5ddcc2ed29b0be31cc6308dabe7 Mon Sep 17 00:00:00 2001 From: Oliver Woodman Date: Wed, 26 Nov 2014 11:23:15 +0000 Subject: [PATCH] Allow non-strict webvtt parsing. --- .../exoplayer/text/webvtt/WebvttParser.java | 18 +++++++++++++++++- 1 file changed, 17 insertions(+), 1 deletion(-) diff --git a/library/src/main/java/com/google/android/exoplayer/text/webvtt/WebvttParser.java b/library/src/main/java/com/google/android/exoplayer/text/webvtt/WebvttParser.java index baace215f5..036c6116a1 100644 --- a/library/src/main/java/com/google/android/exoplayer/text/webvtt/WebvttParser.java +++ b/library/src/main/java/com/google/android/exoplayer/text/webvtt/WebvttParser.java @@ -63,6 +63,16 @@ public class WebvttParser implements SubtitleParser { private static final Pattern MEDIA_TIMESTAMP_OFFSET = Pattern.compile(OFFSET + "\\d+"); private static final Pattern MEDIA_TIMESTAMP = Pattern.compile("MPEGTS:\\d+"); + private final boolean strictParsing; + + public WebvttParser() { + this(true); + } + + public WebvttParser(boolean strictParsing) { + this.strictParsing = strictParsing; + } + @Override public WebvttSubtitle parse(InputStream inputStream, String inputEncoding, long startTimeUs) throws IOException { @@ -108,7 +118,7 @@ public class WebvttParser implements SubtitleParser { Matcher matcher = WEBVTT_METADATA_HEADER.matcher(line); if (!matcher.find()) { - throw new ParserException("Expected webvtt metadata header; got: " + line); + handleNoncompliantLine(line); } if (line.startsWith("X-TIMESTAMP-MAP")) { @@ -182,6 +192,12 @@ public class WebvttParser implements SubtitleParser { return startTimeUs; } + protected void handleNoncompliantLine(String line) throws ParserException { + if (strictParsing) { + throw new ParserException("Unexpected line: " + line); + } + } + private static long parseTimestampUs(String s) throws NumberFormatException { if (!s.matches(WEBVTT_TIMESTAMP_STRING)) { throw new NumberFormatException("has invalid format");