diff options
author | Vivia Nikolaidou <vivia@ahiru.eu> | 2023-03-23 13:27:43 +0300 |
---|---|---|
committer | GStreamer Marge Bot <gitlab-merge-bot@gstreamer-foundation.org> | 2023-04-05 18:12:39 +0300 |
commit | f15fd82f83e5d1b784f6685e5dcbe0215178a3d7 (patch) | |
tree | 8a3b0205d251a26303f3b6309b3a2e7dfd4d4f98 /net | |
parent | 73dc6a8ef9c00840dd241ad2edc42eac5861df40 (diff) |
webrtcsink: Add ice-transport-policy option
Can be used to force relay ICE candidates, ensuring TURN server is used.
Proxy to the corresponding setting in webrtcbin,
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-rs/-/merge_requests/1160>
Diffstat (limited to 'net')
-rw-r--r-- | net/webrtc/src/webrtcsink/imp.rs | 21 |
1 files changed, 20 insertions, 1 deletions
diff --git a/net/webrtc/src/webrtcsink/imp.rs b/net/webrtc/src/webrtcsink/imp.rs index 8221ebe3..415e6cbc 100644 --- a/net/webrtc/src/webrtcsink/imp.rs +++ b/net/webrtc/src/webrtcsink/imp.rs @@ -7,7 +7,7 @@ use gst::subclass::prelude::*; use gst_rtp::prelude::*; use gst_utils::StreamProducer; use gst_video::subclass::prelude::*; -use gst_webrtc::WebRTCDataChannel; +use gst_webrtc::{WebRTCDataChannel, WebRTCICETransportPolicy}; use futures::prelude::*; @@ -50,6 +50,7 @@ const DEFAULT_CONGESTION_CONTROL: WebRTCSinkCongestionControl = const DEFAULT_DO_FEC: bool = true; const DEFAULT_DO_RETRANSMISSION: bool = true; const DEFAULT_ENABLE_DATA_CHANNEL_NAVIGATION: bool = false; +const DEFAULT_ICE_TRANSPORT_POLICY: WebRTCICETransportPolicy = WebRTCICETransportPolicy::All; const DEFAULT_START_BITRATE: u32 = 2048000; /* Start adding some FEC when the bitrate > 2Mbps as we found experimentally * that it is not worth it below that threshold */ @@ -74,6 +75,7 @@ struct Settings { do_retransmission: bool, enable_data_channel_navigation: bool, meta: Option<gst::Structure>, + ice_transport_policy: WebRTCICETransportPolicy, } /// Represents a codec we can offer @@ -282,6 +284,7 @@ impl Default for Settings { do_retransmission: DEFAULT_DO_RETRANSMISSION, enable_data_channel_navigation: DEFAULT_ENABLE_DATA_CHANNEL_NAVIGATION, meta: None, + ice_transport_policy: DEFAULT_ICE_TRANSPORT_POLICY, } } } @@ -1417,6 +1420,7 @@ impl WebRTCSink { })?; webrtcbin.set_property_from_str("bundle-policy", "max-bundle"); + webrtcbin.set_property("ice-transport-policy", settings.ice_transport_policy); if let Some(stun_server) = settings.stun_server.as_ref() { webrtcbin.set_property("stun-server", stun_server); @@ -2434,6 +2438,11 @@ impl ObjectImpl for WebRTCSink { .nick("Meta") .blurb("Free form metadata about the producer") .build(), + glib::ParamSpecEnum::builder_with_default("ice-transport-policy", DEFAULT_ICE_TRANSPORT_POLICY) + .nick("ICE Transport Policy") + .blurb("The policy to apply for ICE transport") + .mutable_ready() + .build(), ] }); @@ -2503,6 +2512,12 @@ impl ObjectImpl for WebRTCSink { .get::<Option<gst::Structure>>() .expect("type checked upstream") } + "ice-transport-policy" => { + let mut settings = self.settings.lock().unwrap(); + settings.ice_transport_policy = value + .get::<WebRTCICETransportPolicy>() + .expect("type checked upstream"); + } _ => unimplemented!(), } } @@ -2558,6 +2573,10 @@ impl ObjectImpl for WebRTCSink { let settings = self.settings.lock().unwrap(); settings.meta.to_value() } + "ice-transport-policy" => { + let settings = self.settings.lock().unwrap(); + settings.ice_transport_policy.to_value() + } _ => unimplemented!(), } } |