Skip to content

Commit b4b4d0d

Browse files
rogurotusrainliu
authored andcommitted
sync get receiver
1 parent 5a192df commit b4b4d0d

File tree

4 files changed

+27
-29
lines changed

4 files changed

+27
-29
lines changed

webrtc/src/peer_connection/mod.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1654,7 +1654,7 @@ impl RTCPeerConnection {
16541654
let mut receivers = vec![];
16551655
let rtp_transceivers = self.internal.rtp_transceivers.lock().await;
16561656
for transceiver in &*rtp_transceivers {
1657-
receivers.push(transceiver.receiver().await);
1657+
receivers.push(transceiver.receiver());
16581658
}
16591659
receivers
16601660
}

webrtc/src/peer_connection/peer_connection_internal.rs

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -166,7 +166,7 @@ impl PeerConnectionInternal {
166166
self.undeclared_media_processor();
167167
} else {
168168
for t in &current_transceivers {
169-
let receiver = t.receiver().await;
169+
let receiver = t.receiver();
170170
let tracks = receiver.tracks().await;
171171
if tracks.is_empty() {
172172
continue;
@@ -216,7 +216,7 @@ impl PeerConnectionInternal {
216216
Arc::clone(&self.media_engine),
217217
interceptor,
218218
));
219-
t.set_receiver(receiver).await;
219+
t.set_receiver(receiver);
220220
}
221221
}
222222

@@ -337,7 +337,7 @@ impl PeerConnectionInternal {
337337
for incoming_track in incoming_tracks {
338338
// If we already have a TrackRemote for a given SSRC don't handle it again
339339
for t in local_transceivers {
340-
let receiver = t.receiver().await;
340+
let receiver = t.receiver();
341341
for track in receiver.tracks().await {
342342
for ssrc in &incoming_track.ssrcs {
343343
if *ssrc == track.ssrc() {
@@ -363,7 +363,7 @@ impl PeerConnectionInternal {
363363
continue;
364364
}
365365

366-
let receiver = t.receiver().await;
366+
let receiver = t.receiver();
367367
if receiver.have_received().await {
368368
continue;
369369
}
@@ -886,7 +886,7 @@ impl PeerConnectionInternal {
886886
)
887887
.await?;
888888

889-
let receiver = t.receiver().await;
889+
let receiver = t.receiver();
890890
PeerConnectionInternal::start_receiver(
891891
self.setting_engine.get_receive_mtu(),
892892
&incoming,
@@ -1004,7 +1004,7 @@ impl PeerConnectionInternal {
10041004
continue;
10051005
}
10061006

1007-
let receiver = t.receiver().await;
1007+
let receiver = t.receiver();
10081008

10091009
if !rsid.is_empty() {
10101010
return receiver
@@ -1206,7 +1206,7 @@ impl PeerConnectionInternal {
12061206
}
12071207
let mut track_infos = vec![];
12081208
for transeiver in transceivers {
1209-
let receiver = transeiver.receiver().await;
1209+
let receiver = transeiver.receiver();
12101210

12111211
if let Some(mid) = transeiver.mid() {
12121212
let tracks = receiver.tracks().await;

webrtc/src/rtp_transceiver/mod.rs

Lines changed: 13 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -174,9 +174,9 @@ pub type TriggerNegotiationNeededFnOption =
174174

175175
/// RTPTransceiver represents a combination of an RTPSender and an RTPReceiver that share a common mid.
176176
pub struct RTCRtpTransceiver {
177-
mid: OnceCell<String>, //atomic.Value
178-
sender: SyncMutex<Arc<RTCRtpSender>>, //atomic.Value
179-
receiver: Mutex<Arc<RTCRtpReceiver>>, //atomic.Value
177+
mid: OnceCell<String>, //atomic.Value
178+
sender: SyncMutex<Arc<RTCRtpSender>>, //atomic.Value
179+
receiver: SyncMutex<Arc<RTCRtpReceiver>>, //atomic.Value
180180

181181
direction: AtomicU8, //RTPTransceiverDirection
182182
current_direction: AtomicU8, //RTPTransceiverDirection
@@ -203,13 +203,12 @@ impl RTCRtpTransceiver {
203203
) -> Arc<Self> {
204204
let codecs = Arc::new(Mutex::new(codecs));
205205
receiver
206-
.set_transceiver_codecs(Some(Arc::clone(&codecs)))
207-
.await;
206+
.set_transceiver_codecs(Some(Arc::clone(&codecs)));
208207

209208
let t = Arc::new(RTCRtpTransceiver {
210209
mid: OnceCell::new(),
211210
sender: SyncMutex::new(sender),
212-
receiver: Mutex::new(receiver),
211+
receiver: SyncMutex::new(receiver),
213212

214213
direction: AtomicU8::new(direction as u8),
215214
current_direction: AtomicU8::new(RTCRtpTransceiverDirection::Unspecified as u8),
@@ -278,18 +277,17 @@ impl RTCRtpTransceiver {
278277
}
279278

280279
/// receiver returns the RTPTransceiver's RTPReceiver if it has one
281-
pub async fn receiver(&self) -> Arc<RTCRtpReceiver> {
282-
let receiver = self.receiver.lock().await;
280+
pub fn receiver(&self) -> Arc<RTCRtpReceiver> {
281+
let receiver = self.receiver.lock();
283282
receiver.clone()
284283
}
285284

286-
pub(crate) async fn set_receiver(&self, r: Arc<RTCRtpReceiver>) {
287-
r.set_transceiver_codecs(Some(Arc::clone(&self.codecs)))
288-
.await;
285+
pub(crate) fn set_receiver(&self, r: Arc<RTCRtpReceiver>) {
286+
r.set_transceiver_codecs(Some(Arc::clone(&self.codecs)));
289287

290288
{
291-
let mut receiver = self.receiver.lock().await;
292-
(*receiver).set_transceiver_codecs(None).await;
289+
let mut receiver = self.receiver.lock();
290+
(*receiver).set_transceiver_codecs(None);
293291

294292
*receiver = r;
295293
}
@@ -399,7 +397,7 @@ impl RTCRtpTransceiver {
399397
}
400398

401399
{
402-
let receiver = self.receiver.lock().await;
400+
let receiver = self.receiver.lock().clone();
403401
let pause_receiver = !current_direction.has_recv();
404402

405403
if pause_receiver {
@@ -431,7 +429,7 @@ impl RTCRtpTransceiver {
431429
sender.stop().await?;
432430
}
433431
{
434-
let r = self.receiver.lock().await;
432+
let r = self.receiver.lock();
435433
r.stop().await?;
436434
}
437435

webrtc/src/rtp_transceiver/rtp_receiver/mod.rs

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ use crate::rtp_transceiver::{
1616
use crate::track::track_remote::TrackRemote;
1717
use crate::track::{TrackStream, TrackStreams};
1818

19+
use arc_swap::ArcSwapOption;
1920
use interceptor::stream_info::RTPHeaderExtension;
2021
use interceptor::{Attributes, Interceptor};
2122
use log::trace;
@@ -151,7 +152,7 @@ pub struct RTPReceiverInternal {
151152

152153
tracks: RwLock<Vec<TrackStreams>>,
153154

154-
transceiver_codecs: Mutex<Option<Arc<Mutex<Vec<RTCRtpCodecParameters>>>>>,
155+
transceiver_codecs: ArcSwapOption<Mutex<Vec<RTCRtpCodecParameters>>>,
155156

156157
transport: Arc<RTCDtlsTransport>,
157158
media_engine: Arc<MediaEngine>,
@@ -314,7 +315,7 @@ impl RTPReceiverInternal {
314315
.media_engine
315316
.get_rtp_parameters_by_kind(self.kind, RTCRtpTransceiverDirection::Recvonly);
316317

317-
let transceiver_codecs = self.transceiver_codecs.lock().await;
318+
let transceiver_codecs = self.transceiver_codecs.load();
318319
if let Some(codecs) = &*transceiver_codecs {
319320
let mut c = codecs.lock().await;
320321
parameters.codecs =
@@ -426,7 +427,7 @@ impl RTCRtpReceiver {
426427
state_tx,
427428
state_rx,
428429

429-
transceiver_codecs: Mutex::new(None),
430+
transceiver_codecs: ArcSwapOption::new(None),
430431
}),
431432
}
432433
}
@@ -435,12 +436,11 @@ impl RTCRtpReceiver {
435436
self.kind
436437
}
437438

438-
pub(crate) async fn set_transceiver_codecs(
439+
pub(crate) fn set_transceiver_codecs(
439440
&self,
440441
codecs: Option<Arc<Mutex<Vec<RTCRtpCodecParameters>>>>,
441442
) {
442-
let mut transceiver_codecs = self.internal.transceiver_codecs.lock().await;
443-
*transceiver_codecs = codecs;
443+
self.internal.transceiver_codecs.store(codecs);
444444
}
445445

446446
/// transport returns the currently-configured *DTLSTransport or nil

0 commit comments

Comments
 (0)