switchCamera method
For web implementation, make sure to pass the target deviceId
Implementation
@override
Future<bool> switchCamera({String? deviceId}) async {
if (CallType.VIDEO_CALL != callType) {
return Future.error(IllegalStateException(
"Can't perform operation [switchCamera] for AUDIO call"));
}
try {
if (localStream == null) {
return Future.error(IllegalStateException(
"Can't perform operation [switchCamera], cause 'localStream' not initialised"));
} else {
this.selectedVideoInputDevice = deviceId;
if (selectedVideoInputDevice != null) {
var newMediaStream = await navigator.mediaDevices.getUserMedia({
'audio': false,
'video': kIsWeb
? {'deviceId': selectedVideoInputDevice}
: getVideoConfig(deviceId: selectedVideoInputDevice),
});
var oldVideoTrack = localStream!.getVideoTracks()[0];
await localStream?.removeTrack(oldVideoTrack);
oldVideoTrack.stop();
await localStream?.addTrack(newMediaStream.getVideoTracks()[0]);
channels.forEach((userId, peerConnection) async {
await peerConnection
.replaceVideoTrack(newMediaStream.getVideoTracks()[0]);
});
this.onLocalStreamReceived?.call(localStream!);
return Future.value(true);
} else {
final videoTrack = localStream!.getVideoTracks()[0];
return Helper.switchCamera(videoTrack, null, localStream);
}
}
} catch (error) {
return Future.error(error);
}
}