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:
commit
999dbb4434
|
|
@ -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) {
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue