GNOME Bugzilla – Bug 673949
Rtspsrc element cannot negiotiate a multicast stream from a teradek cube.
Last modified: 2012-11-24 15:16:48 UTC
I was doing some testing with GStreamer and a Teradek Cube. The Teradek Cube runs an rtsp server, so I was using the rtspsrc element to view streams from the teradek cube. I was able to view the streams while the teradek cube was putting out unicast streams, but I was not able to view the streams when I configured the teradek cube for multicast. I discovered that the rtsp server running on the teradek cobe was returning a "Bad Request" when setting up the transport streams. I can view the multicast streams coming from the teradek cube using VLC. Here is the Teradek website: http://teradek.com/index2.html Here is the gst-launch command that I was using to try and connect to the rtsp server running on the teradek cube: gst-launch-0.10 -v rtspsrc location=rtsp://10.145.128.15/stream1 latency=0 debug=true ! fakesink silent=true Here is the debug that GStreamer returned: [root@localhost ~]# gst-launch-0.10 -v rtspsrc location=rtsp://10.145.128.15/stream1 latency=0 debug=true ! fakesink silent=true Setting pipeline to PAUSED ... RTSP request message 0xbfb8f220 request line: method: 'OPTIONS' uri: 'rtsp://10.145.128.15/stream1' version: '1.0' headers: key: 'User-Agent', value: 'WMPlayer/9.0.0.3250 guid/3300AD50-2C39-46C0-AE0A-9CC9FF7765D1' body: RTSP response message 0xbfb8f204 status line: code: '200' reason: 'OK' version: '1.0' headers: key: 'CSeq', value: '1' key: 'Server', value: 'RtpRtspFlyer' key: 'Public', value: 'DESCRIBE' key: 'Public', value: 'SETUP' key: 'Public', value: 'PLAY' key: 'Public', value: 'PAUSE' key: 'Public', value: 'TEARDOWN' key: 'Content-Length', value: '0' key: 'Cache-Control', value: 'no-cache' body: length 1 00000000 (0x8a75988): 00 . RTSP request message 0xbfb8f220 request line: method: 'DESCRIBE' uri: 'rtsp://10.145.128.15/stream1' version: '1.0' headers: key: 'Accept', value: 'application/sdp' body: RTSP response message 0xbfb8f204 status line: code: '200' reason: 'OK' version: '1.0' headers: key: 'CSeq', value: '2' key: 'Server', value: 'RtpRtspFlyer' key: 'Content-Type', value: 'application/sdp' key: 'Content-Length', value: '823' key: 'Cache-Control', value: 'no-cache' body: length 824 00000000 (0x8a83000): 76 3d 30 0d 0a 6f 3d 2d 20 2d 34 38 39 31 30 31 v=0..o=- -489101 00000010 (0x8a83010): 37 39 33 36 34 32 32 32 36 38 35 39 37 20 2d 34 7936422268597 -4 00000020 (0x8a83020): 38 39 31 30 31 37 39 33 36 34 32 31 31 37 33 33 8910179364211733 00000030 (0x8a83030): 38 31 20 49 4e 20 49 50 34 20 32 33 39 2e 31 39 81 IN IP4 239.19 00000040 (0x8a83040): 32 2e 32 30 2e 31 0d 0a 63 3d 49 4e 20 49 50 34 2.20.1..c=IN IP4 00000050 (0x8a83050): 20 30 2e 30 2e 30 2e 30 0d 0a 61 3d 74 6f 6f 6c 0.0.0.0..a=tool 00000060 (0x8a83060): 3a 20 52 74 70 52 74 73 70 46 6c 79 65 72 0d 0a : RtpRtspFlyer.. 00000070 (0x8a83070): 61 3d 72 61 6e 67 65 3a 6e 70 74 3d 30 2d 20 0d a=range:npt=0- . 00000080 (0x8a83080): 0a 6d 3d 76 69 64 65 6f 20 30 20 52 54 50 2f 41 .m=video 0 RTP/A 00000090 (0x8a83090): 56 50 20 39 36 0d 0a 61 3d 72 74 70 6d 61 70 3a VP 96..a=rtpmap: 000000a0 (0x8a830a0): 39 36 20 48 32 36 34 2f 39 30 30 30 30 0d 0a 61 96 H264/90000..a 000000b0 (0x8a830b0): 3d 66 6d 74 70 3a 39 36 20 70 61 63 6b 65 74 69 =fmtp:96 packeti 000000c0 (0x8a830c0): 7a 61 74 69 6f 6e 2d 6d 6f 64 65 3d 31 3b 70 72 zation-mode=1;pr 000000d0 (0x8a830d0): 6f 66 69 6c 65 2d 6c 65 76 65 6c 2d 69 64 3d 34 ofile-level-id=4 000000e0 (0x8a830e0): 32 30 30 31 65 3b 73 70 72 6f 70 2d 70 61 72 61 2001e;sprop-para 000000f0 (0x8a830f0): 6d 65 74 65 72 2d 73 65 74 73 3d 5a 32 51 41 4b meter-sets=Z2QAK 00000100 (0x8a83100): 4b 32 77 70 44 42 53 41 67 46 78 51 57 4b 51 50 K2wpDBSAgFxQWKQP 00000110 (0x8a83110): 51 52 57 46 49 59 4b 51 45 41 75 4b 43 78 53 42 QRWFIYKQEAuKCxSB 00000120 (0x8a83120): 36 43 4b 77 70 44 42 53 41 67 46 78 51 57 4b 51 6CKwpDBSAgFxQWKQ 00000130 (0x8a83130): 50 51 52 54 44 6f 55 4b 51 4e 43 34 6f 4a 48 4d PQRTDoUKQNC4oJHM 00000140 (0x8a83140): 47 49 65 6d 48 51 6f 55 67 61 46 78 51 53 4f 59 GIemHQoUgaFxQSOY 00000150 (0x8a83150): 4d 51 39 4d 4f 68 51 70 41 30 4c 69 67 6b 63 77 MQ9MOhQpA0Ligkcw 00000160 (0x8a83160): 59 68 36 78 45 51 6d 49 56 69 6c 73 51 52 57 55 Yh6xEQmIVilsQRWU 00000170 (0x8a83170): 55 52 4a 73 6f 67 78 4f 55 34 51 49 54 4b 55 49 URJsogxOU4QITKUI 00000180 (0x8a83180): 45 56 6c 43 43 54 59 51 56 68 42 4d 4a 51 68 4d EVlCCTYQVhBMJQhM 00000190 (0x8a83190): 49 6a 47 67 67 57 51 4a 46 61 49 47 42 4a 5a 42 IjGggWQJFaIGBJZB 000001a0 (0x8a831a0): 41 61 45 6e 61 4d 49 44 77 73 53 57 51 51 4b 43 AaEnaMIDwsSWQQKC 000001b0 (0x8a831b0): 77 73 72 52 42 51 59 4f 57 51 77 65 4f 30 59 45 wsrRBQYOWQweO0YE 000001c0 (0x8a831c0): 42 5a 41 53 4e 41 6f 67 73 7a 6c 41 55 41 57 37 BZASNAogszlAUAW7 000001d0 (0x8a831d0): 41 52 41 41 41 4c 75 41 41 43 76 79 44 67 41 41 ARAAALuAACvyDgAA 000001e0 (0x8a831e0): 41 4d 42 66 58 68 41 41 41 4f 35 72 4b 2f 2f 2b AMBfXhAAAO5rK//+ 000001f0 (0x8a831f0): 4d 41 41 41 41 76 72 77 67 41 41 48 63 31 6c 66 MAAAAvrwgAAHc1lf 00000200 (0x8a83200): 2f 2f 43 67 41 3d 3d 2c 61 50 34 38 73 41 3d 3d //CgA==,aP48sA== 00000210 (0x8a83210): 3b 0d 0a 61 3d 63 6f 6e 74 72 6f 6c 3a 72 74 73 ;..a=control:rts 00000220 (0x8a83220): 70 3a 2f 2f 31 30 2e 31 34 35 2e 31 32 38 2e 31 p://10.145.128.1 00000230 (0x8a83230): 35 2f 73 74 72 65 61 6d 31 2f 74 72 61 63 6b 49 5/stream1/trackI 00000240 (0x8a83240): 44 3d 30 0d 0a 6d 3d 61 75 64 69 6f 20 30 20 52 D=0..m=audio 0 R 00000250 (0x8a83250): 54 50 2f 41 56 50 20 39 38 0d 0a 61 3d 72 74 70 TP/AVP 98..a=rtp 00000260 (0x8a83260): 6d 61 70 3a 39 38 20 6d 70 65 67 34 2d 67 65 6e map:98 mpeg4-gen 00000270 (0x8a83270): 65 72 69 63 2f 34 38 30 30 30 2f 32 0d 0a 61 3d eric/48000/2..a= 00000280 (0x8a83280): 66 6d 74 70 3a 39 38 20 73 74 72 65 61 6d 74 79 fmtp:98 streamty 00000290 (0x8a83290): 70 65 3d 35 3b 20 70 72 6f 66 69 6c 65 2d 6c 65 pe=5; profile-le 000002a0 (0x8a832a0): 76 65 6c 2d 69 64 3d 31 35 3b 20 6d 6f 64 65 3d vel-id=15; mode= 000002b0 (0x8a832b0): 41 41 43 2d 68 62 72 3b 20 63 6f 6e 66 69 67 3d AAC-hbr; config= 000002c0 (0x8a832c0): 31 31 39 30 3b 20 53 69 7a 65 4c 65 6e 67 74 68 1190; SizeLength 000002d0 (0x8a832d0): 3d 31 33 3b 49 6e 64 65 78 4c 65 6e 67 74 68 3d =13;IndexLength= 000002e0 (0x8a832e0): 33 3b 20 49 6e 64 65 78 44 65 6c 74 61 4c 65 6e 3; IndexDeltaLen 000002f0 (0x8a832f0): 67 74 68 3d 33 3b 20 50 72 6f 66 69 6c 65 3d 31 gth=3; Profile=1 00000300 (0x8a83300): 3b 0d 0a 61 3d 63 6f 6e 74 72 6f 6c 3a 72 74 73 ;..a=control:rts 00000310 (0x8a83310): 70 3a 2f 2f 31 30 2e 31 34 35 2e 31 32 38 2e 31 p://10.145.128.1 00000320 (0x8a83320): 35 2f 73 74 72 65 61 6d 31 2f 74 72 61 63 6b 49 5/stream1/trackI 00000330 (0x8a83330): 44 3d 31 0d 0a 0d 0a 00 D=1..... sdp packet 0xbfb8f1a4: version: '0' origin: username: '-' sess_id: '-4891017936422268597' sess_version: '-4891017936421173381' nettype: 'IN' addrtype: 'IP4' addr: '239.192.20.1' session_name: '(NULL)' information: '(NULL)' uri: '(NULL)' connection: nettype: 'IN' addrtype: 'IP4' address: '0.0.0.0' ttl: '0' addr_number: '0' key: type: '(NULL)' data: '(NULL)' attributes: attribute 'tool' : ' RtpRtspFlyer' attribute 'range' : 'npt=0- ' medias: media 0: media: 'video' port: '0' num_ports: '4294967295' proto: 'RTP/AVP' formats: format '96' information: '(NULL)' key: type: '(NULL)' data: '(NULL)' attributes: attribute 'rtpmap' : '96 H264/90000' attribute 'fmtp' : '96 packetization-mode=1;profile-level-id=42001e;sprop-parameter-sets=Z2QAKK2wpDBSAgFxQWKQPQRWFIYKQEAuKCxSB6CKwpDBSAgFxQWKQPQRTDoUKQNC4oJHMGIemHQoUgaFxQSOYMQ9MOhQpA0LigkcwYh6xEQmIVilsQRWUURJsogxOU4QITKUIEVlCCTYQVhBMJQhMIjGggWQJFaIGBJZBAaEnaMIDwsSWQQKCwsrRBQYOWQweO0YEBZASNAogszlAUAW7ARAAALuAACvyDgAAAMBfXhAAAO5rK//+MAAAAvrwgAAHc1lf//CgA==,aP48sA==;' attribute 'control' : 'rtsp://10.145.128.15/stream1/trackID=0' media 1: media: 'audio' port: '0' num_ports: '4294967295' proto: 'RTP/AVP' formats: format '98' information: '(NULL)' key: type: '(NULL)' data: '(NULL)' attributes: attribute 'rtpmap' : '98 mpeg4-generic/48000/2' attribute 'fmtp' : '98 streamtype=5; profile-level-id=15; mode=AAC-hbr; config=1190; SizeLength=13;IndexLength=3; IndexDeltaLength=3; Profile=1;' attribute 'control' : 'rtsp://10.145.128.15/stream1/trackID=1' RTSP request message 0xbfb8f080 request line: method: 'SETUP' uri: 'rtsp://10.145.128.15/stream1/trackID=0' version: '1.0' headers: key: 'Transport', value: 'RTP/AVP/UDP;unicast;client_port=40620-40621' body: RTSP response message 0xbfb8f064 status line: code: '200' reason: 'OK' version: '1.0' headers: key: 'CSeq', value: '3' key: 'Server', value: 'RtpRtspFlyer' key: 'Transport', value: 'RTP/AVP/UDP;multicast;destination=239.192.20.1;port=50023-50024;client_port=40620-40621' key: 'Cache-Control', value: 'no-cache' key: 'Session', value: '1745696487' body: length 0 /GstPipeline:pipeline0/GstRTSPSrc:rtspsrc0/GstRtpBin:rtpbin0: latency = 0 /GstPipeline:pipeline0/GstRTSPSrc:rtspsrc0/GstUDPSrc:udpsrc3: timeout = 5000000 RTSP request message 0xbfb8f080 request line: method: 'SETUP' uri: 'rtsp://10.145.128.15/stream1/trackID=1' version: '1.0' headers: key: 'Transport', value: 'RTP/AVP/UDP;multicast' body: RTSP response message 0xbfb8f064 status line: code: '400' reason: 'Bad Request' version: '1.0' headers: key: 'CSeq', value: '4' key: 'Server', value: 'RtpRtspFlyer' body: length 0 ERROR: Pipeline doesn't want to pause. ERROR: from element /GstPipeline:pipeline0/GstRTSPSrc:rtspsrc0: Could not write to resource. Additional debug info: gstrtspsrc.c(4528): gst_rtspsrc_setup_streams (): /GstPipeline:pipeline0/GstRTSPSrc:rtspsrc0: Error (400): Bad Request Setting pipeline to NULL ... Freeing pipeline ... [root@localhost ~]#
Can you make a dump of the vlc traffic? With wireshark or so would be fine. It seems GStreamer is asking for unicast first but the server then replies with a multicast reply.
Created attachment 212398 [details] Wireshark capture of VLC connecting to a teradek cube Here is a wireshark capture of VLC onnecting to a teradek cube that has been configured for multicast. It appears that VLC always requests a unicast stream, even when the teradek cube responds with a multicast stream, and VLC provides the teradek cube with some client ports to use whenever it requests a unicast stream. Looking at the original debug information I got from GStreamer, I see that GStreamer provided client ports when it made the initial unicast request for TrackID 0. When the teradek cube responded back with a multicast stream, I see that GStreamer switched over and started to make multicast requests. I noticed that GStreamer did not provide the teradek with any client ports when it made the multicast setup request for trackID 1. I suspect that the teradek cube is not happy because it is not getting supplied with any client ports when it is recieving the setup request for the multicast stream. I think there are two ways to solve this issue: 1. Always request a unicast stream regardless of what the rtspserver responds with, which is what VLC does. 2. Supply the rtspserver with client ports when making a setup request for multicast streams.
Could you please also re-test with the latest 0.10.x release (that is core/base 0.10.36 and -good 0.10.31 from Feb 2012), or 0.10 git branch, or - even better - GStreamer 1.0 ? 0.10.27 is a tad old.
I know it's been a while, but would still be great if you could re-test with GStreamer 1.x at some point, thanks! In the mean time, I hope you don't mind if I close this. If it's still an issue with current releases, someone will file a new bug sooner or later.