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(