Skip to content

Commit 5c1819e

Browse files
Support IceRestart when Ice State Disconnected。 (#218)
* 网络切换后重新协商 SDP,使用IceRestart实现 * 在通话过程中持续坚挺Ice事件 * update. * update. Co-authored-by: cloudwebrtc <duanweiwei1982@gmail.com>
1 parent 5947a4d commit 5c1819e

File tree

1 file changed

+13
-3
lines changed

1 file changed

+13
-3
lines changed

lib/src/rtc_session.dart

Lines changed: 13 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1139,7 +1139,8 @@ class RTCSession extends EventManager {
11391139

11401140
options = options ?? <String, dynamic>{};
11411141

1142-
Map<String, dynamic> rtcOfferConstraints = options['rtcOfferConstraints'];
1142+
Map<String, dynamic> rtcOfferConstraints =
1143+
options['rtcOfferConstraints'] ?? _rtcOfferConstraints;
11431144

11441145
if (_status != C.STATUS_WAITING_FOR_ACK && _status != C.STATUS_CONFIRMED) {
11451146
return false;
@@ -1574,6 +1575,13 @@ class RTCSession extends EventManager {
15741575
}, Timers.TIMER_H);
15751576
}
15761577

1578+
void _iceRestart() async {
1579+
Map<String, dynamic> offerConstraints =
1580+
_rtcOfferConstraints ?? <String, dynamic>{};
1581+
offerConstraints['mandatory']['IceRestart'] = true;
1582+
renegotiate(offerConstraints);
1583+
}
1584+
15771585
Future<void> _createRTCConnection(Map<String, dynamic> pcConfig,
15781586
Map<String, dynamic> rtcConstraints) async {
15791587
_connection = await createPeerConnection(pcConfig, rtcConstraints);
@@ -1585,6 +1593,9 @@ class RTCSession extends EventManager {
15851593
'status_code': 408,
15861594
'reason_phrase': DartSIP_C.causes.RTP_TIMEOUT
15871595
});
1596+
} else if (state ==
1597+
RTCIceConnectionState.RTCIceConnectionStateDisconnected) {
1598+
_iceRestart();
15881599
}
15891600
};
15901601

@@ -1619,7 +1630,7 @@ class RTCSession extends EventManager {
16191630
FutureOr<RTCSessionDescription> _createLocalDescription(
16201631
String type, Map<String, dynamic> constraints) async {
16211632
logger.debug('createLocalDescription()');
1622-
1633+
_iceGatheringState = RTCIceGatheringState.RTCIceGatheringStateNew;
16231634
Completer<RTCSessionDescription> completer =
16241635
Completer<RTCSessionDescription>();
16251636

@@ -1655,7 +1666,6 @@ class RTCSession extends EventManager {
16551666
Future<Null> Function() ready = () async {
16561667
_connection.onIceCandidate = null;
16571668
_connection.onIceGatheringState = null;
1658-
_connection.onIceConnectionState = null;
16591669
_iceGatheringState = RTCIceGatheringState.RTCIceGatheringStateComplete;
16601670
finished = true;
16611671
_rtcReady = true;

0 commit comments

Comments
 (0)