From 8a9417a546a18675d829150afbccf01d16a2987a Mon Sep 17 00:00:00 2001 From: Santhosh Vaiyapuri Date: Tue, 18 Nov 2025 17:42:01 +0100 Subject: [PATCH 1/8] align with webrtcmodule --- .../com/oney/WebRTCModule/WebRTCModule.java | 29 ++++++++++++++----- 1 file changed, 21 insertions(+), 8 deletions(-) diff --git a/android/src/main/java/com/oney/WebRTCModule/WebRTCModule.java b/android/src/main/java/com/oney/WebRTCModule/WebRTCModule.java index d93f9bdea..9de29cb80 100644 --- a/android/src/main/java/com/oney/WebRTCModule/WebRTCModule.java +++ b/android/src/main/java/com/oney/WebRTCModule/WebRTCModule.java @@ -92,19 +92,28 @@ public WebRTCModule(ReactApplicationContext reactContext) { adm = JavaAudioDeviceModule.builder(reactContext).createAudioDeviceModule(); } + AudioProcessingFactory audioProcessingFactory = null; + try { + if (options.audioProcessingFactoryProvider != null) { + audioProcessingFactory = options.audioProcessingFactoryProvider; + } + } catch (Exception e) { + // do nothing. + } + Log.d(TAG, "Using video encoder factory: " + encoderFactory.getClass().getCanonicalName()); Log.d(TAG, "Using video decoder factory: " + decoderFactory.getClass().getCanonicalName()); - if(audioProcessingFactoryProvider == null) { - audioProcessingFactoryProvider = new AudioProcessingController(); + PeerConnectionFactory.Builder pcFactoryBuilder = PeerConnectionFactory.builder() + .setAudioDeviceModule(adm) + .setVideoEncoderFactory(encoderFactory) + .setVideoDecoderFactory(decoderFactory); + + if (audioProcessingFactory != null) { + pcFactoryBuilder.setAudioProcessingFactory(audioProcessingFactory); } - mFactory = PeerConnectionFactory.builder() - .setAudioDeviceModule(adm) - .setVideoEncoderFactory(encoderFactory) - .setVideoDecoderFactory(decoderFactory) - .setAudioProcessingFactory(audioProcessingFactoryProvider.getFactory()) - .createPeerConnectionFactory(); + mFactory = pcFactoryBuilder.createPeerConnectionFactory(); // PeerConnectionFactory now owns the adm native pointer, and we don't need it anymore. adm.release(); @@ -127,6 +136,10 @@ public AudioDeviceModule getAudioDeviceModule() { return mAudioDeviceModule; } + public PeerConnectionObserver getPeerConnectionObserver(int id) { + return mPeerConnectionObservers.get(id); + } + private PeerConnection getPeerConnection(int id) { PeerConnectionObserver pco = mPeerConnectionObservers.get(id); return (pco == null) ? null : pco.getPeerConnection(); From 04b5e4c20514239d761a84a159e1b42f3e48e3a6 Mon Sep 17 00:00:00 2001 From: Santhosh Vaiyapuri Date: Tue, 18 Nov 2025 21:16:09 +0100 Subject: [PATCH 2/8] chore: align with rn-webrtc --- src/Permissions.ts | 8 ++++---- src/getUserMedia.ts | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/src/Permissions.ts b/src/Permissions.ts index b3dcd4e8f..d3769733d 100644 --- a/src/Permissions.ts +++ b/src/Permissions.ts @@ -55,7 +55,7 @@ class Permissions { /** * Validates the given permission descriptor. */ - _validatePermissionDescriptior(permissionDesc) { + _validatePermissionDescriptor(permissionDesc) { if (typeof permissionDesc !== 'object') { throw new TypeError('Argument 1 of Permissions.query is not an object.'); } @@ -77,7 +77,7 @@ class Permissions { */ query(permissionDesc: PermissionDescriptor) { try { - this._validatePermissionDescriptior(permissionDesc); + this._validatePermissionDescriptor(permissionDesc); } catch (e) { return Promise.reject(e); } @@ -107,7 +107,7 @@ class Permissions { */ request(permissionDesc: PermissionDescriptor) { try { - this._validatePermissionDescriptior(permissionDesc); + this._validatePermissionDescriptor(permissionDesc); } catch (e) { return Promise.reject(e); } @@ -130,4 +130,4 @@ class Permissions { } } -export default new Permissions(); +export default new Permissions(); \ No newline at end of file diff --git a/src/getUserMedia.ts b/src/getUserMedia.ts index 6ebad9159..310482c2b 100644 --- a/src/getUserMedia.ts +++ b/src/getUserMedia.ts @@ -108,4 +108,4 @@ export default function getUserMedia(constraints: Constraints = {}): Promise Date: Tue, 18 Nov 2025 21:23:33 +0100 Subject: [PATCH 3/8] align more --- android/src/main/java/com/oney/WebRTCModule/WebRTCModule.java | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/android/src/main/java/com/oney/WebRTCModule/WebRTCModule.java b/android/src/main/java/com/oney/WebRTCModule/WebRTCModule.java index 9de29cb80..9b4f8c305 100644 --- a/android/src/main/java/com/oney/WebRTCModule/WebRTCModule.java +++ b/android/src/main/java/com/oney/WebRTCModule/WebRTCModule.java @@ -21,8 +21,6 @@ import com.facebook.react.bridge.WritableMap; import com.facebook.react.module.annotations.ReactModule; import com.facebook.react.modules.core.DeviceEventManagerModule; -import com.oney.WebRTCModule.audio.AudioProcessingFactoryProvider; -import com.oney.WebRTCModule.audio.AudioProcessingController; import com.oney.WebRTCModule.webrtcutils.SelectiveVideoDecoderFactory; import org.webrtc.*; @@ -95,7 +93,7 @@ public WebRTCModule(ReactApplicationContext reactContext) { AudioProcessingFactory audioProcessingFactory = null; try { if (options.audioProcessingFactoryProvider != null) { - audioProcessingFactory = options.audioProcessingFactoryProvider; + audioProcessingFactory = options.audioProcessingFactoryProvider.getFactory(); } } catch (Exception e) { // do nothing. From de1db4248b163a56b2c62b3b57eb7a2d1af7c4bd Mon Sep 17 00:00:00 2001 From: Santhosh Vaiyapuri Date: Tue, 18 Nov 2025 21:25:17 +0100 Subject: [PATCH 4/8] add timeout --- src/Permissions.ts | 26 ++++++++++++++++++++++++-- 1 file changed, 24 insertions(+), 2 deletions(-) diff --git a/src/Permissions.ts b/src/Permissions.ts index d3769733d..e35bab93a 100644 --- a/src/Permissions.ts +++ b/src/Permissions.ts @@ -45,9 +45,31 @@ class Permissions { */ _requestPermissionAndroid(perm: Permission) { return new Promise(resolve => { + let isResolved = false; + + // Set a timeout to handle hanging promise (e.g., "Never ask again" case) + const timeout = setTimeout(() => { + if (!isResolved) { + isResolved = true; + resolve(false); + } + }, 5000); // 5 second timeout + PermissionsAndroid.request(perm).then( - granted => resolve(granted === PermissionsAndroid.RESULTS.GRANTED), - () => resolve(false) + granted => { + if (!isResolved) { + clearTimeout(timeout); + isResolved = true; + resolve(granted === PermissionsAndroid.RESULTS.GRANTED); + } + }, + () => { + if (!isResolved) { + clearTimeout(timeout); + isResolved = true; + resolve(false); + } + } ); }); } From fb3a545d1c4a9cfac83de269f826c04f680659f4 Mon Sep 17 00:00:00 2001 From: Santhosh Vaiyapuri Date: Tue, 18 Nov 2025 21:34:56 +0100 Subject: [PATCH 5/8] 137.0.1-alpha.1 --- package-lock.json | 4 ++-- package.json | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/package-lock.json b/package-lock.json index 07b448d12..5211c7568 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "@stream-io/react-native-webrtc", - "version": "137.0.0", + "version": "137.0.1-alpha.1", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "@stream-io/react-native-webrtc", - "version": "137.0.0", + "version": "137.0.1-alpha.1", "license": "MIT", "dependencies": { "base64-js": "1.5.1", diff --git a/package.json b/package.json index 7c49555ca..6287074af 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@stream-io/react-native-webrtc", - "version": "137.0.0", + "version": "137.0.1-alpha.1", "repository": { "type": "git", "url": "git+https://github.com/GetStream/react-native-webrtc.git" From fc4fb7d34f20bc46d0ae992a7b248f86c4f6d915 Mon Sep 17 00:00:00 2001 From: Santhosh Vaiyapuri Date: Tue, 18 Nov 2025 21:40:28 +0100 Subject: [PATCH 6/8] remove unnecessary line --- android/src/main/java/com/oney/WebRTCModule/WebRTCModule.java | 1 - 1 file changed, 1 deletion(-) diff --git a/android/src/main/java/com/oney/WebRTCModule/WebRTCModule.java b/android/src/main/java/com/oney/WebRTCModule/WebRTCModule.java index 9b4f8c305..070f32b50 100644 --- a/android/src/main/java/com/oney/WebRTCModule/WebRTCModule.java +++ b/android/src/main/java/com/oney/WebRTCModule/WebRTCModule.java @@ -64,7 +64,6 @@ public WebRTCModule(ReactApplicationContext reactContext) { VideoDecoderFactory decoderFactory = options.videoDecoderFactory; Loggable injectableLogger = options.injectableLogger; Logging.Severity loggingSeverity = options.loggingSeverity; - AudioProcessingFactoryProvider audioProcessingFactoryProvider = options.audioProcessingFactoryProvider; String fieldTrials = options.fieldTrials; From adb8053aa229beecee93e436a5e81e00ce5c6e56 Mon Sep 17 00:00:00 2001 From: Santhosh Vaiyapuri Date: Wed, 19 Nov 2025 12:47:42 +0100 Subject: [PATCH 7/8] 137.0.1-alpha.2 --- package-lock.json | 4 ++-- package.json | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/package-lock.json b/package-lock.json index 5211c7568..fd9a4531c 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "@stream-io/react-native-webrtc", - "version": "137.0.1-alpha.1", + "version": "137.0.1-alpha.2", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "@stream-io/react-native-webrtc", - "version": "137.0.1-alpha.1", + "version": "137.0.1-alpha.2", "license": "MIT", "dependencies": { "base64-js": "1.5.1", diff --git a/package.json b/package.json index 6287074af..33989f7a0 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@stream-io/react-native-webrtc", - "version": "137.0.1-alpha.1", + "version": "137.0.1-alpha.2", "repository": { "type": "git", "url": "git+https://github.com/GetStream/react-native-webrtc.git" From 47ecdea376f19e5a536dc8241aa789dfbb5e6adf Mon Sep 17 00:00:00 2001 From: Santhosh Vaiyapuri Date: Thu, 20 Nov 2025 14:40:43 +0100 Subject: [PATCH 8/8] Revert "add timeout" This reverts commit de1db4248b163a56b2c62b3b57eb7a2d1af7c4bd. --- src/Permissions.ts | 26 ++------------------------ 1 file changed, 2 insertions(+), 24 deletions(-) diff --git a/src/Permissions.ts b/src/Permissions.ts index e35bab93a..d3769733d 100644 --- a/src/Permissions.ts +++ b/src/Permissions.ts @@ -45,31 +45,9 @@ class Permissions { */ _requestPermissionAndroid(perm: Permission) { return new Promise(resolve => { - let isResolved = false; - - // Set a timeout to handle hanging promise (e.g., "Never ask again" case) - const timeout = setTimeout(() => { - if (!isResolved) { - isResolved = true; - resolve(false); - } - }, 5000); // 5 second timeout - PermissionsAndroid.request(perm).then( - granted => { - if (!isResolved) { - clearTimeout(timeout); - isResolved = true; - resolve(granted === PermissionsAndroid.RESULTS.GRANTED); - } - }, - () => { - if (!isResolved) { - clearTimeout(timeout); - isResolved = true; - resolve(false); - } - } + granted => resolve(granted === PermissionsAndroid.RESULTS.GRANTED), + () => resolve(false) ); }); }