diff --git a/lib/src/voip/call.dart b/lib/src/voip/call.dart index 326cb9f3..9437ef7c 100644 --- a/lib/src/voip/call.dart +++ b/lib/src/voip/call.dart @@ -84,10 +84,10 @@ class WrappedMediaStream { renderer.srcObject = null; if (isLocal()) { if (isWeb) { - await stream?.dispose(); + await stopMediaStream(stream); } else { if (!isGroupCall) { - await stream?.dispose(); + await stopMediaStream(stream); } } } diff --git a/lib/src/voip/group_call.dart b/lib/src/voip/group_call.dart index f0ab7703..b4b8ef46 100644 --- a/lib/src/voip/group_call.dart +++ b/lib/src/voip/group_call.dart @@ -614,7 +614,7 @@ class GroupCall { calls.forEach((call) { call.removeLocalStream(call.localScreenSharingStream!); }); - stopMediaStream(localScreenshareStream!.stream); + await stopMediaStream(localScreenshareStream?.stream); removeScreenshareStream(localScreenshareStream!); localScreenshareStream = null; localDesktopCapturerSourceId = null; @@ -1094,8 +1094,8 @@ class GroupCall { onStreamRemoved.add(stream); if (stream.isLocal()) { - stream?.disposeRenderer(); - stream?.stream?.dispose(); + stream.disposeRenderer(); + stopMediaStream(stream.stream); } onGroupCallEvent.add(GroupCallEvent.UserMediaStreamsChanged); @@ -1186,7 +1186,10 @@ class GroupCall { onStreamRemoved.add(stream); - stream.dispose(); + if (stream.isLocal()) { + stream.disposeRenderer(); + stopMediaStream(stream.stream); + } onGroupCallEvent.add(GroupCallEvent.ScreenshareStreamsChanged); } diff --git a/lib/src/voip/utils.dart b/lib/src/voip/utils.dart index c331d104..26dfc9ec 100644 --- a/lib/src/voip/utils.dart +++ b/lib/src/voip/utils.dart @@ -1,10 +1,11 @@ import 'package:random_string/random_string.dart'; import 'package:webrtc_interface/webrtc_interface.dart'; -void stopMediaStream(MediaStream? stream) async { +Future stopMediaStream(MediaStream? stream) async { stream?.getTracks().forEach((element) async { await element.stop(); }); + await stream?.dispose(); } void setTracksEnabled(List tracks, bool enabled) {