RTSP over UDP fails

Nicolas Dufresne nicolas at ndufresne.ca
Thu Jun 2 17:20:13 UTC 2022


Le vendredi 03 juin 2022 à 01:53 +1000, John McDermott a écrit :
> I’ve also attached the GST_DEBUG=rtspsrc:5 log around the first TEARDOWN
> message below. It seems that the client wasn’t able to send a message to the
> server after the first TEARDOWN:

TEARDOWN is happening exactly 5s letter, which matches the timeout. I don't
think its relevant information.

> 
> 0:00:06.111330827 ESC[34m662997ESC[00m 0x5574ed0a91e0 ESC[37mDEBUG ESC[00m
> ESC[00m rtspsrc
> gstrtspsrc.c:5315:gst_rtspsrc_connection_flush:<rtspsrc0>ESC[00m set flushing
> 0
> 0:00:06.111333975 ESC[34m662997ESC[00m 0x5574ed0a91e0 ESC[37mDEBUG ESC[00m
> ESC[00m rtspsrc
> gstrtspsrc.c:5318:gst_rtspsrc_connection_flush:<rtspsrc0>ESC[00m connection
> flush
> 0:00:06.111340293 ESC[34m662997ESC[00m 0x5574ed0a91e0 ESC[37mDEBUG ESC[00m
> ESC[00m rtspsrc gstrtspsrc.c:5969:gst_rtspsrc_reconnect:<rtspsrc0>ESC[00m
> doing reconnect
> 0:00:06.111343811 ESC[34m662997ESC[00m 0x5574ed0a91e0 ESC[37mDEBUG ESC[00m
> ESC[00m rtspsrc gstrtspsrc.c:8275:gst_rtspsrc_close:<rtspsrc0>ESC[00m
> TEARDOWN...
> 0:00:06.112321648 ESC[34m662997ESC[00m 0x5574ed0a91e0 ESC[37mDEBUG ESC[00m
> ESC[00m rtspsrc gstrtspsrc.c:560:default_before_send:<rtspsrc0>ESC[00m default
> handler
> 0:00:06.112336119 ESC[34m662997ESC[00m 0x5574ed0a91e0 ESC[37mDEBUG ESC[00m
> ESC[00m rtspsrc gstrtspsrc.c:6602:gst_rtspsrc_try_send:<rtspsrc0>ESC[00m
> sending message
> 0:00:06.193865221 ESC[34m662997ESC[00m 0x5574ed0a91e0 ESC[33;01mWARN ESC[00m
> ESC[00m rtspsrc gstrtspsrc.c:6616:gst_rtspsrc_try_send:<rtspsrc0>ESC[00m
> server closed connection
> 0:00:06.193894801 ESC[34m662997ESC[00m 0x5574ed0a91e0 ESC[37mDEBUG ESC[00m
> ESC[00m rtspsrc
> gstrtspsrc.c:5303:gst_rtsp_conninfo_reconnect:<rtspsrc0>ESC[00m reconnecting
> connection...
> 0:00:06.193901152 ESC[34m662997ESC[00m 0x5574ed0a91e0 ESC[37mDEBUG ESC[00m
> ESC[00m rtspsrc gstrtspsrc.c:5282:gst_rtsp_conninfo_close:<rtspsrc0>ESC[00m
> closing connection...
> 0:00:06.193961725 ESC[34m662997ESC[00m 0x5574ed0a91e0 ESC[37mDEBUG ESC[00m
> ESC[00m rtspsrc gstrtspsrc.c:5226:gst_rtsp_conninfo_connect:<rtspsrc0>ESC[00m
> connecting (rtsp://admin:password@192.168.100.124:554/onvif1)...
> 0:00:06.199456481 ESC[34m662997ESC[00m 0x5574ed0a91e0 ESC[37mDEBUG ESC[00m
> ESC[00m rtspsrc gstrtspsrc.c:560:default_before_send:<rtspsrc0>ESC[00m default
> handler
> 0:00:06.199486993 ESC[34m662997ESC[00m 0x5574ed0a91e0 ESC[37mDEBUG ESC[00m
> ESC[00m rtspsrc gstrtspsrc.c:6602:gst_rtspsrc_try_send:<rtspsrc0>ESC[00m
> sending message
> 0:00:08.653795233 ESC[34m662997ESC[00m 0x5574ed0a91e0 ESC[33;01mWARN ESC[00m
> ESC[00m rtspsrc
> gstrtspsrc.c:6554:gst_rtsp_src_receive_response:<rtspsrc0>ESC[00m error: Could
> not receive message. (Parse error)
> 
> I’ve now tried RTSPT and force TCP instead, but I noticed that it tries to
> send a “dummy packet” after the PLAY message:
> 
> 0:00:00.215559150 ESC[32m664387ESC[00m 0x55af8a7c91e0 ESC[37mDEBUG ESC[00m
> ESC[00m rtspsrc gstrtspsrc.c:9180:gst_rtspsrc_thread:<rtspsrc0>ESC[00m got
> command PLAY
> 0:00:00.215570442 ESC[32m664387ESC[00m 0x55af8a7c91e0 ESC[37mDEBUG ESC[00m
> ESC[00m rtspsrc
> gstrtspsrc.c:5315:gst_rtspsrc_connection_flush:<rtspsrc0>ESC[00m set flushing
> 0
> 0:00:00.215574075 ESC[32m664387ESC[00m 0x55af8a7c91e0 ESC[37mDEBUG ESC[00m
> ESC[00m rtspsrc
> gstrtspsrc.c:5318:gst_rtspsrc_connection_flush:<rtspsrc0>ESC[00m connection
> flush
> 0:00:00.215580153 ESC[32m664387ESC[00m 0x55af8a7c91e0 ESC[37mDEBUG ESC[00m
> ESC[00m rtspsrc gstrtspsrc.c:8652:gst_rtspsrc_play:<rtspsrc0>ESC[00m PLAY...
> 0:00:00.215583697 ESC[32m664387ESC[00m 0x55af8a7c91e0 ESC[37mDEBUG ESC[00m
> ESC[00m rtspsrc
> gstrtspsrc.c:4908:gst_rtspsrc_send_dummy_packets:<rtspsrc0>ESC[00m sending
> dummy packet to stream 0x7ffb40019fa0
> 0:00:00.215712385 ESC[32m664387ESC[00m 0x55af8a7c91e0 ESC[37mDEBUG ESC[00m
> ESC[00m rtspsrc gstrtspsrc.c:560:default_before_send:<rtspsrc0>ESC[00m default
> handler
> 0:00:00.215720537 ESC[32m664387ESC[00m 0x55af8a7c91e0 ESC[37mDEBUG ESC[00m
> ESC[00m rtspsrc gstrtspsrc.c:6602:gst_rtspsrc_try_send:<rtspsrc0>ESC[00m
> sending message
> 0:00:00.847878037 ESC[32m664387ESC[00m 0x55af8a7c91e0 ESC[33;01mWARN ESC[00m
> ESC[00m rtspsrc
> gstrtspsrc.c:6554:gst_rtsp_src_receive_response:<rtspsrc0>ESC[00m error: Could
> not receive message. (Parse error)
> ERROR: from element /GstPipeline:pipeline0/GstRTSPSrc:rtspsrc0: Could not read
> from resource.
> 
> It doesn’t send a dummy packet to my other camera though.
> 
> Cheers,
> 
> John
> 
> On 3 Jun 2022, 1:31 AM +1000, John McDermott <egglue at gmail.com>, wrote:
> > Hi
> > 
> > I’ve just tried timeout=0, but it become stuck. I then used the GST_DEBUG=2
> > flag but it’s not clear if it actually tried TCP after UDP:
> > 
> > Progress: (request) SETUP stream 1
> > Progress: (open) Opened Stream
> > Setting pipeline to PLAYING ...
> > New clock: GstSystemClock
> > Progress: (request) Sending PLAY request
> > Redistribute latency...
> > Redistribute latency...
> > Progress: (request) Sending PLAY request
> > Redistribute latency...
> > Redistribute latency...
> > Progress: (request) Sent PLAY request
> > 0:00:06.145175115 658948 0x55dc226b85e0 WARN rtspsrc
> > gstrtspsrc.c:6616:gst_rtspsrc_try_send:<rtspsrc0> server closed connection
> > 0:00:08.651279028 658948 0x55dc226b85e0 WARN rtspsrc
> > gstrtspsrc.c:6554:gst_rtsp_src_receive_response:<rtspsrc0> error: Could not
> > receive message. (Parse error)
> > ERROR: from element /GstPipeline:pipeline0/GstRTSPSrc:rtspsrc0: Could not
> > read from resource.
> > Additional debug info:
> > ../subprojects/gst-plugins-good/gst/rtsp/gstrtspsrc.c(6554):
> > gst_rtsp_src_receive_response ():
> > /GstPipeline:pipeline0/GstRTSPSrc:rtspsrc0:
> > Could not receive message. (Parse error)
> > 
> > The connection seems to be closed right after when UDP fails. Here’s the
> > Wireshark capture:
> > 
> > No.	Time	Source	Destination	Protocol	Length	Info
> > 10	0.681943	192.168.100.55	192.168.100.124	RTSP	522
> > 	OPTIONS rtsp://192.168.100.124:554/onvif1 RTSP/1.0
> > 14	0.860696	192.168.100.124	192.168.100.55	RTSP	194
> > 	Reply: RTSP/1.0 200 OK
> > 16	0.861292	192.168.100.55	192.168.100.124	RTSP	224
> > 	DESCRIBE rtsp://192.168.100.124:554/onvif1 RTSP/1.0
> > 18	0.871429	192.168.100.124	192.168.100.55	RTSP	190
> > 	Reply: RTSP/1.0 401 Unauthorized
> > 20	0.871877	192.168.100.55	192.168.100.124	RTSP	412
> > 	DESCRIBE rtsp://192.168.100.124:554/onvif1 RTSP/1.0
> > 21	0.885671	192.168.100.124	192.168.100.55	RTSP/SDP
> > 	570	Reply: RTSP/1.0 200 OK
> > 23	0.887486	192.168.100.55	192.168.100.124	RTSP	450
> > 	SETUP rtsp://192.168.100.124:554/onvif1/track1 RTSP/1.0
> > 24	0.895097	192.168.100.124	192.168.100.55	RTSP	248
> > 	Reply: RTSP/1.0 200 OK
> > 26	0.897494	192.168.100.55	192.168.100.124	RTSP	468
> > 	SETUP rtsp://192.168.100.124:554/onvif1/track2 RTSP/1.0
> > 27	0.903456	192.168.100.124	192.168.100.55	RTSP	248
> > 	Reply: RTSP/1.0 200 OK
> > 29	0.905120	192.168.100.55	192.168.100.124	RTSP	416
> > 	PLAY rtsp://192.168.100.124:554/onvif1 RTSP/1.0
> > 148	1.839500	192.168.100.124	192.168.100.55	RTSP	268
> > 	Reply: RTSP/1.0 200 OK
> > 1277	6.849112	192.168.100.55	192.168.100.124	RTSP	405
> > 	TEARDOWN rtsp://192.168.100.124:554/onvif1 RTSP/1.0
> > 1286	6.862540	192.168.100.55	192.168.100.124	RTSP	405
> > 	TEARDOWN rtsp://192.168.100.124:554/onvif1 RTSP/1.0
> > 1388	9.399490	192.168.100.124	192.168.100.55	RTSP	193
> > 	Reply: RTSP/1.0 400 Bad Request
> > 1401	9.411456	192.168.100.55	192.168.100.124	RTSP	522
> > 	OPTIONS rtsp://192.168.100.124:554/onvif1 RTSP/1.0
> > 1408	9.620161	192.168.100.124	192.168.100.55	RTSP	194
> > 	Reply: RTSP/1.0 200 OK
> > 
> > 
> > Considering the following Wireshark capture when FFMPEG is used, I now
> > believe my camera indeed uses TCP (as well):
> > 
> > No.	Time	Source	Destination	Protocol	Length	Info
> > 4344	40.005447	192.168.100.55	192.168.100.124	TCP	78
> > 	53760 → 554 [SYN] Seq=0 Win=65535 Len=0 MSS=1460 WS=64 TSval=64110566
> > TSecr=0 SACK_PERM=1
> > 4345	40.011522	192.168.100.124	192.168.100.55	TCP	74
> > 	554 → 53760 [SYN, ACK] Seq=0 Ack=1 Win=14480 Len=0 MSS=1460 SACK_PERM=1
> > TSval=25698694 TSecr=64110566 WS=4
> > 4346	40.011634	192.168.100.55	192.168.100.124	TCP	66
> > 	53760 → 554 [ACK] Seq=1 Ack=1 Win=131712 Len=0 TSval=64110572
> > TSecr=25698694
> > 4347	40.011723	192.168.100.55	192.168.100.124	RTSP	156
> > 	OPTIONS rtsp://192.168.100.124:554/onvif1 RTSP/1.0
> > 4348	40.017358	192.168.100.124	192.168.100.55	TCP	66
> > 	554 → 53760 [ACK] Seq=1 Ack=91 Win=14480 Len=0 TSval=25698694
> > TSecr=64110572
> > 4350	40.100464	192.168.100.124	192.168.100.55	RTSP	194
> > 	Reply: RTSP/1.0 200 OK
> > 4351	40.100524	192.168.100.55	192.168.100.124	TCP	66
> > 	53760 → 554 [ACK] Seq=91 Ack=129 Win=131584 Len=0 TSval=64110659
> > TSecr=25698703
> > 4352	40.101137	192.168.100.55	192.168.100.124	RTSP	182
> > 	DESCRIBE rtsp://192.168.100.124:554/onvif1 RTSP/1.0
> > 4353	40.105133	192.168.100.124	192.168.100.55	TCP	66
> > 	554 → 53760 [ACK] Seq=129 Ack=207 Win=14480 Len=0 TSval=25698703
> > TSecr=64110659
> > 4354	40.105964	192.168.100.124	192.168.100.55	RTSP	190
> > 	Reply: RTSP/1.0 401 Unauthorized
> > 4355	40.106004	192.168.100.55	192.168.100.124	TCP	66
> > 	53760 → 554 [ACK] Seq=207 Ack=253 Win=131456 Len=0 TSval=64110663
> > TSecr=25698703
> > 4356	40.106597	192.168.100.55	192.168.100.124	RTSP	370
> > 	DESCRIBE rtsp://192.168.100.124:554/onvif1 RTSP/1.0
> > 4357	40.112124	192.168.100.124	192.168.100.55	RTSP/SDP
> > 	570	Reply: RTSP/1.0 200 OK
> > 4358	40.112167	192.168.100.55	192.168.100.124	TCP	66
> > 	53760 → 554 [ACK] Seq=511 Ack=757 Win=131008 Len=0 TSval=64110669
> > TSecr=25698704
> > 4359	40.113296	192.168.100.55	192.168.100.124	RTSP	412
> > 	SETUP rtsp://192.168.100.124:554/onvif1/track1 RTSP/1.0
> > 4360	40.120319	192.168.100.124	192.168.100.55	RTSP	248
> > 	Reply: RTSP/1.0 200 OK
> > 4361	40.120366	192.168.100.55	192.168.100.124	TCP	66
> > 	53760 → 554 [ACK] Seq=857 Ack=939 Win=130880 Len=0 TSval=64110678
> > TSecr=25698705
> > 4362	40.121836	192.168.100.55	192.168.100.124	RTSP	431
> > 	SETUP rtsp://192.168.100.124:554/onvif1/track2 RTSP/1.0
> > 4363	40.128754	192.168.100.124	192.168.100.55	RTSP	248
> > 	Reply: RTSP/1.0 200 OK
> > 4364	40.128855	192.168.100.55	192.168.100.124	TCP	66
> > 	53760 → 554 [ACK] Seq=1222 Ack=1121 Win=130880 Len=0 TSval=64110685
> > TSecr=25698705
> > 4365	40.129964	192.168.100.55	192.168.100.124	RTSP	379
> > 	PLAY rtsp://192.168.100.124:554/onvif1 RTSP/1.0
> > 4366	40.131391	192.168.100.55	192.168.100.124	RTP	54
> > 	PT=ITU-T G.711 PCMU, SSRC=0x0, Seq=0, Time=0
> > 4367	40.131998	192.168.100.55	192.168.100.124	RTCP	50
> > 	Receiver Report 
> > 4368	40.132773	192.168.100.55	192.168.100.124	RTP	54
> > 	PT=ITU-T G.711 PCMU, SSRC=0x0, Seq=0, Time=0
> > 4369	40.133311	192.168.100.55	192.168.100.124	RTCP	50
> > 	Receiver Report 
> > 4370	40.137885	192.168.100.124	192.168.100.55	ICMP	78
> > 	Destination unreachable (Port unreachable)
> > 4371	40.139424	192.168.100.124	192.168.100.55	ICMP	78
> > 	Destination unreachable (Port unreachable)
> > 4372	40.170640	192.168.100.124	192.168.100.55	TCP	66
> > 	554 → 53760 [ACK] Seq=1121 Ack=1535 Win=15552 Len=0 TSval=25698710
> > TSecr=64110686
> > 4378	40.763363	192.168.100.124	192.168.100.55	RTP	77
> > 	PT=DynamicRTP-Type-96, SSRC=0x39867684, Seq=49079, Time=2712090874, Mark
> > 
> > Hopefully this sheds new light on the issue.
> > 
> > Cheers,
> > 
> > John
> > On 2 Jun 2022, 2:02 AM +1000, Nicolas Dufresne <nicolas at ndufresne.ca>,
> > wrote:
> > > Le mercredi 01 juin 2022 à 03:46 +1000, John McDermott via gstreamer-devel
> > > a
> > > écrit :
> > > > Hi all
> > > > 
> > > > I have a camera that possibly has an unstable connection. FFMPEG can
> > > > read the
> > > > stream fine over UDP but not TCP. It takes a few second to setup, but it
> > > > works
> > > > fine over UDP nonetheless. The camera probably supports only UDP.
> > > > However, the
> > > > standard command:
> > > > 
> > > > gst-launch-1.0 rtspsrc location=rtsp://ip/stream ! queue ! rtph264depay
> > > > !
> > > > h264parse ! fakesink
> > > > 
> > > > fails with the following:
> > > > 
> > > > Progress: (open) Retrieving media info
> > > > Progress: (request) SETUP stream 0
> > > > Progress: (request) SETUP stream 1
> > > > Progress: (open) Opened Stream
> > > > Setting pipeline to PLAYING ...
> > > > New clock: GstSystemClock
> > > > Progress: (request) Sending PLAY request
> > > > Redistribute latency...
> > > > Redistribute latency...
> > > > Progress: (request) Sending PLAY request
> > > > Redistribute latency...
> > > > Redistribute latency...
> > > > Progress: (request) Sent PLAY request
> > > > ERROR: from element /GstPipeline:pipeline0/GstRTSPSrc:rtspsrc0: Could
> > > > not read
> > > > from resource.
> > > > Additional debug info:
> > > > ../subprojects/gst-plugins-good/gst/rtsp/gstrtspsrc.c(6554):
> > > > gst_rtsp_src_receive_response ():
> > > > /GstPipeline:pipeline0/GstRTSPSrc:rtspsrc0:
> > > > Could not receive message. (Parse error)
> > > > ERROR: from element /GstPipeline:pipeline0/GstRTSPSrc:rtspsrc0: Could
> > > > not read
> > > > from resource.
> > > > 
> > > > Is there a way to allow make Gstreamer to be as “resilient” as FFMPEG?
> > > > My
> > > > guess is that if GST could spend a few more seconds establishing the
> > > > connection and/or reading the stream, it should work.
> > > 
> > > Try with a little more logs to understand what is going on, e.g. set the
> > > env
> > > GST_DEBUG="2" . What may happen is that it takes over 5s for UDP packets
> > > to
> > > arrive and gstreamer fallbacks to TCP and fails. You can disable the the
> > > timeout
> > > , rtspsrc timeout=0, this will prevent the fallback from happening.
> > > 
> > > Nicolas



More information about the gstreamer-devel mailing list