From d3328456a75d38b01d43224af5abd73648cc9058 Mon Sep 17 00:00:00 2001 From: michaelkatz Date: Tue, 22 Apr 2025 05:52:37 -0700 Subject: [PATCH] Allow trailing whitespace in RTSP SessionDescription lines This CL fixes the parser for the RTSP SessionDescription such that it will not choke if there is trailing whitespace in the lines. PiperOrigin-RevId: 750158624 --- RELEASENOTES.md | 3 +++ .../rtsp/SessionDescriptionParser.java | 2 ++ .../rtsp/SessionDescriptionTest.java | 19 +++++++++++++++++++ 3 files changed, 24 insertions(+) diff --git a/RELEASENOTES.md b/RELEASENOTES.md index 6f9f2e5924..f9bc9b1182 100644 --- a/RELEASENOTES.md +++ b/RELEASENOTES.md @@ -73,6 +73,9 @@ * DASH extension: * Smooth Streaming extension: * RTSP extension: + * Add parsing support for SessionDescriptions containing lines with + trailing whitespace characters + ([#2357](https://github.com/androidx/media/issues/2357)). * Decoder extensions (FFmpeg, VP9, AV1, etc.): * MIDI extension: * Leanback extension: diff --git a/libraries/exoplayer_rtsp/src/main/java/androidx/media3/exoplayer/rtsp/SessionDescriptionParser.java b/libraries/exoplayer_rtsp/src/main/java/androidx/media3/exoplayer/rtsp/SessionDescriptionParser.java index 411fef6ffa..5e1bb6e3b0 100644 --- a/libraries/exoplayer_rtsp/src/main/java/androidx/media3/exoplayer/rtsp/SessionDescriptionParser.java +++ b/libraries/exoplayer_rtsp/src/main/java/androidx/media3/exoplayer/rtsp/SessionDescriptionParser.java @@ -83,6 +83,8 @@ import java.util.regex.Pattern; // Lines are separated by an CRLF. for (String line : RtspMessageUtil.splitRtspMessageBody(sdpString)) { + line = line.trim(); + if ("".equals(line)) { continue; } diff --git a/libraries/exoplayer_rtsp/src/test/java/androidx/media3/exoplayer/rtsp/SessionDescriptionTest.java b/libraries/exoplayer_rtsp/src/test/java/androidx/media3/exoplayer/rtsp/SessionDescriptionTest.java index cf97e79dbf..1cc5289d0c 100644 --- a/libraries/exoplayer_rtsp/src/test/java/androidx/media3/exoplayer/rtsp/SessionDescriptionTest.java +++ b/libraries/exoplayer_rtsp/src/test/java/androidx/media3/exoplayer/rtsp/SessionDescriptionTest.java @@ -342,6 +342,25 @@ public class SessionDescriptionTest { assertThat(sessionDescription.mediaDescriptionList.get(0).mediaTitle).isNull(); } + @Test + public void parse_sdpStringWithTrailingWhitespace_succeeds() throws Exception { + String testMediaSdpInfo = + "v=0\r\n" + + "o=MNobody 2890844526 2890842807 IN IP4 192.0.2.46\r\n" + + "s=SDP Seminar\r\n" + + "i=Sun Apr 20 12:59:09 2025\n\r\n" + + "t=0 0\r\n" + + "a=control:*\r\n" + + "m=audio 3456 RTP/AVP 0\r\n" + + "i=\r\n" + + "a=rtpmap:97 AC3/44100 \r\n"; + + SessionDescription sessionDescription = SessionDescriptionParser.parse(testMediaSdpInfo); + + assertThat(sessionDescription.sessionInfo).isEqualTo("Sun Apr 20 12:59:09 2025"); + assertThat(sessionDescription.mediaDescriptionList.get(0).mediaTitle).isNull(); + } + @Test public void parse_sdpStringWithEmptySessionAttribute_throwsParserException() { String testMediaSdpInfo =