RTSP missing attribute fmtp
@microkatz is already working on this.
Since Dec 15, 2023.
- Dominant language
- Java
- Stars
- 3k
- Forks
- 955
- Avg merge
- 12d 14h
- Merged PRs (30d)
- 2
Description
Hello,
I'm attempting to play a camera stream using ExoPlayer, but I'm encountering an issue.
My code is very simple :
val mediaSource: MediaSource = RtspMediaSource.Factory()
.setDebugLoggingEnabled(true)
.createMediaSource(MediaItem.fromUri("rtsp://user:password@camera.domain.com:14500"))
val exoPlayer = ExoPlayer.Builder(context).build()
exoPlayer.setMediaSource(mediaSource)
exoPlayer.prepare()
exoPlayer.playWhenReady = true
I'm facing the same problem with two models of Hikvision cameras.
The connection and authentication work well, but the DESCRIBE operation fails due to the absence of the "fmtp" attribute. I've tested other apps using ExoPlayer, and the stream functions correctly.
So I believe I may have missed something in my configuration.
Debug Log From RtspMediaSource :
OPTIONS rtsp://camera.domain.com:14500 RTSP/1.0
User-Agent: AndroidXMedia3/1.2.0
CSeq: 0
RTSP/1.0 200 OK
CSeq: 0
Public: OPTIONS, DESCRIBE, PLAY, PAUSE, SETUP, TEARDOWN, SET_PARAMETER, GET_PARAMETER
Date: Sun, Feb 28 1971 00:51:09 GMT
DESCRIBE rtsp://camera.domain.com:14500 RTSP/1.0
User-Agent: AndroidXMedia3/1.2.0
CSeq: 1
RTSP/1.0 401 Unauthorized
CSeq: 1
WWW-Authenticate: Digest realm="IP Camera", nonce="xxxxxxxxxxxxxxxxxxxxxxxx", stale="FALSE"
DESCRIBE rtsp://camera.domain.com:14500 RTSP/1.0
Date: Sun, Feb 28 1971 00:51:09 GMT
DESCRIBE rtsp://camera.domain.com:14500 RTSP/1.0
User-Agent: AndroidXMedia3/1.2.0
CSeq: 2
Authorization: Digest username="user", realm="IP Camera(F9905)", nonce="xxxxxxxxxxxxxxxxxxxxxxxx", uri="rtsp://camera.domain.com:14500", response="yyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyyy"
RTSP/1.0 200 OK
CSeq: 2
Content-Type: application/sdp
Content-Base: rtsp://camera.domain.com:14500/
Content-Length: 447
v=0
o=- 36549693291690 36549693291690 IN IP4 192.168.1.104
s=Media Presentation
e=NONE
b=AS:5050
t=0 0
a=control:rtsp://camera.domain.com:14500/
m=video 0 RTP/AVP 96
c=IN IP4 0.0.0.0
b=AS:5000
a=recvonly
a=x-dimensions:1920,1080
a=control:rtsp://camera.domain.com:14500/trackID=1
a=rtpmap:96 H265/90000
a=Media_header:MEDIAINFO=494D4B48000000000000050000000000000000000000000000000000000000000000000000000000;
a=appversion:1.0
Stack Trace of the ExoPlaybackException
Playback error
androidx.media3.exoplayer.ExoPlaybackException: Source error
at androidx.media3.exoplayer.ExoPlayerImplInternal.handleIoException(ExoPlayerImplInternal.java:701)
at androidx.media3.exoplayer.ExoPlayerImplInternal.handleMessage(ExoPlayerImplInternal.java:677)
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: java.lang.IllegalArgumentException: missing attribute fmtp
at androidx.media3.exoplayer.rtsp.RtspMediaPeriod$InternalListener.onSessionTimelineRequestFailed(RtspMediaPeriod.java:699)
at androidx.media3.exoplayer.rtsp.RtspClient.dispatchRtspError(RtspClient.java:334)
at androidx.media3.exoplayer.rtsp.RtspClient.access$700(RtspClient.java:76)
at androidx.media3.exoplayer.rtsp.RtspClient$MessageListener.handleRtspResponse(RtspClient.java:694)
at androidx.media3.exoplayer.rtsp.RtspClient$MessageListener.handleRtspMessage(RtspClient.java:527)
at androidx.media3.exoplayer.rtsp.RtspClient$MessageListener.lambda$onRtspMessageReceived$0$androidx-media3-exoplayer-rtsp-RtspClient$MessageListener(RtspClient.java:520)
at androidx.media3.exoplayer.rtsp.RtspClient$MessageListener$$ExternalSyntheticLambda0.run(Unknown Source:4)
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: java.lang.IllegalArgumentException: missing attribute fmtp
at androidx.media3.exoplayer.rtsp.RtspClient$MessageListener.handleRtspResponse(RtspClient.java:694)
at androidx.media3.exoplayer.rtsp.RtspClient$MessageListener.handleRtspMessage(RtspClient.java:527)
at androidx.media3.exoplayer.rtsp.RtspClient$MessageListener.lambda$onRtspMessageReceived$0$androidx-media3-exoplayer-rtsp-RtspClient$MessageListener(RtspClient.java:520)
at androidx.media3.exoplayer.rtsp.RtspClient$MessageListener$$ExternalSyntheticLambda0.run(Unknown Source:4)
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.IllegalArgumentException: missing attribute fmtp
at androidx.media3.common.util.Assertions.checkArgument(Assertions.java:55)
at androidx.media3.exoplayer.rtsp.RtspMediaTrack.generatePayloadFormat(RtspMediaTrack.java:282)
at androidx.media3.exoplayer.rtsp.RtspMediaTrack.<init>(RtspMediaTrack.java:176)
at androidx.media3.exoplayer.rtsp.RtspClient.buildTrackList(RtspClient.java:366)
at androidx.media3.exoplayer.rtsp.RtspClient.access$1700(RtspClient.java:76)
at androidx.media3.exoplayer.rtsp.RtspClient$MessageListener.onDescribeResponseReceived(RtspClient.java:728)
at androidx.media3.exoplayer.rtsp.RtspClient$MessageListener.handleRtspResponse(RtspClient.java:634)
at androidx.media3.exoplayer.rtsp.RtspClient$MessageListener.handleRtspMessage(RtspClient.java:527)
at androidx.media3.exoplayer.rtsp.RtspClient$MessageListener.lambda$onRtspMessageReceived$0$androidx-media3-exoplayer-rtsp-RtspClient$MessageListener(RtspClient.java:520)
at androidx.media3.exoplayer.rtsp.RtspClient$MessageListener$$ExternalSyntheticLambda0.run(Unknown Source:4)
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)
Could you help me to understand the issue ? I'm not sure fmtp attributes is mandatory.
I tried to look the other app RTSP frame using Wireshark and the stream works well with the same frame so without fmtp.
Contributor guide
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
Assessment
This issue has not been assessed yet.