gst-plugins-rs/net/webrtc/examples/webrtcsink-custom-signaller/main.rs

42 lines
1.2 KiB
Rust

mod signaller;
// from outside the plugin repository, one would need to add plugin package as follows:
// [dependencies]
// gstrswebrtc = { package = "gst-plugin-webrtc", git = "https://gitlab.freedesktop.org/gstreamer/gst-plugins-rs/" }
extern crate gstrswebrtc;
use anyhow::Error;
use gst::prelude::*;
use gstrswebrtc::signaller as signaller_interface;
use gstrswebrtc::webrtcsink;
fn main() -> Result<(), Error> {
gst::init()?;
let custom_signaller = signaller::MyCustomSignaller::new();
let webrtcsink = webrtcsink::BaseWebRTCSink::with_signaller(
signaller_interface::Signallable::from(custom_signaller),
);
let pipeline = gst::Pipeline::new();
let video_src = gst::ElementFactory::make("videotestsrc").build().unwrap();
pipeline
.add_many([&video_src, webrtcsink.upcast_ref()])
.unwrap();
video_src
.link(webrtcsink.upcast_ref::<gst::Element>())
.unwrap();
let bus = pipeline.bus().unwrap();
pipeline.set_state(gst::State::Playing).unwrap();
let _msg = bus.timed_pop_filtered(gst::ClockTime::NONE, &[gst::MessageType::Eos]);
pipeline.set_state(gst::State::Null).unwrap();
Ok(())
}