Gstreamer plugin missing ["videoconvert", "videoscale"]

I have installed gstreamer 1.24.7. I was trying to run the webrtc rust example. But I kept getting missing plugins for ["videoconvert, "videoscale"]. I decided to create a new project with following dependencies:

[dependencies]
cocoa = "0.26.0"
gstreamer = "0.23.1"
objc = "0.2.7"

I tried running the following snippet

fn tutorial_main() {
    gstreamer::init().unwrap();
    let needed = [
        "videoconvert",
        "videoscale",
    ];

    let registry = gstreamer::Registry::get();
    let missing = needed
        .iter()
        .filter(|n| registry.find_plugin(n).is_none())
        .cloned()
        .collect::<Vec<_>>();

    if !missing.is_empty() {
        println!("Missing plugins: {:?}", missing);
    }
}

I still get the same error. But then when I was trying the Basic Tutorial 3 - Exercise, which makes use of the videoconvert element, I’m able to run it.

Even doing a gst-inspect on them shows that they exist.
Any idea on why this happening and how to resolve it?

How did you install GStreamer?

Through the .pkg files listed here

Is there a difference between the way these two are handled?

let convert = gst::ElementFactory::make("videoconvert")
        .name("convert")
        .build()
        .expect("Could not create convert element.");

and

let missing = gstreamer::Registry::get().find_plugin("videoconvert");

And if gst-inspect-1.0 videoconvert is working, then there shouldn’t be a problem right?

Starting with 1.24, the plugins videoconvert and videoscale were merged into one plugin: videoconvertscale. The videoconvert and videoscale elements (aka plugin features) are still available.

With gstreamer::Registry::get().find_plugin() you are searching for plugin names, and with gst::ElementFactory::make() (or find) you are searching for elements.

Plugin names are not a stable ABI in GStreamer, but plugin features are.

1 Like