diff --git a/android/src/main/java/com/oney/WebRTCModule/WebRTCModule.java b/android/src/main/java/com/oney/WebRTCModule/WebRTCModule.java index d93f9bdea..070f32b50 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.*; @@ -66,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; @@ -92,19 +89,28 @@ public WebRTCModule(ReactApplicationContext reactContext) { adm = JavaAudioDeviceModule.builder(reactContext).createAudioDeviceModule(); } + AudioProcessingFactory audioProcessingFactory = null; + try { + if (options.audioProcessingFactoryProvider != null) { + audioProcessingFactory = options.audioProcessingFactoryProvider.getFactory(); + } + } 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 +133,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(); diff --git a/ios/RCTWebRTC/WebRTCModule+RTCMediaStream.m b/ios/RCTWebRTC/WebRTCModule+RTCMediaStream.m index e3e52ab3a..c3aef074f 100644 --- a/ios/RCTWebRTC/WebRTCModule+RTCMediaStream.m +++ b/ios/RCTWebRTC/WebRTCModule+RTCMediaStream.m @@ -326,6 +326,9 @@ - (RTCVideoTrack *)createScreenCaptureVideoTrack { mediaType:AVMediaTypeVideo position:AVCaptureDevicePositionUnspecified]; for (AVCaptureDevice *device in videoDevicesSession.devices) { + if (device.uniqueID == nil) { + continue; + } NSString *position = @"unknown"; if (device.position == AVCaptureDevicePositionBack) { position = @"environment"; @@ -345,11 +348,15 @@ - (RTCVideoTrack *)createScreenCaptureVideoTrack { @"kind" : @"videoinput", }]; } + AVCaptureDeviceDiscoverySession *audioDevicesSession = [AVCaptureDeviceDiscoverySession discoverySessionWithDeviceTypes:@[ AVCaptureDeviceTypeBuiltInMicrophone ] mediaType:AVMediaTypeAudio position:AVCaptureDevicePositionUnspecified]; for (AVCaptureDevice *device in audioDevicesSession.devices) { + if (device.uniqueID == nil) { + continue; + } NSString *label = @"Unknown audio device"; if (device.localizedName != nil) { label = device.localizedName; diff --git a/package-lock.json b/package-lock.json index 07b448d12..7a37ab796 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.3", "lockfileVersion": 2, "requires": true, "packages": { "": { "name": "@stream-io/react-native-webrtc", - "version": "137.0.0", + "version": "137.0.1-alpha.3", "license": "MIT", "dependencies": { "base64-js": "1.5.1", diff --git a/package.json b/package.json index 7c49555ca..cbcbc3eba 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.3", "repository": { "type": "git", "url": "git+https://github.com/GetStream/react-native-webrtc.git" 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/stream-react-native-webrtc.podspec b/stream-react-native-webrtc.podspec index 8c5605ed6..997f0cf16 100644 --- a/stream-react-native-webrtc.podspec +++ b/stream-react-native-webrtc.podspec @@ -2,9 +2,6 @@ require 'json' package = JSON.parse(File.read(File.join(__dir__, 'package.json'))) -# WebRTC version from stream-video-swift-webrtc releases -webrtc_version = '137.0.42' - Pod::Spec.new do |s| s.name = 'stream-react-native-webrtc' s.version = package['version'] @@ -22,12 +19,8 @@ Pod::Spec.new do |s| s.libraries = 'c', 'sqlite3', 'stdc++' s.framework = 'AudioToolbox','AVFoundation', 'CoreAudio', 'CoreGraphics', 'CoreVideo', 'GLKit', 'VideoToolbox' s.dependency 'React-Core' - - s.prepare_command = <<-CMD - curl -sL "https://github.com/GetStream/stream-video-swift-webrtc/releases/download/#{webrtc_version}/WebRTC.xcframework.zip" -o w.zip && unzip -oq w.zip && rm w.zip - CMD - - s.vendored_frameworks = 'WebRTC.xcframework' + # WebRTC version from https://github.com/GetStream/stream-video-swift-webrtc releases + s.dependency 'StreamWebRTC', '~>137.0.52' # Swift/Objective-C compatibility #https://blog.cocoapods.org/CocoaPods-1.5.0/ s.pod_target_xcconfig = { 'DEFINES_MODULE' => 'YES'