diff --git a/lib/src/voip/call.dart b/lib/src/voip/call.dart index cba98f92..4ed8765d 100644 --- a/lib/src/voip/call.dart +++ b/lib/src/voip/call.dart @@ -473,9 +473,9 @@ class CallSession { waitForLocalAVStream = false; - callFeeds.forEach((element) { - // Safari can't send a MediaStream to multiple sources, so clone it - addLocalStream(element.stream!.clone(), element.purpose); + callFeeds.forEach((element) async { + addLocalStream( + await voip.delegate.cloneStream(element.stream!), element.purpose); }); answer(); @@ -504,8 +504,9 @@ class CallSession { return; } - callFeeds.forEach((element) { - addLocalStream(element.stream!.clone(), element.purpose); + callFeeds.forEach((element) async { + addLocalStream( + await voip.delegate.cloneStream(element.stream!), element.purpose); }); if (requestScreenshareFeed) { diff --git a/lib/src/voip/voip.dart b/lib/src/voip/voip.dart index 5dcb25fb..fc836e23 100644 --- a/lib/src/voip/voip.dart +++ b/lib/src/voip/voip.dart @@ -13,6 +13,7 @@ abstract class WebRTCDelegate { Map configuration, [Map constraints = const {}]); VideoRenderer createRenderer(); + Future cloneStream(MediaStream stream); void playRingtone(); void stopRingtone(); void handleNewCall(CallSession session);