@@ -58,7 +58,7 @@ public class MembraneRTC: MulticastDelegate<MembraneRTCDelegate>, ObservableObje
58
58
59
59
private var localTracks : [ LocalTrack ] = [ ]
60
60
61
- private var localEndpoint = Endpoint ( id: " " , type: " webrtc " , metadata: . init( [ : ] ) , trackIdToMetadata : [ : ] )
61
+ private var localEndpoint = Endpoint ( id: " " , type: " webrtc " , metadata: . init( [ : ] ) , tracks : [ : ] )
62
62
63
63
// mapping from peer's id to itself
64
64
private var remoteEndpoints : [ String : Endpoint ] = [ : ]
@@ -173,7 +173,10 @@ public class MembraneRTC: MulticastDelegate<MembraneRTCDelegate>, ObservableObje
173
173
174
174
- Returns: `LocalCameraVideoTrack` instance that user then can use for things such as front / back camera switch.
175
175
*/
176
- public func createVideoTrack( videoParameters: VideoParameters , metadata: Metadata , captureDeviceId: String ? = nil )
176
+ public func createVideoTrack(
177
+ videoParameters: VideoParameters , metadata: Metadata , captureDeviceId: String ? = nil ,
178
+ simulcastConfig: SimulcastConfig ? = nil
179
+ )
177
180
-> LocalVideoTrack
178
181
{
179
182
DispatchQueue . webRTC. sync {
@@ -191,7 +194,8 @@ public class MembraneRTC: MulticastDelegate<MembraneRTCDelegate>, ObservableObje
191
194
192
195
localTracks. append ( videoTrack)
193
196
194
- localEndpoint = localEndpoint. withTrack ( trackId: videoTrack. rtcTrack ( ) . trackId, metadata: metadata)
197
+ localEndpoint = localEndpoint. withTrack (
198
+ trackId: videoTrack. rtcTrack ( ) . trackId, metadata: metadata, simulcastConfig: simulcastConfig)
195
199
196
200
engineCommunication. renegotiateTracks ( )
197
201
@@ -219,7 +223,8 @@ public class MembraneRTC: MulticastDelegate<MembraneRTCDelegate>, ObservableObje
219
223
220
224
localTracks. append ( audioTrack)
221
225
222
- localEndpoint = localEndpoint. withTrack ( trackId: audioTrack. rtcTrack ( ) . trackId, metadata: metadata)
226
+ localEndpoint = localEndpoint. withTrack (
227
+ trackId: audioTrack. rtcTrack ( ) . trackId, metadata: metadata, simulcastConfig: nil )
223
228
224
229
engineCommunication. renegotiateTracks ( )
225
230
@@ -252,6 +257,7 @@ public class MembraneRTC: MulticastDelegate<MembraneRTCDelegate>, ObservableObje
252
257
appGroup: appGroup, videoParameters: videoParameters,
253
258
peerConnectionFactoryWrapper: peerConnectionFactoryWrapper)
254
259
localTracks. append ( screensharingTrack)
260
+ let simulcastConfig = videoParameters. simulcastConfig
255
261
256
262
broadcastScreenshareReceiver = ScreenBroadcastNotificationReceiver (
257
263
onStart: { [ weak self, weak screensharingTrack] in
@@ -260,7 +266,7 @@ public class MembraneRTC: MulticastDelegate<MembraneRTCDelegate>, ObservableObje
260
266
}
261
267
262
268
DispatchQueue . main. async {
263
- self ? . setupScreencastTrack ( track: track, metadata: metadata)
269
+ self ? . setupScreencastTrack ( track: track, metadata: metadata, simulcastConfig : simulcastConfig )
264
270
onStart ( track)
265
271
}
266
272
} ,
@@ -369,7 +375,7 @@ public class MembraneRTC: MulticastDelegate<MembraneRTCDelegate>, ObservableObje
369
375
public func updateTrackMetadata( trackId: String , trackMetadata: Metadata ) {
370
376
DispatchQueue . webRTC. sync {
371
377
engineCommunication. updateTrackMetadata ( trackId: trackId, trackMetadata: trackMetadata)
372
- localEndpoint = localEndpoint. withTrack ( trackId: trackId, metadata: trackMetadata)
378
+ localEndpoint = localEndpoint. withTrack ( trackId: trackId, metadata: trackMetadata, simulcastConfig : nil )
373
379
}
374
380
}
375
381
@@ -403,12 +409,15 @@ public class MembraneRTC: MulticastDelegate<MembraneRTCDelegate>, ObservableObje
403
409
}
404
410
405
411
/// Adds given broadcast track to the peer connection and forces track renegotiation.
406
- private func setupScreencastTrack( track: LocalScreenBroadcastTrack , metadata: Metadata ) {
412
+ private func setupScreencastTrack(
413
+ track: LocalScreenBroadcastTrack , metadata: Metadata , simulcastConfig: SimulcastConfig ?
414
+ ) {
407
415
let screencastStreamId = UUID ( ) . uuidString
408
416
409
417
peerConnectionManager. addTrack ( track: track, localStreamId: screencastStreamId)
410
418
411
- localEndpoint = localEndpoint. withTrack ( trackId: track. rtcTrack ( ) . trackId, metadata: metadata)
419
+ localEndpoint = localEndpoint. withTrack (
420
+ trackId: track. rtcTrack ( ) . trackId, metadata: metadata, simulcastConfig: simulcastConfig)
412
421
413
422
engineCommunication. renegotiateTracks ( )
414
423
}
@@ -469,8 +478,10 @@ public class MembraneRTC: MulticastDelegate<MembraneRTCDelegate>, ObservableObje
469
478
self . remoteEndpoints [ endpoint. id] = endpoint
470
479
471
480
// initialize peer's track contexts
472
- endpoint. trackIdToMetadata? . forEach { trackId, metadata in
473
- let context = TrackContext ( track: nil , enpoint: endpoint, trackId: trackId, metadata: metadata)
481
+ endpoint. tracks? . forEach { trackId, trackData in
482
+ let context = TrackContext (
483
+ track: nil , enpoint: endpoint, trackId: trackId, metadata: trackData. metadata,
484
+ simulcastConfig: trackData. simulcastConfig)
474
485
475
486
self . trackContexts [ trackId] = context
476
487
@@ -512,7 +523,7 @@ public class MembraneRTC: MulticastDelegate<MembraneRTCDelegate>, ObservableObje
512
523
remoteEndpoints. removeValue ( forKey: endpoint. id)
513
524
514
525
// for a leaving peer clear his track contexts
515
- if let trackIds = endpoint. trackIdToMetadata ? . keys {
526
+ if let trackIds = endpoint. tracks ? . keys {
516
527
let contexts = trackIds. compactMap { id in
517
528
self . trackContexts [ id]
518
529
}
@@ -560,7 +571,10 @@ public class MembraneRTC: MulticastDelegate<MembraneRTCDelegate>, ObservableObje
560
571
561
572
if let sdp = sdp, let midToTrackId = midToTrackId {
562
573
self . engineCommunication. sdpOffer (
563
- sdp: sdp, trackIdToTrackMetadata: self . localEndpoint. trackIdToMetadata ?? [ : ] ,
574
+ sdp: sdp,
575
+ trackIdToTrackMetadata: self . localEndpoint. tracks? . mapValues ( { trackData in
576
+ trackData. metadata
577
+ } ) ?? [ : ] ,
564
578
midToTrackId: midToTrackId)
565
579
}
566
580
@@ -577,7 +591,7 @@ public class MembraneRTC: MulticastDelegate<MembraneRTCDelegate>, ObservableObje
577
591
peerConnectionManager. onRemoteCandidate ( candidate: candidate)
578
592
}
579
593
580
- func onTracksAdded( endpointId: String , trackIdToMetadata : [ String : Metadata ] ) {
594
+ func onTracksAdded( endpointId: String , tracks : [ String : TrackData ] ) {
581
595
// ignore local participant
582
596
guard localEndpoint. id != endpointId else {
583
597
return
@@ -589,12 +603,14 @@ public class MembraneRTC: MulticastDelegate<MembraneRTCDelegate>, ObservableObje
589
603
}
590
604
591
605
// update tracks of the remote peer
592
- endpoint = endpoint. with ( trackIdToMetadata : trackIdToMetadata )
606
+ endpoint = endpoint. with ( tracks : tracks )
593
607
remoteEndpoints [ endpoint. id] = endpoint
594
608
595
609
// for each track create a corresponding track context
596
- endpoint. trackIdToMetadata? . forEach { trackId, metadata in
597
- let context = TrackContext ( track: nil , enpoint: endpoint, trackId: trackId, metadata: metadata)
610
+ endpoint. tracks? . forEach { trackId, trackData in
611
+ let context = TrackContext (
612
+ track: nil , enpoint: endpoint, trackId: trackId, metadata: trackData. metadata,
613
+ simulcastConfig: trackData. simulcastConfig)
598
614
599
615
self . trackContexts [ trackId] = context
600
616
0 commit comments