Skip to content

Commit 111ed07

Browse files
committed
Implemented alternative proposal via SettingEngine
1 parent 3479ccf commit 111ed07

File tree

4 files changed

+41
-14
lines changed

4 files changed

+41
-14
lines changed

webrtc/src/api/media_engine/mod.rs

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -336,17 +336,6 @@ impl MediaEngine {
336336
codecs.push(codec);
337337
}
338338

339-
/// set_multi_codec_negotiation enables or disables the negotiation of multiple codecs.
340-
pub fn set_multi_codec_negotiation(&mut self, negotiate_multi_codecs: bool) {
341-
self.negotiate_multi_codecs
342-
.store(negotiate_multi_codecs, Ordering::SeqCst);
343-
}
344-
345-
/// multi_codec_negotiation returns the current state of the negotiation of multiple codecs.
346-
pub fn multi_codec_negotiation(&self) -> bool {
347-
self.negotiate_multi_codecs.load(Ordering::SeqCst)
348-
}
349-
350339
/// register_codec adds codec to the MediaEngine
351340
/// These are the list of codecs supported by this PeerConnection.
352341
/// register_codec is not safe for concurrent use.
@@ -473,6 +462,17 @@ impl MediaEngine {
473462
}
474463
}
475464

465+
/// set_multi_codec_negotiation enables or disables the negotiation of multiple codecs.
466+
pub(crate) fn set_multi_codec_negotiation(&self, negotiate_multi_codecs: bool) {
467+
self.negotiate_multi_codecs
468+
.store(negotiate_multi_codecs, Ordering::SeqCst);
469+
}
470+
471+
/// multi_codec_negotiation returns the current state of the negotiation of multiple codecs.
472+
pub(crate) fn multi_codec_negotiation(&self) -> bool {
473+
self.negotiate_multi_codecs.load(Ordering::SeqCst)
474+
}
475+
476476
pub(crate) async fn get_codec_by_payload(
477477
&self,
478478
payload_type: PayloadType,

webrtc/src/api/setting_engine/mod.rs

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -99,6 +99,7 @@ pub struct SettingEngine {
9999
//iceProxyDialer :proxy.Dialer,?
100100
pub(crate) udp_network: UDPNetwork,
101101
pub(crate) disable_media_engine_copy: bool,
102+
pub(crate) disable_media_engine_multiple_codecs: bool,
102103
pub(crate) srtp_protection_profiles: Vec<SrtpProtectionProfile>,
103104
pub(crate) receive_mtu: usize,
104105
pub(crate) mid_generator: Option<Arc<dyn Fn(isize) -> String + Send + Sync>>,
@@ -342,6 +343,16 @@ impl SettingEngine {
342343
self.disable_media_engine_copy = is_disabled;
343344
}
344345

346+
/// disable_media_engine_multiple_codecs disables the MediaEngine negotiating different codecs.
347+
/// With the default value multiple media sections in the SDP can each negotiate different
348+
/// codecs. This is the new default behvior, because it makes Pion more spec compliant.
349+
/// The value of this setting will get copied to every copy of the MediaEngine generated
350+
/// for new PeerConnections (assuming DisableMediaEngineCopy is set to false).
351+
/// Note: this setting is targeted to be removed in release 4.2.0 (or later).
352+
pub fn disable_media_engine_multiple_codecs(&mut self, is_disabled: bool) {
353+
self.disable_media_engine_multiple_codecs = is_disabled;
354+
}
355+
345356
/// set_receive_mtu sets the size of read buffer that copies incoming packets. This is optional.
346357
/// Leave this 0 for the default receive_mtu
347358
pub fn set_receive_mtu(&mut self, receive_mtu: usize) {

webrtc/src/api/setting_engine/setting_engine_test.rs

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -269,3 +269,15 @@ async fn test_setting_engine_set_disable_media_engine_copy() -> Result<()> {
269269

270270
Ok(())
271271
}
272+
273+
#[test]
274+
fn test_setting_engine_media_engine_and_mtu_flags() -> Result<()> {
275+
let mut s = SettingEngine::default();
276+
277+
s.disable_media_engine_multiple_codecs(true);
278+
assert!(s.disable_media_engine_multiple_codecs);
279+
280+
s.set_receive_mtu(1337);
281+
assert_eq!(1337, s.receive_mtu);
282+
Ok(())
283+
}

webrtc/src/peer_connection/peer_connection_internal.rs

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -121,10 +121,14 @@ impl PeerConnectionInternal {
121121
peer_connection_state: Arc::new(AtomicU8::new(RTCPeerConnectionState::New as u8)),
122122

123123
setting_engine: Arc::clone(&api.setting_engine),
124-
media_engine: if !api.setting_engine.disable_media_engine_copy {
125-
Arc::new(api.media_engine.clone_to())
126-
} else {
124+
media_engine: if api.setting_engine.disable_media_engine_copy {
127125
Arc::clone(&api.media_engine)
126+
} else {
127+
let cloned_media_engine = Arc::new(api.media_engine.clone_to());
128+
cloned_media_engine.set_multi_codec_negotiation(
129+
!api.setting_engine.disable_media_engine_multiple_codecs,
130+
);
131+
cloned_media_engine
128132
},
129133
interceptor,
130134
stats_interceptor,

0 commit comments

Comments
 (0)