GStreamer missing application/sdp plugin

Hello,

I am running a debian-11 (bullseye) system and have deb-multimedia.org enabled to have the latest multimedia software installed.

I would like to display an Axis webcam image using multicast but am experiencing trouble doing that.

Both mplayer and vlc are able to connect to the multicast stream using

$ mplayer http://192.168.11.61/axis-cgi/alwaysmulti.sdp?camera=1
$ vlc http://192.168.11.61/axis-cgi/alwaysmulti.sdp?camera=1

I am also able to connect with gstreamer on a 1:1 network connection using

$ gst-launch-1.0 rtspsrc location=rtsp://192.168.11.61/axis-media/media.amp  ! decodebin ! autovideosink

But in multicast mode it doesn’t work

$ gst-launch-1.0 souphttpsrc location=http://192.168.11.61/axis-cgi/alwaysmulti.sdp?camera=1  ! decodebin ! autovideosink
...
ERROR: from element /GstPipeline:pipeline0/GstDecodeBin:decodebin0: Your GStreamer installation is missing a plug-in.
Additional debug info:
../gst/playback/gstdecodebin2.c(4719): gst_decode_bin_expose (): /GstPipeline:pipeline0/GstDecodeBin:decodebin0:
no suitable plugins found:
Missing decoder: application/sdp (application/sdp)
...

I complains that application/sdp is missing, although I have checked that it exists:

$ gst-inspect-1.0 | grep sdp
typefindfunctions: application/sdp: sdp
sdpelem:  sdpsrc: SDP Source
sdpelem:  sdpdemux: SDP session setup

Does anyone have an idea what I am missing?

Neither the sdpsrc nor the sdpdemux element has a “rank”, which means they won’t be autoplugged (used) by decodebin(3), uridecodebin(3) and friends (playbin(3)).

Reason is that people don’t usually use SDP in an autoplug context. They either have a local file or download it and then they know it’s an SDP and use the right element themselves without involving decodebin.

You could try setting the GST_PLUGIN_FEATURE_RANK environment variable to force a rank, which may or may not work.

I don’t think you should have to use an SDP here though, RTSP should be able to set up multicast streaming just fine.

Have you tried rtspsrc protocols=udp-mcast location=rtsp://... ! ... ?

Thank you for the reply.

I am writing a Qt application that uses QVideoWidget from Qt Multimedia framework. The widget gets passed a URL and the rest happens magically in the background. Looking into the source code and output using GST_DEBUG environment variable, I see that Qt uses playbin in the background. Thus it is not possible to set up my own pipeline, unless I reimplement the widget myself to expose gstreamer’s pipeline engine!

The video widget works successfully with a RTSP url, in gstreamer-speak it is the equivalent of

gst-launch-1.0 playbin uri=rtsp://camera/axis-media/media.amp

Looking at the network trace, a UDP MP4 stream gets set up from the camera to the client. On a large network with many cameras and many clients this 1:1 network connection becomes a problem, that is why I want to receive the multicast stream URL.

On AXIS cameras it is possible to permanantly stream to a multicast address. The details of the stream is published in SDP format using the URL

http://skycam.local/axis-cgi/alwaysmulti.sdp?camera=1

So now my question is, is there a way to get this to work?

gst-launch-1.0 playbin uri=http://skycam.local/axis-cgi/alwaysmulti.sdp?camera=1

Maybe the GST_PLUGIN_FEATURE_RANK is a way to go, but what would it’s syntax look like? I am very puzzled.

BTW, both vlc and (s)mplayer accept the HTTP-SDP url out of the box.

I have spent countless hours in the internet on how to set up a gst-launch pipeline. Documentation on gstreamer.org very quickly points to the low level C interface and does not help explaining the gst-launch pipeline. Other information is very scarce and/or incomplete and/or incorrect and/or outdated.

Try this example first and understand how it works. Qt multimedia module is not a good tool.
Better to use raw gstreamer to build your app.

Thank you for the tip.

Oh dear, this looks like quite a formidable task for a newbie in QStreamer. I’ll have a look, but am on holiday for the next two weeks.

This is only a sink. The harder ones in gstreamer are still ahead.