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);
_addLocalStream(stream, SDPStreamMetadataPurpose.Usermedia); if (stream != null) {
_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,13 +1114,15 @@ class CallSession {
} }
void _getUserMediaFailed(dynamic err) { void _getUserMediaFailed(dynamic err) {
Logs().w('Failed to get user media - ending call ${err.toString()}'); if (state != CallState.kConnected) {
fireCallEvent(CallEvent.kError); Logs().w('Failed to get user media - ending call ${err.toString()}');
lastError = CallError( fireCallEvent(CallEvent.kError);
CallErrorCode.NoUserMedia, lastError = CallError(
'Couldn\'t start capturing media! Is your microphone set up and does this app have permission?', CallErrorCode.NoUserMedia,
err); 'Couldn\'t start capturing media! Is your microphone set up and does this app have permission?',
terminate(CallParty.kLocal, CallErrorCode.NoUserMedia, false); err);
terminate(CallParty.kLocal, CallErrorCode.NoUserMedia, false);
}
} }
void onSelectAnswerReceived(String? selectedPartyId) { void onSelectAnswerReceived(String? selectedPartyId) {