@stream-io/video-react-native-sdk 0.0.1-alpha.403 → 0.0.1-alpha.404

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,16 @@
2
2
 
3
3
  This file was generated using [@jscutlery/semver](https://github.com/jscutlery/semver).
4
4
 
5
+ ## [0.0.1-alpha.404](https://github.com/GetStream/stream-video-js/compare/@stream-io/video-react-native-sdk-0.0.1-alpha.403...@stream-io/video-react-native-sdk-0.0.1-alpha.404) (2023-08-31)
6
+
7
+
8
+ ### Bug Fixes
9
+
10
+ * **react-native:** blank stream on join ([#1022](https://github.com/GetStream/stream-video-js/issues/1022)) ([d5a48f6](https://github.com/GetStream/stream-video-js/commit/d5a48f6e75bf4e1b5c0745b7f0b001fd0ac4b183))
11
+ * **react-native:** cleanup video streams on lobby view ([762b9bf](https://github.com/GetStream/stream-video-js/commit/762b9bfd390a7c90fc3eba381766317ea298745f))
12
+
13
+
14
+
5
15
  ## [0.0.1-alpha.403](https://github.com/GetStream/stream-video-js/compare/@stream-io/video-react-native-sdk-0.0.1-alpha.402...@stream-io/video-react-native-sdk-0.0.1-alpha.403) (2023-08-30)
6
16
 
7
17
 
@@ -8,13 +8,13 @@ const react_1 = __importDefault(require("react"));
8
8
  const react_native_1 = require("react-native");
9
9
  const icons_1 = require("../../../icons");
10
10
  const video_react_bindings_1 = require("@stream-io/video-react-bindings");
11
- const hooks_1 = require("../../../hooks");
12
11
  const Avatar_1 = require("../../utility/Avatar");
13
12
  const constants_1 = require("../../../constants");
14
13
  const react_native_webrtc_1 = require("@stream-io/react-native-webrtc");
15
14
  const LobbyControls_1 = require("../CallControls/LobbyControls");
16
15
  const JoinCallButton_1 = require("./JoinCallButton");
17
16
  const ThemeContext_1 = require("../../../contexts/ThemeContext");
17
+ const useCallMediaStreamCleanup_1 = require("../../../hooks/internal/useCallMediaStreamCleanup");
18
18
  /**
19
19
  * Components that acts as a pre-join view for the call. Where you can preview your video and audio. Check for call details and check for number of participants already in the call.
20
20
  */
@@ -23,12 +23,12 @@ const Lobby = ({ onJoinCallHandler, LobbyControls = LobbyControls_1.LobbyControl
23
23
  const connectedUser = (0, video_react_bindings_1.useConnectedUser)();
24
24
  const { useCameraState, useCallSession } = (0, video_react_bindings_1.useCallStateHooks)();
25
25
  const { direction, status: cameraStatus } = useCameraState();
26
- const localVideoStream = (0, hooks_1.useLocalVideoStream)();
27
- const isVideoAvailable = !!localVideoStream && cameraStatus === 'enabled';
28
26
  const call = (0, video_react_bindings_1.useCall)();
29
27
  const session = useCallSession();
30
28
  const { t } = (0, video_react_bindings_1.useI18n)();
29
+ const localVideoStream = call?.camera.state.mediaStream;
31
30
  const participantsCount = session?.participants.length;
31
+ (0, useCallMediaStreamCleanup_1.useCallMediaStreamCleanup)();
32
32
  const connectedUserAsParticipant = {
33
33
  userId: connectedUser?.id,
34
34
  image: connectedUser?.image,
@@ -60,7 +60,7 @@ const Lobby = ({ onJoinCallHandler, LobbyControls = LobbyControls_1.LobbyControl
60
60
  { backgroundColor: colors.disabled },
61
61
  lobby.videoContainer,
62
62
  ]}>
63
- {isVideoAvailable ? (<react_native_webrtc_1.RTCView mirror={direction === 'front'} streamURL={localVideoStream?.toURL()} objectFit="cover" style={react_native_1.StyleSheet.absoluteFillObject}/>) : (<react_native_1.View style={[styles.avatarContainer, lobby.avatarContainer]}>
63
+ {cameraStatus === 'enabled' ? (<react_native_webrtc_1.RTCView mirror={direction === 'front'} streamURL={localVideoStream?.toURL()} objectFit="cover" style={react_native_1.StyleSheet.absoluteFillObject}/>) : (<react_native_1.View style={[styles.avatarContainer, lobby.avatarContainer]}>
64
64
  <Avatar_1.Avatar participant={connectedUserAsParticipant}/>
65
65
  </react_native_1.View>)}
66
66
  <ParticipantStatus />
@@ -1 +1 @@
1
- {"version":3,"file":"Lobby.js","sourceRoot":"","sources":["../../../../../src/components/Call/Lobby/Lobby.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"Lobby.js","sourceRoot":"","sources":["../../../../../src/components/Call/Lobby/Lobby.tsx"],"names":[],"mappings":"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"}
@@ -7,13 +7,13 @@ exports.OutgoingCall = void 0;
7
7
  const react_1 = __importDefault(require("react"));
8
8
  const react_native_1 = require("react-native");
9
9
  const UserInfo_1 = require("./UserInfo");
10
- const useLocalVideoStream_1 = require("../../../hooks/useLocalVideoStream");
11
10
  const constants_1 = require("../../../constants");
12
11
  const video_react_bindings_1 = require("@stream-io/video-react-bindings");
13
12
  const react_native_webrtc_1 = require("@stream-io/react-native-webrtc");
14
13
  const ThemeContext_1 = require("../../../contexts/ThemeContext");
15
14
  const CallControls_1 = require("../CallControls");
16
15
  const CallTopView_1 = require("../CallTopView");
16
+ const useCallMediaStreamCleanup_1 = require("../../../hooks/internal/useCallMediaStreamCleanup");
17
17
  /**
18
18
  * An outgoing call with the callee's avatar, name, caller's camera in background, reject and mute buttons.
19
19
  * Used after the user has initiated a call.
@@ -52,9 +52,11 @@ const OutgoingCall = ({ CallTopView = CallTopView_1.CallTopView, OutgoingCallCon
52
52
  exports.OutgoingCall = OutgoingCall;
53
53
  const Background = () => {
54
54
  const { theme: { colors, outgoingCall }, } = (0, ThemeContext_1.useTheme)();
55
- const localVideoStream = (0, useLocalVideoStream_1.useLocalVideoStream)();
55
+ const call = (0, video_react_bindings_1.useCall)();
56
56
  const { useCameraState } = (0, video_react_bindings_1.useCallStateHooks)();
57
57
  const { status } = useCameraState();
58
+ const localVideoStream = call?.camera.state.mediaStream;
59
+ (0, useCallMediaStreamCleanup_1.useCallMediaStreamCleanup)();
58
60
  if (status === 'disabled' || !localVideoStream) {
59
61
  return (<react_native_1.View style={[
60
62
  styles.background,
@@ -1 +1 @@
1
- {"version":3,"file":"OutgoingCall.js","sourceRoot":"","sources":["../../../../../src/components/Call/RingingCallContent/OutgoingCall.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"OutgoingCall.js","sourceRoot":"","sources":["../../../../../src/components/Call/RingingCallContent/OutgoingCall.tsx"],"names":[],"mappings":";;;;;;AAAA,kDAA0B;AAC1B,+CAAsD;AACtD,yCAAsC;AACtC,kDAA6C;AAC7C,0EAIyC;AACzC,wEAAyD;AACzD,iEAA0D;AAC1D,kDAGyB;AACzB,gDAGwB;AACxB,iGAA8F;AAgB9F;;;GAGG;AACI,MAAM,YAAY,GAAG,CAAC,EAC3B,WAAW,GAAG,yBAAkB,EAChC,oBAAoB,GAAG,mCAA2B,GAChC,EAAE,EAAE;IACtB,MAAM,EACJ,KAAK,EAAE,EAAE,MAAM,EAAE,SAAS,EAAE,YAAY,EAAE,GAC3C,GAAG,IAAA,uBAAQ,GAAE,CAAC;IACf,MAAM,EAAE,CAAC,EAAE,GAAG,IAAA,8BAAO,GAAE,CAAC;IAExB,OAAO,CACL,EACE;MAAA,CAAC,mBAAI,CACH,KAAK,CAAC,CAAC;YACL,yBAAU,CAAC,YAAY;YACvB,MAAM,CAAC,SAAS;YAChB,YAAY,CAAC,SAAS;SACvB,CAAC,CAEF;QAAA,CAAC,WAAW,IAAI,CAAC,WAAW,CAAC,AAAD,EAAG,CAC/B;QAAA,CAAC,mBAAI,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,EAAE,YAAY,CAAC,OAAO,CAAC,CAAC,CAClD;UAAA,CAAC,mBAAQ,CAAC,AAAD,EACT;UAAA,CAAC,mBAAI,CACH,KAAK,CAAC,CAAC;YACL,MAAM,CAAC,WAAW;YAClB,EAAE,KAAK,EAAE,MAAM,CAAC,YAAY,EAAE;YAC9B,SAAS,CAAC,QAAQ;YAClB,YAAY,CAAC,WAAW;SACzB,CAAC,CAEF;YAAA,CAAC,CAAC,CAAC,YAAY,CAAC,CAClB;UAAA,EAAE,mBAAI,CACR;QAAA,EAAE,mBAAI,CACN;QAAA,CAAC,mBAAI,CACH,KAAK,CAAC,CAAC;YACL,MAAM,CAAC,oBAAoB;YAC3B,YAAY,CAAC,oBAAoB;SAClC,CAAC,CAEF;UAAA,CAAC,oBAAoB,IAAI,CAAC,oBAAoB,CAAC,AAAD,EAAG,CACnD;QAAA,EAAE,mBAAI,CACR;MAAA,EAAE,mBAAI,CACN;MAAA,CAAC,UAAU,CAAC,AAAD,EACb;IAAA,GAAG,CACJ,CAAC;AACJ,CAAC,CAAC;AA5CW,QAAA,YAAY,gBA4CvB;AAEF,MAAM,UAAU,GAAG,GAAG,EAAE;IACtB,MAAM,EACJ,KAAK,EAAE,EAAE,MAAM,EAAE,YAAY,EAAE,GAChC,GAAG,IAAA,uBAAQ,GAAE,CAAC;IACf,MAAM,IAAI,GAAG,IAAA,8BAAO,GAAE,CAAC;IACvB,MAAM,EAAE,cAAc,EAAE,GAAG,IAAA,wCAAiB,GAAE,CAAC;IAC/C,MAAM,EAAE,MAAM,EAAE,GAAG,cAAc,EAAE,CAAC;IACpC,MAAM,gBAAgB,GAAG,IAAI,EAAE,MAAM,CAAC,KAAK,CAAC,WAAW,CAAC;IAExD,IAAA,qDAAyB,GAAE,CAAC;IAE5B,IAAI,MAAM,KAAK,UAAU,IAAI,CAAC,gBAAgB,EAAE;QAC9C,OAAO,CACL,CAAC,mBAAI,CACH,KAAK,CAAC,CAAC;gBACL,MAAM,CAAC,UAAU;gBACjB,EAAE,eAAe,EAAE,MAAM,CAAC,WAAW,EAAE;gBACvC,YAAY,CAAC,UAAU;aACxB,CAAC,EACF,CACH,CAAC;KACH;IACD,OAAO,CACL,CAAC,mBAAI,CACH,KAAK,CAAC,CAAC;YACL,MAAM,CAAC,UAAU;YACjB,EAAE,eAAe,EAAE,MAAM,CAAC,WAAW,EAAE;YACvC,YAAY,CAAC,UAAU;SACxB,CAAC,CAEF;MAAA,CAAC,6BAAO,CACN,SAAS,CAAC,CAAC,gBAAgB,EAAE,KAAK,EAAE,CAAC,CACrC,MAAM,CAAC,CAAC,mBAAO,CAAC,OAAO,CAAC,CACxB,KAAK,CAAC,CAAC,yBAAU,CAAC,YAAY,CAAC,CAC/B,MAAM,CACN,SAAS,CAAC,OAAO,EAErB;IAAA,EAAE,mBAAI,CAAC,CACR,CAAC;AACJ,CAAC,CAAC;AAEF,MAAM,MAAM,GAAG,yBAAU,CAAC,MAAM,CAAC;IAC/B,UAAU,EAAE;QACV,IAAI,EAAE,CAAC;KACR;IACD,SAAS,EAAE;QACT,MAAM,EAAE,mBAAO,CAAC,SAAS;KAC1B;IACD,OAAO,EAAE;QACP,UAAU,EAAE,CAAC;KACd;IACD,WAAW,EAAE;QACX,SAAS,EAAE,EAAE;QACb,SAAS,EAAE,QAAQ;KACpB;IACD,oBAAoB,EAAE;QACpB,QAAQ,EAAE,UAAU;QACpB,MAAM,EAAE,EAAE;QACV,IAAI,EAAE,CAAC;QACP,KAAK,EAAE,CAAC;KACT;CACF,CAAC,CAAC"}
@@ -1,4 +1,3 @@
1
- export * from './useLocalVideoStream';
2
1
  export * from './useIncallManager';
3
2
  export * from './usePermissionRequest';
4
3
  export * from './usePermissionNotification';
@@ -14,7 +14,6 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
14
14
  for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
15
15
  };
16
16
  Object.defineProperty(exports, "__esModule", { value: true });
17
- __exportStar(require("./useLocalVideoStream"), exports);
18
17
  __exportStar(require("./useIncallManager"), exports);
19
18
  __exportStar(require("./usePermissionRequest"), exports);
20
19
  __exportStar(require("./usePermissionNotification"), exports);
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/hooks/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,wDAAsC;AACtC,qDAAmC;AACnC,yDAAuC;AACvC,8DAA4C;AAC5C,yCAAuB;AACvB,kEAAgD"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/hooks/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,qDAAmC;AACnC,yDAAuC;AACvC,8DAA4C;AAC5C,yCAAuB;AACvB,kEAAgD"}
@@ -0,0 +1,4 @@
1
+ /**
2
+ * This hook is meant to be used in Lobby view or equivalent.
3
+ */
4
+ export declare const useCallMediaStreamCleanup: () => void;
@@ -0,0 +1,27 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.useCallMediaStreamCleanup = void 0;
4
+ const video_client_1 = require("@stream-io/video-client");
5
+ const video_react_bindings_1 = require("@stream-io/video-react-bindings");
6
+ const react_1 = require("react");
7
+ /**
8
+ * This hook is meant to be used in Lobby view or equivalent.
9
+ */
10
+ const useCallMediaStreamCleanup = () => {
11
+ const call = (0, video_react_bindings_1.useCall)();
12
+ // keeping a reference of call to handle cleanup media stream only on unmount
13
+ const callRef = (0, react_1.useRef)(call);
14
+ callRef.current = call;
15
+ (0, react_1.useEffect)(() => {
16
+ return () => {
17
+ if (!(callRef.current?.state.callingState === video_client_1.CallingState.JOINED ||
18
+ callRef.current?.state.callingState === video_client_1.CallingState.JOINING)) {
19
+ // we cleanup media stream only if call is not joined or joining
20
+ const mediaStream = callRef.current?.camera.state.mediaStream;
21
+ (0, video_client_1.disposeOfMediaStream)(mediaStream);
22
+ }
23
+ };
24
+ }, []);
25
+ };
26
+ exports.useCallMediaStreamCleanup = useCallMediaStreamCleanup;
27
+ //# sourceMappingURL=useCallMediaStreamCleanup.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useCallMediaStreamCleanup.js","sourceRoot":"","sources":["../../../../src/hooks/internal/useCallMediaStreamCleanup.ts"],"names":[],"mappings":";;;AACA,0DAA6E;AAC7E,0EAA0D;AAC1D,iCAA0C;AAE1C;;GAEG;AACI,MAAM,yBAAyB,GAAG,GAAG,EAAE;IAC5C,MAAM,IAAI,GAAG,IAAA,8BAAO,GAAE,CAAC;IACvB,6EAA6E;IAC7E,MAAM,OAAO,GAAG,IAAA,cAAM,EAAC,IAAI,CAAC,CAAC;IAC7B,OAAO,CAAC,OAAO,GAAG,IAAI,CAAC;IAEvB,IAAA,iBAAS,EAAC,GAAG,EAAE;QACb,OAAO,GAAG,EAAE;YACV,IACE,CAAC,CACC,OAAO,CAAC,OAAO,EAAE,KAAK,CAAC,YAAY,KAAK,2BAAY,CAAC,MAAM;gBAC3D,OAAO,CAAC,OAAO,EAAE,KAAK,CAAC,YAAY,KAAK,2BAAY,CAAC,OAAO,CAC7D,EACD;gBACA,gEAAgE;gBAChE,MAAM,WAAW,GAAG,OAAO,CAAC,OAAO,EAAE,MAAM,CAAC,KAAK,CAAC,WAErC,CAAC;gBACd,IAAA,mCAAoB,EAAC,WAAW,CAAC,CAAC;aACnC;QACH,CAAC,CAAC;IACJ,CAAC,EAAE,EAAE,CAAC,CAAC;AACT,CAAC,CAAC;AAtBW,QAAA,yBAAyB,6BAsBpC"}
package/dist/version.d.ts CHANGED
@@ -1 +1 @@
1
- export declare const version = "0.0.1-alpha.403";
1
+ export declare const version = "0.0.1-alpha.404";
package/dist/version.js CHANGED
@@ -1,5 +1,5 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.version = void 0;
4
- exports.version = '0.0.1-alpha.403';
4
+ exports.version = '0.0.1-alpha.404';
5
5
  //# sourceMappingURL=version.js.map
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@stream-io/video-react-native-sdk",
3
- "version": "0.0.1-alpha.403",
3
+ "version": "0.0.1-alpha.404",
4
4
  "packageManager": "yarn@3.2.4",
5
5
  "main": "./dist/index.js",
6
6
  "types": "./dist/index.d.ts",
@@ -30,8 +30,8 @@
30
30
  ],
31
31
  "dependencies": {
32
32
  "@stream-io/i18n": "^0.1.1",
33
- "@stream-io/video-client": "^0.3.10",
34
- "@stream-io/video-react-bindings": "^0.2.11",
33
+ "@stream-io/video-client": "^0.3.11",
34
+ "@stream-io/video-react-bindings": "^0.2.12",
35
35
  "intl-pluralrules": "2.0.1",
36
36
  "lodash.merge": "^4.6.2",
37
37
  "react-native-url-polyfill": "2.0.0",
@@ -7,7 +7,6 @@ import {
7
7
  useConnectedUser,
8
8
  useI18n,
9
9
  } from '@stream-io/video-react-bindings';
10
- import { useLocalVideoStream } from '../../../hooks';
11
10
  import { Avatar } from '../../utility/Avatar';
12
11
  import { StreamVideoParticipant } from '@stream-io/video-client';
13
12
  import { LOBBY_VIDEO_VIEW_HEIGHT } from '../../../constants';
@@ -18,6 +17,7 @@ import {
18
17
  JoinCallButtonProps,
19
18
  } from './JoinCallButton';
20
19
  import { useTheme } from '../../../contexts/ThemeContext';
20
+ import { useCallMediaStreamCleanup } from '../../../hooks/internal/useCallMediaStreamCleanup';
21
21
 
22
22
  /**
23
23
  * Props for the Lobby Component.
@@ -51,13 +51,14 @@ export const Lobby = ({
51
51
  const connectedUser = useConnectedUser();
52
52
  const { useCameraState, useCallSession } = useCallStateHooks();
53
53
  const { direction, status: cameraStatus } = useCameraState();
54
- const localVideoStream = useLocalVideoStream();
55
- const isVideoAvailable = !!localVideoStream && cameraStatus === 'enabled';
56
54
  const call = useCall();
57
55
  const session = useCallSession();
58
56
  const { t } = useI18n();
57
+ const localVideoStream = call?.camera.state.mediaStream;
59
58
  const participantsCount = session?.participants.length;
60
59
 
60
+ useCallMediaStreamCleanup();
61
+
61
62
  const connectedUserAsParticipant = {
62
63
  userId: connectedUser?.id,
63
64
  image: connectedUser?.image,
@@ -100,7 +101,7 @@ export const Lobby = ({
100
101
  lobby.videoContainer,
101
102
  ]}
102
103
  >
103
- {isVideoAvailable ? (
104
+ {cameraStatus === 'enabled' ? (
104
105
  <RTCView
105
106
  mirror={direction === 'front'}
106
107
  streamURL={localVideoStream?.toURL()}
@@ -1,9 +1,12 @@
1
1
  import React from 'react';
2
2
  import { StyleSheet, Text, View } from 'react-native';
3
3
  import { UserInfo } from './UserInfo';
4
- import { useLocalVideoStream } from '../../../hooks/useLocalVideoStream';
5
4
  import { Z_INDEX } from '../../../constants';
6
- import { useCallStateHooks, useI18n } from '@stream-io/video-react-bindings';
5
+ import {
6
+ useCall,
7
+ useCallStateHooks,
8
+ useI18n,
9
+ } from '@stream-io/video-react-bindings';
7
10
  import { RTCView } from '@stream-io/react-native-webrtc';
8
11
  import { useTheme } from '../../../contexts/ThemeContext';
9
12
  import {
@@ -14,6 +17,7 @@ import {
14
17
  CallTopView as DefaultCallTopView,
15
18
  CallTopViewProps,
16
19
  } from '../CallTopView';
20
+ import { useCallMediaStreamCleanup } from '../../../hooks/internal/useCallMediaStreamCleanup';
17
21
 
18
22
  /**
19
23
  * Props for the OutgoingCall Component.
@@ -83,10 +87,12 @@ const Background = () => {
83
87
  const {
84
88
  theme: { colors, outgoingCall },
85
89
  } = useTheme();
86
-
87
- const localVideoStream = useLocalVideoStream();
90
+ const call = useCall();
88
91
  const { useCameraState } = useCallStateHooks();
89
92
  const { status } = useCameraState();
93
+ const localVideoStream = call?.camera.state.mediaStream;
94
+
95
+ useCallMediaStreamCleanup();
90
96
 
91
97
  if (status === 'disabled' || !localVideoStream) {
92
98
  return (
@@ -1,4 +1,3 @@
1
- export * from './useLocalVideoStream';
2
1
  export * from './useIncallManager';
3
2
  export * from './usePermissionRequest';
4
3
  export * from './usePermissionNotification';
@@ -0,0 +1,31 @@
1
+ import { MediaStream } from '@stream-io/react-native-webrtc';
2
+ import { CallingState, disposeOfMediaStream } from '@stream-io/video-client';
3
+ import { useCall } from '@stream-io/video-react-bindings';
4
+ import { useEffect, useRef } from 'react';
5
+
6
+ /**
7
+ * This hook is meant to be used in Lobby view or equivalent.
8
+ */
9
+ export const useCallMediaStreamCleanup = () => {
10
+ const call = useCall();
11
+ // keeping a reference of call to handle cleanup media stream only on unmount
12
+ const callRef = useRef(call);
13
+ callRef.current = call;
14
+
15
+ useEffect(() => {
16
+ return () => {
17
+ if (
18
+ !(
19
+ callRef.current?.state.callingState === CallingState.JOINED ||
20
+ callRef.current?.state.callingState === CallingState.JOINING
21
+ )
22
+ ) {
23
+ // we cleanup media stream only if call is not joined or joining
24
+ const mediaStream = callRef.current?.camera.state.mediaStream as
25
+ | MediaStream
26
+ | undefined;
27
+ disposeOfMediaStream(mediaStream);
28
+ }
29
+ };
30
+ }, []);
31
+ };
@@ -1,7 +0,0 @@
1
- import { MediaStream } from '@stream-io/react-native-webrtc';
2
- /**
3
- * A hook which provides the device's local video stream.
4
- *
5
- * @category Device Management
6
- */
7
- export declare const useLocalVideoStream: () => MediaStream | undefined;
@@ -1,68 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.useLocalVideoStream = void 0;
4
- const react_1 = require("react");
5
- const video_client_1 = require("@stream-io/video-client");
6
- const contexts_1 = require("../contexts");
7
- const hooks_1 = require("../utils/hooks");
8
- const video_react_bindings_1 = require("@stream-io/video-react-bindings");
9
- /**
10
- * A hook which provides the device's local video stream.
11
- *
12
- * @category Device Management
13
- */
14
- const useLocalVideoStream = () => {
15
- const [videoStream, setVideoStream] = (0, react_1.useState)(undefined);
16
- const { useCameraState } = (0, video_react_bindings_1.useCallStateHooks)();
17
- const { status: cameraStatus } = useCameraState();
18
- const currentVideoDeviceId = (0, contexts_1.useStreamVideoStoreValue)((store) => store.currentVideoDevice)?.deviceId;
19
- // Pause/Resume video stream tracks when app goes to background/foreground
20
- // To save on CPU resources
21
- (0, hooks_1.useAppStateListener)(() => {
22
- videoStream?.getVideoTracks().forEach((track) => {
23
- track.enabled = true;
24
- });
25
- }, () => {
26
- videoStream?.getVideoTracks().forEach((track) => {
27
- track.enabled = false;
28
- });
29
- });
30
- (0, react_1.useEffect)(() => {
31
- let mediaStream;
32
- let interrupted = false;
33
- const loadVideoStream = async () => {
34
- // If there is no video device, we don't need to load a video stream.
35
- if (!currentVideoDeviceId) {
36
- return null;
37
- }
38
- const _mediaStream = await (0, video_client_1.getVideoStream)({
39
- deviceId: currentVideoDeviceId,
40
- });
41
- if (interrupted) {
42
- // device changed while we were loading the video stream, so dispose of it
43
- (0, video_client_1.disposeOfMediaStream)(_mediaStream);
44
- return;
45
- }
46
- mediaStream = _mediaStream;
47
- setVideoStream(_mediaStream);
48
- };
49
- if (!cameraStatus || cameraStatus === 'disabled') {
50
- if (mediaStream) {
51
- (0, video_client_1.disposeOfMediaStream)(mediaStream);
52
- setVideoStream(undefined);
53
- }
54
- }
55
- else {
56
- loadVideoStream();
57
- }
58
- return () => {
59
- interrupted = true;
60
- if (mediaStream) {
61
- (0, video_client_1.disposeOfMediaStream)(mediaStream);
62
- }
63
- };
64
- }, [currentVideoDeviceId, cameraStatus]);
65
- return videoStream;
66
- };
67
- exports.useLocalVideoStream = useLocalVideoStream;
68
- //# sourceMappingURL=useLocalVideoStream.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"useLocalVideoStream.js","sourceRoot":"","sources":["../../../src/hooks/useLocalVideoStream.ts"],"names":[],"mappings":";;;AAAA,iCAA4C;AAC5C,0DAA+E;AAE/E,0CAAuD;AACvD,0CAAqD;AACrD,0EAAoE;AAEpE;;;;GAIG;AACI,MAAM,mBAAmB,GAAG,GAAG,EAAE;IACtC,MAAM,CAAC,WAAW,EAAE,cAAc,CAAC,GAAG,IAAA,gBAAQ,EAC5C,SAAS,CACV,CAAC;IACF,MAAM,EAAE,cAAc,EAAE,GAAG,IAAA,wCAAiB,GAAE,CAAC;IAC/C,MAAM,EAAE,MAAM,EAAE,YAAY,EAAE,GAAG,cAAc,EAAE,CAAC;IAClD,MAAM,oBAAoB,GAAG,IAAA,mCAAwB,EACnD,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,kBAAkB,CACpC,EAAE,QAAQ,CAAC;IAEZ,0EAA0E;IAC1E,2BAA2B;IAC3B,IAAA,2BAAmB,EACjB,GAAG,EAAE;QACH,WAAW,EAAE,cAAc,EAAE,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,EAAE;YAC9C,KAAK,CAAC,OAAO,GAAG,IAAI,CAAC;QACvB,CAAC,CAAC,CAAC;IACL,CAAC,EACD,GAAG,EAAE;QACH,WAAW,EAAE,cAAc,EAAE,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,EAAE;YAC9C,KAAK,CAAC,OAAO,GAAG,KAAK,CAAC;QACxB,CAAC,CAAC,CAAC;IACL,CAAC,CACF,CAAC;IAEF,IAAA,iBAAS,EAAC,GAAG,EAAE;QACb,IAAI,WAAoC,CAAC;QACzC,IAAI,WAAW,GAAG,KAAK,CAAC;QACxB,MAAM,eAAe,GAAG,KAAK,IAAI,EAAE;YACjC,qEAAqE;YACrE,IAAI,CAAC,oBAAoB,EAAE;gBACzB,OAAO,IAAI,CAAC;aACb;YAED,MAAM,YAAY,GAAG,MAAM,IAAA,6BAAc,EAAC;gBACxC,QAAQ,EAAE,oBAAoB;aAC/B,CAAC,CAAC;YACH,IAAI,WAAW,EAAE;gBACf,0EAA0E;gBAC1E,IAAA,mCAAoB,EAAC,YAAY,CAAC,CAAC;gBACnC,OAAO;aACR;YACD,WAAW,GAAG,YAAY,CAAC;YAC3B,cAAc,CAAC,YAAY,CAAC,CAAC;QAC/B,CAAC,CAAC;QAEF,IAAI,CAAC,YAAY,IAAI,YAAY,KAAK,UAAU,EAAE;YAChD,IAAI,WAAW,EAAE;gBACf,IAAA,mCAAoB,EAAC,WAAW,CAAC,CAAC;gBAClC,cAAc,CAAC,SAAS,CAAC,CAAC;aAC3B;SACF;aAAM;YACL,eAAe,EAAE,CAAC;SACnB;QAED,OAAO,GAAG,EAAE;YACV,WAAW,GAAG,IAAI,CAAC;YACnB,IAAI,WAAW,EAAE;gBACf,IAAA,mCAAoB,EAAC,WAAW,CAAC,CAAC;aACnC;QACH,CAAC,CAAC;IACJ,CAAC,EAAE,CAAC,oBAAoB,EAAE,YAAY,CAAC,CAAC,CAAC;IAEzC,OAAO,WAAW,CAAC;AACrB,CAAC,CAAC;AAhEW,QAAA,mBAAmB,uBAgE9B"}
@@ -1,77 +0,0 @@
1
- import { useEffect, useState } from 'react';
2
- import { disposeOfMediaStream, getVideoStream } from '@stream-io/video-client';
3
- import { MediaStream } from '@stream-io/react-native-webrtc';
4
- import { useStreamVideoStoreValue } from '../contexts';
5
- import { useAppStateListener } from '../utils/hooks';
6
- import { useCallStateHooks } from '@stream-io/video-react-bindings';
7
-
8
- /**
9
- * A hook which provides the device's local video stream.
10
- *
11
- * @category Device Management
12
- */
13
- export const useLocalVideoStream = () => {
14
- const [videoStream, setVideoStream] = useState<MediaStream | undefined>(
15
- undefined,
16
- );
17
- const { useCameraState } = useCallStateHooks();
18
- const { status: cameraStatus } = useCameraState();
19
- const currentVideoDeviceId = useStreamVideoStoreValue(
20
- (store) => store.currentVideoDevice,
21
- )?.deviceId;
22
-
23
- // Pause/Resume video stream tracks when app goes to background/foreground
24
- // To save on CPU resources
25
- useAppStateListener(
26
- () => {
27
- videoStream?.getVideoTracks().forEach((track) => {
28
- track.enabled = true;
29
- });
30
- },
31
- () => {
32
- videoStream?.getVideoTracks().forEach((track) => {
33
- track.enabled = false;
34
- });
35
- },
36
- );
37
-
38
- useEffect(() => {
39
- let mediaStream: MediaStream | undefined;
40
- let interrupted = false;
41
- const loadVideoStream = async () => {
42
- // If there is no video device, we don't need to load a video stream.
43
- if (!currentVideoDeviceId) {
44
- return null;
45
- }
46
-
47
- const _mediaStream = await getVideoStream({
48
- deviceId: currentVideoDeviceId,
49
- });
50
- if (interrupted) {
51
- // device changed while we were loading the video stream, so dispose of it
52
- disposeOfMediaStream(_mediaStream);
53
- return;
54
- }
55
- mediaStream = _mediaStream;
56
- setVideoStream(_mediaStream);
57
- };
58
-
59
- if (!cameraStatus || cameraStatus === 'disabled') {
60
- if (mediaStream) {
61
- disposeOfMediaStream(mediaStream);
62
- setVideoStream(undefined);
63
- }
64
- } else {
65
- loadVideoStream();
66
- }
67
-
68
- return () => {
69
- interrupted = true;
70
- if (mediaStream) {
71
- disposeOfMediaStream(mediaStream);
72
- }
73
- };
74
- }, [currentVideoDeviceId, cameraStatus]);
75
-
76
- return videoStream;
77
- };