Skip to content

Commit ce0712e

Browse files
chore: don't terminate the P2P call if screenshare fails
1 parent fae30f5 commit ce0712e

File tree

2 files changed

+19
-3
lines changed

2 files changed

+19
-3
lines changed

lib/src/voip/call_session.dart

Lines changed: 14 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -592,7 +592,6 @@ class CallSession {
592592
await addLocalStream(stream, SDPStreamMetadataPurpose.Screenshare);
593593
return true;
594594
} catch (err) {
595-
fireCallEvent(CallStateChange.kError);
596595
return false;
597596
}
598597
} else {
@@ -1315,16 +1314,16 @@ class CallSession {
13151314
return await voip.delegate.mediaDevices.getUserMedia(mediaConstraints);
13161315
} catch (e) {
13171316
await _getUserMediaFailed(e);
1318-
rethrow;
13191317
}
1318+
return null;
13201319
}
13211320

13221321
Future<MediaStream?> _getDisplayMedia() async {
13231322
try {
13241323
return await voip.delegate.mediaDevices
13251324
.getDisplayMedia(UserMediaConstraints.screenMediaConstraints);
13261325
} catch (e) {
1327-
await _getUserMediaFailed(e);
1326+
await _getDisplayMediaFailed(e);
13281327
}
13291328
return null;
13301329
}
@@ -1493,6 +1492,18 @@ class CallSession {
14931492
);
14941493
}
14951494

1495+
Future<void> _getDisplayMediaFailed(dynamic err) async {
1496+
Logs().w('Failed to get display media - ending call ${err.toString()}');
1497+
fireCallEvent(CallStateChange.kError);
1498+
// We don't terminate the call here because the user might still want to stay
1499+
// on the call and try again later.
1500+
throw CallError(
1501+
CallErrorCode.displayMediaFailed,
1502+
'Failed to get display media',
1503+
err,
1504+
);
1505+
}
1506+
14961507
Future<void> onSelectAnswerReceived(String? selectedPartyId) async {
14971508
if (direction != CallDirection.kIncoming) {
14981509
Logs().w('Got select_answer for an outbound call: ignoring');

lib/src/voip/utils/types.dart

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,11 @@ enum CallErrorCode {
5050
/// the hardware isn't plugged in, or the user has explicitly denied access.
5151
userMediaFailed('user_media_failed'),
5252

53+
/// An error code when there is no local display to screenshare. This may be
54+
/// because the hardware isn't plugged in, or the user has explicitly denied
55+
/// access.
56+
displayMediaFailed('display_media_failed'),
57+
5358
/// Error code used when a call event failed to send
5459
/// because unknown devices were present in the room
5560
unknownDevice('unknown_device'),

0 commit comments

Comments
 (0)