@stream-io/video-react-native-sdk 0.6.21 → 0.7.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 +22 -0
- package/dist/commonjs/components/Call/CallControls/ToggleAudioPreviewButton.js +6 -6
- package/dist/commonjs/components/Call/CallControls/ToggleAudioPreviewButton.js.map +1 -1
- package/dist/commonjs/components/Call/CallControls/ToggleAudioPublishingButton.js +5 -5
- package/dist/commonjs/components/Call/CallControls/ToggleAudioPublishingButton.js.map +1 -1
- package/dist/commonjs/components/Call/CallControls/ToggleCameraFaceButton.js +4 -4
- package/dist/commonjs/components/Call/CallControls/ToggleCameraFaceButton.js.map +1 -1
- package/dist/commonjs/components/Call/CallControls/ToggleVideoPreviewButton.js +6 -6
- package/dist/commonjs/components/Call/CallControls/ToggleVideoPreviewButton.js.map +1 -1
- package/dist/commonjs/components/Call/CallControls/ToggleVideoPublishingButton.js +5 -5
- package/dist/commonjs/components/Call/CallControls/ToggleVideoPublishingButton.js.map +1 -1
- package/dist/commonjs/components/Call/Lobby/Lobby.js +4 -2
- package/dist/commonjs/components/Call/Lobby/Lobby.js.map +1 -1
- package/dist/commonjs/components/Call/RingingCallContent/IncomingCall.js +2 -0
- package/dist/commonjs/components/Call/RingingCallContent/IncomingCall.js.map +1 -1
- package/dist/commonjs/components/Call/RingingCallContent/OutgoingCall.js +7 -5
- package/dist/commonjs/components/Call/RingingCallContent/OutgoingCall.js.map +1 -1
- package/dist/commonjs/components/Livestream/LivestreamControls/LivestreamAudioControlButton.js +6 -11
- package/dist/commonjs/components/Livestream/LivestreamControls/LivestreamAudioControlButton.js.map +1 -1
- package/dist/commonjs/components/Livestream/LivestreamControls/LivestreamVideoControlButton.js +4 -4
- package/dist/commonjs/components/Livestream/LivestreamControls/LivestreamVideoControlButton.js.map +1 -1
- package/dist/commonjs/hooks/index.js +11 -0
- package/dist/commonjs/hooks/index.js.map +1 -1
- package/dist/commonjs/hooks/useApplyDefaultMediaStreamSettings.js +52 -0
- package/dist/commonjs/hooks/useApplyDefaultMediaStreamSettings.js.map +1 -0
- package/dist/commonjs/index.js +1 -8
- package/dist/commonjs/index.js.map +1 -1
- package/dist/commonjs/providers/StreamCall.js +30 -4
- package/dist/commonjs/providers/StreamCall.js.map +1 -1
- package/dist/commonjs/providers/index.js +0 -11
- package/dist/commonjs/providers/index.js.map +1 -1
- package/dist/commonjs/version.js +1 -1
- package/dist/commonjs/version.js.map +1 -1
- package/dist/module/components/Call/CallControls/ToggleAudioPreviewButton.js +7 -7
- package/dist/module/components/Call/CallControls/ToggleAudioPreviewButton.js.map +1 -1
- package/dist/module/components/Call/CallControls/ToggleAudioPublishingButton.js +6 -6
- package/dist/module/components/Call/CallControls/ToggleAudioPublishingButton.js.map +1 -1
- package/dist/module/components/Call/CallControls/ToggleCameraFaceButton.js +5 -5
- package/dist/module/components/Call/CallControls/ToggleCameraFaceButton.js.map +1 -1
- package/dist/module/components/Call/CallControls/ToggleVideoPreviewButton.js +7 -7
- package/dist/module/components/Call/CallControls/ToggleVideoPreviewButton.js.map +1 -1
- package/dist/module/components/Call/CallControls/ToggleVideoPublishingButton.js +6 -6
- package/dist/module/components/Call/CallControls/ToggleVideoPublishingButton.js.map +1 -1
- package/dist/module/components/Call/Lobby/Lobby.js +4 -2
- package/dist/module/components/Call/Lobby/Lobby.js.map +1 -1
- package/dist/module/components/Call/RingingCallContent/IncomingCall.js +2 -0
- package/dist/module/components/Call/RingingCallContent/IncomingCall.js.map +1 -1
- package/dist/module/components/Call/RingingCallContent/OutgoingCall.js +8 -6
- package/dist/module/components/Call/RingingCallContent/OutgoingCall.js.map +1 -1
- package/dist/module/components/Livestream/LivestreamControls/LivestreamAudioControlButton.js +7 -12
- package/dist/module/components/Livestream/LivestreamControls/LivestreamAudioControlButton.js.map +1 -1
- package/dist/module/components/Livestream/LivestreamControls/LivestreamVideoControlButton.js +5 -5
- package/dist/module/components/Livestream/LivestreamControls/LivestreamVideoControlButton.js.map +1 -1
- package/dist/module/hooks/index.js +1 -0
- package/dist/module/hooks/index.js.map +1 -1
- package/dist/module/hooks/useApplyDefaultMediaStreamSettings.js +46 -0
- package/dist/module/hooks/useApplyDefaultMediaStreamSettings.js.map +1 -0
- package/dist/module/index.js +1 -1
- package/dist/module/index.js.map +1 -1
- package/dist/module/providers/StreamCall.js +30 -4
- package/dist/module/providers/StreamCall.js.map +1 -1
- package/dist/module/providers/index.js +0 -1
- package/dist/module/providers/index.js.map +1 -1
- package/dist/module/version.js +1 -1
- package/dist/module/version.js.map +1 -1
- package/dist/typescript/components/Call/CallControls/ToggleAudioPreviewButton.d.ts.map +1 -1
- package/dist/typescript/components/Call/CallControls/ToggleAudioPublishingButton.d.ts.map +1 -1
- package/dist/typescript/components/Call/CallControls/ToggleCameraFaceButton.d.ts.map +1 -1
- package/dist/typescript/components/Call/CallControls/ToggleVideoPreviewButton.d.ts.map +1 -1
- package/dist/typescript/components/Call/CallControls/ToggleVideoPublishingButton.d.ts.map +1 -1
- package/dist/typescript/components/Call/Lobby/Lobby.d.ts.map +1 -1
- package/dist/typescript/components/Call/RingingCallContent/IncomingCall.d.ts.map +1 -1
- package/dist/typescript/components/Call/RingingCallContent/OutgoingCall.d.ts.map +1 -1
- package/dist/typescript/components/Livestream/LivestreamControls/LivestreamAudioControlButton.d.ts.map +1 -1
- package/dist/typescript/components/Livestream/LivestreamControls/LivestreamVideoControlButton.d.ts.map +1 -1
- package/dist/typescript/hooks/index.d.ts +1 -0
- package/dist/typescript/hooks/index.d.ts.map +1 -1
- package/dist/typescript/hooks/useApplyDefaultMediaStreamSettings.d.ts +5 -0
- package/dist/typescript/hooks/useApplyDefaultMediaStreamSettings.d.ts.map +1 -0
- package/dist/typescript/index.d.ts +1 -1
- package/dist/typescript/index.d.ts.map +1 -1
- package/dist/typescript/providers/StreamCall.d.ts +1 -8
- package/dist/typescript/providers/StreamCall.d.ts.map +1 -1
- package/dist/typescript/providers/index.d.ts +0 -1
- package/dist/typescript/providers/index.d.ts.map +1 -1
- package/dist/typescript/version.d.ts +1 -1
- package/dist/typescript/version.d.ts.map +1 -1
- package/package.json +3 -3
- package/src/components/Call/CallControls/ToggleAudioPreviewButton.tsx +6 -8
- package/src/components/Call/CallControls/ToggleAudioPublishingButton.tsx +5 -10
- package/src/components/Call/CallControls/ToggleCameraFaceButton.tsx +4 -9
- package/src/components/Call/CallControls/ToggleVideoPreviewButton.tsx +6 -8
- package/src/components/Call/CallControls/ToggleVideoPublishingButton.tsx +5 -10
- package/src/components/Call/Lobby/Lobby.tsx +4 -2
- package/src/components/Call/RingingCallContent/IncomingCall.tsx +3 -0
- package/src/components/Call/RingingCallContent/OutgoingCall.tsx +8 -11
- package/src/components/Livestream/LivestreamControls/LivestreamAudioControlButton.tsx +17 -29
- package/src/components/Livestream/LivestreamControls/LivestreamVideoControlButton.tsx +4 -5
- package/src/hooks/index.ts +1 -0
- package/src/hooks/useApplyDefaultMediaStreamSettings.tsx +42 -0
- package/src/index.ts +1 -1
- package/src/providers/StreamCall.tsx +37 -18
- package/src/providers/index.ts +0 -1
- package/src/version.ts +1 -1
- package/dist/commonjs/providers/MediaStreamManagement.js +0 -116
- package/dist/commonjs/providers/MediaStreamManagement.js.map +0 -1
- package/dist/module/providers/MediaStreamManagement.js +0 -107
- package/dist/module/providers/MediaStreamManagement.js.map +0 -1
- package/dist/typescript/providers/MediaStreamManagement.d.ts +0 -23
- package/dist/typescript/providers/MediaStreamManagement.d.ts.map +0 -1
- package/src/providers/MediaStreamManagement.tsx +0 -132
|
@@ -1,116 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
|
|
3
|
-
Object.defineProperty(exports, "__esModule", {
|
|
4
|
-
value: true
|
|
5
|
-
});
|
|
6
|
-
exports.MediaStreamManagement = void 0;
|
|
7
|
-
var _react = _interopRequireWildcard(require("react"));
|
|
8
|
-
var _videoReactBindings = require("@stream-io/video-react-bindings");
|
|
9
|
-
var _hooks = require("../utils/hooks");
|
|
10
|
-
var _reactNative = require("react-native");
|
|
11
|
-
function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function (nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
|
|
12
|
-
function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || typeof obj !== "object" && typeof obj !== "function") { return { default: obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj.default = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
|
|
13
|
-
/**
|
|
14
|
-
*
|
|
15
|
-
* Provides `MediaStreamManagement` wrapper that allow the integrators to handle:
|
|
16
|
-
* 1. the initial device state enablement (for example in a custom lobby component)
|
|
17
|
-
* 2. media stream publishing
|
|
18
|
-
* @param params
|
|
19
|
-
* @returns
|
|
20
|
-
*
|
|
21
|
-
* @category Device Management
|
|
22
|
-
*/
|
|
23
|
-
const MediaStreamManagement = ({
|
|
24
|
-
initialAudioEnabled: propInitialAudioEnabled,
|
|
25
|
-
initialVideoEnabled: propInitialVideoEnabled,
|
|
26
|
-
children
|
|
27
|
-
}) => {
|
|
28
|
-
const call = (0, _videoReactBindings.useCall)();
|
|
29
|
-
const {
|
|
30
|
-
useCallSettings
|
|
31
|
-
} = (0, _videoReactBindings.useCallStateHooks)();
|
|
32
|
-
const settings = useCallSettings();
|
|
33
|
-
|
|
34
|
-
// Get the target resolution from the settings and memoize it
|
|
35
|
-
// Memoization is needed to avoid unnecessary useEffect triggers
|
|
36
|
-
const targetResolutionSetting = (0, _react.useMemo)(() => {
|
|
37
|
-
var _settings$video$targe, _settings$video$targe2, _settings$video$targe3;
|
|
38
|
-
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) {
|
|
39
|
-
return {
|
|
40
|
-
width: settings === null || settings === void 0 ? void 0 : settings.video.target_resolution.width,
|
|
41
|
-
height: settings === null || settings === void 0 ? void 0 : settings.video.target_resolution.height,
|
|
42
|
-
bitrate: settings === null || settings === void 0 ? void 0 : settings.video.target_resolution.bitrate
|
|
43
|
-
};
|
|
44
|
-
}
|
|
45
|
-
return undefined;
|
|
46
|
-
}, [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]);
|
|
47
|
-
|
|
48
|
-
// Resume/Disable video stream tracks when app goes to background/foreground
|
|
49
|
-
// To save on CPU resources
|
|
50
|
-
(0, _hooks.useAppStateListener)(() => {
|
|
51
|
-
var _call$camera;
|
|
52
|
-
call === null || call === void 0 || (_call$camera = call.camera) === null || _call$camera === void 0 || _call$camera.resume();
|
|
53
|
-
}, () => {
|
|
54
|
-
if (_reactNative.Platform.OS === 'android') {
|
|
55
|
-
var _NativeModules$Stream;
|
|
56
|
-
// in Android, we need to check if we are in PiP mode
|
|
57
|
-
// in PiP mode, we don't want to disable the camera
|
|
58
|
-
_reactNative.NativeModules === null || _reactNative.NativeModules === void 0 || (_NativeModules$Stream = _reactNative.NativeModules.StreamVideoReactNative) === null || _NativeModules$Stream === void 0 || _NativeModules$Stream.isInPiPMode().then(isInPiP => {
|
|
59
|
-
if (!isInPiP) {
|
|
60
|
-
var _call$camera2;
|
|
61
|
-
call === null || call === void 0 || (_call$camera2 = call.camera) === null || _call$camera2 === void 0 || _call$camera2.disable();
|
|
62
|
-
}
|
|
63
|
-
});
|
|
64
|
-
} else {
|
|
65
|
-
var _call$camera3;
|
|
66
|
-
call === null || call === void 0 || (_call$camera3 = call.camera) === null || _call$camera3 === void 0 || _call$camera3.disable();
|
|
67
|
-
}
|
|
68
|
-
});
|
|
69
|
-
|
|
70
|
-
/*
|
|
71
|
-
* This is the object is used to track the initial audio/video enablement
|
|
72
|
-
* Uses backend settings or the Prop to set initial audio/video enabled
|
|
73
|
-
* Backend settings is applied only if the prop was undefined -- meaning user did not provide any value
|
|
74
|
-
* Memoization is needed to avoid unnecessary useEffect triggers
|
|
75
|
-
*/
|
|
76
|
-
const {
|
|
77
|
-
initialAudioEnabled,
|
|
78
|
-
initialVideoEnabled
|
|
79
|
-
} = (0, _react.useMemo)(() => {
|
|
80
|
-
return {
|
|
81
|
-
initialAudioEnabled: propInitialAudioEnabled ?? (settings === null || settings === void 0 ? void 0 : settings.audio.mic_default_on),
|
|
82
|
-
initialVideoEnabled: propInitialVideoEnabled ?? (settings === null || settings === void 0 ? void 0 : settings.video.camera_default_on)
|
|
83
|
-
};
|
|
84
|
-
}, [settings === null || settings === void 0 ? void 0 : settings.audio.mic_default_on, settings === null || settings === void 0 ? void 0 : settings.video.camera_default_on, propInitialAudioEnabled, propInitialVideoEnabled]);
|
|
85
|
-
|
|
86
|
-
// The main logic
|
|
87
|
-
// Enable or Disable the audio/video stream based on the initial state
|
|
88
|
-
(0, _react.useEffect)(() => {
|
|
89
|
-
if (!call) {
|
|
90
|
-
return;
|
|
91
|
-
}
|
|
92
|
-
if (initialAudioEnabled !== undefined) {
|
|
93
|
-
if (initialAudioEnabled) {
|
|
94
|
-
call.microphone.enable();
|
|
95
|
-
} else {
|
|
96
|
-
call.microphone.disable();
|
|
97
|
-
}
|
|
98
|
-
}
|
|
99
|
-
|
|
100
|
-
// we wait until we receive the resolution settings from the backend
|
|
101
|
-
if (!targetResolutionSetting) {
|
|
102
|
-
return;
|
|
103
|
-
}
|
|
104
|
-
call.camera.selectTargetResolution(targetResolutionSetting);
|
|
105
|
-
if (initialVideoEnabled !== undefined) {
|
|
106
|
-
if (initialVideoEnabled) {
|
|
107
|
-
call.camera.enable();
|
|
108
|
-
} else {
|
|
109
|
-
call.camera.disable();
|
|
110
|
-
}
|
|
111
|
-
}
|
|
112
|
-
}, [call, initialAudioEnabled, initialVideoEnabled, targetResolutionSetting]);
|
|
113
|
-
return /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, children);
|
|
114
|
-
};
|
|
115
|
-
exports.MediaStreamManagement = MediaStreamManagement;
|
|
116
|
-
//# sourceMappingURL=MediaStreamManagement.js.map
|
|
@@ -1 +0,0 @@
|
|
|
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","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","useAppStateListener","_call$camera","camera","resume","Platform","OS","_NativeModules$Stream","NativeModules","StreamVideoReactNative","isInPiPMode","then","isInPiP","_call$camera2","disable","_call$camera3","audio","mic_default_on","camera_default_on","useEffect","microphone","enable","selectTargetResolution","createElement","Fragment","exports"],"sourceRoot":"../../../src","sources":["providers/MediaStreamManagement.tsx"],"mappings":"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"}
|
|
@@ -1,107 +0,0 @@
|
|
|
1
|
-
import React, { useEffect, useMemo } from 'react';
|
|
2
|
-
import { useCall, useCallStateHooks } from '@stream-io/video-react-bindings';
|
|
3
|
-
import { useAppStateListener } from '../utils/hooks';
|
|
4
|
-
import { NativeModules, Platform } from 'react-native';
|
|
5
|
-
/**
|
|
6
|
-
*
|
|
7
|
-
* Provides `MediaStreamManagement` wrapper that allow the integrators to handle:
|
|
8
|
-
* 1. the initial device state enablement (for example in a custom lobby component)
|
|
9
|
-
* 2. media stream publishing
|
|
10
|
-
* @param params
|
|
11
|
-
* @returns
|
|
12
|
-
*
|
|
13
|
-
* @category Device Management
|
|
14
|
-
*/
|
|
15
|
-
export const MediaStreamManagement = ({
|
|
16
|
-
initialAudioEnabled: propInitialAudioEnabled,
|
|
17
|
-
initialVideoEnabled: propInitialVideoEnabled,
|
|
18
|
-
children
|
|
19
|
-
}) => {
|
|
20
|
-
const call = useCall();
|
|
21
|
-
const {
|
|
22
|
-
useCallSettings
|
|
23
|
-
} = useCallStateHooks();
|
|
24
|
-
const settings = useCallSettings();
|
|
25
|
-
|
|
26
|
-
// Get the target resolution from the settings and memoize it
|
|
27
|
-
// Memoization is needed to avoid unnecessary useEffect triggers
|
|
28
|
-
const targetResolutionSetting = useMemo(() => {
|
|
29
|
-
var _settings$video$targe, _settings$video$targe2, _settings$video$targe3;
|
|
30
|
-
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) {
|
|
31
|
-
return {
|
|
32
|
-
width: settings === null || settings === void 0 ? void 0 : settings.video.target_resolution.width,
|
|
33
|
-
height: settings === null || settings === void 0 ? void 0 : settings.video.target_resolution.height,
|
|
34
|
-
bitrate: settings === null || settings === void 0 ? void 0 : settings.video.target_resolution.bitrate
|
|
35
|
-
};
|
|
36
|
-
}
|
|
37
|
-
return undefined;
|
|
38
|
-
}, [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]);
|
|
39
|
-
|
|
40
|
-
// Resume/Disable video stream tracks when app goes to background/foreground
|
|
41
|
-
// To save on CPU resources
|
|
42
|
-
useAppStateListener(() => {
|
|
43
|
-
var _call$camera;
|
|
44
|
-
call === null || call === void 0 || (_call$camera = call.camera) === null || _call$camera === void 0 || _call$camera.resume();
|
|
45
|
-
}, () => {
|
|
46
|
-
if (Platform.OS === 'android') {
|
|
47
|
-
var _NativeModules$Stream;
|
|
48
|
-
// in Android, we need to check if we are in PiP mode
|
|
49
|
-
// in PiP mode, we don't want to disable the camera
|
|
50
|
-
NativeModules === null || NativeModules === void 0 || (_NativeModules$Stream = NativeModules.StreamVideoReactNative) === null || _NativeModules$Stream === void 0 || _NativeModules$Stream.isInPiPMode().then(isInPiP => {
|
|
51
|
-
if (!isInPiP) {
|
|
52
|
-
var _call$camera2;
|
|
53
|
-
call === null || call === void 0 || (_call$camera2 = call.camera) === null || _call$camera2 === void 0 || _call$camera2.disable();
|
|
54
|
-
}
|
|
55
|
-
});
|
|
56
|
-
} else {
|
|
57
|
-
var _call$camera3;
|
|
58
|
-
call === null || call === void 0 || (_call$camera3 = call.camera) === null || _call$camera3 === void 0 || _call$camera3.disable();
|
|
59
|
-
}
|
|
60
|
-
});
|
|
61
|
-
|
|
62
|
-
/*
|
|
63
|
-
* This is the object is used to track the initial audio/video enablement
|
|
64
|
-
* Uses backend settings or the Prop to set initial audio/video enabled
|
|
65
|
-
* Backend settings is applied only if the prop was undefined -- meaning user did not provide any value
|
|
66
|
-
* Memoization is needed to avoid unnecessary useEffect triggers
|
|
67
|
-
*/
|
|
68
|
-
const {
|
|
69
|
-
initialAudioEnabled,
|
|
70
|
-
initialVideoEnabled
|
|
71
|
-
} = useMemo(() => {
|
|
72
|
-
return {
|
|
73
|
-
initialAudioEnabled: propInitialAudioEnabled ?? (settings === null || settings === void 0 ? void 0 : settings.audio.mic_default_on),
|
|
74
|
-
initialVideoEnabled: propInitialVideoEnabled ?? (settings === null || settings === void 0 ? void 0 : settings.video.camera_default_on)
|
|
75
|
-
};
|
|
76
|
-
}, [settings === null || settings === void 0 ? void 0 : settings.audio.mic_default_on, settings === null || settings === void 0 ? void 0 : settings.video.camera_default_on, propInitialAudioEnabled, propInitialVideoEnabled]);
|
|
77
|
-
|
|
78
|
-
// The main logic
|
|
79
|
-
// Enable or Disable the audio/video stream based on the initial state
|
|
80
|
-
useEffect(() => {
|
|
81
|
-
if (!call) {
|
|
82
|
-
return;
|
|
83
|
-
}
|
|
84
|
-
if (initialAudioEnabled !== undefined) {
|
|
85
|
-
if (initialAudioEnabled) {
|
|
86
|
-
call.microphone.enable();
|
|
87
|
-
} else {
|
|
88
|
-
call.microphone.disable();
|
|
89
|
-
}
|
|
90
|
-
}
|
|
91
|
-
|
|
92
|
-
// we wait until we receive the resolution settings from the backend
|
|
93
|
-
if (!targetResolutionSetting) {
|
|
94
|
-
return;
|
|
95
|
-
}
|
|
96
|
-
call.camera.selectTargetResolution(targetResolutionSetting);
|
|
97
|
-
if (initialVideoEnabled !== undefined) {
|
|
98
|
-
if (initialVideoEnabled) {
|
|
99
|
-
call.camera.enable();
|
|
100
|
-
} else {
|
|
101
|
-
call.camera.disable();
|
|
102
|
-
}
|
|
103
|
-
}
|
|
104
|
-
}, [call, initialAudioEnabled, initialVideoEnabled, targetResolutionSetting]);
|
|
105
|
-
return /*#__PURE__*/React.createElement(React.Fragment, null, children);
|
|
106
|
-
};
|
|
107
|
-
//# sourceMappingURL=MediaStreamManagement.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"names":["React","useEffect","useMemo","useCall","useCallStateHooks","useAppStateListener","NativeModules","Platform","MediaStreamManagement","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","_call$camera","camera","resume","OS","_NativeModules$Stream","StreamVideoReactNative","isInPiPMode","then","isInPiP","_call$camera2","disable","_call$camera3","audio","mic_default_on","camera_default_on","microphone","enable","selectTargetResolution","createElement","Fragment"],"sourceRoot":"../../../src","sources":["providers/MediaStreamManagement.tsx"],"mappings":"AAAA,OAAOA,KAAK,IAAuBC,SAAS,EAAEC,OAAO,QAAQ,OAAO;AACpE,SAASC,OAAO,EAAEC,iBAAiB,QAAQ,iCAAiC;AAC5E,SAASC,mBAAmB,QAAQ,gBAAgB;AACpD,SAASC,aAAa,EAAEC,QAAQ,QAAQ,cAAc;AActD;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAAO,MAAMC,qBAAqB,GAAGA,CAAC;EACpCC,mBAAmB,EAAEC,uBAAuB;EAC5CC,mBAAmB,EAAEC,uBAAuB;EAC5CC;AAC2C,CAAC,KAAK;EACjD,MAAMC,IAAI,GAAGX,OAAO,CAAC,CAAC;EACtB,MAAM;IAAEY;EAAgB,CAAC,GAAGX,iBAAiB,CAAC,CAAC;EAC/C,MAAMY,QAAQ,GAAGD,eAAe,CAAC,CAAC;;EAElC;EACA;EACA,MAAME,uBAAuB,GAAGf,OAAO,CAA+B,MAAM;IAAA,IAAAgB,qBAAA,EAAAC,sBAAA,EAAAC,sBAAA;IAC1E,IACE,CAAAJ,QAAQ,aAARA,QAAQ,gBAAAE,qBAAA,GAARF,QAAQ,CAAEK,KAAK,CAACC,iBAAiB,cAAAJ,qBAAA,uBAAjCA,qBAAA,CAAmCK,KAAK,MAAKC,SAAS,IACtD,CAAAR,QAAQ,aAARA,QAAQ,gBAAAG,sBAAA,GAARH,QAAQ,CAAEK,KAAK,CAACC,iBAAiB,cAAAH,sBAAA,uBAAjCA,sBAAA,CAAmCM,MAAM,MAAKD,SAAS,IACvD,CAAAR,QAAQ,aAARA,QAAQ,gBAAAI,sBAAA,GAARJ,QAAQ,CAAEK,KAAK,CAACC,iBAAiB,cAAAF,sBAAA,uBAAjCA,sBAAA,CAAmCM,OAAO,MAAKF,SAAS,EACxD;MACA,OAAO;QACLD,KAAK,EAAEP,QAAQ,aAARA,QAAQ,uBAARA,QAAQ,CAAEK,KAAK,CAACC,iBAAiB,CAACC,KAAK;QAC9CE,MAAM,EAAET,QAAQ,aAARA,QAAQ,uBAARA,QAAQ,CAAEK,KAAK,CAACC,iBAAiB,CAACG,MAAM;QAChDC,OAAO,EAAEV,QAAQ,aAARA,QAAQ,uBAARA,QAAQ,CAAEK,KAAK,CAACC,iBAAiB,CAACI;MAC7C,CAAC;IACH;IACA,OAAOF,SAAS;EAClB,CAAC,EAAE,CACDR,QAAQ,aAARA,QAAQ,uBAARA,QAAQ,CAAEK,KAAK,CAACC,iBAAiB,CAACC,KAAK,EACvCP,QAAQ,aAARA,QAAQ,uBAARA,QAAQ,CAAEK,KAAK,CAACC,iBAAiB,CAACG,MAAM,EACxCT,QAAQ,aAARA,QAAQ,uBAARA,QAAQ,CAAEK,KAAK,CAACC,iBAAiB,CAACI,OAAO,CAC1C,CAAC;;EAEF;EACA;EACArB,mBAAmB,CACjB,MAAM;IAAA,IAAAsB,YAAA;IACJb,IAAI,aAAJA,IAAI,gBAAAa,YAAA,GAAJb,IAAI,CAAEc,MAAM,cAAAD,YAAA,eAAZA,YAAA,CAAcE,MAAM,CAAC,CAAC;EACxB,CAAC,EACD,MAAM;IACJ,IAAItB,QAAQ,CAACuB,EAAE,KAAK,SAAS,EAAE;MAAA,IAAAC,qBAAA;MAC7B;MACA;MACAzB,aAAa,aAAbA,aAAa,gBAAAyB,qBAAA,GAAbzB,aAAa,CAAE0B,sBAAsB,cAAAD,qBAAA,eAArCA,qBAAA,CAAuCE,WAAW,CAAC,CAAC,CAACC,IAAI,CACtDC,OAAgB,IAAK;QACpB,IAAI,CAACA,OAAO,EAAE;UAAA,IAAAC,aAAA;UACZtB,IAAI,aAAJA,IAAI,gBAAAsB,aAAA,GAAJtB,IAAI,CAAEc,MAAM,cAAAQ,aAAA,eAAZA,aAAA,CAAcC,OAAO,CAAC,CAAC;QACzB;MACF,CACF,CAAC;IACH,CAAC,MAAM;MAAA,IAAAC,aAAA;MACLxB,IAAI,aAAJA,IAAI,gBAAAwB,aAAA,GAAJxB,IAAI,CAAEc,MAAM,cAAAU,aAAA,eAAZA,aAAA,CAAcD,OAAO,CAAC,CAAC;IACzB;EACF,CACF,CAAC;;EAED;AACF;AACA;AACA;AACA;AACA;EACE,MAAM;IAAE5B,mBAAmB;IAAEE;EAAoB,CAAC,GAChDT,OAAO,CAA2B,MAAM;IACtC,OAAO;MACLO,mBAAmB,EACjBC,uBAAuB,KAAIM,QAAQ,aAARA,QAAQ,uBAARA,QAAQ,CAAEuB,KAAK,CAACC,cAAc;MAC3D7B,mBAAmB,EACjBC,uBAAuB,KAAII,QAAQ,aAARA,QAAQ,uBAARA,QAAQ,CAAEK,KAAK,CAACoB,iBAAiB;IAChE,CAAC;EACH,CAAC,EAAE,CACDzB,QAAQ,aAARA,QAAQ,uBAARA,QAAQ,CAAEuB,KAAK,CAACC,cAAc,EAC9BxB,QAAQ,aAARA,QAAQ,uBAARA,QAAQ,CAAEK,KAAK,CAACoB,iBAAiB,EACjC/B,uBAAuB,EACvBE,uBAAuB,CACxB,CAAC;;EAEJ;EACA;EACAX,SAAS,CAAC,MAAM;IACd,IAAI,CAACa,IAAI,EAAE;MACT;IACF;IAEA,IAAIL,mBAAmB,KAAKe,SAAS,EAAE;MACrC,IAAIf,mBAAmB,EAAE;QACvBK,IAAI,CAAC4B,UAAU,CAACC,MAAM,CAAC,CAAC;MAC1B,CAAC,MAAM;QACL7B,IAAI,CAAC4B,UAAU,CAACL,OAAO,CAAC,CAAC;MAC3B;IACF;;IAEA;IACA,IAAI,CAACpB,uBAAuB,EAAE;MAC5B;IACF;IACAH,IAAI,CAACc,MAAM,CAACgB,sBAAsB,CAAC3B,uBAAuB,CAAC;IAC3D,IAAIN,mBAAmB,KAAKa,SAAS,EAAE;MACrC,IAAIb,mBAAmB,EAAE;QACvBG,IAAI,CAACc,MAAM,CAACe,MAAM,CAAC,CAAC;MACtB,CAAC,MAAM;QACL7B,IAAI,CAACc,MAAM,CAACS,OAAO,CAAC,CAAC;MACvB;IACF;EACF,CAAC,EAAE,CAACvB,IAAI,EAAEL,mBAAmB,EAAEE,mBAAmB,EAAEM,uBAAuB,CAAC,CAAC;EAE7E,oBAAOjB,KAAA,CAAA6C,aAAA,CAAA7C,KAAA,CAAA8C,QAAA,QAAGjC,QAAW,CAAC;AACxB,CAAC"}
|
|
@@ -1,23 +0,0 @@
|
|
|
1
|
-
import React, { PropsWithChildren } from 'react';
|
|
2
|
-
export type MediaDevicesInitialState = {
|
|
3
|
-
/**
|
|
4
|
-
* Provides external control over the initial audio input (microphone) enablement. Overrides the default false.
|
|
5
|
-
*/
|
|
6
|
-
initialAudioEnabled?: boolean;
|
|
7
|
-
/**
|
|
8
|
-
* Provides external control over the initial video input (camera) enablement. Overrides the default false.
|
|
9
|
-
*/
|
|
10
|
-
initialVideoEnabled?: boolean;
|
|
11
|
-
};
|
|
12
|
-
/**
|
|
13
|
-
*
|
|
14
|
-
* Provides `MediaStreamManagement` wrapper that allow the integrators to handle:
|
|
15
|
-
* 1. the initial device state enablement (for example in a custom lobby component)
|
|
16
|
-
* 2. media stream publishing
|
|
17
|
-
* @param params
|
|
18
|
-
* @returns
|
|
19
|
-
*
|
|
20
|
-
* @category Device Management
|
|
21
|
-
*/
|
|
22
|
-
export declare const MediaStreamManagement: ({ initialAudioEnabled: propInitialAudioEnabled, initialVideoEnabled: propInitialVideoEnabled, children, }: PropsWithChildren<MediaDevicesInitialState>) => React.JSX.Element;
|
|
23
|
-
//# sourceMappingURL=MediaStreamManagement.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"MediaStreamManagement.d.ts","sourceRoot":"","sources":["../../../src/providers/MediaStreamManagement.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,EAAE,iBAAiB,EAAsB,MAAM,OAAO,CAAC;AAMrE,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,sBAoG7C,CAAC"}
|
|
@@ -1,132 +0,0 @@
|
|
|
1
|
-
import React, { PropsWithChildren, useEffect, useMemo } from 'react';
|
|
2
|
-
import { useCall, useCallStateHooks } from '@stream-io/video-react-bindings';
|
|
3
|
-
import { useAppStateListener } from '../utils/hooks';
|
|
4
|
-
import { NativeModules, Platform } from 'react-native';
|
|
5
|
-
import type { TargetResolution } from '@stream-io/video-client';
|
|
6
|
-
|
|
7
|
-
export type MediaDevicesInitialState = {
|
|
8
|
-
/**
|
|
9
|
-
* Provides external control over the initial audio input (microphone) enablement. Overrides the default false.
|
|
10
|
-
*/
|
|
11
|
-
initialAudioEnabled?: boolean;
|
|
12
|
-
/**
|
|
13
|
-
* Provides external control over the initial video input (camera) enablement. Overrides the default false.
|
|
14
|
-
*/
|
|
15
|
-
initialVideoEnabled?: boolean;
|
|
16
|
-
};
|
|
17
|
-
|
|
18
|
-
/**
|
|
19
|
-
*
|
|
20
|
-
* Provides `MediaStreamManagement` wrapper that allow the integrators to handle:
|
|
21
|
-
* 1. the initial device state enablement (for example in a custom lobby component)
|
|
22
|
-
* 2. media stream publishing
|
|
23
|
-
* @param params
|
|
24
|
-
* @returns
|
|
25
|
-
*
|
|
26
|
-
* @category Device Management
|
|
27
|
-
*/
|
|
28
|
-
export const MediaStreamManagement = ({
|
|
29
|
-
initialAudioEnabled: propInitialAudioEnabled,
|
|
30
|
-
initialVideoEnabled: propInitialVideoEnabled,
|
|
31
|
-
children,
|
|
32
|
-
}: PropsWithChildren<MediaDevicesInitialState>) => {
|
|
33
|
-
const call = useCall();
|
|
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 {
|
|
46
|
-
width: settings?.video.target_resolution.width,
|
|
47
|
-
height: settings?.video.target_resolution.height,
|
|
48
|
-
bitrate: settings?.video.target_resolution.bitrate,
|
|
49
|
-
};
|
|
50
|
-
}
|
|
51
|
-
return undefined;
|
|
52
|
-
}, [
|
|
53
|
-
settings?.video.target_resolution.width,
|
|
54
|
-
settings?.video.target_resolution.height,
|
|
55
|
-
settings?.video.target_resolution.bitrate,
|
|
56
|
-
]);
|
|
57
|
-
|
|
58
|
-
// Resume/Disable video stream tracks when app goes to background/foreground
|
|
59
|
-
// To save on CPU resources
|
|
60
|
-
useAppStateListener(
|
|
61
|
-
() => {
|
|
62
|
-
call?.camera?.resume();
|
|
63
|
-
},
|
|
64
|
-
() => {
|
|
65
|
-
if (Platform.OS === 'android') {
|
|
66
|
-
// in Android, we need to check if we are in PiP mode
|
|
67
|
-
// in PiP mode, we don't want to disable the camera
|
|
68
|
-
NativeModules?.StreamVideoReactNative?.isInPiPMode().then(
|
|
69
|
-
(isInPiP: boolean) => {
|
|
70
|
-
if (!isInPiP) {
|
|
71
|
-
call?.camera?.disable();
|
|
72
|
-
}
|
|
73
|
-
},
|
|
74
|
-
);
|
|
75
|
-
} else {
|
|
76
|
-
call?.camera?.disable();
|
|
77
|
-
}
|
|
78
|
-
},
|
|
79
|
-
);
|
|
80
|
-
|
|
81
|
-
/*
|
|
82
|
-
* This is the object is used to track the initial audio/video enablement
|
|
83
|
-
* Uses backend settings or the Prop to set initial audio/video enabled
|
|
84
|
-
* Backend settings is applied only if the prop was undefined -- meaning user did not provide any value
|
|
85
|
-
* Memoization is needed to avoid unnecessary useEffect triggers
|
|
86
|
-
*/
|
|
87
|
-
const { initialAudioEnabled, initialVideoEnabled } =
|
|
88
|
-
useMemo<MediaDevicesInitialState>(() => {
|
|
89
|
-
return {
|
|
90
|
-
initialAudioEnabled:
|
|
91
|
-
propInitialAudioEnabled ?? settings?.audio.mic_default_on,
|
|
92
|
-
initialVideoEnabled:
|
|
93
|
-
propInitialVideoEnabled ?? settings?.video.camera_default_on,
|
|
94
|
-
};
|
|
95
|
-
}, [
|
|
96
|
-
settings?.audio.mic_default_on,
|
|
97
|
-
settings?.video.camera_default_on,
|
|
98
|
-
propInitialAudioEnabled,
|
|
99
|
-
propInitialVideoEnabled,
|
|
100
|
-
]);
|
|
101
|
-
|
|
102
|
-
// The main logic
|
|
103
|
-
// Enable or Disable the audio/video stream based on the initial state
|
|
104
|
-
useEffect(() => {
|
|
105
|
-
if (!call) {
|
|
106
|
-
return;
|
|
107
|
-
}
|
|
108
|
-
|
|
109
|
-
if (initialAudioEnabled !== undefined) {
|
|
110
|
-
if (initialAudioEnabled) {
|
|
111
|
-
call.microphone.enable();
|
|
112
|
-
} else {
|
|
113
|
-
call.microphone.disable();
|
|
114
|
-
}
|
|
115
|
-
}
|
|
116
|
-
|
|
117
|
-
// we wait until we receive the resolution settings from the backend
|
|
118
|
-
if (!targetResolutionSetting) {
|
|
119
|
-
return;
|
|
120
|
-
}
|
|
121
|
-
call.camera.selectTargetResolution(targetResolutionSetting);
|
|
122
|
-
if (initialVideoEnabled !== undefined) {
|
|
123
|
-
if (initialVideoEnabled) {
|
|
124
|
-
call.camera.enable();
|
|
125
|
-
} else {
|
|
126
|
-
call.camera.disable();
|
|
127
|
-
}
|
|
128
|
-
}
|
|
129
|
-
}, [call, initialAudioEnabled, initialVideoEnabled, targetResolutionSetting]);
|
|
130
|
-
|
|
131
|
-
return <>{children}</>;
|
|
132
|
-
};
|