diff --git a/lib/handlers/ReactNative.js b/lib/handlers/ReactNative.js
index <HASH>..<HASH> 100644
--- a/lib/handlers/ReactNative.js
+++ b/lib/handlers/ReactNative.js
@@ -469,7 +469,21 @@ class RecvHandler extends Handler
 
 		const localId = id;
 		const mid = kind;
-		const streamId = rtpParameters.rtcp.cname;
+		let streamId = rtpParameters.rtcp.cname;
+
+		// NOTE: In iOS we cannot reuse the same remote MediaStream for new remote
+		// tracks. This is because the libwebrtc ObjC bindgins do not react on new
+		// tracks generated within already existing streams (a terrible bug the
+		// libwebrtc team will never fix). So force the streamId to be different.
+		const { Platform } = require('react-native');
+
+		if (Platform.OS === 'ios')
+		{
+			logger.debug(
+				'receive() | forcing a random remote streamId to avoid well known bug in libwebrtc for iOS');
+
+			streamId += `-hack-iOS-${utils.generateRandomNumber()}`;
+		}
 
 		this._remoteSdp.receive(
 			{
Hack for #<I> (to avoid bug in ObjC bindings of libwebrtc in iOS)