Skip to content

Commit 721fe98

Browse files
authored
fix(ios): remove prepare_command from podspec and fix simulator crash (#22)
* prepare_command in podspec doesnt run when pods are recreated from cache in CI, hence removed * fixes crash in iOS 26 simulator ### extra * android: catch exceptions upon creation of audio processing factory * typo fix in permission validator
1 parent 9f68ad4 commit 721fe98

6 files changed

Lines changed: 37 additions & 27 deletions

File tree

android/src/main/java/com/oney/WebRTCModule/WebRTCModule.java

Lines changed: 21 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -21,8 +21,6 @@
2121
import com.facebook.react.bridge.WritableMap;
2222
import com.facebook.react.module.annotations.ReactModule;
2323
import com.facebook.react.modules.core.DeviceEventManagerModule;
24-
import com.oney.WebRTCModule.audio.AudioProcessingFactoryProvider;
25-
import com.oney.WebRTCModule.audio.AudioProcessingController;
2624
import com.oney.WebRTCModule.webrtcutils.SelectiveVideoDecoderFactory;
2725

2826
import org.webrtc.*;
@@ -66,7 +64,6 @@ public WebRTCModule(ReactApplicationContext reactContext) {
6664
VideoDecoderFactory decoderFactory = options.videoDecoderFactory;
6765
Loggable injectableLogger = options.injectableLogger;
6866
Logging.Severity loggingSeverity = options.loggingSeverity;
69-
AudioProcessingFactoryProvider audioProcessingFactoryProvider = options.audioProcessingFactoryProvider;
7067

7168
String fieldTrials = options.fieldTrials;
7269

@@ -92,19 +89,28 @@ public WebRTCModule(ReactApplicationContext reactContext) {
9289
adm = JavaAudioDeviceModule.builder(reactContext).createAudioDeviceModule();
9390
}
9491

92+
AudioProcessingFactory audioProcessingFactory = null;
93+
try {
94+
if (options.audioProcessingFactoryProvider != null) {
95+
audioProcessingFactory = options.audioProcessingFactoryProvider.getFactory();
96+
}
97+
} catch (Exception e) {
98+
// do nothing.
99+
}
100+
95101
Log.d(TAG, "Using video encoder factory: " + encoderFactory.getClass().getCanonicalName());
96102
Log.d(TAG, "Using video decoder factory: " + decoderFactory.getClass().getCanonicalName());
97103

98-
if(audioProcessingFactoryProvider == null) {
99-
audioProcessingFactoryProvider = new AudioProcessingController();
104+
PeerConnectionFactory.Builder pcFactoryBuilder = PeerConnectionFactory.builder()
105+
.setAudioDeviceModule(adm)
106+
.setVideoEncoderFactory(encoderFactory)
107+
.setVideoDecoderFactory(decoderFactory);
108+
109+
if (audioProcessingFactory != null) {
110+
pcFactoryBuilder.setAudioProcessingFactory(audioProcessingFactory);
100111
}
101112

102-
mFactory = PeerConnectionFactory.builder()
103-
.setAudioDeviceModule(adm)
104-
.setVideoEncoderFactory(encoderFactory)
105-
.setVideoDecoderFactory(decoderFactory)
106-
.setAudioProcessingFactory(audioProcessingFactoryProvider.getFactory())
107-
.createPeerConnectionFactory();
113+
mFactory = pcFactoryBuilder.createPeerConnectionFactory();
108114

109115
// PeerConnectionFactory now owns the adm native pointer, and we don't need it anymore.
110116
adm.release();
@@ -127,6 +133,10 @@ public AudioDeviceModule getAudioDeviceModule() {
127133
return mAudioDeviceModule;
128134
}
129135

136+
public PeerConnectionObserver getPeerConnectionObserver(int id) {
137+
return mPeerConnectionObservers.get(id);
138+
}
139+
130140
private PeerConnection getPeerConnection(int id) {
131141
PeerConnectionObserver pco = mPeerConnectionObservers.get(id);
132142
return (pco == null) ? null : pco.getPeerConnection();

ios/RCTWebRTC/WebRTCModule+RTCMediaStream.m

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -326,6 +326,9 @@ - (RTCVideoTrack *)createScreenCaptureVideoTrack {
326326
mediaType:AVMediaTypeVideo
327327
position:AVCaptureDevicePositionUnspecified];
328328
for (AVCaptureDevice *device in videoDevicesSession.devices) {
329+
if (device.uniqueID == nil) {
330+
continue;
331+
}
329332
NSString *position = @"unknown";
330333
if (device.position == AVCaptureDevicePositionBack) {
331334
position = @"environment";
@@ -345,11 +348,15 @@ - (RTCVideoTrack *)createScreenCaptureVideoTrack {
345348
@"kind" : @"videoinput",
346349
}];
347350
}
351+
348352
AVCaptureDeviceDiscoverySession *audioDevicesSession =
349353
[AVCaptureDeviceDiscoverySession discoverySessionWithDeviceTypes:@[ AVCaptureDeviceTypeBuiltInMicrophone ]
350354
mediaType:AVMediaTypeAudio
351355
position:AVCaptureDevicePositionUnspecified];
352356
for (AVCaptureDevice *device in audioDevicesSession.devices) {
357+
if (device.uniqueID == nil) {
358+
continue;
359+
}
353360
NSString *label = @"Unknown audio device";
354361
if (device.localizedName != nil) {
355362
label = device.localizedName;

package-lock.json

Lines changed: 2 additions & 2 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "@stream-io/react-native-webrtc",
3-
"version": "137.0.0",
3+
"version": "137.0.1-alpha.3",
44
"repository": {
55
"type": "git",
66
"url": "git+https://github.com/GetStream/react-native-webrtc.git"

src/Permissions.ts

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -55,7 +55,7 @@ class Permissions {
5555
/**
5656
* Validates the given permission descriptor.
5757
*/
58-
_validatePermissionDescriptior(permissionDesc) {
58+
_validatePermissionDescriptor(permissionDesc) {
5959
if (typeof permissionDesc !== 'object') {
6060
throw new TypeError('Argument 1 of Permissions.query is not an object.');
6161
}
@@ -77,7 +77,7 @@ class Permissions {
7777
*/
7878
query(permissionDesc: PermissionDescriptor) {
7979
try {
80-
this._validatePermissionDescriptior(permissionDesc);
80+
this._validatePermissionDescriptor(permissionDesc);
8181
} catch (e) {
8282
return Promise.reject(e);
8383
}
@@ -107,7 +107,7 @@ class Permissions {
107107
*/
108108
request(permissionDesc: PermissionDescriptor) {
109109
try {
110-
this._validatePermissionDescriptior(permissionDesc);
110+
this._validatePermissionDescriptor(permissionDesc);
111111
} catch (e) {
112112
return Promise.reject(e);
113113
}
@@ -130,4 +130,4 @@ class Permissions {
130130
}
131131
}
132132

133-
export default new Permissions();
133+
export default new Permissions();

stream-react-native-webrtc.podspec

Lines changed: 2 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -2,9 +2,6 @@ require 'json'
22

33
package = JSON.parse(File.read(File.join(__dir__, 'package.json')))
44

5-
# WebRTC version from stream-video-swift-webrtc releases
6-
webrtc_version = '137.0.42'
7-
85
Pod::Spec.new do |s|
96
s.name = 'stream-react-native-webrtc'
107
s.version = package['version']
@@ -22,12 +19,8 @@ Pod::Spec.new do |s|
2219
s.libraries = 'c', 'sqlite3', 'stdc++'
2320
s.framework = 'AudioToolbox','AVFoundation', 'CoreAudio', 'CoreGraphics', 'CoreVideo', 'GLKit', 'VideoToolbox'
2421
s.dependency 'React-Core'
25-
26-
s.prepare_command = <<-CMD
27-
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
28-
CMD
29-
30-
s.vendored_frameworks = 'WebRTC.xcframework'
22+
# WebRTC version from https://github.com/GetStream/stream-video-swift-webrtc releases
23+
s.dependency 'StreamWebRTC', '~>137.0.52'
3124
# Swift/Objective-C compatibility #https://blog.cocoapods.org/CocoaPods-1.5.0/
3225
s.pod_target_xcconfig = {
3326
'DEFINES_MODULE' => 'YES'

0 commit comments

Comments
 (0)