@stream-io/video-react-native-sdk 1.38.0 → 1.38.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +13 -0
- package/dist/commonjs/utils/internal/registerSDKGlobals.js +16 -0
- package/dist/commonjs/utils/internal/registerSDKGlobals.js.map +1 -1
- package/dist/commonjs/version.js +1 -1
- package/dist/module/utils/internal/registerSDKGlobals.js +17 -1
- package/dist/module/utils/internal/registerSDKGlobals.js.map +1 -1
- package/dist/module/version.js +1 -1
- package/dist/typescript/utils/internal/registerSDKGlobals.d.ts.map +1 -1
- package/dist/typescript/version.d.ts +1 -1
- package/ios/PictureInPicture/PictureInPictureAvatarView.swift +3 -1
- package/ios/PictureInPicture/StreamPictureInPictureVideoRenderer.swift +3 -1
- package/ios/StreamInCallManager.swift +19 -0
- package/package.json +4 -4
- package/src/utils/internal/registerSDKGlobals.ts +23 -1
- package/src/version.ts +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -2,6 +2,19 @@
|
|
|
2
2
|
|
|
3
3
|
This file was generated using [@jscutlery/semver](https://github.com/jscutlery/semver).
|
|
4
4
|
|
|
5
|
+
## [1.38.1](https://github.com/GetStream/stream-video-js/compare/@stream-io/video-react-native-sdk-1.38.0...@stream-io/video-react-native-sdk-1.38.1) (2026-06-12)
|
|
6
|
+
|
|
7
|
+
### Dependency Updates
|
|
8
|
+
|
|
9
|
+
- `@stream-io/react-native-callingx` updated to version `0.5.1`
|
|
10
|
+
- `@stream-io/video-client` updated to version `1.53.1`
|
|
11
|
+
- `@stream-io/video-react-bindings` updated to version `1.16.4`
|
|
12
|
+
|
|
13
|
+
### Bug Fixes
|
|
14
|
+
|
|
15
|
+
- avoid constraint warning log spam in iOS PiP ([ead822b](https://github.com/GetStream/stream-video-js/commit/ead822b2d12e5f09a14d8b179f1d6a49450b2491))
|
|
16
|
+
- **ios:** joining a call muted may break remote audio playout ([#2282](https://github.com/GetStream/stream-video-js/issues/2282)) ([dc672a6](https://github.com/GetStream/stream-video-js/commit/dc672a69971d6ca46648696c242609c687cb42d7))
|
|
17
|
+
|
|
5
18
|
## [1.38.0](https://github.com/GetStream/stream-video-js/compare/@stream-io/video-react-native-sdk-1.37.0...@stream-io/video-react-native-sdk-1.38.0) (2026-06-11)
|
|
6
19
|
|
|
7
20
|
### Dependency Updates
|
|
@@ -73,6 +73,22 @@ const streamRNVideoSDKGlobals = {
|
|
|
73
73
|
return;
|
|
74
74
|
}
|
|
75
75
|
StreamInCallManagerNativeModule.stop();
|
|
76
|
+
},
|
|
77
|
+
// iOS-only. Keep the AVAudioEngine mic-input (voice-processing) chain
|
|
78
|
+
// prepared while muted so the engine stays full-duplex and remote audio
|
|
79
|
+
// renders when joining muted. Intentionally NOT gated by
|
|
80
|
+
// `shouldBypassForCallKit`: it acts on the shared `RTCAudioDeviceModule`, so
|
|
81
|
+
// it must run for both the StreamInCallManager and CallKit/callingx paths.
|
|
82
|
+
setMutedRecordingPrepared: enabled => {
|
|
83
|
+
if (_reactNative.Platform.OS !== 'ios') {
|
|
84
|
+
return;
|
|
85
|
+
}
|
|
86
|
+
if (enabled) {
|
|
87
|
+
// Mute via the voice-processing unit (it's the default, fail safe config here) so the input chain
|
|
88
|
+
// stays built while muted, rather than tearing the engine down.
|
|
89
|
+
_reactNativeWebrtc.AudioDeviceModule.setMuteMode(_reactNativeWebrtc.AudioEngineMuteMode.VoiceProcessing).catch(() => {});
|
|
90
|
+
}
|
|
91
|
+
_reactNativeWebrtc.AudioDeviceModule.setRecordingAlwaysPreparedMode(enabled).catch(() => {});
|
|
76
92
|
}
|
|
77
93
|
},
|
|
78
94
|
permissions: {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["_reactNative","require","_reactNativeWebrtc","_callingx","_callingx2","StreamInCallManagerNativeModule","NativeModules","StreamInCallManager","StreamVideoReactNativeModule","StreamVideoReactNative","CallingxModule","getCallingxLibIfAvailable","shouldBypassForCallKit","isRingingTypeCall","Platform","OS","bypass","isSetup","isOngoingCallsEnabled","streamRNVideoSDKGlobals","callingX","joinCall","joinCallingxCall","endCall","endCallingxCall","registerOutgoingCall","callManager","setup","defaultDevice","setDefaultAudioDeviceEndpointType","start","stop","permissions","check","permission","nativeAndroidPermission","PermissionsAndroid","PERMISSIONS","CAMERA","RECORD_AUDIO","Boolean","checkPermission","nativeEvents","speechActivity","subscribe","cb","subscription","audioDeviceModuleEvents","addSpeechActivityListener","data","isSoundDetected","event","remove","registerSDKGlobals","global","streamRNVideoSDK"],"sourceRoot":"../../../../src","sources":["utils/internal/registerSDKGlobals.ts"],"mappings":";;;;;;AACA,IAAAA,YAAA,GAAAC,OAAA;AACA,IAAAC,kBAAA,GAAAD,OAAA;
|
|
1
|
+
{"version":3,"names":["_reactNative","require","_reactNativeWebrtc","_callingx","_callingx2","StreamInCallManagerNativeModule","NativeModules","StreamInCallManager","StreamVideoReactNativeModule","StreamVideoReactNative","CallingxModule","getCallingxLibIfAvailable","shouldBypassForCallKit","isRingingTypeCall","Platform","OS","bypass","isSetup","isOngoingCallsEnabled","streamRNVideoSDKGlobals","callingX","joinCall","joinCallingxCall","endCall","endCallingxCall","registerOutgoingCall","callManager","setup","defaultDevice","setDefaultAudioDeviceEndpointType","start","stop","setMutedRecordingPrepared","enabled","AudioDeviceModule","setMuteMode","AudioEngineMuteMode","VoiceProcessing","catch","setRecordingAlwaysPreparedMode","permissions","check","permission","nativeAndroidPermission","PermissionsAndroid","PERMISSIONS","CAMERA","RECORD_AUDIO","Boolean","checkPermission","nativeEvents","speechActivity","subscribe","cb","subscription","audioDeviceModuleEvents","addSpeechActivityListener","data","isSoundDetected","event","remove","registerSDKGlobals","global","streamRNVideoSDK"],"sourceRoot":"../../../../src","sources":["utils/internal/registerSDKGlobals.ts"],"mappings":"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","ignoreList":[]}
|
package/dist/commonjs/version.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { NativeModules, PermissionsAndroid, Platform } from 'react-native';
|
|
2
|
-
import { audioDeviceModuleEvents } from '@stream-io/react-native-webrtc';
|
|
2
|
+
import { AudioDeviceModule, AudioEngineMuteMode, audioDeviceModuleEvents } from '@stream-io/react-native-webrtc';
|
|
3
3
|
import { getCallingxLibIfAvailable } from '../push/libs/callingx';
|
|
4
4
|
import { endCallingxCall, registerOutgoingCall, joinCallingxCall } from './callingx/callingx';
|
|
5
5
|
const StreamInCallManagerNativeModule = NativeModules.StreamInCallManager;
|
|
@@ -67,6 +67,22 @@ const streamRNVideoSDKGlobals = {
|
|
|
67
67
|
return;
|
|
68
68
|
}
|
|
69
69
|
StreamInCallManagerNativeModule.stop();
|
|
70
|
+
},
|
|
71
|
+
// iOS-only. Keep the AVAudioEngine mic-input (voice-processing) chain
|
|
72
|
+
// prepared while muted so the engine stays full-duplex and remote audio
|
|
73
|
+
// renders when joining muted. Intentionally NOT gated by
|
|
74
|
+
// `shouldBypassForCallKit`: it acts on the shared `RTCAudioDeviceModule`, so
|
|
75
|
+
// it must run for both the StreamInCallManager and CallKit/callingx paths.
|
|
76
|
+
setMutedRecordingPrepared: enabled => {
|
|
77
|
+
if (Platform.OS !== 'ios') {
|
|
78
|
+
return;
|
|
79
|
+
}
|
|
80
|
+
if (enabled) {
|
|
81
|
+
// Mute via the voice-processing unit (it's the default, fail safe config here) so the input chain
|
|
82
|
+
// stays built while muted, rather than tearing the engine down.
|
|
83
|
+
AudioDeviceModule.setMuteMode(AudioEngineMuteMode.VoiceProcessing).catch(() => {});
|
|
84
|
+
}
|
|
85
|
+
AudioDeviceModule.setRecordingAlwaysPreparedMode(enabled).catch(() => {});
|
|
70
86
|
}
|
|
71
87
|
},
|
|
72
88
|
permissions: {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["NativeModules","PermissionsAndroid","Platform","audioDeviceModuleEvents","getCallingxLibIfAvailable","endCallingxCall","registerOutgoingCall","joinCallingxCall","StreamInCallManagerNativeModule","StreamInCallManager","StreamVideoReactNativeModule","StreamVideoReactNative","CallingxModule","shouldBypassForCallKit","isRingingTypeCall","OS","bypass","isSetup","isOngoingCallsEnabled","streamRNVideoSDKGlobals","callingX","joinCall","endCall","callManager","setup","defaultDevice","setDefaultAudioDeviceEndpointType","start","stop","permissions","check","permission","nativeAndroidPermission","PERMISSIONS","CAMERA","RECORD_AUDIO","Boolean","checkPermission","nativeEvents","speechActivity","subscribe","cb","subscription","addSpeechActivityListener","data","isSoundDetected","event","remove","registerSDKGlobals","global","streamRNVideoSDK"],"sourceRoot":"../../../../src","sources":["utils/internal/registerSDKGlobals.ts"],"mappings":"AACA,SAASA,aAAa,EAAEC,kBAAkB,EAAEC,QAAQ,QAAQ,cAAc;AAC1E,
|
|
1
|
+
{"version":3,"names":["NativeModules","PermissionsAndroid","Platform","AudioDeviceModule","AudioEngineMuteMode","audioDeviceModuleEvents","getCallingxLibIfAvailable","endCallingxCall","registerOutgoingCall","joinCallingxCall","StreamInCallManagerNativeModule","StreamInCallManager","StreamVideoReactNativeModule","StreamVideoReactNative","CallingxModule","shouldBypassForCallKit","isRingingTypeCall","OS","bypass","isSetup","isOngoingCallsEnabled","streamRNVideoSDKGlobals","callingX","joinCall","endCall","callManager","setup","defaultDevice","setDefaultAudioDeviceEndpointType","start","stop","setMutedRecordingPrepared","enabled","setMuteMode","VoiceProcessing","catch","setRecordingAlwaysPreparedMode","permissions","check","permission","nativeAndroidPermission","PERMISSIONS","CAMERA","RECORD_AUDIO","Boolean","checkPermission","nativeEvents","speechActivity","subscribe","cb","subscription","addSpeechActivityListener","data","isSoundDetected","event","remove","registerSDKGlobals","global","streamRNVideoSDK"],"sourceRoot":"../../../../src","sources":["utils/internal/registerSDKGlobals.ts"],"mappings":"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","ignoreList":[]}
|
package/dist/module/version.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export const version = '1.38.
|
|
1
|
+
export const version = '1.38.1';
|
|
2
2
|
//# sourceMappingURL=version.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"registerSDKGlobals.d.ts","sourceRoot":"","sources":["../../../../src/utils/internal/registerSDKGlobals.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"registerSDKGlobals.d.ts","sourceRoot":"","sources":["../../../../src/utils/internal/registerSDKGlobals.ts"],"names":[],"mappings":"AAiIA,wBAAgB,kBAAkB,SAIjC"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export declare const version = "1.38.
|
|
1
|
+
export declare const version = "1.38.1";
|
|
2
2
|
//# sourceMappingURL=version.d.ts.map
|
|
@@ -191,7 +191,9 @@ final class PictureInPictureAvatarView: UIView {
|
|
|
191
191
|
if !isVideoEnabled {
|
|
192
192
|
PictureInPictureLogger.log("AvatarView updateVisibility: becoming visible, forcing layout")
|
|
193
193
|
setNeedsLayout()
|
|
194
|
-
|
|
194
|
+
if bounds.width > 0, bounds.height > 0 {
|
|
195
|
+
layoutIfNeeded()
|
|
196
|
+
}
|
|
195
197
|
}
|
|
196
198
|
}
|
|
197
199
|
|
|
@@ -431,7 +431,9 @@ final class StreamPictureInPictureVideoRenderer: UIView, RTCVideoRenderer {
|
|
|
431
431
|
if shouldShowAvatar {
|
|
432
432
|
PictureInPictureLogger.log("updateOverlayVisibility: showing avatar, forcing layout. participantName=\(participantName ?? "nil"), avatarView.participantName='\(avatarView.participantName ?? "nil")'")
|
|
433
433
|
avatarView.setNeedsLayout()
|
|
434
|
-
|
|
434
|
+
if bounds.width > 0, bounds.height > 0 {
|
|
435
|
+
avatarView.layoutIfNeeded()
|
|
436
|
+
}
|
|
435
437
|
}
|
|
436
438
|
|
|
437
439
|
// Participant overlay shows on BOTH video and avatar (matches upstream)
|
|
@@ -117,6 +117,17 @@ class StreamInCallManager: RCTEventEmitter {
|
|
|
117
117
|
// TODO: for stereo we should disallow BluetoothHFP and allow only allowBluetoothA2DP
|
|
118
118
|
// note: this is the behaviour of iOS native SDK, but fails here with (OSStatus error -50.)
|
|
119
119
|
// options = self.enableStereo ? [.allowBluetoothA2DP] : []
|
|
120
|
+
} else if !micPermissionGranted() {
|
|
121
|
+
// Communicator without mic permission (denied or not yet asked): use a
|
|
122
|
+
// pure-output, no-VPIO session so the output-only AVAudioEngine renders
|
|
123
|
+
// remote audio. Mirrors stream-video-swift
|
|
124
|
+
// (isRecordingEnabled ? .playAndRecord : .playback). We can't record anyway.
|
|
125
|
+
// Self-heals: granting permission + unmuting rebuilds the engine.
|
|
126
|
+
// Known gap: .playback can't route to the receiver (earpiece) — that route
|
|
127
|
+
// only exists under .playAndRecord.
|
|
128
|
+
category = .playback
|
|
129
|
+
mode = .spokenAudio
|
|
130
|
+
options = []
|
|
120
131
|
} else {
|
|
121
132
|
// XCode 16 and older don't expose .allowBluetoothHFP
|
|
122
133
|
// https://forums.swift.org/t/xcode-26-avaudiosession-categoryoptions-allowbluetooth-deprecated/80956
|
|
@@ -139,6 +150,14 @@ class StreamInCallManager: RCTEventEmitter {
|
|
|
139
150
|
return rtcConfig
|
|
140
151
|
}
|
|
141
152
|
|
|
153
|
+
private func micPermissionGranted() -> Bool {
|
|
154
|
+
if #available(iOS 17.0, *) {
|
|
155
|
+
return AVAudioApplication.shared.recordPermission == .granted
|
|
156
|
+
} else {
|
|
157
|
+
return AVAudioSession.sharedInstance().recordPermission == .granted
|
|
158
|
+
}
|
|
159
|
+
}
|
|
160
|
+
|
|
142
161
|
@objc
|
|
143
162
|
func setup() {
|
|
144
163
|
audioSessionQueue.async { [self] in
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@stream-io/video-react-native-sdk",
|
|
3
|
-
"version": "1.38.
|
|
3
|
+
"version": "1.38.1",
|
|
4
4
|
"description": "Stream Video SDK for React Native",
|
|
5
5
|
"author": "https://getstream.io",
|
|
6
6
|
"homepage": "https://getstream.io/video/docs/react-native/",
|
|
@@ -50,8 +50,8 @@
|
|
|
50
50
|
"!**/.*"
|
|
51
51
|
],
|
|
52
52
|
"dependencies": {
|
|
53
|
-
"@stream-io/video-client": "1.53.
|
|
54
|
-
"@stream-io/video-react-bindings": "1.16.
|
|
53
|
+
"@stream-io/video-client": "1.53.1",
|
|
54
|
+
"@stream-io/video-react-bindings": "1.16.4",
|
|
55
55
|
"intl-pluralrules": "2.0.1",
|
|
56
56
|
"react-native-url-polyfill": "^3.0.0",
|
|
57
57
|
"rxjs": "~7.8.2",
|
|
@@ -117,7 +117,7 @@
|
|
|
117
117
|
"@react-native/babel-preset": "0.85.3",
|
|
118
118
|
"@react-native/metro-config": "0.85.3",
|
|
119
119
|
"@stream-io/noise-cancellation-react-native": "^0.8.0",
|
|
120
|
-
"@stream-io/react-native-callingx": "^0.5.
|
|
120
|
+
"@stream-io/react-native-callingx": "^0.5.1",
|
|
121
121
|
"@stream-io/react-native-webrtc": "145.0.0",
|
|
122
122
|
"@stream-io/video-filters-react-native": "^0.13.0",
|
|
123
123
|
"@testing-library/jest-native": "^5.4.3",
|
|
@@ -1,6 +1,10 @@
|
|
|
1
1
|
import { StreamRNVideoSDKGlobals } from '@stream-io/video-client';
|
|
2
2
|
import { NativeModules, PermissionsAndroid, Platform } from 'react-native';
|
|
3
|
-
import {
|
|
3
|
+
import {
|
|
4
|
+
AudioDeviceModule,
|
|
5
|
+
AudioEngineMuteMode,
|
|
6
|
+
audioDeviceModuleEvents,
|
|
7
|
+
} from '@stream-io/react-native-webrtc';
|
|
4
8
|
import { getCallingxLibIfAvailable } from '../push/libs/callingx';
|
|
5
9
|
import {
|
|
6
10
|
endCallingxCall,
|
|
@@ -71,6 +75,24 @@ const streamRNVideoSDKGlobals: StreamRNVideoSDKGlobals = {
|
|
|
71
75
|
}
|
|
72
76
|
StreamInCallManagerNativeModule.stop();
|
|
73
77
|
},
|
|
78
|
+
// iOS-only. Keep the AVAudioEngine mic-input (voice-processing) chain
|
|
79
|
+
// prepared while muted so the engine stays full-duplex and remote audio
|
|
80
|
+
// renders when joining muted. Intentionally NOT gated by
|
|
81
|
+
// `shouldBypassForCallKit`: it acts on the shared `RTCAudioDeviceModule`, so
|
|
82
|
+
// it must run for both the StreamInCallManager and CallKit/callingx paths.
|
|
83
|
+
setMutedRecordingPrepared: (enabled) => {
|
|
84
|
+
if (Platform.OS !== 'ios') {
|
|
85
|
+
return;
|
|
86
|
+
}
|
|
87
|
+
if (enabled) {
|
|
88
|
+
// Mute via the voice-processing unit (it's the default, fail safe config here) so the input chain
|
|
89
|
+
// stays built while muted, rather than tearing the engine down.
|
|
90
|
+
AudioDeviceModule.setMuteMode(
|
|
91
|
+
AudioEngineMuteMode.VoiceProcessing,
|
|
92
|
+
).catch(() => {});
|
|
93
|
+
}
|
|
94
|
+
AudioDeviceModule.setRecordingAlwaysPreparedMode(enabled).catch(() => {});
|
|
95
|
+
},
|
|
74
96
|
},
|
|
75
97
|
permissions: {
|
|
76
98
|
check: async (permission) => {
|
package/src/version.ts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
export const version = '1.38.
|
|
1
|
+
export const version = '1.38.1';
|