Skip to content

Commit 3faa7a2

Browse files
authored
fix ice config issues. (#192)
* fix ice config issues. * update comment. * The client has high-priority to set ice settings.
1 parent 7acfb3f commit 3faa7a2

File tree

2 files changed

+38
-17
lines changed

2 files changed

+38
-17
lines changed

lib/src/core/engine.dart

Lines changed: 37 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -76,7 +76,7 @@ class Engine extends Disposable with EventsEmittable<EngineEvent> {
7676
String? get connectedServerAddress => _connectedServerAddress;
7777

7878
// server-provided ice servers
79-
List<lk_rtc.ICEServer> _serverProvidedIceServers = [];
79+
List<RTCIceServer> _serverProvidedIceServers = [];
8080

8181
late final _signalListener = signalClient.createListener(synchronized: true);
8282

@@ -337,27 +337,42 @@ class Engine extends Disposable with EventsEmittable<EngineEvent> {
337337
}
338338
}
339339

340-
Future<void> _configurePeerConnections({bool? forceRelay}) async {
340+
Future<void> _configurePeerConnections(
341+
{required lk_models.ClientConfigSetting forceRelay,
342+
required List<RTCIceServer> serverProvidedIceServers}) async {
341343
if (publisher != null || subscriber != null) {
342344
logger.warning('Already configured');
343345
return;
344346
}
345347

346348
// RTCConfiguration? config;
347-
// use server-provided iceServers if not provided by user
348-
final serverIceServers =
349-
_serverProvidedIceServers.map((e) => e.toSDKType()).toList();
350-
351349
RTCConfiguration rtcConfiguration = connectOptions.rtcConfiguration;
352-
if (serverIceServers.isNotEmpty) {
353-
// use server provided iceServers if exists
350+
351+
// The server provided iceServers are only used if
352+
// the client's iceServers are not set.
353+
if (rtcConfiguration.iceServers == null &&
354+
serverProvidedIceServers.isNotEmpty) {
354355
rtcConfiguration = connectOptions.rtcConfiguration
355-
.copyWith(iceServers: serverIceServers);
356+
.copyWith(iceServers: serverProvidedIceServers);
356357
}
357358

358-
if (forceRelay != null && forceRelay) {
359-
rtcConfiguration = rtcConfiguration.copyWith(
360-
iceTransportPolicy: RTCIceTransportPolicy.relay);
359+
// set forceRelay
360+
if (rtcConfiguration.iceTransportPolicy == null) {
361+
switch (forceRelay) {
362+
case lk_models.ClientConfigSetting.ENABLED:
363+
rtcConfiguration = rtcConfiguration.copyWith(
364+
iceTransportPolicy: RTCIceTransportPolicy.relay,
365+
);
366+
break;
367+
case lk_models.ClientConfigSetting.DISABLED:
368+
rtcConfiguration = rtcConfiguration.copyWith(
369+
iceTransportPolicy: RTCIceTransportPolicy.all,
370+
);
371+
break;
372+
case lk_models.ClientConfigSetting.UNSET:
373+
// do nothing
374+
break;
375+
}
361376
}
362377

363378
publisher = await Transport.create(_peerConnectionCreate,
@@ -627,16 +642,22 @@ class Engine extends Disposable with EventsEmittable<EngineEvent> {
627642
..on<SignalJoinResponseEvent>((event) async {
628643
// create peer connections
629644
_subscriberPrimary = event.response.subscriberPrimary;
630-
_serverProvidedIceServers = event.response.iceServers;
631645
_participantSid = event.response.participant.sid;
646+
var iceServersFromServer =
647+
event.response.iceServers.map((e) => e.toSDKType()).toList();
648+
649+
if (iceServersFromServer.isNotEmpty) {
650+
_serverProvidedIceServers = iceServersFromServer;
651+
}
632652

633653
logger.fine('onConnected subscriberPrimary: ${_subscriberPrimary}, '
634654
'serverVersion: ${event.response.serverVersion}, '
635-
'iceServers: ${event.response.iceServers}');
655+
'iceServers: ${event.response.iceServers}, '
656+
'forceRelay: $event.response.clientConfiguration.forceRelay');
636657

637658
await _configurePeerConnections(
638-
forceRelay: event.response.clientConfiguration.forceRelay ==
639-
lk_models.ClientConfigSetting.ENABLED);
659+
forceRelay: event.response.clientConfiguration.forceRelay,
660+
serverProvidedIceServers: _serverProvidedIceServers);
640661

641662
if (!_subscriberPrimary) {
642663
// for subscriberPrimary, we negotiate when necessary (lazy)

lib/src/extensions.dart

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ extension ICEServerExt on lk_rtc.ICEServer {
2424
RTCIceServer toSDKType() => RTCIceServer(
2525
urls: urls,
2626
username: username.isNotEmpty ? username : null,
27-
credential: credential.isNotEmpty ? username : null,
27+
credential: credential.isNotEmpty ? credential : null,
2828
);
2929
}
3030

0 commit comments

Comments
 (0)