@stream-io/video-react-native-sdk 0.0.1-alpha.274 → 0.0.1-alpha.276

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 CHANGED
@@ -2,6 +2,19 @@
2
2
 
3
3
  This file was generated using [@jscutlery/semver](https://github.com/jscutlery/semver).
4
4
 
5
+ ## [0.0.1-alpha.276](https://github.com/GetStream/stream-video-js/compare/@stream-io/video-react-native-sdk-0.0.1-alpha.275...@stream-io/video-react-native-sdk-0.0.1-alpha.276) (2023-07-12)
6
+
7
+
8
+ ### Bug Fixes
9
+
10
+ * **react-native:** camera facing mode mirroring issue ([#775](https://github.com/GetStream/stream-video-js/issues/775)) ([92eb545](https://github.com/GetStream/stream-video-js/commit/92eb545609fb6722636716d064d8108e8849d3be))
11
+
12
+
13
+
14
+ ## [0.0.1-alpha.275](https://github.com/GetStream/stream-video-js/compare/@stream-io/video-react-native-sdk-0.0.1-alpha.274...@stream-io/video-react-native-sdk-0.0.1-alpha.275) (2023-07-12)
15
+
16
+
17
+
5
18
  ## [0.0.1-alpha.274](https://github.com/GetStream/stream-video-js/compare/@stream-io/video-react-native-sdk-0.0.1-alpha.273...@stream-io/video-react-native-sdk-0.0.1-alpha.274) (2023-07-12)
6
19
 
7
20
 
@@ -89,6 +89,7 @@ const UnreadBadeCountIndicator = ({ count, }) => {
89
89
  };
90
90
  const styles = react_native_1.StyleSheet.create({
91
91
  container: {
92
+ padding: theme_1.theme.padding.sm,
92
93
  flexDirection: 'row',
93
94
  justifyContent: 'space-between',
94
95
  zIndex: constants_1.Z_INDEX.IN_FRONT,
@@ -1 +1 @@
1
- {"version":3,"file":"CallControlsView.js","sourceRoot":"","sources":["../../../../src/components/call/CallControlsView.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"CallControlsView.js","sourceRoot":"","sources":["../../../../src/components/call/CallControlsView.tsx"],"names":[],"mappings":"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"}
@@ -34,6 +34,7 @@ const icons_1 = require("../../icons");
34
34
  const A11yLabels_1 = require("../../constants/A11yLabels");
35
35
  const Avatar_1 = require("../utility/Avatar");
36
36
  const constants_1 = require("../../constants");
37
+ const hooks_1 = require("../../utils/hooks");
37
38
  const MediaStreamManagement_1 = require("../../providers/MediaStreamManagement");
38
39
  const ParticipantReaction_1 = require("./internal/ParticipantReaction");
39
40
  /**
@@ -47,6 +48,8 @@ const LocalParticipantView = (props) => {
47
48
  const { style = containerStyle } = props;
48
49
  const localParticipant = (0, video_react_bindings_1.useLocalParticipant)();
49
50
  const { isCameraOnFrontFacingMode } = (0, MediaStreamManagement_1.useMediaStreamManagement)();
51
+ // it takes a few milliseconds for the camera stream to actually switch
52
+ const debouncedCameraOnFrontFacingMode = (0, hooks_1.useDebouncedValue)(isCameraOnFrontFacingMode, 300);
50
53
  const pan = (0, react_1.useRef)(new react_native_1.Animated.ValueXY()).current;
51
54
  const panResponder = (0, react_1.useRef)(react_native_1.PanResponder.create({
52
55
  onMoveShouldSetPanResponder: () => true,
@@ -61,12 +64,15 @@ const LocalParticipantView = (props) => {
61
64
  return null;
62
65
  }
63
66
  const isVideoMuted = !localParticipant.publishedTracks.includes(video_client_1.SfuModels.TrackType.VIDEO);
67
+ // when camera is switching show a blank stream
68
+ //otherwise the camera stream will be shown in wrong mirror state for a few milliseconds
69
+ const showBlankStream = isCameraOnFrontFacingMode !== debouncedCameraOnFrontFacingMode;
64
70
  if (layout === 'fullscreen') {
65
71
  return (<react_native_1.View accessibilityLabel={A11yLabels_1.A11yComponents.LOCAL_PARTICIPANT_FULLSCREEN} style={style}>
66
72
  <react_native_1.View style={styles.topView}>
67
73
  <ParticipantReaction_1.ParticipantReaction reaction={localParticipant.reaction} sessionId={localParticipant.sessionId}/>
68
74
  </react_native_1.View>
69
- {isVideoMuted ? (<Avatar_1.Avatar participant={localParticipant}/>) : (<VideoRenderer_1.VideoRenderer mirror={isCameraOnFrontFacingMode} mediaStream={localParticipant.videoStream} style={styles.videoStreamFullScreen} zOrder={zOrder}/>)}
75
+ {isVideoMuted ? (<Avatar_1.Avatar participant={localParticipant}/>) : showBlankStream ? (<react_native_1.View style={styles.videoStreamFullScreen}/>) : (<VideoRenderer_1.VideoRenderer mirror={debouncedCameraOnFrontFacingMode} mediaStream={localParticipant.videoStream} style={styles.videoStreamFullScreen} zOrder={zOrder}/>)}
70
76
  </react_native_1.View>);
71
77
  }
72
78
  return (<react_native_1.Animated.View accessibilityLabel={A11yLabels_1.A11yComponents.LOCAL_PARTICIPANT} style={{
@@ -80,7 +86,7 @@ const LocalParticipantView = (props) => {
80
86
  </react_native_1.View>
81
87
  {isVideoMuted ? (<react_native_1.View style={theme_1.theme.icon.md}>
82
88
  <icons_1.VideoSlash color={theme_1.theme.light.static_white}/>
83
- </react_native_1.View>) : (<VideoRenderer_1.VideoRenderer mirror={isCameraOnFrontFacingMode} mediaStream={localParticipant.videoStream} style={styles.videoStream} zOrder={zOrder}/>)}
89
+ </react_native_1.View>) : showBlankStream ? (<react_native_1.View style={styles.videoStream}/>) : (<VideoRenderer_1.VideoRenderer mirror={debouncedCameraOnFrontFacingMode} mediaStream={localParticipant.videoStream} style={styles.videoStream} zOrder={zOrder}/>)}
84
90
  </react_native_1.View>
85
91
  </react_native_1.Animated.View>);
86
92
  };
@@ -117,6 +123,7 @@ const styles = react_native_1.StyleSheet.create({
117
123
  flex: 1,
118
124
  justifyContent: 'center',
119
125
  alignItems: 'center',
126
+ backgroundColor: theme_1.theme.light.disabled,
120
127
  },
121
128
  avatarContainer: {
122
129
  flex: 1,
@@ -1 +1 @@
1
- {"version":3,"file":"LocalParticipantView.js","sourceRoot":"","sources":["../../../../src/components/participants/LocalParticipantView.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"LocalParticipantView.js","sourceRoot":"","sources":["../../../../src/components/participants/LocalParticipantView.tsx"],"names":[],"mappings":"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"}
@@ -1,6 +1,7 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.usePermissionNotification = void 0;
4
+ const video_client_1 = require("@stream-io/video-client");
4
5
  const video_react_bindings_1 = require("@stream-io/video-react-bindings");
5
6
  const react_1 = require("react");
6
7
  const react_native_1 = require("react-native");
@@ -9,6 +10,7 @@ const usePermissionNotification = (props) => {
9
10
  const { permission, messageApproved, messageRevoked } = props;
10
11
  const hasPermission = (0, video_react_bindings_1.useHasPermissions)(permission);
11
12
  const previousHasPermission = (0, usePrevious_1.usePrevious)(hasPermission);
13
+ const callingState = (0, video_react_bindings_1.useCallCallingState)();
12
14
  const showGrantedNotification = (0, react_1.useCallback)(() => {
13
15
  react_native_1.Alert.alert(messageApproved);
14
16
  }, [messageApproved]);
@@ -16,6 +18,11 @@ const usePermissionNotification = (props) => {
16
18
  react_native_1.Alert.alert(messageRevoked);
17
19
  }, [messageRevoked]);
18
20
  (0, react_1.useEffect)(() => {
21
+ // Permission state is not reliable before the call is joined,
22
+ // hence we only check whether to show the notification only when the call is actively joined.
23
+ if (callingState !== video_client_1.CallingState.JOINED) {
24
+ return;
25
+ }
19
26
  if (hasPermission && !previousHasPermission) {
20
27
  showGrantedNotification();
21
28
  }
@@ -23,6 +30,7 @@ const usePermissionNotification = (props) => {
23
30
  showRevokedNotification();
24
31
  }
25
32
  }, [
33
+ callingState,
26
34
  hasPermission,
27
35
  previousHasPermission,
28
36
  showGrantedNotification,
@@ -1 +1 @@
1
- {"version":3,"file":"usePermissionNotification.js","sourceRoot":"","sources":["../../../src/hooks/usePermissionNotification.tsx"],"names":[],"mappings":";;;AACA,0EAAoE;AACpE,iCAA+C;AAC/C,+CAAqC;AACrC,4DAAyD;AAqBlD,MAAM,yBAAyB,GAAG,CACvC,KAAkC,EAClC,EAAE;IACF,MAAM,EAAE,UAAU,EAAE,eAAe,EAAE,cAAc,EAAE,GAAG,KAAK,CAAC;IAC9D,MAAM,aAAa,GAAG,IAAA,wCAAiB,EAAC,UAAU,CAAC,CAAC;IACpD,MAAM,qBAAqB,GAAG,IAAA,yBAAW,EAAC,aAAa,CAAC,CAAC;IAEzD,MAAM,uBAAuB,GAAG,IAAA,mBAAW,EAAC,GAAG,EAAE;QAC/C,oBAAK,CAAC,KAAK,CAAC,eAAe,CAAC,CAAC;IAC/B,CAAC,EAAE,CAAC,eAAe,CAAC,CAAC,CAAC;IAEtB,MAAM,uBAAuB,GAAG,IAAA,mBAAW,EAAC,GAAG,EAAE;QAC/C,oBAAK,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC;IAC9B,CAAC,EAAE,CAAC,cAAc,CAAC,CAAC,CAAC;IAErB,IAAA,iBAAS,EAAC,GAAG,EAAE;QACb,IAAI,aAAa,IAAI,CAAC,qBAAqB,EAAE;YAC3C,uBAAuB,EAAE,CAAC;SAC3B;aAAM,IAAI,CAAC,aAAa,IAAI,qBAAqB,EAAE;YAClD,uBAAuB,EAAE,CAAC;SAC3B;IACH,CAAC,EAAE;QACD,aAAa;QACb,qBAAqB;QACrB,uBAAuB;QACvB,uBAAuB;KACxB,CAAC,CAAC;AACL,CAAC,CAAC;AA3BW,QAAA,yBAAyB,6BA2BpC"}
1
+ {"version":3,"file":"usePermissionNotification.js","sourceRoot":"","sources":["../../../src/hooks/usePermissionNotification.tsx"],"names":[],"mappings":";;;AAAA,0DAAsE;AACtE,0EAGyC;AACzC,iCAA+C;AAC/C,+CAAqC;AACrC,4DAAyD;AAqBlD,MAAM,yBAAyB,GAAG,CACvC,KAAkC,EAClC,EAAE;IACF,MAAM,EAAE,UAAU,EAAE,eAAe,EAAE,cAAc,EAAE,GAAG,KAAK,CAAC;IAC9D,MAAM,aAAa,GAAG,IAAA,wCAAiB,EAAC,UAAU,CAAC,CAAC;IACpD,MAAM,qBAAqB,GAAG,IAAA,yBAAW,EAAC,aAAa,CAAC,CAAC;IACzD,MAAM,YAAY,GAAG,IAAA,0CAAmB,GAAE,CAAC;IAE3C,MAAM,uBAAuB,GAAG,IAAA,mBAAW,EAAC,GAAG,EAAE;QAC/C,oBAAK,CAAC,KAAK,CAAC,eAAe,CAAC,CAAC;IAC/B,CAAC,EAAE,CAAC,eAAe,CAAC,CAAC,CAAC;IAEtB,MAAM,uBAAuB,GAAG,IAAA,mBAAW,EAAC,GAAG,EAAE;QAC/C,oBAAK,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC;IAC9B,CAAC,EAAE,CAAC,cAAc,CAAC,CAAC,CAAC;IAErB,IAAA,iBAAS,EAAC,GAAG,EAAE;QACb,8DAA8D;QAC9D,8FAA8F;QAC9F,IAAI,YAAY,KAAK,2BAAY,CAAC,MAAM,EAAE;YACxC,OAAO;SACR;QACD,IAAI,aAAa,IAAI,CAAC,qBAAqB,EAAE;YAC3C,uBAAuB,EAAE,CAAC;SAC3B;aAAM,IAAI,CAAC,aAAa,IAAI,qBAAqB,EAAE;YAClD,uBAAuB,EAAE,CAAC;SAC3B;IACH,CAAC,EAAE;QACD,YAAY;QACZ,aAAa;QACb,qBAAqB;QACrB,uBAAuB;QACvB,uBAAuB;KACxB,CAAC,CAAC;AACL,CAAC,CAAC;AAlCW,QAAA,yBAAyB,6BAkCpC"}
@@ -47,9 +47,8 @@ const MediaStreamManagement = ({ children }) => {
47
47
  const call = (0, video_react_bindings_1.useCall)();
48
48
  const callingState = (0, video_react_bindings_1.useCallCallingState)();
49
49
  const videoDevices = (0, contexts_1.useStreamVideoStoreValue)((store) => store.videoDevices);
50
- const currentVideoDevice = (0, contexts_1.useStreamVideoStoreValue)((store) => store.currentVideoDevice);
51
- const setState = (0, contexts_1.useStreamVideoStoreSetState)();
52
- const [isCameraOnFrontFacingMode, setIsCameraOnFrontFacingMode] = (0, react_1.useState)(currentVideoDevice?.facing === 'front' ?? false);
50
+ const localVideoStream = (0, video_react_bindings_1.useLocalParticipant)()?.videoStream;
51
+ const [isCameraOnFrontFacingMode, setIsCameraOnFrontFacingMode] = (0, react_1.useState)(true);
53
52
  const [initAudioEnabled, setInitialAudioEnabled] = (0, react_1.useState)(permissions_1.isMicPermissionGranted$.getValue());
54
53
  const [initVideoEnabled, setInitialVideoEnabled] = (0, react_1.useState)(permissions_1.isCameraPermissionGranted$.getValue());
55
54
  const publishVideoStream = (0, useVideoPublisher_1.useVideoPublisher)({
@@ -91,23 +90,16 @@ const MediaStreamManagement = ({ children }) => {
91
90
  return !prev;
92
91
  }), []);
93
92
  const toggleCameraFacingMode = (0, react_1.useCallback)(() => {
94
- const videoDevice = videoDevices.find((device) => {
95
- // Check to only switch between video devices
96
- if (device.kind !== 'videoinput') {
97
- return;
93
+ const canSwitchCamera = videoDevices.length > 1;
94
+ if (canSwitchCamera && localVideoStream) {
95
+ const tracks = localVideoStream.getVideoTracks();
96
+ const videoTrack = tracks[0];
97
+ if (videoTrack) {
98
+ videoTrack._switchCamera();
99
+ setIsCameraOnFrontFacingMode((prev) => !prev);
98
100
  }
99
- return !isCameraOnFrontFacingMode
100
- ? device.facing === 'front'
101
- : device.facing === 'environment';
102
- });
103
- if (!videoDevice) {
104
- return;
105
101
  }
106
- setIsCameraOnFrontFacingMode((prev) => !prev);
107
- setState({
108
- currentVideoDevice: videoDevice,
109
- });
110
- }, [isCameraOnFrontFacingMode, videoDevices, setState]);
102
+ }, [localVideoStream, videoDevices.length]);
111
103
  const contextValue = (0, react_1.useMemo)(() => {
112
104
  return {
113
105
  initialAudioEnabled: initAudioEnabled,
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/providers/MediaStreamManagement/index.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/providers/MediaStreamManagement/index.tsx"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -21,8 +21,8 @@
21
21
  ],
22
22
  "dependencies": {
23
23
  "@stream-io/i18n": "^0.0.8",
24
- "@stream-io/video-client": "^0.0.42",
25
- "@stream-io/video-react-bindings": "^0.0.44"
24
+ "@stream-io/video-client": "^0.0.43",
25
+ "@stream-io/video-react-bindings": "^0.0.45"
26
26
  },
27
27
  "peerDependencies": {
28
28
  "@notifee/react-native": ">=7.7.0",
@@ -84,5 +84,5 @@
84
84
  "typedoc-plugin-markdown": "^3.15.3",
85
85
  "typescript": "^4.9.5"
86
86
  },
87
- "version": "0.0.1-alpha.274"
87
+ "version": "0.0.1-alpha.276"
88
88
  }
@@ -157,6 +157,7 @@ const UnreadBadeCountIndicator = ({
157
157
 
158
158
  const styles = StyleSheet.create({
159
159
  container: {
160
+ padding: theme.padding.sm,
160
161
  flexDirection: 'row',
161
162
  justifyContent: 'space-between',
162
163
  zIndex: Z_INDEX.IN_FRONT,
@@ -15,6 +15,7 @@ import { VideoSlash } from '../../icons';
15
15
  import { A11yComponents } from '../../constants/A11yLabels';
16
16
  import { Avatar } from '../utility/Avatar';
17
17
  import { LOCAL_VIDEO_VIEW_STYLE, Z_INDEX } from '../../constants';
18
+ import { useDebouncedValue } from '../../utils/hooks';
18
19
  import { useMediaStreamManagement } from '../../providers/MediaStreamManagement';
19
20
  import { ParticipantReaction } from './internal/ParticipantReaction';
20
21
 
@@ -58,6 +59,11 @@ export const LocalParticipantView = (props: LocalParticipantViewProps) => {
58
59
  const { style = containerStyle } = props;
59
60
  const localParticipant = useLocalParticipant();
60
61
  const { isCameraOnFrontFacingMode } = useMediaStreamManagement();
62
+ // it takes a few milliseconds for the camera stream to actually switch
63
+ const debouncedCameraOnFrontFacingMode = useDebouncedValue(
64
+ isCameraOnFrontFacingMode,
65
+ 300,
66
+ );
61
67
  const pan = useRef(new Animated.ValueXY()).current;
62
68
  const panResponder = useRef(
63
69
  PanResponder.create({
@@ -79,6 +85,11 @@ export const LocalParticipantView = (props: LocalParticipantViewProps) => {
79
85
  SfuModels.TrackType.VIDEO,
80
86
  );
81
87
 
88
+ // when camera is switching show a blank stream
89
+ //otherwise the camera stream will be shown in wrong mirror state for a few milliseconds
90
+ const showBlankStream =
91
+ isCameraOnFrontFacingMode !== debouncedCameraOnFrontFacingMode;
92
+
82
93
  if (layout === 'fullscreen') {
83
94
  return (
84
95
  <View
@@ -93,9 +104,11 @@ export const LocalParticipantView = (props: LocalParticipantViewProps) => {
93
104
  </View>
94
105
  {isVideoMuted ? (
95
106
  <Avatar participant={localParticipant} />
107
+ ) : showBlankStream ? (
108
+ <View style={styles.videoStreamFullScreen} />
96
109
  ) : (
97
110
  <VideoRenderer
98
- mirror={isCameraOnFrontFacingMode}
111
+ mirror={debouncedCameraOnFrontFacingMode}
99
112
  mediaStream={localParticipant.videoStream}
100
113
  style={styles.videoStreamFullScreen}
101
114
  zOrder={zOrder}
@@ -126,9 +139,11 @@ export const LocalParticipantView = (props: LocalParticipantViewProps) => {
126
139
  <View style={theme.icon.md}>
127
140
  <VideoSlash color={theme.light.static_white} />
128
141
  </View>
142
+ ) : showBlankStream ? (
143
+ <View style={styles.videoStream} />
129
144
  ) : (
130
145
  <VideoRenderer
131
- mirror={isCameraOnFrontFacingMode}
146
+ mirror={debouncedCameraOnFrontFacingMode}
132
147
  mediaStream={localParticipant.videoStream}
133
148
  style={styles.videoStream}
134
149
  zOrder={zOrder}
@@ -171,6 +186,7 @@ const styles = StyleSheet.create({
171
186
  flex: 1,
172
187
  justifyContent: 'center',
173
188
  alignItems: 'center',
189
+ backgroundColor: theme.light.disabled,
174
190
  },
175
191
  avatarContainer: {
176
192
  flex: 1,
@@ -1,5 +1,8 @@
1
- import { OwnCapability } from '@stream-io/video-client';
2
- import { useHasPermissions } from '@stream-io/video-react-bindings';
1
+ import { CallingState, OwnCapability } from '@stream-io/video-client';
2
+ import {
3
+ useCallCallingState,
4
+ useHasPermissions,
5
+ } from '@stream-io/video-react-bindings';
3
6
  import { useCallback, useEffect } from 'react';
4
7
  import { Alert } from 'react-native';
5
8
  import { usePrevious } from '../utils/hooks/usePrevious';
@@ -29,6 +32,7 @@ export const usePermissionNotification = (
29
32
  const { permission, messageApproved, messageRevoked } = props;
30
33
  const hasPermission = useHasPermissions(permission);
31
34
  const previousHasPermission = usePrevious(hasPermission);
35
+ const callingState = useCallCallingState();
32
36
 
33
37
  const showGrantedNotification = useCallback(() => {
34
38
  Alert.alert(messageApproved);
@@ -39,12 +43,18 @@ export const usePermissionNotification = (
39
43
  }, [messageRevoked]);
40
44
 
41
45
  useEffect(() => {
46
+ // Permission state is not reliable before the call is joined,
47
+ // hence we only check whether to show the notification only when the call is actively joined.
48
+ if (callingState !== CallingState.JOINED) {
49
+ return;
50
+ }
42
51
  if (hasPermission && !previousHasPermission) {
43
52
  showGrantedNotification();
44
53
  } else if (!hasPermission && previousHasPermission) {
45
54
  showRevokedNotification();
46
55
  }
47
56
  }, [
57
+ callingState,
48
58
  hasPermission,
49
59
  previousHasPermission,
50
60
  showGrantedNotification,
@@ -7,7 +7,11 @@ import React, {
7
7
  useState,
8
8
  } from 'react';
9
9
  import { CallingState, SfuModels } from '@stream-io/video-client';
10
- import { useCall, useCallCallingState } from '@stream-io/video-react-bindings';
10
+ import {
11
+ useCall,
12
+ useCallCallingState,
13
+ useLocalParticipant,
14
+ } from '@stream-io/video-react-bindings';
11
15
  import {
12
16
  isMicPermissionGranted$,
13
17
  isCameraPermissionGranted$,
@@ -15,10 +19,7 @@ import {
15
19
  import { useAudioPublisher } from './useAudioPublisher';
16
20
  import { useVideoPublisher } from './useVideoPublisher';
17
21
  import { Alert } from 'react-native';
18
- import {
19
- useStreamVideoStoreSetState,
20
- useStreamVideoStoreValue,
21
- } from '../../contexts';
22
+ import { useStreamVideoStoreValue } from '../../contexts';
22
23
 
23
24
  /**
24
25
  * API to control device enablement, device selection and media stream access for a call.
@@ -86,14 +87,10 @@ export const MediaStreamManagement = ({ children }: PropsWithChildren<{}>) => {
86
87
  const call = useCall();
87
88
  const callingState = useCallCallingState();
88
89
  const videoDevices = useStreamVideoStoreValue((store) => store.videoDevices);
89
- const currentVideoDevice = useStreamVideoStoreValue(
90
- (store) => store.currentVideoDevice,
91
- );
92
- const setState = useStreamVideoStoreSetState();
90
+ const localVideoStream = useLocalParticipant()?.videoStream;
93
91
 
94
- const [isCameraOnFrontFacingMode, setIsCameraOnFrontFacingMode] = useState(
95
- currentVideoDevice?.facing === 'front' ?? false,
96
- );
92
+ const [isCameraOnFrontFacingMode, setIsCameraOnFrontFacingMode] =
93
+ useState(true);
97
94
 
98
95
  const [initAudioEnabled, setInitialAudioEnabled] = useState<boolean>(
99
96
  isMicPermissionGranted$.getValue(),
@@ -158,23 +155,16 @@ export const MediaStreamManagement = ({ children }: PropsWithChildren<{}>) => {
158
155
  );
159
156
 
160
157
  const toggleCameraFacingMode = useCallback(() => {
161
- const videoDevice = videoDevices.find((device) => {
162
- // Check to only switch between video devices
163
- if (device.kind !== 'videoinput') {
164
- return;
158
+ const canSwitchCamera = videoDevices.length > 1;
159
+ if (canSwitchCamera && localVideoStream) {
160
+ const tracks = localVideoStream.getVideoTracks();
161
+ const videoTrack = tracks[0];
162
+ if (videoTrack) {
163
+ videoTrack._switchCamera();
164
+ setIsCameraOnFrontFacingMode((prev) => !prev);
165
165
  }
166
- return !isCameraOnFrontFacingMode
167
- ? device.facing === 'front'
168
- : device.facing === 'environment';
169
- });
170
- if (!videoDevice) {
171
- return;
172
166
  }
173
- setIsCameraOnFrontFacingMode((prev) => !prev);
174
- setState({
175
- currentVideoDevice: videoDevice,
176
- });
177
- }, [isCameraOnFrontFacingMode, videoDevices, setState]);
167
+ }, [localVideoStream, videoDevices.length]);
178
168
 
179
169
  const contextValue = useMemo(() => {
180
170
  return {