androidx / media

Jetpack Media3 support libraries for media use cases, including ExoPlayer, an extensible media player for Android
Apache License 2.0
1.34k stars 315 forks source link

RTSP sdp parsing exception #1472

Open hibate opened 1 week ago

hibate commented 1 week ago

Version

Media3 1.3.1

More version details

The TP-LINK network camera, when using rtsp connection, there is an exception in parsing sdp. Through breakpoint tracking, the complete sdp data is as follows:

v=0
o=- 14665860 31787219 1 IN IP4 192.168.1.100
s=Session streamed by "TP-LINK RTSP Server"
t=0 0
m=video 0 RTP/AVP 96
c=IN IP4 0.0.0.0
b=AS:4096
a=range:npt=0-
a=control:track1
a=rtpmap:96 H264/90000
a=fmtp:96 packetization-mode=1; profile-level-id=640016; sprop-parameter-sets=Z2QAFqzGoCgPaEAAAAMAQAAAB6E=,aOqPLA==
m=audio 0 RTP/AVP 8
a=rtpmap:8 PCMA/8000
a=control:track2
m=application/TP-LINK 0 RTP/AVP smart/1/90000
a=rtpmap:95 TP-LINK/90000
a=control:track3

An error occurred when parsing the following media description, which does not comply with the rules of RFC 8866 Section 5.14:

m=application/TP-LINK 0 RTP/AVP smart/1/90000

FFmpeg ignored this part when parsing because the media type application/TP-LINK is not one of the media types allowed by FFmpeg: video, audio, application, text

SessionDescriptionParser did not ignore the above situation when parsing

Devices that reproduce the issue

All devices

Devices that do not reproduce the issue

None

Reproducible in the demo app?

Not tested

Reproduction steps

Expected result

Media playback successful

Actual result

Playback error
  androidx.media3.exoplayer.ExoPlaybackException: Source error
      at androidx.media3.exoplayer.ExoPlayerImplInternal.handleIoException(ExoPlayerImplInternal.java:717)
      at androidx.media3.exoplayer.ExoPlayerImplInternal.handleMessage(ExoPlayerImplInternal.java:693)
      at android.os.Handler.dispatchMessage(Handler.java:102)
      at android.os.Looper.loopOnce(Looper.java:201)
      at android.os.Looper.loop(Looper.java:288)
      at android.os.HandlerThread.run(HandlerThread.java:67)
  Caused by: java.io.IOException: androidx.media3.common.ParserException: Malformed SDP media description line: application/TP-LINK 0 RTP/AVP smart/1/90000{contentIsMalformed=true, dataType=4}
      at androidx.media3.exoplayer.rtsp.RtspMediaPeriod$InternalListener.onSessionTimelineRequestFailed(RtspMediaPeriod.java:699)
      at androidx.media3.exoplayer.rtsp.RtspClient.dispatchRtspError(RtspClient.java:336)
      at androidx.media3.exoplayer.rtsp.RtspClient.-$$Nest$mdispatchRtspError(Unknown Source:0)
      at androidx.media3.exoplayer.rtsp.RtspClient$MessageListener.handleRtspResponse(RtspClient.java:696)
      at androidx.media3.exoplayer.rtsp.RtspClient$MessageListener.handleRtspMessage(RtspClient.java:529)
      at androidx.media3.exoplayer.rtsp.RtspClient$MessageListener.lambda$onRtspMessageReceived$0(RtspClient.java:522)
      at androidx.media3.exoplayer.rtsp.RtspClient$MessageListener.$r8$lambda$8deRm6rk5jv7dwvT8Gw1eQhwNr8(Unknown Source:0)
      at androidx.media3.exoplayer.rtsp.RtspClient$MessageListener$$ExternalSyntheticLambda0.run(D8$$SyntheticClass:0)
      at android.os.Handler.handleCallback(Handler.java:942)
      at android.os.Handler.dispatchMessage(Handler.java:99)
      at android.os.Looper.loopOnce(Looper.java:201)
      at android.os.Looper.loop(Looper.java:288)
      at android.os.HandlerThread.run(HandlerThread.java:67)
  Caused by: androidx.media3.exoplayer.rtsp.RtspMediaSource$RtspPlaybackException: androidx.media3.common.ParserException: Malformed SDP media description line: application/TP-LINK 0 RTP/AVP smart/1/90000{contentIsMalformed=true, dataType=4}
      at androidx.media3.exoplayer.rtsp.RtspClient$MessageListener.handleRtspResponse(RtspClient.java:696)
      at androidx.media3.exoplayer.rtsp.RtspClient$MessageListener.handleRtspMessage(RtspClient.java:529)
      at androidx.media3.exoplayer.rtsp.RtspClient$MessageListener.lambda$onRtspMessageReceived$0(RtspClient.java:522)
      at androidx.media3.exoplayer.rtsp.RtspClient$MessageListener.$r8$lambda$8deRm6rk5jv7dwvT8Gw1eQhwNr8(Unknown Source:0)
      at androidx.media3.exoplayer.rtsp.RtspClient$MessageListener$$ExternalSyntheticLambda0.run(D8$$SyntheticClass:0)
      at android.os.Handler.handleCallback(Handler.java:942)
      at android.os.Handler.dispatchMessage(Handler.java:99)
      at android.os.Looper.loopOnce(Looper.java:201)
      at android.os.Looper.loop(Looper.java:288)
      at android.os.HandlerThread.run(HandlerThread.java:67)
  Caused by: androidx.media3.common.ParserException: Malformed SDP media description line: application/TP-LINK 0 RTP/AVP smart/1/90000{contentIsMalformed=true, dataType=4}
      at androidx.media3.exoplayer.rtsp.SessionDescriptionParser.parseMediaDescriptionLine(SessionDescriptionParser.java:250)
      at androidx.media3.exoplayer.rtsp.SessionDescriptionParser.parse(SessionDescriptionParser.java:195)
      at androidx.media3.exoplayer.rtsp.RtspClient$MessageListener.handleRtspResponse(RtspClient.java:640)
      at androidx.media3.exoplayer.rtsp.RtspClient$MessageListener.handleRtspMessage(RtspClient.java:529)
      at androidx.media3.exoplayer.rtsp.RtspClient$MessageListener.lambda$onRtspMessageReceived$0(RtspClient.java:522)
      at androidx.media3.exoplayer.rtsp.RtspClient$MessageListener.$r8$lambda$8deRm6rk5jv7dwvT8Gw1eQhwNr8(Unknown Source:0)
      at androidx.media3.exoplayer.rtsp.RtspClient$MessageListener$$ExternalSyntheticLambda0.run(D8$$SyntheticClass:0)
      at android.os.Handler.handleCallback(Handler.java:942)
      at android.os.Handler.dispatchMessage(Handler.java:99)
      at android.os.Looper.loopOnce(Looper.java:201)
      at android.os.Looper.loop(Looper.java:288)
      at android.os.HandlerThread.run(HandlerThread.java:67)
  Caused by: java.lang.NumberFormatException: For input string: "smart/1/90000"
      at java.lang.Integer.parseInt(Integer.java:747)
      at java.lang.Integer.parseInt(Integer.java:865)
      at androidx.media3.exoplayer.rtsp.SessionDescriptionParser.parseMediaDescriptionLine(SessionDescriptionParser.java:248)
      at androidx.media3.exoplayer.rtsp.SessionDescriptionParser.parse(SessionDescriptionParser.java:195)
      at androidx.media3.exoplayer.rtsp.RtspClient$MessageListener.handleRtspResponse(RtspClient.java:640)
      at androidx.media3.exoplayer.rtsp.RtspClient$MessageListener.handleRtspMessage(RtspClient.java:529)
      at androidx.media3.exoplayer.rtsp.RtspClient$MessageListener.lambda$onRtspMessageReceived$0(RtspClient.java:522)
      at androidx.media3.exoplayer.rtsp.RtspClient$MessageListener.$r8$lambda$8deRm6rk5jv7dwvT8Gw1eQhwNr8(Unknown Source:0)
      at androidx.media3.exoplayer.rtsp.RtspClient$MessageListener$$ExternalSyntheticLambda0.run(D8$$SyntheticClass:0)
      at android.os.Handler.handleCallback(Handler.java:942)
      at android.os.Handler.dispatchMessage(Handler.java:99)
      at android.os.Looper.loopOnce(Looper.java:201)
      at android.os.Looper.loop(Looper.java:288)
      at android.os.HandlerThread.run(HandlerThread.java:67)

Media

Not applicable

Bug Report