Welcome to mirror list, hosted at ThFree Co, Russian Federation.

gitlab.freedesktop.org/gstreamer/gst-plugins-rs.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
path: root/net
diff options
context:
space:
mode:
authorMaksym Khomenko <maksym.khomenko@skelia.partners>2023-09-28 17:58:45 +0300
committerMaksym Khomenko <maksym.khomenko@skelia.partners>2023-10-06 12:58:03 +0300
commita9719cada25170461bfd20fec079a4aa61dc8804 (patch)
tree766fdb0fc414a31c25a741ac50ea2b2c45079e01 /net
parent1c4833bc5dd25dcbfe7a850f711791a2d768be96 (diff)
webrtcsink: add custom signaller example
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-rs/-/merge_requests/1340>
Diffstat (limited to 'net')
-rw-r--r--net/webrtc/Cargo.toml3
-rw-r--r--net/webrtc/examples/webrtcsink-custom-signaller/main.rs41
-rw-r--r--net/webrtc/examples/webrtcsink-custom-signaller/signaller/imp.rs48
-rw-r--r--net/webrtc/examples/webrtcsink-custom-signaller/signaller/mod.rs23
4 files changed, 115 insertions, 0 deletions
diff --git a/net/webrtc/Cargo.toml b/net/webrtc/Cargo.toml
index 134311833..c57eaa962 100644
--- a/net/webrtc/Cargo.toml
+++ b/net/webrtc/Cargo.toml
@@ -93,3 +93,6 @@ name = "webrtcsink-stats-server"
[[example]]
name = "webrtcsink-high-quality-tune"
+
+[[example]]
+name = "webrtcsink-custom-signaller"
diff --git a/net/webrtc/examples/webrtcsink-custom-signaller/main.rs b/net/webrtc/examples/webrtcsink-custom-signaller/main.rs
new file mode 100644
index 000000000..30d688db7
--- /dev/null
+++ b/net/webrtc/examples/webrtcsink-custom-signaller/main.rs
@@ -0,0 +1,41 @@
+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(())
+}
diff --git a/net/webrtc/examples/webrtcsink-custom-signaller/signaller/imp.rs b/net/webrtc/examples/webrtcsink-custom-signaller/signaller/imp.rs
new file mode 100644
index 000000000..6d6f2d41e
--- /dev/null
+++ b/net/webrtc/examples/webrtcsink-custom-signaller/signaller/imp.rs
@@ -0,0 +1,48 @@
+use gst::glib;
+use gst::subclass::prelude::*;
+use gst_webrtc::WebRTCSessionDescription;
+
+use gstrswebrtc::signaller::{Signallable, SignallableImpl};
+
+#[derive(Default)]
+pub struct Signaller {}
+
+impl Signaller {}
+
+impl SignallableImpl for Signaller {
+ fn start(&self) {
+ unimplemented!()
+ }
+
+ fn stop(&self) {
+ unimplemented!()
+ }
+
+ fn send_sdp(&self, _session_id: &str, _sdp: &WebRTCSessionDescription) {
+ unimplemented!()
+ }
+
+ fn add_ice(
+ &self,
+ _session_id: &str,
+ _candidate: &str,
+ _sdp_m_line_index: u32,
+ _sdp_mid: Option<String>,
+ ) {
+ unimplemented!()
+ }
+
+ fn end_session(&self, _session_id: &str) {
+ unimplemented!()
+ }
+}
+
+#[glib::object_subclass]
+impl ObjectSubclass for Signaller {
+ const NAME: &'static str = "MyCustomWebRTCSinkSignaller";
+ type Type = super::MyCustomSignaller;
+ type ParentType = glib::Object;
+ type Interfaces = (Signallable,);
+}
+
+impl ObjectImpl for Signaller {}
diff --git a/net/webrtc/examples/webrtcsink-custom-signaller/signaller/mod.rs b/net/webrtc/examples/webrtcsink-custom-signaller/signaller/mod.rs
new file mode 100644
index 000000000..64f50f8f4
--- /dev/null
+++ b/net/webrtc/examples/webrtcsink-custom-signaller/signaller/mod.rs
@@ -0,0 +1,23 @@
+use gst::glib;
+use gstrswebrtc::signaller::Signallable;
+
+mod imp;
+
+glib::wrapper! {
+ pub struct MyCustomSignaller(ObjectSubclass<imp::Signaller>) @implements Signallable;
+}
+
+unsafe impl Send for MyCustomSignaller {}
+unsafe impl Sync for MyCustomSignaller {}
+
+impl MyCustomSignaller {
+ pub fn new() -> Self {
+ glib::Object::new()
+ }
+}
+
+impl Default for MyCustomSignaller {
+ fn default() -> Self {
+ MyCustomSignaller::new()
+ }
+}