diff --git a/net/webrtc/src/webrtcsink/imp.rs b/net/webrtc/src/webrtcsink/imp.rs index d4b1f0ef..b786c78e 100644 --- a/net/webrtc/src/webrtcsink/imp.rs +++ b/net/webrtc/src/webrtcsink/imp.rs @@ -1618,7 +1618,7 @@ impl WebRTCSink { } }); - let mut session = Session::new( + let session = Session::new( session_id.clone(), pipeline.clone(), webrtcbin.clone(), @@ -1643,8 +1643,7 @@ impl WebRTCSink { if session.congestion_controller.is_some() { let session_id_str = session_id.to_string(); - if session.stats_sigid.is_none() { - session.stats_sigid = Some(rtpbin.connect_closure("on-new-ssrc", true, + rtpbin.connect_closure("on-new-ssrc", true, glib::closure!(@weak-allow-none element, @weak-allow-none webrtcbin => move |rtpbin: gst::Object, session_id: u32, _src: u32| { let rtp_session = rtpbin.emit_by_name::("get-session", &[&session_id]); @@ -1654,16 +1653,17 @@ impl WebRTCSink { let mut state = element.imp().state.lock().unwrap(); if let Some(mut session) = state.sessions.get_mut(&session_id_str) { - session.stats_sigid = Some(rtp_session.connect_notify(Some("twcc-stats"), - glib::clone!(@strong session_id_str, @weak webrtcbin, @weak element => @default-return (), move |sess, pspec| { - // Run the Loss-based control algorithm on new peer TWCC feedbacks - element.imp().process_loss_stats(&element, &session_id_str, &sess.property::(pspec.name())); - }) - )); + if session.stats_sigid.is_none() { + session.stats_sigid = Some(rtp_session.connect_notify(Some("twcc-stats"), + glib::clone!(@strong session_id_str, @weak webrtcbin, @weak element => @default-return (), move |sess, pspec| { + // Run the Loss-based control algorithm on new peer TWCC feedbacks + element.imp().process_loss_stats(&element, &session_id_str, &sess.property::(pspec.name())); + }) + )); + } } }) - )); - } + ); } state