Issue with dataurisrc and Rust: streaming stopped, reason not-linked (-1)
Nazar Mokrynskyi
nazar at restream.io
Wed Nov 27 17:55:03 UTC 2019
Hi folks,
I'm new to Rust and new to Gstreamer, so this may be a simple question,
but I'd be really helpful for any directions.
Essentially I want to turn this:
> gst-launch-1.0 dataurisrc
> uri="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAADUlEQVR42mP8z8BQDwAEhQGAhKmMIQAAAABJRU5ErkJggg=="
> ! pngdec ! imagefreeze ! videoconvert ! autovideosink
Which works fine, into Rust code.
What I have so far is this:
> extern crate gstreamer as gst;
> use gst::prelude::*;
>
> extern crate glib;
>
> fn main() {
> gst::init().unwrap();
>
> let base64_image =
> "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAADUlEQVR42mP8z8BQDwAEhQGAhKmMIQAAAABJRU5ErkJggg==";
>
> let pipeline = gst::Pipeline::new(None);
>
> let image = gst::ElementFactory::make("dataurisrc", None).unwrap();
> let pngdec = gst::ElementFactory::make("pngdec", None).unwrap();
> let imagefreeze = gst::ElementFactory::make("imagefreeze",
> None).unwrap();
> let videoconvert = gst::ElementFactory::make("videoconvert",
> None).unwrap();
> let autovideosink = gst::ElementFactory::make("autovideosink",
> None).unwrap();
>
> image.set_property_from_str("uri", base64_image);
> gst::Element::link_many(&[&image, &pngdec, &imagefreeze,
> &videoconvert, &autovideosink]).unwrap();
>
> pipeline.add_many(&[&image, &pngdec, &imagefreeze, &videoconvert,
> &autovideosink]).unwrap();
>
> pipeline
> .set_state(gst::State::Playing)
> .expect("Unable to set the pipeline to the `Playing` state");
>
> let bus = pipeline.get_bus().unwrap();
>
> for msg in bus.iter_timed(gst::CLOCK_TIME_NONE) {
> use gst::MessageView;
>
> match msg.view() {
> MessageView::Eos(..) => break,
> MessageView::Error(err) => {
> println!(
> "Error from {:?}: {} ({:?})",
> err.get_src().map(|s| s.get_path_string()),
> err.get_error(),
> err.get_debug()
> );
> break;
> }
> _ => (),
> }
> }
>
> pipeline
> .set_state(gst::State::Null)
> .expect("Unable to set the pipeline to the `Null` state");
> }
However when I try to run it (with stable version of gstreamer crate) I
get this:
> 0:00:00.023632544 20196 0x5632ff4081e0 WARN basesrc
> gstbasesrc.c:3072:gst_base_src_loop:<dataurisrc0> error: Internal data
> stream error.
> 0:00:00.023657375 20196 0x5632ff4081e0 WARN basesrc
> gstbasesrc.c:3072:gst_base_src_loop:<dataurisrc0> error: streaming
> stopped, reason not-linked (-1)
> Error from Some(Owned(0x5632ff429c40, 48)): Internal data stream
> error. (Some("gstbasesrc.c(3072): gst_base_src_loop ():
> /GstPipeline:pipeline0/GstDataURISrc:dataurisrc0:\nstreaming stopped,
> reason not-linked (-1)"))
All pads should always be available, so I'm a bit confused by this. Any
ideas?
--
Sincerely, Nazar Mokrynskyi
More information about the gstreamer-devel
mailing list