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-11-04 00:24:54 +0300
committerGStreamer Marge Bot <gitlab-merge-bot@gstreamer-foundation.org>2023-11-04 13:19:45 +0300
commite5fd2c3568e1e66e344153b2f9c200155f20395d (patch)
treea5f5c4bee59d5375e05074a192c9f07849baf46a /net
parent5371eb52adea01b2bcd697fefe3e7487d72eaa85 (diff)
webrtcsrc: add turn-servers property
Part-of: <https://gitlab.freedesktop.org/gstreamer/gst-plugins-rs/-/merge_requests/1380>
Diffstat (limited to 'net')
-rw-r--r--net/webrtc/src/webrtcsrc/imp.rs42
1 files changed, 35 insertions, 7 deletions
diff --git a/net/webrtc/src/webrtcsrc/imp.rs b/net/webrtc/src/webrtcsrc/imp.rs
index 465ca34c4..8b27cecf6 100644
--- a/net/webrtc/src/webrtcsrc/imp.rs
+++ b/net/webrtc/src/webrtcsrc/imp.rs
@@ -34,6 +34,7 @@ const RTP_TWCC_URI: &str =
struct Settings {
stun_server: Option<String>,
+ turn_servers: gst::Array,
signaller: Signallable,
meta: Option<gst::Structure>,
video_codecs: Vec<Codec>,
@@ -62,8 +63,21 @@ impl ObjectImpl for WebRTCSrc {
static PROPS: Lazy<Vec<glib::ParamSpec>> = Lazy::new(|| {
vec![
glib::ParamSpecString::builder("stun-server")
+ .nick("The STUN server to use")
+ .blurb("The STUN server of the form stun://host:port")
.flags(glib::ParamFlags::READWRITE)
.default_value(DEFAULT_STUN_SERVER)
+ .mutable_ready()
+ .build(),
+ gst::ParamSpecArray::builder("turn-servers")
+ .nick("List of TURN servers to use")
+ .blurb("The TURN servers of the form <\"turn(s)://username:password@host:port\", \"turn(s)://username1:password1@host1:port1\">")
+ .element_spec(&glib::ParamSpecString::builder("turn-server")
+ .nick("TURN Server")
+ .blurb("The TURN server of the form turn(s)://username:password@host:port.")
+ .build()
+ )
+ .mutable_ready()
.build(),
glib::ParamSpecObject::builder::<Signallable>("signaller")
.flags(glib::ParamFlags::READWRITE | glib::ParamFlags::CONSTRUCT_ONLY)
@@ -114,29 +128,33 @@ impl ObjectImpl for WebRTCSrc {
"video-codecs" => {
self.settings.lock().unwrap().video_codecs = value
.get::<gst::ArrayRef>()
- .expect("Type checked upstream")
+ .expect("type checked upstream")
.as_slice()
.iter()
.filter_map(|codec_name| {
- Codecs::find(codec_name.get::<&str>().expect("Type checked upstream"))
+ Codecs::find(codec_name.get::<&str>().expect("type checked upstream"))
})
.collect::<Vec<Codec>>()
}
"audio-codecs" => {
self.settings.lock().unwrap().audio_codecs = value
.get::<gst::ArrayRef>()
- .expect("Type checked upstream")
+ .expect("type checked upstream")
.as_slice()
.iter()
.filter_map(|codec_name| {
- Codecs::find(codec_name.get::<&str>().expect("Type checked upstream"))
+ Codecs::find(codec_name.get::<&str>().expect("type checked upstream"))
})
.collect::<Vec<Codec>>()
}
"stun-server" => {
self.settings.lock().unwrap().stun_server = value
.get::<Option<String>>()
- .expect("type checked upstream")
+ .expect("type checked upstream");
+ }
+ "turn-servers" => {
+ let mut settings = self.settings.lock().unwrap();
+ settings.turn_servers = value.get::<gst::Array>().expect("type checked upstream");
}
"meta" => {
self.settings.lock().unwrap().meta = value
@@ -173,6 +191,7 @@ impl ObjectImpl for WebRTCSrc {
)
.to_value(),
"stun-server" => self.settings.lock().unwrap().stun_server.to_value(),
+ "turn-servers" => self.settings.lock().unwrap().turn_servers.to_value(),
"meta" => self.settings.lock().unwrap().meta.to_value(),
"enable-data-channel-navigation" => {
let settings = self.settings.lock().unwrap();
@@ -233,6 +252,7 @@ impl Default for Settings {
Self {
stun_server: DEFAULT_STUN_SERVER.map(|v| v.to_string()),
+ turn_servers: Default::default(),
signaller: signaller.upcast(),
meta: Default::default(),
audio_codecs: Codecs::audio_codecs()
@@ -475,8 +495,16 @@ impl WebRTCSrc {
.build()
.with_context(|| "Failed to make element webrtcbin".to_string())?;
- if let Some(stun_server) = self.settings.lock().unwrap().stun_server.as_ref() {
- webrtcbin.set_property("stun-server", stun_server);
+ {
+ let settings = self.settings.lock().unwrap();
+
+ if let Some(stun_server) = settings.stun_server.as_ref() {
+ webrtcbin.set_property("stun-server", stun_server);
+ }
+
+ for turn_server in settings.turn_servers.iter() {
+ webrtcbin.emit_by_name::<bool>("add-turn-server", &[&turn_server]);
+ }
}
let bin = gst::Bin::new();