diff --git a/libraries/exoplayer_rtsp/src/main/java/androidx/media3/exoplayer/rtsp/RtspMessageUtil.java b/libraries/exoplayer_rtsp/src/main/java/androidx/media3/exoplayer/rtsp/RtspMessageUtil.java index bdd6d4cd96..7c5b09fcf6 100644 --- a/libraries/exoplayer_rtsp/src/main/java/androidx/media3/exoplayer/rtsp/RtspMessageUtil.java +++ b/libraries/exoplayer_rtsp/src/main/java/androidx/media3/exoplayer/rtsp/RtspMessageUtil.java @@ -192,7 +192,7 @@ import java.util.regex.Pattern; } // The Uri must include a "@" if the user info is non-null. - String authorityWithUserInfo = checkNotNull(uri.getAuthority()); + String authorityWithUserInfo = checkNotNull(uri.getEncodedAuthority()); checkArgument(authorityWithUserInfo.contains("@")); String authority = Util.split(authorityWithUserInfo, "@")[1]; return uri.buildUpon().encodedAuthority(authority).build(); diff --git a/libraries/exoplayer_rtsp/src/test/java/androidx/media3/exoplayer/rtsp/RtspMessageUtilTest.java b/libraries/exoplayer_rtsp/src/test/java/androidx/media3/exoplayer/rtsp/RtspMessageUtilTest.java index 7439ea3eeb..02799e8853 100644 --- a/libraries/exoplayer_rtsp/src/test/java/androidx/media3/exoplayer/rtsp/RtspMessageUtilTest.java +++ b/libraries/exoplayer_rtsp/src/test/java/androidx/media3/exoplayer/rtsp/RtspMessageUtilTest.java @@ -449,6 +449,13 @@ public final class RtspMessageUtilTest { .isEqualTo(Uri.parse("rtsp://foo.bar:5050/foo.mkv")); } + @Test + public void removeUserInfo_withEncodedAtInUserInfo() { + Uri uri = Uri.parse("rtsp://user%40name:pass@foo.bar/foo.mkv"); + assertThat(RtspMessageUtil.removeUserInfo(uri)) + .isEqualTo(Uri.parse("rtsp://foo.bar/foo.mkv")); + } + @Test public void parseContentLengthHeader_withContentLengthOver31Bits_succeeds() throws Exception { String line = "Content-Length: 1000000000000000";