@stream-io/video-react-native-sdk 0.3.0 → 0.3.2
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 +14 -0
- package/README.md +4 -4
- package/dist/commonjs/providers/MediaStreamManagement.js +39 -12
- package/dist/commonjs/providers/MediaStreamManagement.js.map +1 -1
- package/dist/commonjs/version.js +1 -1
- package/dist/module/providers/MediaStreamManagement.js +40 -13
- package/dist/module/providers/MediaStreamManagement.js.map +1 -1
- package/dist/module/version.js +1 -1
- package/dist/typescript/providers/MediaStreamManagement.d.ts.map +1 -1
- package/dist/typescript/version.d.ts +1 -1
- package/package.json +1 -2
- package/src/providers/MediaStreamManagement.tsx +50 -12
- package/src/version.ts +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -2,6 +2,20 @@
|
|
|
2
2
|
|
|
3
3
|
This file was generated using [@jscutlery/semver](https://github.com/jscutlery/semver).
|
|
4
4
|
|
|
5
|
+
### [0.3.2](https://github.com/GetStream/stream-video-js/compare/@stream-io/video-react-native-sdk-0.3.1...@stream-io/video-react-native-sdk-0.3.2) (2023-12-04)
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
### Bug Fixes
|
|
9
|
+
|
|
10
|
+
* **react-native:** remove postinstall command as it breaks on windows ([90f0b9c](https://github.com/GetStream/stream-video-js/commit/90f0b9ced6aa0c89593cb860a5a5c87d782766ca))
|
|
11
|
+
|
|
12
|
+
### [0.3.1](https://github.com/GetStream/stream-video-js/compare/@stream-io/video-react-native-sdk-0.3.0...@stream-io/video-react-native-sdk-0.3.1) (2023-11-30)
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
### Bug Fixes
|
|
16
|
+
|
|
17
|
+
* **react-native:** do not trigger initial device setting after join ([204c303](https://github.com/GetStream/stream-video-js/commit/204c303353c536c44b77350bb49c117f21e093c5))
|
|
18
|
+
|
|
5
19
|
## [0.3.0](https://github.com/GetStream/stream-video-js/compare/@stream-io/video-react-native-sdk-0.2.14...@stream-io/video-react-native-sdk-0.3.0) (2023-11-29)
|
|
6
20
|
|
|
7
21
|
### Dependency Updates
|
package/README.md
CHANGED
|
@@ -9,7 +9,7 @@
|
|
|
9
9
|
## **Quick Links**
|
|
10
10
|
|
|
11
11
|
- [Register](https://getstream.io/chat/trial/) to get an API key for Stream Video
|
|
12
|
-
- [React Native Video Tutorial](https://getstream.io/video/
|
|
12
|
+
- [React Native Video Tutorial](https://getstream.io/video/sdk/reactnative/tutorial/video-calling/)
|
|
13
13
|
- [Sample application](https://github.com/GetStream/stream-video-js/tree/main/sample-apps/react-native/dogfood)
|
|
14
14
|
|
|
15
15
|
## **What is Stream?**
|
|
@@ -18,9 +18,9 @@ Stream allows developers to rapidly deploy scalable feeds, chat messaging and vi
|
|
|
18
18
|
|
|
19
19
|
With Stream's video components, you can use their SDK to build in-app video calling, audio rooms, audio calls, or live streaming. The best place to get started is with their tutorials:
|
|
20
20
|
|
|
21
|
-
- [Video & Audio Calling Tutorial](https://getstream.io/video/
|
|
22
|
-
- [Audio Rooms Tutorial](https://getstream.io/video/
|
|
23
|
-
- [Livestreaming Tutorial](https://getstream.io/video/
|
|
21
|
+
- [Video & Audio Calling Tutorial](https://getstream.io/video/sdk/reactnative/tutorial/video-calling/)
|
|
22
|
+
- [Audio Rooms Tutorial](https://getstream.io/video/sdk/reactnative/tutorial/audio-room/)
|
|
23
|
+
- [Livestreaming Tutorial](https://getstream.io/video/sdk/reactnative/tutorial/livestreaming/)
|
|
24
24
|
|
|
25
25
|
Stream provides UI components and state handling that make it easy to build video calling for your app. All calls run on Stream's network of edge servers around the world, ensuring optimal latency and reliability.
|
|
26
26
|
|
|
@@ -30,6 +30,34 @@ const MediaStreamManagement = _ref => {
|
|
|
30
30
|
const {
|
|
31
31
|
useCallSettings
|
|
32
32
|
} = (0, _videoReactBindings.useCallStateHooks)();
|
|
33
|
+
const settings = useCallSettings();
|
|
34
|
+
|
|
35
|
+
// Get the target resolution from the settings and memoize it
|
|
36
|
+
// Memoization is needed to avoid unnecessary useEffect triggers
|
|
37
|
+
const targetResolutionSetting = (0, _react.useMemo)(() => {
|
|
38
|
+
var _settings$video$targe, _settings$video$targe2, _settings$video$targe3;
|
|
39
|
+
if ((settings === null || settings === void 0 || (_settings$video$targe = settings.video.target_resolution) === null || _settings$video$targe === void 0 ? void 0 : _settings$video$targe.width) === undefined || (settings === null || settings === void 0 || (_settings$video$targe2 = settings.video.target_resolution) === null || _settings$video$targe2 === void 0 ? void 0 : _settings$video$targe2.height) === undefined || (settings === null || settings === void 0 || (_settings$video$targe3 = settings.video.target_resolution) === null || _settings$video$targe3 === void 0 ? void 0 : _settings$video$targe3.bitrate) === undefined) {
|
|
40
|
+
return undefined;
|
|
41
|
+
}
|
|
42
|
+
return {
|
|
43
|
+
width: settings === null || settings === void 0 ? void 0 : settings.video.target_resolution.width,
|
|
44
|
+
height: settings === null || settings === void 0 ? void 0 : settings.video.target_resolution.height,
|
|
45
|
+
bitrate: settings === null || settings === void 0 ? void 0 : settings.video.target_resolution.bitrate
|
|
46
|
+
};
|
|
47
|
+
}, [settings === null || settings === void 0 ? void 0 : settings.video.target_resolution.width, settings === null || settings === void 0 ? void 0 : settings.video.target_resolution.height, settings === null || settings === void 0 ? void 0 : settings.video.target_resolution.bitrate]);
|
|
48
|
+
|
|
49
|
+
// Get the target resolution from the default device settings and memoize it
|
|
50
|
+
// Memoization is needed to avoid unnecessary useEffect triggers
|
|
51
|
+
const defaultOnSetting = (0, _react.useMemo)(() => {
|
|
52
|
+
if ((settings === null || settings === void 0 ? void 0 : settings.audio.mic_default_on) === undefined || (settings === null || settings === void 0 ? void 0 : settings.video.camera_default_on) === undefined) {
|
|
53
|
+
return undefined;
|
|
54
|
+
} else {
|
|
55
|
+
return {
|
|
56
|
+
mic_default_on: settings === null || settings === void 0 ? void 0 : settings.audio.mic_default_on,
|
|
57
|
+
camera_default_on: settings === null || settings === void 0 ? void 0 : settings.video.camera_default_on
|
|
58
|
+
};
|
|
59
|
+
}
|
|
60
|
+
}, [settings === null || settings === void 0 ? void 0 : settings.audio.mic_default_on, settings === null || settings === void 0 ? void 0 : settings.video.camera_default_on]);
|
|
33
61
|
|
|
34
62
|
// Resume/Disable video stream tracks when app goes to background/foreground
|
|
35
63
|
// To save on CPU resources
|
|
@@ -59,33 +87,32 @@ const MediaStreamManagement = _ref => {
|
|
|
59
87
|
initialAudioEnabled: undefined,
|
|
60
88
|
initialVideoEnabled: undefined
|
|
61
89
|
});
|
|
62
|
-
const settings = useCallSettings();
|
|
63
90
|
|
|
64
91
|
// Use backend settings to set initial audio/video enabled state
|
|
65
92
|
// It is applied only if the prop was undefined -- meaning user did not provide any value
|
|
66
93
|
(0, _react.useEffect)(() => {
|
|
67
|
-
if (!
|
|
94
|
+
if (!defaultOnSetting) {
|
|
68
95
|
return;
|
|
69
96
|
}
|
|
70
97
|
const {
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
} =
|
|
98
|
+
mic_default_on,
|
|
99
|
+
camera_default_on
|
|
100
|
+
} = defaultOnSetting;
|
|
74
101
|
setInitialDeviceState(prev => {
|
|
75
102
|
let initAudio = prev.initialAudioEnabled;
|
|
76
103
|
if (typeof propInitialAudioEnabled === 'undefined') {
|
|
77
|
-
initAudio =
|
|
104
|
+
initAudio = mic_default_on;
|
|
78
105
|
}
|
|
79
106
|
let initVideo = prev.initialVideoEnabled;
|
|
80
107
|
if (typeof propInitialVideoEnabled === 'undefined') {
|
|
81
|
-
initVideo =
|
|
108
|
+
initVideo = camera_default_on;
|
|
82
109
|
}
|
|
83
110
|
return {
|
|
84
111
|
initialAudioEnabled: initAudio,
|
|
85
112
|
initialVideoEnabled: initVideo
|
|
86
113
|
};
|
|
87
114
|
});
|
|
88
|
-
}, [propInitialAudioEnabled, propInitialVideoEnabled,
|
|
115
|
+
}, [propInitialAudioEnabled, propInitialVideoEnabled, defaultOnSetting]);
|
|
89
116
|
|
|
90
117
|
// Apply SDK settings to set the initial audio/video enabled state
|
|
91
118
|
(0, _react.useEffect)(() => {
|
|
@@ -114,8 +141,8 @@ const MediaStreamManagement = _ref => {
|
|
|
114
141
|
if (initialVideoEnabled === undefined) {
|
|
115
142
|
return;
|
|
116
143
|
}
|
|
117
|
-
// we wait until we receive the settings from the backend
|
|
118
|
-
if (!call || !
|
|
144
|
+
// we wait until we receive the resolution settings from the backend
|
|
145
|
+
if (!call || !targetResolutionSetting) {
|
|
119
146
|
return;
|
|
120
147
|
}
|
|
121
148
|
if (initialAudioEnabled) {
|
|
@@ -123,13 +150,13 @@ const MediaStreamManagement = _ref => {
|
|
|
123
150
|
} else {
|
|
124
151
|
call.microphone.disable();
|
|
125
152
|
}
|
|
126
|
-
call.camera.selectTargetResolution(
|
|
153
|
+
call.camera.selectTargetResolution(targetResolutionSetting);
|
|
127
154
|
if (initialVideoEnabled) {
|
|
128
155
|
call.camera.enable();
|
|
129
156
|
} else {
|
|
130
157
|
call.camera.disable();
|
|
131
158
|
}
|
|
132
|
-
}, [call, initialAudioEnabled, initialVideoEnabled,
|
|
159
|
+
}, [call, initialAudioEnabled, initialVideoEnabled, targetResolutionSetting]);
|
|
133
160
|
return /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, children);
|
|
134
161
|
};
|
|
135
162
|
exports.MediaStreamManagement = MediaStreamManagement;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["_react","_interopRequireWildcard","require","_videoReactBindings","_hooks","_reactNative","_getRequireWildcardCache","nodeInterop","WeakMap","cacheBabelInterop","cacheNodeInterop","obj","__esModule","default","cache","has","get","newObj","hasPropertyDescriptor","Object","defineProperty","getOwnPropertyDescriptor","key","prototype","hasOwnProperty","call","desc","set","MediaStreamManagement","_ref","initialAudioEnabled","propInitialAudioEnabled","initialVideoEnabled","propInitialVideoEnabled","children","useCall","useCallSettings","useCallStateHooks","useAppStateListener","_call$camera","camera","resume","Platform","OS","_NativeModules$Stream","NativeModules","StreamVideoReactNative","isInPiPMode","then","isInPiP","_call$camera2","disable","_call$camera3","setInitialDeviceState","useState","
|
|
1
|
+
{"version":3,"names":["_react","_interopRequireWildcard","require","_videoReactBindings","_hooks","_reactNative","_getRequireWildcardCache","nodeInterop","WeakMap","cacheBabelInterop","cacheNodeInterop","obj","__esModule","default","cache","has","get","newObj","hasPropertyDescriptor","Object","defineProperty","getOwnPropertyDescriptor","key","prototype","hasOwnProperty","call","desc","set","MediaStreamManagement","_ref","initialAudioEnabled","propInitialAudioEnabled","initialVideoEnabled","propInitialVideoEnabled","children","useCall","useCallSettings","useCallStateHooks","settings","targetResolutionSetting","useMemo","_settings$video$targe","_settings$video$targe2","_settings$video$targe3","video","target_resolution","width","undefined","height","bitrate","defaultOnSetting","audio","mic_default_on","camera_default_on","useAppStateListener","_call$camera","camera","resume","Platform","OS","_NativeModules$Stream","NativeModules","StreamVideoReactNative","isInPiPMode","then","isInPiP","_call$camera2","disable","_call$camera3","setInitialDeviceState","useState","useEffect","prev","initAudio","initVideo","microphone","enable","selectTargetResolution","createElement","Fragment","exports"],"sourceRoot":"../../../src","sources":["providers/MediaStreamManagement.tsx"],"mappings":"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"}
|
package/dist/commonjs/version.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import React, { useEffect, useState } from 'react';
|
|
1
|
+
import React, { useEffect, useMemo, useState } from 'react';
|
|
2
2
|
import { useCall, useCallStateHooks } from '@stream-io/video-react-bindings';
|
|
3
3
|
import { useAppStateListener } from '../utils/hooks';
|
|
4
4
|
import { NativeModules, Platform } from 'react-native';
|
|
@@ -22,6 +22,34 @@ export const MediaStreamManagement = _ref => {
|
|
|
22
22
|
const {
|
|
23
23
|
useCallSettings
|
|
24
24
|
} = useCallStateHooks();
|
|
25
|
+
const settings = useCallSettings();
|
|
26
|
+
|
|
27
|
+
// Get the target resolution from the settings and memoize it
|
|
28
|
+
// Memoization is needed to avoid unnecessary useEffect triggers
|
|
29
|
+
const targetResolutionSetting = useMemo(() => {
|
|
30
|
+
var _settings$video$targe, _settings$video$targe2, _settings$video$targe3;
|
|
31
|
+
if ((settings === null || settings === void 0 || (_settings$video$targe = settings.video.target_resolution) === null || _settings$video$targe === void 0 ? void 0 : _settings$video$targe.width) === undefined || (settings === null || settings === void 0 || (_settings$video$targe2 = settings.video.target_resolution) === null || _settings$video$targe2 === void 0 ? void 0 : _settings$video$targe2.height) === undefined || (settings === null || settings === void 0 || (_settings$video$targe3 = settings.video.target_resolution) === null || _settings$video$targe3 === void 0 ? void 0 : _settings$video$targe3.bitrate) === undefined) {
|
|
32
|
+
return undefined;
|
|
33
|
+
}
|
|
34
|
+
return {
|
|
35
|
+
width: settings === null || settings === void 0 ? void 0 : settings.video.target_resolution.width,
|
|
36
|
+
height: settings === null || settings === void 0 ? void 0 : settings.video.target_resolution.height,
|
|
37
|
+
bitrate: settings === null || settings === void 0 ? void 0 : settings.video.target_resolution.bitrate
|
|
38
|
+
};
|
|
39
|
+
}, [settings === null || settings === void 0 ? void 0 : settings.video.target_resolution.width, settings === null || settings === void 0 ? void 0 : settings.video.target_resolution.height, settings === null || settings === void 0 ? void 0 : settings.video.target_resolution.bitrate]);
|
|
40
|
+
|
|
41
|
+
// Get the target resolution from the default device settings and memoize it
|
|
42
|
+
// Memoization is needed to avoid unnecessary useEffect triggers
|
|
43
|
+
const defaultOnSetting = useMemo(() => {
|
|
44
|
+
if ((settings === null || settings === void 0 ? void 0 : settings.audio.mic_default_on) === undefined || (settings === null || settings === void 0 ? void 0 : settings.video.camera_default_on) === undefined) {
|
|
45
|
+
return undefined;
|
|
46
|
+
} else {
|
|
47
|
+
return {
|
|
48
|
+
mic_default_on: settings === null || settings === void 0 ? void 0 : settings.audio.mic_default_on,
|
|
49
|
+
camera_default_on: settings === null || settings === void 0 ? void 0 : settings.video.camera_default_on
|
|
50
|
+
};
|
|
51
|
+
}
|
|
52
|
+
}, [settings === null || settings === void 0 ? void 0 : settings.audio.mic_default_on, settings === null || settings === void 0 ? void 0 : settings.video.camera_default_on]);
|
|
25
53
|
|
|
26
54
|
// Resume/Disable video stream tracks when app goes to background/foreground
|
|
27
55
|
// To save on CPU resources
|
|
@@ -51,33 +79,32 @@ export const MediaStreamManagement = _ref => {
|
|
|
51
79
|
initialAudioEnabled: undefined,
|
|
52
80
|
initialVideoEnabled: undefined
|
|
53
81
|
});
|
|
54
|
-
const settings = useCallSettings();
|
|
55
82
|
|
|
56
83
|
// Use backend settings to set initial audio/video enabled state
|
|
57
84
|
// It is applied only if the prop was undefined -- meaning user did not provide any value
|
|
58
85
|
useEffect(() => {
|
|
59
|
-
if (!
|
|
86
|
+
if (!defaultOnSetting) {
|
|
60
87
|
return;
|
|
61
88
|
}
|
|
62
89
|
const {
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
} =
|
|
90
|
+
mic_default_on,
|
|
91
|
+
camera_default_on
|
|
92
|
+
} = defaultOnSetting;
|
|
66
93
|
setInitialDeviceState(prev => {
|
|
67
94
|
let initAudio = prev.initialAudioEnabled;
|
|
68
95
|
if (typeof propInitialAudioEnabled === 'undefined') {
|
|
69
|
-
initAudio =
|
|
96
|
+
initAudio = mic_default_on;
|
|
70
97
|
}
|
|
71
98
|
let initVideo = prev.initialVideoEnabled;
|
|
72
99
|
if (typeof propInitialVideoEnabled === 'undefined') {
|
|
73
|
-
initVideo =
|
|
100
|
+
initVideo = camera_default_on;
|
|
74
101
|
}
|
|
75
102
|
return {
|
|
76
103
|
initialAudioEnabled: initAudio,
|
|
77
104
|
initialVideoEnabled: initVideo
|
|
78
105
|
};
|
|
79
106
|
});
|
|
80
|
-
}, [propInitialAudioEnabled, propInitialVideoEnabled,
|
|
107
|
+
}, [propInitialAudioEnabled, propInitialVideoEnabled, defaultOnSetting]);
|
|
81
108
|
|
|
82
109
|
// Apply SDK settings to set the initial audio/video enabled state
|
|
83
110
|
useEffect(() => {
|
|
@@ -106,8 +133,8 @@ export const MediaStreamManagement = _ref => {
|
|
|
106
133
|
if (initialVideoEnabled === undefined) {
|
|
107
134
|
return;
|
|
108
135
|
}
|
|
109
|
-
// we wait until we receive the settings from the backend
|
|
110
|
-
if (!call || !
|
|
136
|
+
// we wait until we receive the resolution settings from the backend
|
|
137
|
+
if (!call || !targetResolutionSetting) {
|
|
111
138
|
return;
|
|
112
139
|
}
|
|
113
140
|
if (initialAudioEnabled) {
|
|
@@ -115,13 +142,13 @@ export const MediaStreamManagement = _ref => {
|
|
|
115
142
|
} else {
|
|
116
143
|
call.microphone.disable();
|
|
117
144
|
}
|
|
118
|
-
call.camera.selectTargetResolution(
|
|
145
|
+
call.camera.selectTargetResolution(targetResolutionSetting);
|
|
119
146
|
if (initialVideoEnabled) {
|
|
120
147
|
call.camera.enable();
|
|
121
148
|
} else {
|
|
122
149
|
call.camera.disable();
|
|
123
150
|
}
|
|
124
|
-
}, [call, initialAudioEnabled, initialVideoEnabled,
|
|
151
|
+
}, [call, initialAudioEnabled, initialVideoEnabled, targetResolutionSetting]);
|
|
125
152
|
return /*#__PURE__*/React.createElement(React.Fragment, null, children);
|
|
126
153
|
};
|
|
127
154
|
//# sourceMappingURL=MediaStreamManagement.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"names":["React","useEffect","useState","useCall","useCallStateHooks","useAppStateListener","NativeModules","Platform","MediaStreamManagement","_ref","initialAudioEnabled","propInitialAudioEnabled","initialVideoEnabled","propInitialVideoEnabled","children","call","useCallSettings","_call$camera","camera","resume","OS","_NativeModules$Stream","StreamVideoReactNative","isInPiPMode","then","isInPiP","_call$camera2","disable","_call$camera3","setInitialDeviceState","
|
|
1
|
+
{"version":3,"names":["React","useEffect","useMemo","useState","useCall","useCallStateHooks","useAppStateListener","NativeModules","Platform","MediaStreamManagement","_ref","initialAudioEnabled","propInitialAudioEnabled","initialVideoEnabled","propInitialVideoEnabled","children","call","useCallSettings","settings","targetResolutionSetting","_settings$video$targe","_settings$video$targe2","_settings$video$targe3","video","target_resolution","width","undefined","height","bitrate","defaultOnSetting","audio","mic_default_on","camera_default_on","_call$camera","camera","resume","OS","_NativeModules$Stream","StreamVideoReactNative","isInPiPMode","then","isInPiP","_call$camera2","disable","_call$camera3","setInitialDeviceState","prev","initAudio","initVideo","microphone","enable","selectTargetResolution","createElement","Fragment"],"sourceRoot":"../../../src","sources":["providers/MediaStreamManagement.tsx"],"mappings":"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"}
|
package/dist/module/version.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export const version = '0.3.
|
|
1
|
+
export const version = '0.3.2';
|
|
2
2
|
//# sourceMappingURL=version.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MediaStreamManagement.d.ts","sourceRoot":"","sources":["../../../src/providers/MediaStreamManagement.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EAAE,iBAAiB,
|
|
1
|
+
{"version":3,"file":"MediaStreamManagement.d.ts","sourceRoot":"","sources":["../../../src/providers/MediaStreamManagement.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EAAE,iBAAiB,EAAgC,MAAM,OAAO,CAAC;AAM/E,MAAM,MAAM,wBAAwB,GAAG;IACrC;;OAEG;IACH,mBAAmB,CAAC,EAAE,OAAO,CAAC;IAC9B;;OAEG;IACH,mBAAmB,CAAC,EAAE,OAAO,CAAC;CAC/B,CAAC;AAEF;;;;;;;;;GASG;AACH,eAAO,MAAM,qBAAqB,8GAI/B,kBAAkB,wBAAwB,CAAC,sBA4I7C,CAAC"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
export declare const version = "0.3.
|
|
1
|
+
export declare const version = "0.3.2";
|
|
2
2
|
//# sourceMappingURL=version.d.ts.map
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@stream-io/video-react-native-sdk",
|
|
3
|
-
"version": "0.3.
|
|
3
|
+
"version": "0.3.2",
|
|
4
4
|
"packageManager": "yarn@3.2.4",
|
|
5
5
|
"main": "dist/commonjs/index.js",
|
|
6
6
|
"module": "dist/module/index.js",
|
|
@@ -11,7 +11,6 @@
|
|
|
11
11
|
"homepage": "https://github.com/GetStream/stream-video-js/tree/main/packages/react-native-sdk#readme",
|
|
12
12
|
"license": "See license in LICENSE",
|
|
13
13
|
"scripts": {
|
|
14
|
-
"postinstall": "yarn copy-version",
|
|
15
14
|
"clean": "rimraf dist && rimraf expo-config-plugin/dist",
|
|
16
15
|
"start": "yarn copy-version && tsc --project tsconfig.json --watch",
|
|
17
16
|
"build:expo-plugin": "rimraf expo-config-plugin/dist && tsc --project expo-config-plugin/tsconfig.json",
|
|
@@ -1,7 +1,8 @@
|
|
|
1
|
-
import React, { PropsWithChildren, useEffect, useState } from 'react';
|
|
1
|
+
import React, { PropsWithChildren, useEffect, useMemo, useState } from 'react';
|
|
2
2
|
import { useCall, useCallStateHooks } from '@stream-io/video-react-bindings';
|
|
3
3
|
import { useAppStateListener } from '../utils/hooks';
|
|
4
4
|
import { NativeModules, Platform } from 'react-native';
|
|
5
|
+
import type { TargetResolution } from '@stream-io/video-client';
|
|
5
6
|
|
|
6
7
|
export type MediaDevicesInitialState = {
|
|
7
8
|
/**
|
|
@@ -31,6 +32,44 @@ export const MediaStreamManagement = ({
|
|
|
31
32
|
}: PropsWithChildren<MediaDevicesInitialState>) => {
|
|
32
33
|
const call = useCall();
|
|
33
34
|
const { useCallSettings } = useCallStateHooks();
|
|
35
|
+
const settings = useCallSettings();
|
|
36
|
+
|
|
37
|
+
// Get the target resolution from the settings and memoize it
|
|
38
|
+
// Memoization is needed to avoid unnecessary useEffect triggers
|
|
39
|
+
const targetResolutionSetting = useMemo<TargetResolution | undefined>(() => {
|
|
40
|
+
if (
|
|
41
|
+
settings?.video.target_resolution?.width === undefined ||
|
|
42
|
+
settings?.video.target_resolution?.height === undefined ||
|
|
43
|
+
settings?.video.target_resolution?.bitrate === undefined
|
|
44
|
+
) {
|
|
45
|
+
return undefined;
|
|
46
|
+
}
|
|
47
|
+
return {
|
|
48
|
+
width: settings?.video.target_resolution.width,
|
|
49
|
+
height: settings?.video.target_resolution.height,
|
|
50
|
+
bitrate: settings?.video.target_resolution.bitrate,
|
|
51
|
+
};
|
|
52
|
+
}, [
|
|
53
|
+
settings?.video.target_resolution.width,
|
|
54
|
+
settings?.video.target_resolution.height,
|
|
55
|
+
settings?.video.target_resolution.bitrate,
|
|
56
|
+
]);
|
|
57
|
+
|
|
58
|
+
// Get the target resolution from the default device settings and memoize it
|
|
59
|
+
// Memoization is needed to avoid unnecessary useEffect triggers
|
|
60
|
+
const defaultOnSetting = useMemo(() => {
|
|
61
|
+
if (
|
|
62
|
+
settings?.audio.mic_default_on === undefined ||
|
|
63
|
+
settings?.video.camera_default_on === undefined
|
|
64
|
+
) {
|
|
65
|
+
return undefined;
|
|
66
|
+
} else {
|
|
67
|
+
return {
|
|
68
|
+
mic_default_on: settings?.audio.mic_default_on,
|
|
69
|
+
camera_default_on: settings?.video.camera_default_on,
|
|
70
|
+
};
|
|
71
|
+
}
|
|
72
|
+
}, [settings?.audio.mic_default_on, settings?.video.camera_default_on]);
|
|
34
73
|
|
|
35
74
|
// Resume/Disable video stream tracks when app goes to background/foreground
|
|
36
75
|
// To save on CPU resources
|
|
@@ -61,28 +100,26 @@ export const MediaStreamManagement = ({
|
|
|
61
100
|
initialVideoEnabled: undefined,
|
|
62
101
|
});
|
|
63
102
|
|
|
64
|
-
const settings = useCallSettings();
|
|
65
|
-
|
|
66
103
|
// Use backend settings to set initial audio/video enabled state
|
|
67
104
|
// It is applied only if the prop was undefined -- meaning user did not provide any value
|
|
68
105
|
useEffect(() => {
|
|
69
|
-
if (!
|
|
106
|
+
if (!defaultOnSetting) {
|
|
70
107
|
return;
|
|
71
108
|
}
|
|
72
109
|
|
|
73
|
-
const {
|
|
110
|
+
const { mic_default_on, camera_default_on } = defaultOnSetting;
|
|
74
111
|
setInitialDeviceState((prev) => {
|
|
75
112
|
let initAudio = prev.initialAudioEnabled;
|
|
76
113
|
if (typeof propInitialAudioEnabled === 'undefined') {
|
|
77
|
-
initAudio =
|
|
114
|
+
initAudio = mic_default_on;
|
|
78
115
|
}
|
|
79
116
|
let initVideo = prev.initialVideoEnabled;
|
|
80
117
|
if (typeof propInitialVideoEnabled === 'undefined') {
|
|
81
|
-
initVideo =
|
|
118
|
+
initVideo = camera_default_on;
|
|
82
119
|
}
|
|
83
120
|
return { initialAudioEnabled: initAudio, initialVideoEnabled: initVideo };
|
|
84
121
|
});
|
|
85
|
-
}, [propInitialAudioEnabled, propInitialVideoEnabled,
|
|
122
|
+
}, [propInitialAudioEnabled, propInitialVideoEnabled, defaultOnSetting]);
|
|
86
123
|
|
|
87
124
|
// Apply SDK settings to set the initial audio/video enabled state
|
|
88
125
|
useEffect(() => {
|
|
@@ -112,23 +149,24 @@ export const MediaStreamManagement = ({
|
|
|
112
149
|
if (initialVideoEnabled === undefined) {
|
|
113
150
|
return;
|
|
114
151
|
}
|
|
115
|
-
// we wait until we receive the settings from the backend
|
|
116
|
-
if (!call || !
|
|
152
|
+
// we wait until we receive the resolution settings from the backend
|
|
153
|
+
if (!call || !targetResolutionSetting) {
|
|
117
154
|
return;
|
|
118
155
|
}
|
|
156
|
+
|
|
119
157
|
if (initialAudioEnabled) {
|
|
120
158
|
call.microphone.enable();
|
|
121
159
|
} else {
|
|
122
160
|
call.microphone.disable();
|
|
123
161
|
}
|
|
124
162
|
|
|
125
|
-
call.camera.selectTargetResolution(
|
|
163
|
+
call.camera.selectTargetResolution(targetResolutionSetting);
|
|
126
164
|
if (initialVideoEnabled) {
|
|
127
165
|
call.camera.enable();
|
|
128
166
|
} else {
|
|
129
167
|
call.camera.disable();
|
|
130
168
|
}
|
|
131
|
-
}, [call, initialAudioEnabled, initialVideoEnabled,
|
|
169
|
+
}, [call, initialAudioEnabled, initialVideoEnabled, targetResolutionSetting]);
|
|
132
170
|
|
|
133
171
|
return <>{children}</>;
|
|
134
172
|
};
|
package/src/version.ts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
export const version = '0.3.
|
|
1
|
+
export const version = '0.3.2';
|