Merge branch 'voip/fix-call-breaks-caused-by-aborting-screen-sharing' into 'main'

Fix call breaks issue caused by aborting screen sharing.

Closes famedly-web#212

See merge request famedly/company/frontend/famedlysdk!938
This commit is contained in:
Nicolas Werner 2022-01-26 10:57:09 +00:00
commit 999dbb4434
1 changed files with 21 additions and 15 deletions

View File

@ -361,15 +361,19 @@ class CallSession {
await _preparePeerConnection(); await _preparePeerConnection();
setCallState(CallState.kCreateOffer); setCallState(CallState.kCreateOffer);
final stream = await _getUserMedia(type); final stream = await _getUserMedia(type);
if (stream != null) {
_addLocalStream(stream, SDPStreamMetadataPurpose.Usermedia); _addLocalStream(stream, SDPStreamMetadataPurpose.Usermedia);
} }
}
Future<void> initWithInvite(CallType type, RTCSessionDescription offer, Future<void> initWithInvite(CallType type, RTCSessionDescription offer,
SDPStreamMetadata? metadata, int lifetime) async { SDPStreamMetadata? metadata, int lifetime) async {
await _preparePeerConnection(); await _preparePeerConnection();
_addLocalStream( final stream = await _getUserMedia(type);
await _getUserMedia(type), SDPStreamMetadataPurpose.Usermedia); if (stream != null) {
_addLocalStream(stream, SDPStreamMetadataPurpose.Usermedia);
}
if (metadata != null) { if (metadata != null) {
_updateRemoteSDPStreamMetadata(metadata); _updateRemoteSDPStreamMetadata(metadata);
@ -530,7 +534,7 @@ class CallSession {
if (enabled) { if (enabled) {
try { try {
final MediaStream? stream = await _getDisplayMedia(); final stream = await _getDisplayMedia();
if (stream == null) { if (stream == null) {
return false; return false;
} }
@ -972,7 +976,7 @@ class CallSession {
localCandidates.clear(); localCandidates.clear();
} }
Future<MediaStream> _getUserMedia(CallType type) async { Future<MediaStream?> _getUserMedia(CallType type) async {
final mediaConstraints = { final mediaConstraints = {
'audio': true, 'audio': true,
'video': type == CallType.kVideo 'video': type == CallType.kVideo
@ -992,10 +996,10 @@ class CallSession {
} catch (e) { } catch (e) {
_getUserMediaFailed(e); _getUserMediaFailed(e);
} }
return Null as MediaStream; return null;
} }
Future<MediaStream> _getDisplayMedia() async { Future<MediaStream?> _getDisplayMedia() async {
final mediaConstraints = { final mediaConstraints = {
'audio': false, 'audio': false,
'video': true, 'video': true,
@ -1005,7 +1009,7 @@ class CallSession {
} catch (e) { } catch (e) {
_getUserMediaFailed(e); _getUserMediaFailed(e);
} }
return Null as MediaStream; return null;
} }
Future<RTCPeerConnection> _createPeerConnection() async { Future<RTCPeerConnection> _createPeerConnection() async {
@ -1110,6 +1114,7 @@ class CallSession {
} }
void _getUserMediaFailed(dynamic err) { void _getUserMediaFailed(dynamic err) {
if (state != CallState.kConnected) {
Logs().w('Failed to get user media - ending call ${err.toString()}'); Logs().w('Failed to get user media - ending call ${err.toString()}');
fireCallEvent(CallEvent.kError); fireCallEvent(CallEvent.kError);
lastError = CallError( lastError = CallError(
@ -1118,6 +1123,7 @@ class CallSession {
err); err);
terminate(CallParty.kLocal, CallErrorCode.NoUserMedia, false); terminate(CallParty.kLocal, CallErrorCode.NoUserMedia, false);
} }
}
void onSelectAnswerReceived(String? selectedPartyId) { void onSelectAnswerReceived(String? selectedPartyId) {
if (direction != CallDirection.kIncoming) { if (direction != CallDirection.kIncoming) {