please help to extend send example.
base on the following code in webrtc-precise-sync-send.rs
let videosrc = gst::ElementFactory::make("videotestsrc")
.property("is-live", true)
.property_from_str("pattern", VIDEO_PATTERNS[idx % VIDEO_PATTERNS.len()])
.build()
.context("Creating videotestsrc")?;
let video_overlay = gst::ElementFactory::make("timeoverlay")
.property_from_str("time-mode", "running-time")
.build()
.context("Creating timeoverlay")?;
self.pipeline()
.add_many([&videosrc, &video_overlay])
.expect("adding video elements");
videosrc
.link_filtered(
&video_overlay,
&gst::Caps::builder("video/x-raw")
.field("width", 800i32)
.field("height", 600i32)
.build(),
)
.context("Linking videosrc to timeoverlay")?;
video_overlay
.link_pads(None, &webrtcsink, Some("video_%u"))
.context("Linking video overlay")?;
I would like to add the following elements:
let videosrc = gst::ElementFactory::make("videotestsrc")
.build()
.context("Creating videotestsrc")?;
let queue = gst::ElementFactory::make("queue")
.build()
.expect("Checked in prepare()");
let queue1 = gst::ElementFactory::make("queue")
.property("max-size-buffers", 1u32)
.property("max-size-bytes", 0u32)
.property("max-size-time", 0u64)
.build()
.expect("Checked in prepare()");
let videoconvert = gst::ElementFactory::make("videoconvert")
.build()
.context("Creating videoconvert")?;
let x264enc = gst::ElementFactory::make("x264enc")
.property("bitrate", DEFAULT_START_BITRATE / 1000)
.property_from_str("tune", "zerolatency")
.property_from_str("speed-preset", "ultrafast")
.property("threads", 4u32)
.property("key-int-max", 2560u32)
.property("b-adapt", false)
.property("vbv-buf-capacity", 120u32)
.build()
.context("Creating x264enc")?;
let video_overlay = gst::ElementFactory::make("timeoverlay")
.property_from_str("time-mode", "running-time")
.build()
.context("Creating timeoverlay")?;
let cps: gst::Caps = gst::Caps::builder("video/x-raw")
.field("width", 1280i32)
.field("height", 720i32)
.field("format",gst_video::VideoFormat::Rgbx.to_str())
.field("framerate", gst::Fraction::new(30, 1))
.field("pt",96i32)
.build();
self.pipeline()
.add_many([&videosrc, &video_overlay])
.expect("adding video elements");
video_overlay
.link_pads(None, &webrtcsink, Some("video_%u"))
.context("Linking video overlay")?;
videosrc
.link_filtered(
&video_overlay,
&gst::Caps::builder("video/x-raw")
.field("width", 1280i32)
.field("height", 720i32)
.field("format",gst_video::VideoFormat::Rgbx.to_str())
.field("framerate", gst::Fraction::new(60, 1))
.field("pt",96i32)
.build())
.context("Linking videosrc to timeoverlay")?;
video_overlay
.link_pads(None, &webrtcsink, Some("video_%u"))
.context("Linking video overlay")?;
How can I add queue, x264enc, videoconvert to the pipeline and links following that exmaple?
I try this way below and other several combinations but I can’t get it to work
self.pipeline()
.add_many([&videosrc, &video_overlay, &queue, &videoconvert, &x264enc])
.expect("adding video elements");
I hope you can please give me light on this.
Thanks