From e780a32de43911e354d9adedae36a86a0fefa7c7 Mon Sep 17 00:00:00 2001 From: claincly Date: Mon, 4 Apr 2022 17:19:35 +0100 Subject: [PATCH] Support colon (:) in RTSP timing. Some RTSP servers use `npt`: notation rather than `npt=` PiperOrigin-RevId: 439333319 --- .../androidx/media3/exoplayer/rtsp/RtspSessionTiming.java | 3 ++- .../media3/exoplayer/rtsp/RtspSessionTimingTest.java | 7 +++++++ 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/libraries/exoplayer_rtsp/src/main/java/androidx/media3/exoplayer/rtsp/RtspSessionTiming.java b/libraries/exoplayer_rtsp/src/main/java/androidx/media3/exoplayer/rtsp/RtspSessionTiming.java index 60ff5a9101..a3493e9525 100644 --- a/libraries/exoplayer_rtsp/src/main/java/androidx/media3/exoplayer/rtsp/RtspSessionTiming.java +++ b/libraries/exoplayer_rtsp/src/main/java/androidx/media3/exoplayer/rtsp/RtspSessionTiming.java @@ -38,8 +38,9 @@ import java.util.regex.Pattern; new RtspSessionTiming(/* startTimeMs= */ 0, /* stopTimeMs= */ C.TIME_UNSET); // We only support npt=xxx-[xxx], but not npt=-xxx. See RFC2326 Section 3.6. + // Supports both npt= and npt: identifier. private static final Pattern NPT_RANGE_PATTERN = - Pattern.compile("npt=([.\\d]+|now)\\s?-\\s?([.\\d]+)?"); + Pattern.compile("npt[:=]([.\\d]+|now)\\s?-\\s?([.\\d]+)?"); private static final String START_TIMING_NTP_FORMAT = "npt=%.3f-"; private static final long LIVE_START_TIME = 0; diff --git a/libraries/exoplayer_rtsp/src/test/java/androidx/media3/exoplayer/rtsp/RtspSessionTimingTest.java b/libraries/exoplayer_rtsp/src/test/java/androidx/media3/exoplayer/rtsp/RtspSessionTimingTest.java index ad7c05fee0..e9ac8cf287 100644 --- a/libraries/exoplayer_rtsp/src/test/java/androidx/media3/exoplayer/rtsp/RtspSessionTimingTest.java +++ b/libraries/exoplayer_rtsp/src/test/java/androidx/media3/exoplayer/rtsp/RtspSessionTimingTest.java @@ -54,6 +54,13 @@ public class RtspSessionTimingTest { assertThat(sessionTiming.isLive()).isFalse(); } + @Test + public void parseTiming_withRangeTimingAndColonSeparator() throws Exception { + RtspSessionTiming sessionTiming = RtspSessionTiming.parseTiming("npt:0.000-32.054"); + assertThat(sessionTiming.getDurationMs()).isEqualTo(32054); + assertThat(sessionTiming.isLive()).isFalse(); + } + @Test public void parseTiming_withInvalidRangeTiming_throwsIllegalArgumentException() { assertThrows(