From 690fdf701cf0bae7a381a1824dbd54e45e186181 Mon Sep 17 00:00:00 2001 From: Santhosh Vaiyapuri Date: Wed, 30 Apr 2025 15:46:51 +0200 Subject: [PATCH 01/11] siwth to stream fork and add audio files --- android/build.gradle | 2 +- .../audio/AudioProcessingAdapter.java | 59 +++++++++++++++++++ .../audio/AudioProcessingController.java | 29 +++++++++ .../audio/AudioProcessingFactoryProvider.java | 8 +++ 4 files changed, 97 insertions(+), 1 deletion(-) create mode 100644 android/src/main/java/com/oney/WebRTCModule/audio/AudioProcessingAdapter.java create mode 100644 android/src/main/java/com/oney/WebRTCModule/audio/AudioProcessingController.java create mode 100644 android/src/main/java/com/oney/WebRTCModule/audio/AudioProcessingFactoryProvider.java diff --git a/android/build.gradle b/android/build.gradle index 5e21874a2..83e3afde4 100644 --- a/android/build.gradle +++ b/android/build.gradle @@ -31,7 +31,7 @@ android { } dependencies { - api 'io.github.webrtc-sdk:android:125.6422.06.1' + api 'io.getstream:stream-webrtc-android:1.3.8' implementation 'com.facebook.react:react-native:+' implementation "androidx.core:core:1.7.0" } diff --git a/android/src/main/java/com/oney/WebRTCModule/audio/AudioProcessingAdapter.java b/android/src/main/java/com/oney/WebRTCModule/audio/AudioProcessingAdapter.java new file mode 100644 index 000000000..7e06ae521 --- /dev/null +++ b/android/src/main/java/com/oney/WebRTCModule/audio/AudioProcessingAdapter.java @@ -0,0 +1,59 @@ +package com.oney.WebRTCModule.audio; + +import org.webrtc.ExternalAudioProcessingFactory; + +import java.nio.ByteBuffer; +import java.util.ArrayList; +import java.util.List; + +public class AudioProcessingAdapter implements ExternalAudioProcessingFactory.AudioProcessing { + public interface ExternalAudioFrameProcessing { + void initialize(int sampleRateHz, int numChannels); + + void reset(int newRate); + + void process(int numBands, int numFrames, ByteBuffer buffer); + } + + public AudioProcessingAdapter() {} + List audioProcessors = new ArrayList<>(); + + public void addProcessor(ExternalAudioFrameProcessing audioProcessor) { + synchronized (audioProcessors) { + audioProcessors.add(audioProcessor); + } + } + + public void removeProcessor(ExternalAudioFrameProcessing audioProcessor) { + synchronized (audioProcessors) { + audioProcessors.remove(audioProcessor); + } + } + + @Override + public void initialize(int sampleRateHz, int numChannels) { + synchronized (audioProcessors) { + for (ExternalAudioFrameProcessing audioProcessor : audioProcessors) { + audioProcessor.initialize(sampleRateHz, numChannels); + } + } + } + + @Override + public void reset(int newRate) { + synchronized (audioProcessors) { + for (ExternalAudioFrameProcessing audioProcessor : audioProcessors) { + audioProcessor.reset(newRate); + } + } + } + + @Override + public void process(int numBands, int numFrames, ByteBuffer buffer) { + synchronized (audioProcessors) { + for (ExternalAudioFrameProcessing audioProcessor : audioProcessors) { + audioProcessor.process(numBands, numFrames, buffer); + } + } + } +} \ No newline at end of file diff --git a/android/src/main/java/com/oney/WebRTCModule/audio/AudioProcessingController.java b/android/src/main/java/com/oney/WebRTCModule/audio/AudioProcessingController.java new file mode 100644 index 000000000..b0f98c2fc --- /dev/null +++ b/android/src/main/java/com/oney/WebRTCModule/audio/AudioProcessingController.java @@ -0,0 +1,29 @@ +package io.getstream.webrtc.flutter.audio; + +import org.webrtc.AudioProcessingFactory; +import org.webrtc.ExternalAudioProcessingFactory; + +public class AudioProcessingController implements AudioProcessingFactoryProvider { + /** + * This is the audio processing module that will be applied to the audio stream after it is captured from the microphone. + * This is useful for adding echo cancellation, noise suppression, etc. + */ + public final AudioProcessingAdapter capturePostProcessing = new AudioProcessingAdapter(); + /** + * This is the audio processing module that will be applied to the audio stream before it is rendered to the speaker. + */ + public final AudioProcessingAdapter renderPreProcessing = new AudioProcessingAdapter(); + + public ExternalAudioProcessingFactory externalAudioProcessingFactory; + + public AudioProcessingController() { + this.externalAudioProcessingFactory = new ExternalAudioProcessingFactory(); + this.externalAudioProcessingFactory.setCapturePostProcessing(capturePostProcessing); + this.externalAudioProcessingFactory.setRenderPreProcessing(renderPreProcessing); + } + + @Override + public AudioProcessingFactory getFactory() { + return this.externalAudioProcessingFactory; + } +} \ No newline at end of file diff --git a/android/src/main/java/com/oney/WebRTCModule/audio/AudioProcessingFactoryProvider.java b/android/src/main/java/com/oney/WebRTCModule/audio/AudioProcessingFactoryProvider.java new file mode 100644 index 000000000..0bc1b09c4 --- /dev/null +++ b/android/src/main/java/com/oney/WebRTCModule/audio/AudioProcessingFactoryProvider.java @@ -0,0 +1,8 @@ +package com.oney.WebRTCModule.audio; + +import org.webrtc.AudioProcessingFactory; + +// Define the common interface +public interface AudioProcessingFactoryProvider { + AudioProcessingFactory getFactory(); +} \ No newline at end of file From 10aa49ec8c52e464ab0a69ff9d5fd6cc0eb00422 Mon Sep 17 00:00:00 2001 From: Santhosh Vaiyapuri Date: Wed, 30 Apr 2025 15:47:26 +0200 Subject: [PATCH 02/11] 125.2.0-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 a14584576..a165a9de4 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "@stream-io/react-native-webrtc", - "version": "125.1.0", + "version": "125.2.0-alpha.1", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "@stream-io/react-native-webrtc", - "version": "125.1.0", + "version": "125.2.0-alpha.1", "license": "MIT", "dependencies": { "base64-js": "1.5.1", diff --git a/package.json b/package.json index 522b68d14..590aecd3b 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@stream-io/react-native-webrtc", - "version": "125.1.0", + "version": "125.2.0-alpha.1", "repository": { "type": "git", "url": "git+https://github.com/GetStream/react-native-webrtc.git" From 2f356c228096d282973456279304b2b154ff63bb Mon Sep 17 00:00:00 2001 From: Santhosh Vaiyapuri Date: Thu, 1 May 2025 11:10:27 +0200 Subject: [PATCH 03/11] add to options --- .../main/java/com/oney/WebRTCModule/WebRTCModule.java | 9 +++++++++ .../java/com/oney/WebRTCModule/WebRTCModuleOptions.java | 3 +++ 2 files changed, 12 insertions(+) diff --git a/android/src/main/java/com/oney/WebRTCModule/WebRTCModule.java b/android/src/main/java/com/oney/WebRTCModule/WebRTCModule.java index 452dde3b8..46e5de7de 100644 --- a/android/src/main/java/com/oney/WebRTCModule/WebRTCModule.java +++ b/android/src/main/java/com/oney/WebRTCModule/WebRTCModule.java @@ -21,6 +21,8 @@ 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.H264AndSoftwareVideoDecoderFactory; import com.oney.WebRTCModule.webrtcutils.H264AndSoftwareVideoEncoderFactory; @@ -64,6 +66,8 @@ 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; PeerConnectionFactory.initialize(PeerConnectionFactory.InitializationOptions.builder(reactContext) @@ -96,10 +100,15 @@ public WebRTCModule(ReactApplicationContext reactContext) { 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(); + } + mFactory = PeerConnectionFactory.builder() .setAudioDeviceModule(adm) .setVideoEncoderFactory(encoderFactory) .setVideoDecoderFactory(decoderFactory) + .setAudioProcessingFactory(audioProcessingFactoryProvider.getFactory()) .createPeerConnectionFactory(); // PeerConnectionFactory now owns the adm native pointer, and we don't need it anymore. diff --git a/android/src/main/java/com/oney/WebRTCModule/WebRTCModuleOptions.java b/android/src/main/java/com/oney/WebRTCModule/WebRTCModuleOptions.java index 01d31d7b1..6187c9472 100644 --- a/android/src/main/java/com/oney/WebRTCModule/WebRTCModuleOptions.java +++ b/android/src/main/java/com/oney/WebRTCModule/WebRTCModuleOptions.java @@ -1,5 +1,7 @@ package com.oney.WebRTCModule; +import com.oney.WebRTCModule.audio.AudioProcessingFactoryProvider; + import org.webrtc.Loggable; import org.webrtc.Logging; import org.webrtc.VideoDecoderFactory; @@ -16,6 +18,7 @@ public class WebRTCModuleOptions { public Logging.Severity loggingSeverity; public String fieldTrials; public boolean enableMediaProjectionService; + public AudioProcessingFactoryProvider audioProcessingFactoryProvider; public static WebRTCModuleOptions getInstance() { if (instance == null) { From a8145c4c06324af50392e6991c2164d67ea9cfb8 Mon Sep 17 00:00:00 2001 From: Santhosh Vaiyapuri Date: Sat, 10 May 2025 06:08:44 +0200 Subject: [PATCH 04/11] 125.3.0-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 1bf413cf2..3dbc30993 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "@stream-io/react-native-webrtc", - "version": "125.2.1", + "version": "125.3.0-alpha.1", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "@stream-io/react-native-webrtc", - "version": "125.2.1", + "version": "125.3.0-alpha.1", "license": "MIT", "dependencies": { "base64-js": "1.5.1", diff --git a/package.json b/package.json index 3eeb93efc..70fcb7387 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@stream-io/react-native-webrtc", - "version": "125.2.1", + "version": "125.3.0-alpha.1", "repository": { "type": "git", "url": "git+https://github.com/GetStream/react-native-webrtc.git" From a4a8dca6d112baa0a8ec9d80bc27829274304637 Mon Sep 17 00:00:00 2001 From: davidliu Date: Fri, 26 Jul 2024 14:22:57 +0900 Subject: [PATCH 05/11] ios: Add audioProcessingModule to WebRTCModuleOptions (#13) --- ios/RCTWebRTC/WebRTCModule.m | 19 ++++++++++++++++--- ios/RCTWebRTC/WebRTCModuleOptions.h | 1 + 2 files changed, 17 insertions(+), 3 deletions(-) diff --git a/ios/RCTWebRTC/WebRTCModule.m b/ios/RCTWebRTC/WebRTCModule.m index 93ff75097..6917aee12 100644 --- a/ios/RCTWebRTC/WebRTCModule.m +++ b/ios/RCTWebRTC/WebRTCModule.m @@ -43,6 +43,7 @@ - (instancetype)init { id audioDevice = options.audioDevice; id decoderFactory = options.videoDecoderFactory; id encoderFactory = options.videoEncoderFactory; + id audioProcessingModule = options.audioProcessingModule; NSDictionary *fieldTrials = options.fieldTrials; RTCLoggingSeverity loggingSeverity = options.loggingSeverity; @@ -69,9 +70,21 @@ - (instancetype)init { RCTLogInfo(@"Using video encoder factory: %@", NSStringFromClass([encoderFactory class])); RCTLogInfo(@"Using video decoder factory: %@", NSStringFromClass([decoderFactory class])); - _peerConnectionFactory = [[RTCPeerConnectionFactory alloc] initWithEncoderFactory:encoderFactory - decoderFactory:decoderFactory - audioDevice:audioDevice]; + if (audioProcessingModule != nil) { + if (audioDevice != nil) { + NSLog(@"Both audioProcessingModule and audioDevice are provided, but only one can be used. Ignoring audioDevice."); + } + RCTLogInfo(@"Using audio processing module: %@", NSStringFromClass([audioProcessingModule class])); + _peerConnectionFactory = [[RTCPeerConnectionFactory alloc] initWithBypassVoiceProcessing:NO + encoderFactory:encoderFactory + decoderFactory:decoderFactory + audioProcessingModule:audioProcessingModule]; + } else { + RCTLogInfo(@"Using audio device: %@", NSStringFromClass([audioDevice class])); + _peerConnectionFactory = [[RTCPeerConnectionFactory alloc] initWithEncoderFactory:encoderFactory + decoderFactory:decoderFactory + audioDevice:audioDevice]; + } _peerConnections = [NSMutableDictionary new]; _localStreams = [NSMutableDictionary new]; diff --git a/ios/RCTWebRTC/WebRTCModuleOptions.h b/ios/RCTWebRTC/WebRTCModuleOptions.h index d821ec9bf..d99cb8200 100644 --- a/ios/RCTWebRTC/WebRTCModuleOptions.h +++ b/ios/RCTWebRTC/WebRTCModuleOptions.h @@ -8,6 +8,7 @@ NS_ASSUME_NONNULL_BEGIN @property(nonatomic, strong, nullable) id videoDecoderFactory; @property(nonatomic, strong, nullable) id videoEncoderFactory; @property(nonatomic, strong, nullable) id audioDevice; +@property(nonatomic, strong, nullable) id audioProcessingModule; @property(nonatomic, strong, nullable) NSDictionary *fieldTrials; @property(nonatomic, assign) RTCLoggingSeverity loggingSeverity; @property(nonatomic, assign) BOOL enableMultitaskingCameraAccess; From 6c5be0ebb88cedf790ba5c54fe50ef77a7beb085 Mon Sep 17 00:00:00 2001 From: Santhosh Vaiyapuri Date: Mon, 12 May 2025 07:32:57 +0200 Subject: [PATCH 06/11] 125.3.0-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 3dbc30993..179fe8f06 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "@stream-io/react-native-webrtc", - "version": "125.3.0-alpha.1", + "version": "125.3.0-alpha.2", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "@stream-io/react-native-webrtc", - "version": "125.3.0-alpha.1", + "version": "125.3.0-alpha.2", "license": "MIT", "dependencies": { "base64-js": "1.5.1", diff --git a/package.json b/package.json index 70fcb7387..fafa688ac 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@stream-io/react-native-webrtc", - "version": "125.3.0-alpha.1", + "version": "125.3.0-alpha.2", "repository": { "type": "git", "url": "git+https://github.com/GetStream/react-native-webrtc.git" From 68173a61fbb760ae9fb62f0db228748ddf5ebbe1 Mon Sep 17 00:00:00 2001 From: Santhosh Vaiyapuri Date: Mon, 12 May 2025 11:51:52 +0200 Subject: [PATCH 07/11] wrong package name fix --- .../com/oney/WebRTCModule/audio/AudioProcessingController.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/android/src/main/java/com/oney/WebRTCModule/audio/AudioProcessingController.java b/android/src/main/java/com/oney/WebRTCModule/audio/AudioProcessingController.java index b0f98c2fc..9c1f66e52 100644 --- a/android/src/main/java/com/oney/WebRTCModule/audio/AudioProcessingController.java +++ b/android/src/main/java/com/oney/WebRTCModule/audio/AudioProcessingController.java @@ -1,4 +1,4 @@ -package io.getstream.webrtc.flutter.audio; +com.oney.WebRTCModule.audio; import org.webrtc.AudioProcessingFactory; import org.webrtc.ExternalAudioProcessingFactory; From 501c9c32f630d4087afe52280024d781a6a40f77 Mon Sep 17 00:00:00 2001 From: Santhosh Vaiyapuri Date: Mon, 12 May 2025 12:00:53 +0200 Subject: [PATCH 08/11] 125.3.0-alpha.3 --- 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 179fe8f06..a6a13bd00 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "@stream-io/react-native-webrtc", - "version": "125.3.0-alpha.2", + "version": "125.3.0-alpha.3", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "@stream-io/react-native-webrtc", - "version": "125.3.0-alpha.2", + "version": "125.3.0-alpha.3", "license": "MIT", "dependencies": { "base64-js": "1.5.1", diff --git a/package.json b/package.json index fafa688ac..82ca2c7c7 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@stream-io/react-native-webrtc", - "version": "125.3.0-alpha.2", + "version": "125.3.0-alpha.3", "repository": { "type": "git", "url": "git+https://github.com/GetStream/react-native-webrtc.git" From 79a1aa4e7e2e8585fdd8c3fabeca93590e32698c Mon Sep 17 00:00:00 2001 From: Santhosh Vaiyapuri Date: Mon, 12 May 2025 12:11:42 +0200 Subject: [PATCH 09/11] fix missing package word --- .../com/oney/WebRTCModule/audio/AudioProcessingController.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/android/src/main/java/com/oney/WebRTCModule/audio/AudioProcessingController.java b/android/src/main/java/com/oney/WebRTCModule/audio/AudioProcessingController.java index 9c1f66e52..9444eb781 100644 --- a/android/src/main/java/com/oney/WebRTCModule/audio/AudioProcessingController.java +++ b/android/src/main/java/com/oney/WebRTCModule/audio/AudioProcessingController.java @@ -1,4 +1,4 @@ -com.oney.WebRTCModule.audio; +package com.oney.WebRTCModule.audio; import org.webrtc.AudioProcessingFactory; import org.webrtc.ExternalAudioProcessingFactory; From 98be4a6430b047779b47a2466d58a17d22d16d18 Mon Sep 17 00:00:00 2001 From: Santhosh Vaiyapuri Date: Mon, 12 May 2025 12:24:04 +0200 Subject: [PATCH 10/11] 125.3.0-alpha.4 --- 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 a6a13bd00..8951ca757 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "@stream-io/react-native-webrtc", - "version": "125.3.0-alpha.3", + "version": "125.3.0-alpha.4", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "@stream-io/react-native-webrtc", - "version": "125.3.0-alpha.3", + "version": "125.3.0-alpha.4", "license": "MIT", "dependencies": { "base64-js": "1.5.1", diff --git a/package.json b/package.json index 82ca2c7c7..bf321568b 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@stream-io/react-native-webrtc", - "version": "125.3.0-alpha.3", + "version": "125.3.0-alpha.4", "repository": { "type": "git", "url": "git+https://github.com/GetStream/react-native-webrtc.git" From bece22489a54c2b8a3de96922e4782bc682cf7b7 Mon Sep 17 00:00:00 2001 From: Santhosh Vaiyapuri Date: Mon, 19 May 2025 13:58:11 +0200 Subject: [PATCH 11/11] update peer dep of rn --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index bf321568b..31eed3686 100644 --- a/package.json +++ b/package.json @@ -25,7 +25,7 @@ "event-target-shim": "6.0.2" }, "peerDependencies": { - "react-native": ">=0.60.0" + "react-native": ">=0.73.0" }, "files": [ "lib",