From 0f41c0f000df9c69fdc4cece31c2da33c5f85833 Mon Sep 17 00:00:00 2001 From: Matthew Waters Date: Sun, 21 Jun 2020 16:02:43 +1000 Subject: [PATCH] webrtc: fix ice control mode when we offer initially An initial offer means we have a local description not a remote description. Fixes https://gitlab.freedesktop.org/gstreamer/gst-plugins-bad/-/issues/1332 Part-of: --- ext/webrtc/gstwebrtcbin.c | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/ext/webrtc/gstwebrtcbin.c b/ext/webrtc/gstwebrtcbin.c index 6df7f46..52c89f9 100644 --- a/ext/webrtc/gstwebrtcbin.c +++ b/ext/webrtc/gstwebrtcbin.c @@ -4461,13 +4461,17 @@ _set_description_task (GstWebRTCBin * webrtc, struct set_description *sd) { gboolean ice_controller = FALSE; + /* get the current value so we don't change ice controller from TRUE to + * FALSE on renegotiation or once set to TRUE for the initial local offer */ + g_object_get (webrtc->priv->ice, "controller", &ice_controller, NULL); + /* we control ice negotiation if we send the initial offer */ ice_controller |= - new_signaling_state == GST_WEBRTC_SIGNALING_STATE_HAVE_REMOTE_OFFER + new_signaling_state == GST_WEBRTC_SIGNALING_STATE_HAVE_LOCAL_OFFER && webrtc->current_remote_description == NULL; /* or, if the remote is an ice-lite peer */ ice_controller |= new_signaling_state == GST_WEBRTC_SIGNALING_STATE_STABLE - && webrtc->current_remote_description->type == GST_WEBRTC_SDP_TYPE_OFFER + && webrtc->current_remote_description && _message_has_attribute_key (webrtc->current_remote_description->sdp, "ice-lite"); -- 2.7.4