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

github.com/sdroege/gst-plugin-rs.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
path: root/net
diff options
context:
space:
mode:
authorVivia Nikolaidou <vivia@ahiru.eu>2023-03-23 13:27:43 +0300
committerGStreamer Marge Bot <gitlab-merge-bot@gstreamer-foundation.org>2023-04-05 18:12:39 +0300
commitf15fd82f83e5d1b784f6685e5dcbe0215178a3d7 (patch)
tree8a3b0205d251a26303f3b6309b3a2e7dfd4d4f98 /net
parent73dc6a8ef9c00840dd241ad2edc42eac5861df40 (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.rs21
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!(),
}
}