@stream-io/video-react-native-sdk 1.20.1 → 1.20.3

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.
Files changed (35) hide show
  1. package/CHANGELOG.md +20 -0
  2. package/dist/commonjs/components/Call/CallContent/RTCViewPipIOS.js +37 -10
  3. package/dist/commonjs/components/Call/CallContent/RTCViewPipIOS.js.map +1 -1
  4. package/dist/commonjs/components/Call/CallContent/RTCViewPipNative.js +13 -1
  5. package/dist/commonjs/components/Call/CallContent/RTCViewPipNative.js.map +1 -1
  6. package/dist/commonjs/hooks/useScreenShareButton.js +1 -1
  7. package/dist/commonjs/hooks/useScreenShareButton.js.map +1 -1
  8. package/dist/commonjs/hooks/useTrackDimensions.js +20 -7
  9. package/dist/commonjs/hooks/useTrackDimensions.js.map +1 -1
  10. package/dist/commonjs/version.js +1 -1
  11. package/dist/module/components/Call/CallContent/RTCViewPipIOS.js +39 -12
  12. package/dist/module/components/Call/CallContent/RTCViewPipIOS.js.map +1 -1
  13. package/dist/module/components/Call/CallContent/RTCViewPipNative.js +12 -1
  14. package/dist/module/components/Call/CallContent/RTCViewPipNative.js.map +1 -1
  15. package/dist/module/hooks/useScreenShareButton.js +1 -1
  16. package/dist/module/hooks/useScreenShareButton.js.map +1 -1
  17. package/dist/module/hooks/useTrackDimensions.js +20 -7
  18. package/dist/module/hooks/useTrackDimensions.js.map +1 -1
  19. package/dist/module/version.js +1 -1
  20. package/dist/typescript/components/Call/CallContent/RTCViewPipIOS.d.ts.map +1 -1
  21. package/dist/typescript/components/Call/CallContent/RTCViewPipNative.d.ts +1 -0
  22. package/dist/typescript/components/Call/CallContent/RTCViewPipNative.d.ts.map +1 -1
  23. package/dist/typescript/hooks/useTrackDimensions.d.ts.map +1 -1
  24. package/dist/typescript/version.d.ts +1 -1
  25. package/ios/PictureInPicture/StreamPictureInPictureController.swift +4 -0
  26. package/ios/RTCViewPip.swift +26 -22
  27. package/ios/RTCViewPipManager.mm +1 -0
  28. package/ios/RTCViewPipManager.swift +43 -23
  29. package/ios/StreamVideoReactNative-Bridging-Header.h +1 -0
  30. package/package.json +7 -7
  31. package/src/components/Call/CallContent/RTCViewPipIOS.tsx +62 -13
  32. package/src/components/Call/CallContent/RTCViewPipNative.tsx +20 -5
  33. package/src/hooks/useScreenShareButton.ts +1 -1
  34. package/src/hooks/useTrackDimensions.ts +16 -5
  35. package/src/version.ts +1 -1
package/CHANGELOG.md CHANGED
@@ -2,6 +2,26 @@
2
2
 
3
3
  This file was generated using [@jscutlery/semver](https://github.com/jscutlery/semver).
4
4
 
5
+ ## [1.20.3](https://github.com/GetStream/stream-video-js/compare/@stream-io/video-react-native-sdk-1.20.2...@stream-io/video-react-native-sdk-1.20.3) (2025-08-05)
6
+
7
+ ### Bug Fixes
8
+
9
+ - handle undefined participant in iOS pip ([#1878](https://github.com/GetStream/stream-video-js/issues/1878)) ([69c4694](https://github.com/GetStream/stream-video-js/commit/69c4694196e13afc628150b033a48b227640bda4)), closes [#1876](https://github.com/GetStream/stream-video-js/issues/1876)
10
+
11
+ ## [1.20.2](https://github.com/GetStream/stream-video-js/compare/@stream-io/video-react-native-sdk-1.20.1...@stream-io/video-react-native-sdk-1.20.2) (2025-08-05)
12
+
13
+ ### Dependency Updates
14
+
15
+ - `@stream-io/noise-cancellation-react-native` updated to version `0.2.1`
16
+ - `@stream-io/video-filters-react-native` updated to version `0.6.1`
17
+ - `@stream-io/video-client` updated to version `1.27.2`
18
+ - `@stream-io/video-react-bindings` updated to version `1.7.11`
19
+
20
+ ### Bug Fixes
21
+
22
+ - iOS PiP cleanup ([#1870](https://github.com/GetStream/stream-video-js/issues/1870)) ([88c87f4](https://github.com/GetStream/stream-video-js/commit/88c87f4c9d9b66bb5beef0464863efde720761dd)), closes [#1854](https://github.com/GetStream/stream-video-js/issues/1854)
23
+ - support setting iOS pip window sizes ([#1876](https://github.com/GetStream/stream-video-js/issues/1876)) ([2c553c9](https://github.com/GetStream/stream-video-js/commit/2c553c967b4ceedaf7209c1e98ab4c8025c84ca5))
24
+
5
25
  ## [1.20.1](https://github.com/GetStream/stream-video-js/compare/@stream-io/video-react-native-sdk-1.20.0...@stream-io/video-react-native-sdk-1.20.1) (2025-08-01)
6
26
 
7
27
  ### Bug Fixes
@@ -11,6 +11,7 @@ var _reactNative = require("react-native");
11
11
  var _RTCViewPipNative = require("./RTCViewPipNative");
12
12
  var _hooks = require("../../../utils/hooks");
13
13
  var _shouldDisableIOSLocalVideoOnBackground = require("../../../utils/internal/shouldDisableIOSLocalVideoOnBackground");
14
+ var _useTrackDimensions = require("../../../hooks/useTrackDimensions");
14
15
  function _interopRequireWildcard(e, t) { if ("function" == typeof WeakMap) var r = new WeakMap(), n = new WeakMap(); return (_interopRequireWildcard = function (e, t) { if (!t && e && e.__esModule) return e; var o, i, f = { __proto__: null, default: e }; if (null === e || "object" != typeof e && "function" != typeof e) return f; if (o = t ? n : r) { if (o.has(e)) return o.get(e); o.set(e, f); } for (const t in e) "default" !== t && {}.hasOwnProperty.call(e, t) && ((i = (o = Object.defineProperty) && Object.getOwnPropertyDescriptor(e, t)) && (i.get || i.set) ? o(f, t, i) : f[t] = e[t]); return f; })(e, t); }
15
16
  const RTCViewPipIOS = exports.RTCViewPipIOS = /*#__PURE__*/_react.default.memo(props => {
16
17
  const {
@@ -66,22 +67,48 @@ const RTCViewPipIOS = exports.RTCViewPipIOS = /*#__PURE__*/_react.default.memo(p
66
67
  subscription?.unsubscribe();
67
68
  };
68
69
  }, [call]);
70
+ const onDimensionsUpdated = (0, _react.useCallback)((width, height) => {
71
+ const node = (0, _reactNative.findNodeHandle)(nativeRef.current);
72
+ if (node !== null && width > 0 && height > 0) {
73
+ (0, _RTCViewPipNative.onNativeDimensionsUpdated)(node, width, height);
74
+ }
75
+ }, []);
76
+ const {
77
+ videoStream,
78
+ screenShareStream
79
+ } = participantInSpotlight || {};
80
+ const isScreenSharing = participantInSpotlight ? (0, _videoClient.hasScreenShare)(participantInSpotlight) : false;
81
+ const videoStreamToRender = isScreenSharing ? screenShareStream : videoStream;
69
82
  const streamURL = (0, _react.useMemo)(() => {
70
- if (!participantInSpotlight) {
83
+ if (!videoStreamToRender) {
71
84
  return undefined;
72
85
  }
73
- const {
74
- videoStream,
75
- screenShareStream
76
- } = participantInSpotlight;
77
- const isScreenSharing = (0, _videoClient.hasScreenShare)(participantInSpotlight);
78
- const videoStreamToRender = isScreenSharing ? screenShareStream : videoStream;
79
86
  return videoStreamToRender?.toURL();
80
- }, [participantInSpotlight]);
81
- return /*#__PURE__*/_react.default.createElement(_RTCViewPipNative.RTCViewPipNative, {
87
+ }, [videoStreamToRender]);
88
+ return /*#__PURE__*/_react.default.createElement(_react.default.Fragment, null, /*#__PURE__*/_react.default.createElement(_RTCViewPipNative.RTCViewPipNative, {
82
89
  streamURL: streamURL,
83
90
  ref: nativeRef
84
- });
91
+ }), participantInSpotlight && /*#__PURE__*/_react.default.createElement(DimensionsUpdatedRenderless, {
92
+ participant: participantInSpotlight,
93
+ trackType: isScreenSharing ? 'screenShareTrack' : 'videoTrack',
94
+ onDimensionsUpdated: onDimensionsUpdated,
95
+ key: streamURL
96
+ }));
97
+ });
98
+ const DimensionsUpdatedRenderless = /*#__PURE__*/_react.default.memo(({
99
+ participant,
100
+ trackType,
101
+ onDimensionsUpdated
102
+ }) => {
103
+ const {
104
+ width,
105
+ height
106
+ } = (0, _useTrackDimensions.useTrackDimensions)(participant, trackType);
107
+ (0, _react.useEffect)(() => {
108
+ onDimensionsUpdated(width, height);
109
+ }, [width, height, onDimensionsUpdated]);
110
+ return null;
85
111
  });
112
+ DimensionsUpdatedRenderless.displayName = 'DimensionsUpdatedRenderless';
86
113
  RTCViewPipIOS.displayName = 'RTCViewPipIOS';
87
114
  //# sourceMappingURL=RTCViewPipIOS.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["_videoClient","require","_videoReactBindings","_react","_interopRequireWildcard","_reactNative","_RTCViewPipNative","_hooks","_shouldDisableIOSLocalVideoOnBackground","e","t","WeakMap","r","n","__esModule","o","i","f","__proto__","default","has","get","set","hasOwnProperty","call","Object","defineProperty","getOwnPropertyDescriptor","RTCViewPipIOS","exports","React","memo","props","includeLocalParticipantVideo","useCall","useParticipants","useCallStateHooks","_allParticipants","sortBy","speakerLayoutSortPreset","allParticipants","useDebouncedValue","dominantSpeaker","dominantSpeaker2","filter","participant","isLocalParticipant","participantInSpotlight","useEffect","shouldDisableIOSLocalVideoOnBackgroundRef","current","nativeRef","useRef","callClosedInvokedOnce","onCallClosed","node","findNodeHandle","onNativeCallClosed","unsubFunc","on","getLogger","subscription","state","callingState$","subscribe","CallingState","LEFT","unsubscribe","streamURL","useMemo","undefined","videoStream","screenShareStream","isScreenSharing","hasScreenShare","videoStreamToRender","toURL","createElement","RTCViewPipNative","ref","displayName"],"sourceRoot":"../../../../../src","sources":["components/Call/CallContent/RTCViewPipIOS.tsx"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["_videoClient","require","_videoReactBindings","_react","_interopRequireWildcard","_reactNative","_RTCViewPipNative","_hooks","_shouldDisableIOSLocalVideoOnBackground","_useTrackDimensions","e","t","WeakMap","r","n","__esModule","o","i","f","__proto__","default","has","get","set","hasOwnProperty","call","Object","defineProperty","getOwnPropertyDescriptor","RTCViewPipIOS","exports","React","memo","props","includeLocalParticipantVideo","useCall","useParticipants","useCallStateHooks","_allParticipants","sortBy","speakerLayoutSortPreset","allParticipants","useDebouncedValue","dominantSpeaker","dominantSpeaker2","filter","participant","isLocalParticipant","participantInSpotlight","useEffect","shouldDisableIOSLocalVideoOnBackgroundRef","current","nativeRef","useRef","callClosedInvokedOnce","onCallClosed","node","findNodeHandle","onNativeCallClosed","unsubFunc","on","getLogger","subscription","state","callingState$","subscribe","CallingState","LEFT","unsubscribe","onDimensionsUpdated","useCallback","width","height","onNativeDimensionsUpdated","videoStream","screenShareStream","isScreenSharing","hasScreenShare","videoStreamToRender","streamURL","useMemo","undefined","toURL","createElement","Fragment","RTCViewPipNative","ref","DimensionsUpdatedRenderless","trackType","key","useTrackDimensions","displayName"],"sourceRoot":"../../../../../src","sources":["components/Call/CallContent/RTCViewPipIOS.tsx"],"mappings":"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","ignoreList":[]}
@@ -5,6 +5,7 @@ Object.defineProperty(exports, "__esModule", {
5
5
  });
6
6
  exports.RTCViewPipNative = void 0;
7
7
  exports.onNativeCallClosed = onNativeCallClosed;
8
+ exports.onNativeDimensionsUpdated = onNativeDimensionsUpdated;
8
9
  var _videoClient = require("@stream-io/video-client");
9
10
  var _react = _interopRequireDefault(require("react"));
10
11
  var _reactNative = require("react-native");
@@ -13,7 +14,18 @@ const COMPONENT_NAME = 'RTCViewPip';
13
14
  const NativeComponent = (0, _reactNative.requireNativeComponent)(COMPONENT_NAME);
14
15
  function onNativeCallClosed(reactTag) {
15
16
  (0, _videoClient.getLogger)(['RTCViewPipNative'])('debug', 'onNativeCallClosed');
16
- _reactNative.UIManager.dispatchViewManagerCommand(reactTag, _reactNative.UIManager.getViewManagerConfig(COMPONENT_NAME).Commands.onCallClosed, []);
17
+ const commandId = _reactNative.UIManager.getViewManagerConfig(COMPONENT_NAME).Commands.onCallClosed;
18
+ if (!commandId) return;
19
+ _reactNative.UIManager.dispatchViewManagerCommand(reactTag, commandId, []);
20
+ }
21
+ function onNativeDimensionsUpdated(reactTag, width, height) {
22
+ (0, _videoClient.getLogger)(['RTCViewPipNative'])('debug', 'onNativeDimensionsUpdated', {
23
+ width,
24
+ height
25
+ });
26
+ const commandId = _reactNative.UIManager.getViewManagerConfig(COMPONENT_NAME).Commands.setPreferredContentSize;
27
+ if (!commandId) return;
28
+ _reactNative.UIManager.dispatchViewManagerCommand(reactTag, commandId, [width, height]);
17
29
  }
18
30
 
19
31
  /** Wrapper for the native view
@@ -1 +1 @@
1
- {"version":3,"names":["_videoClient","require","_react","_interopRequireDefault","_reactNative","e","__esModule","default","COMPONENT_NAME","NativeComponent","requireNativeComponent","onNativeCallClosed","reactTag","getLogger","UIManager","dispatchViewManagerCommand","getViewManagerConfig","Commands","onCallClosed","RTCViewPipNative","exports","React","memo","forwardRef","props","ref","Platform","OS","createElement","style","StyleSheet","absoluteFill","pointerEvents","streamURL"],"sourceRoot":"../../../../../src","sources":["components/Call/CallContent/RTCViewPipNative.tsx"],"mappings":";;;;;;;AAAA,IAAAA,YAAA,GAAAC,OAAA;AACA,IAAAC,MAAA,GAAAC,sBAAA,CAAAF,OAAA;AACA,IAAAG,YAAA,GAAAH,OAAA;AAMsB,SAAAE,uBAAAE,CAAA,WAAAA,CAAA,IAAAA,CAAA,CAAAC,UAAA,GAAAD,CAAA,KAAAE,OAAA,EAAAF,CAAA;AAEtB,MAAMG,cAAc,GAAG,YAAY;AAMnC,MAAMC,eAAqD,GACzD,IAAAC,mCAAsB,EAACF,cAAc,CAAC;AAEjC,SAASG,kBAAkBA,CAACC,QAAgB,EAAE;EACnD,IAAAC,sBAAS,EAAC,CAAC,kBAAkB,CAAC,CAAC,CAAC,OAAO,EAAE,oBAAoB,CAAC;EAC9DC,sBAAS,CAACC,0BAA0B,CAClCH,QAAQ,EACRE,sBAAS,CAACE,oBAAoB,CAACR,cAAc,CAAC,CAACS,QAAQ,CAACC,YAAY,EACpE,EACF,CAAC;AACH;;AAEA;AACA;AACO,MAAMC,gBAAgB,GAAAC,OAAA,CAAAD,gBAAA,gBAAGE,cAAK,CAACC,IAAI,cACxCD,cAAK,CAACE,UAAU,CAKd,CAACC,KAAK,EAAEC,GAAG,KAAK;EAChB,IAAIC,qBAAQ,CAACC,EAAE,KAAK,KAAK,EAAE,OAAO,IAAI;EAEtC,oBACEzB,MAAA,CAAAK,OAAA,CAAAqB,aAAA,CAACnB,eAAe;IACdoB,KAAK,EAAEC,uBAAU,CAACC,YAAa;IAC/BC,aAAa,EAAE;IACf;IAAA;IACAC,SAAS,EAAET,KAAK,CAACS;IACjB;IAAA;IACAR,GAAG,EAAEA;EAAI,CACV,CAAC;AAEN,CAAC,CACH,CAAC","ignoreList":[]}
1
+ {"version":3,"names":["_videoClient","require","_react","_interopRequireDefault","_reactNative","e","__esModule","default","COMPONENT_NAME","NativeComponent","requireNativeComponent","onNativeCallClosed","reactTag","getLogger","commandId","UIManager","getViewManagerConfig","Commands","onCallClosed","dispatchViewManagerCommand","onNativeDimensionsUpdated","width","height","setPreferredContentSize","RTCViewPipNative","exports","React","memo","forwardRef","props","ref","Platform","OS","createElement","style","StyleSheet","absoluteFill","pointerEvents","streamURL"],"sourceRoot":"../../../../../src","sources":["components/Call/CallContent/RTCViewPipNative.tsx"],"mappings":";;;;;;;;AAAA,IAAAA,YAAA,GAAAC,OAAA;AACA,IAAAC,MAAA,GAAAC,sBAAA,CAAAF,OAAA;AACA,IAAAG,YAAA,GAAAH,OAAA;AAMsB,SAAAE,uBAAAE,CAAA,WAAAA,CAAA,IAAAA,CAAA,CAAAC,UAAA,GAAAD,CAAA,KAAAE,OAAA,EAAAF,CAAA;AAEtB,MAAMG,cAAc,GAAG,YAAY;AAMnC,MAAMC,eAAqD,GACzD,IAAAC,mCAAsB,EAACF,cAAc,CAAC;AAEjC,SAASG,kBAAkBA,CAACC,QAAgB,EAAE;EACnD,IAAAC,sBAAS,EAAC,CAAC,kBAAkB,CAAC,CAAC,CAAC,OAAO,EAAE,oBAAoB,CAAC;EAC9D,MAAMC,SAAS,GACbC,sBAAS,CAACC,oBAAoB,CAACR,cAAc,CAAC,CAACS,QAAQ,CAACC,YAAY;EACtE,IAAI,CAACJ,SAAS,EAAE;EAChBC,sBAAS,CAACI,0BAA0B,CAACP,QAAQ,EAAEE,SAAS,EAAE,EAAE,CAAC;AAC/D;AAEO,SAASM,yBAAyBA,CACvCR,QAAgB,EAChBS,KAAa,EACbC,MAAc,EACd;EACA,IAAAT,sBAAS,EAAC,CAAC,kBAAkB,CAAC,CAAC,CAAC,OAAO,EAAE,2BAA2B,EAAE;IACpEQ,KAAK;IACLC;EACF,CAAC,CAAC;EACF,MAAMR,SAAS,GACbC,sBAAS,CAACC,oBAAoB,CAACR,cAAc,CAAC,CAACS,QAAQ,CACpDM,uBAAuB;EAC5B,IAAI,CAACT,SAAS,EAAE;EAChBC,sBAAS,CAACI,0BAA0B,CAACP,QAAQ,EAAEE,SAAS,EAAE,CAACO,KAAK,EAAEC,MAAM,CAAC,CAAC;AAC5E;;AAEA;AACA;AACO,MAAME,gBAAgB,GAAAC,OAAA,CAAAD,gBAAA,gBAAGE,cAAK,CAACC,IAAI,cACxCD,cAAK,CAACE,UAAU,CAKd,CAACC,KAAK,EAAEC,GAAG,KAAK;EAChB,IAAIC,qBAAQ,CAACC,EAAE,KAAK,KAAK,EAAE,OAAO,IAAI;EAEtC,oBACE9B,MAAA,CAAAK,OAAA,CAAA0B,aAAA,CAACxB,eAAe;IACdyB,KAAK,EAAEC,uBAAU,CAACC,YAAa;IAC/BC,aAAa,EAAE;IACf;IAAA;IACAC,SAAS,EAAET,KAAK,CAACS;IACjB;IAAA;IACAR,GAAG,EAAEA;EAAI,CACV,CAAC;AAEN,CAAC,CACH,CAAC","ignoreList":[]}
@@ -11,7 +11,7 @@ var _reactNative = require("react-native");
11
11
  var _hooks = require("../utils/hooks");
12
12
  var _useIsIosScreenshareBroadcastStarted = require("./useIsIosScreenshareBroadcastStarted");
13
13
  // ios >= 14.0 or android - platform restrictions
14
- const CanDeviceScreenShare = _reactNative.Platform.OS === 'ios' && Number.parseInt(_reactNative.Platform.Version.split('.')[0], 10) >= 14 || _reactNative.Platform.OS === 'android';
14
+ const CanDeviceScreenShare = _reactNative.Platform.OS === 'ios' && Number.parseInt(_reactNative.Platform.Version?.split('.')[0] ?? '0', 10) >= 14 || _reactNative.Platform.OS === 'android';
15
15
  const useScreenShareButton = (screenCapturePickerViewiOSRef, onScreenShareStartedHandler, onScreenShareStoppedHandler, onMissingScreenShareStreamPermission) => {
16
16
  const call = (0, _videoReactBindings.useCall)();
17
17
  const {
@@ -1 +1 @@
1
- {"version":3,"names":["_videoClient","require","_videoReactBindings","_react","_reactNative","_hooks","_useIsIosScreenshareBroadcastStarted","CanDeviceScreenShare","Platform","OS","Number","parseInt","Version","split","useScreenShareButton","screenCapturePickerViewiOSRef","onScreenShareStartedHandler","onScreenShareStoppedHandler","onMissingScreenShareStreamPermission","call","useCall","useLocalParticipant","useCallSettings","useOwnCapabilities","useCallStateHooks","callSettings","ownCapabilities","hasScreenSharingPermissions","includes","OwnCapability","SCREENSHARE","isScreenSharingEnabledInCall","screensharing","enabled","onScreenShareStartedHandlerRef","useRef","current","onScreenShareStoppedHandlerRef","iosScreenShareStartedFromSystem","useIsIosScreenshareBroadcastStarted","prevIosScreenShareStartedFromSystem","usePrevious","localParticipant","hasPublishedScreenShare","hasScreenShare","useEffect","screenShare","enable","disable","onPress","logger","getLogger","reactTag","findNodeHandle","NativeModules","ScreenCapturePickerViewManager","show","error","undefined","exports"],"sourceRoot":"../../../src","sources":["hooks/useScreenShareButton.ts"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["_videoClient","require","_videoReactBindings","_react","_reactNative","_hooks","_useIsIosScreenshareBroadcastStarted","CanDeviceScreenShare","Platform","OS","Number","parseInt","Version","split","useScreenShareButton","screenCapturePickerViewiOSRef","onScreenShareStartedHandler","onScreenShareStoppedHandler","onMissingScreenShareStreamPermission","call","useCall","useLocalParticipant","useCallSettings","useOwnCapabilities","useCallStateHooks","callSettings","ownCapabilities","hasScreenSharingPermissions","includes","OwnCapability","SCREENSHARE","isScreenSharingEnabledInCall","screensharing","enabled","onScreenShareStartedHandlerRef","useRef","current","onScreenShareStoppedHandlerRef","iosScreenShareStartedFromSystem","useIsIosScreenshareBroadcastStarted","prevIosScreenShareStartedFromSystem","usePrevious","localParticipant","hasPublishedScreenShare","hasScreenShare","useEffect","screenShare","enable","disable","onPress","logger","getLogger","reactTag","findNodeHandle","NativeModules","ScreenCapturePickerViewManager","show","error","undefined","exports"],"sourceRoot":"../../../src","sources":["hooks/useScreenShareButton.ts"],"mappings":"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","ignoreList":[]}
@@ -33,21 +33,34 @@ function useTrackDimensions(participant, trackType) {
33
33
 
34
34
  // Set up videoTrackDimensionChanged event listener for more direct dimension updates
35
35
  (0, _react.useEffect)(() => {
36
- if (!trackId || !_reactNative.NativeModules.WebRTCModule) return;
36
+ if (!trackId || !track) return;
37
37
  const handleVideoTrackDimensionChanged = eventData => {
38
38
  // Only handle events for this specific participant
39
39
  if (eventData.trackId === trackId) {
40
40
  setTrackDimensions(prev => {
41
- if (prev.width !== eventData.width || prev.height !== eventData.height) {
42
- return {
43
- width: eventData.width,
44
- height: eventData.height
45
- };
41
+ if (prev.width === eventData.width && prev.height === eventData.height) {
42
+ return prev;
46
43
  }
47
- return prev;
44
+ return {
45
+ width: eventData.width,
46
+ height: eventData.height
47
+ };
48
48
  });
49
49
  }
50
50
  };
51
+ const {
52
+ width,
53
+ height
54
+ } = track.getSettings();
55
+ setTrackDimensions(prev => {
56
+ if (prev.width === width && prev.height === height) {
57
+ return prev;
58
+ }
59
+ return {
60
+ width: width ?? 0,
61
+ height: height ?? 0
62
+ };
63
+ });
51
64
  const subscription = webRTCEventEmitter.addListener('videoTrackDimensionChanged', handleVideoTrackDimensionChanged);
52
65
  return () => {
53
66
  subscription.remove();
@@ -1 +1 @@
1
- {"version":3,"names":["_react","require","_reactNative","webRTCEventEmitter","NativeEventEmitter","NativeModules","WebRTCModule","useTrackDimensions","participant","trackType","videoStream","screenShareStream","stream","track","getVideoTracks","trackId","id","trackDimensions","setTrackDimensions","useState","settings","getSettings","width","height","useEffect","handleVideoTrackDimensionChanged","eventData","prev","subscription","addListener","remove"],"sourceRoot":"../../../src","sources":["hooks/useTrackDimensions.ts"],"mappings":";;;;;;AAIA,IAAAA,MAAA,GAAAC,OAAA;AACA,IAAAC,YAAA,GAAAD,OAAA;AAEA,MAAME,kBAAkB,GAAG,IAAIC,+BAAkB,CAACC,0BAAa,CAACC,YAAY,CAAC;;AAE7E;AACA;AACA;AACA;AACA;AACO,SAASC,kBAAkBA,CAChCC,WAAmC,EACnCC,SAAyB,EACzB;EACA,MAAM;IAAEC,WAAW;IAAEC;EAAkB,CAAC,GAAGH,WAAW;EACtD,MAAMI,MAAM,GACVH,SAAS,KAAK,kBAAkB,GAAGE,iBAAiB,GAAGD,WAAW;EACpE,MAAM,CAACG,KAAK,CAAC,GAAGD,MAAM,EAAEE,cAAc,CAAC,CAAC,IAAI,EAAE;EAC9C,MAAMC,OAAO,GAAGF,KAAK,EAAEG,EAAE;EAEzB,MAAM,CAACC,eAAe,EAAEC,kBAAkB,CAAC,GAAG,IAAAC,eAAQ,EAAC,MAAM;IAC3D,MAAMC,QAAQ,GAAGP,KAAK,EAAEQ,WAAW,CAAC,CAAC;IACrC,MAAMC,KAAK,GAAGF,QAAQ,EAAEE,KAAK,IAAI,CAAC;IAClC,MAAMC,MAAM,GAAGH,QAAQ,EAAEG,MAAM,IAAI,CAAC;IACpC,OAAO;MACLD,KAAK;MACLC;IACF,CAAC;EACH,CAAC,CAAC;;EAEF;EACA,IAAAC,gBAAS,EAAC,MAAM;IACd,IAAI,CAACT,OAAO,IAAI,CAACV,0BAAa,CAACC,YAAY,EAAE;IAE7C,MAAMmB,gCAAgC,GAAIC,SAKzC,IAAK;MACJ;MACA,IAAIA,SAAS,CAACX,OAAO,KAAKA,OAAO,EAAE;QACjCG,kBAAkB,CAAES,IAAI,IAAK;UAC3B,IACEA,IAAI,CAACL,KAAK,KAAKI,SAAS,CAACJ,KAAK,IAC9BK,IAAI,CAACJ,MAAM,KAAKG,SAAS,CAACH,MAAM,EAChC;YACA,OAAO;cAAED,KAAK,EAAEI,SAAS,CAACJ,KAAK;cAAEC,MAAM,EAAEG,SAAS,CAACH;YAAO,CAAC;UAC7D;UACA,OAAOI,IAAI;QACb,CAAC,CAAC;MACJ;IACF,CAAC;IAED,MAAMC,YAAY,GAAGzB,kBAAkB,CAAC0B,WAAW,CACjD,4BAA4B,EAC5BJ,gCACF,CAAC;IAED,OAAO,MAAM;MACXG,YAAY,CAACE,MAAM,CAAC,CAAC;IACvB,CAAC;EACH,CAAC,EAAE,CAACf,OAAO,EAAEF,KAAK,CAAC,CAAC;EAEpB,OAAOI,eAAe;AACxB","ignoreList":[]}
1
+ {"version":3,"names":["_react","require","_reactNative","webRTCEventEmitter","NativeEventEmitter","NativeModules","WebRTCModule","useTrackDimensions","participant","trackType","videoStream","screenShareStream","stream","track","getVideoTracks","trackId","id","trackDimensions","setTrackDimensions","useState","settings","getSettings","width","height","useEffect","handleVideoTrackDimensionChanged","eventData","prev","subscription","addListener","remove"],"sourceRoot":"../../../src","sources":["hooks/useTrackDimensions.ts"],"mappings":";;;;;;AAIA,IAAAA,MAAA,GAAAC,OAAA;AACA,IAAAC,YAAA,GAAAD,OAAA;AAEA,MAAME,kBAAkB,GAAG,IAAIC,+BAAkB,CAACC,0BAAa,CAACC,YAAY,CAAC;;AAE7E;AACA;AACA;AACA;AACA;AACO,SAASC,kBAAkBA,CAChCC,WAAmC,EACnCC,SAAyB,EACzB;EACA,MAAM;IAAEC,WAAW;IAAEC;EAAkB,CAAC,GAAGH,WAAW;EACtD,MAAMI,MAAM,GACVH,SAAS,KAAK,kBAAkB,GAAGE,iBAAiB,GAAGD,WAAW;EACpE,MAAM,CAACG,KAAK,CAAC,GAAGD,MAAM,EAAEE,cAAc,CAAC,CAAC,IAAI,EAAE;EAC9C,MAAMC,OAAO,GAAGF,KAAK,EAAEG,EAAE;EAEzB,MAAM,CAACC,eAAe,EAAEC,kBAAkB,CAAC,GAAG,IAAAC,eAAQ,EAAC,MAAM;IAC3D,MAAMC,QAAQ,GAAGP,KAAK,EAAEQ,WAAW,CAAC,CAAC;IACrC,MAAMC,KAAK,GAAGF,QAAQ,EAAEE,KAAK,IAAI,CAAC;IAClC,MAAMC,MAAM,GAAGH,QAAQ,EAAEG,MAAM,IAAI,CAAC;IACpC,OAAO;MACLD,KAAK;MACLC;IACF,CAAC;EACH,CAAC,CAAC;;EAEF;EACA,IAAAC,gBAAS,EAAC,MAAM;IACd,IAAI,CAACT,OAAO,IAAI,CAACF,KAAK,EAAE;IAExB,MAAMY,gCAAgC,GAAIC,SAKzC,IAAK;MACJ;MACA,IAAIA,SAAS,CAACX,OAAO,KAAKA,OAAO,EAAE;QACjCG,kBAAkB,CAAES,IAAI,IAAK;UAC3B,IACEA,IAAI,CAACL,KAAK,KAAKI,SAAS,CAACJ,KAAK,IAC9BK,IAAI,CAACJ,MAAM,KAAKG,SAAS,CAACH,MAAM,EAChC;YACA,OAAOI,IAAI;UACb;UACA,OAAO;YAAEL,KAAK,EAAEI,SAAS,CAACJ,KAAK;YAAEC,MAAM,EAAEG,SAAS,CAACH;UAAO,CAAC;QAC7D,CAAC,CAAC;MACJ;IACF,CAAC;IAED,MAAM;MAAED,KAAK;MAAEC;IAAO,CAAC,GAAGV,KAAK,CAACQ,WAAW,CAAC,CAAC;IAC7CH,kBAAkB,CAAES,IAAI,IAAK;MAC3B,IAAIA,IAAI,CAACL,KAAK,KAAKA,KAAK,IAAIK,IAAI,CAACJ,MAAM,KAAKA,MAAM,EAAE;QAClD,OAAOI,IAAI;MACb;MACA,OAAO;QACLL,KAAK,EAAEA,KAAK,IAAI,CAAC;QACjBC,MAAM,EAAEA,MAAM,IAAI;MACpB,CAAC;IACH,CAAC,CAAC;IAEF,MAAMK,YAAY,GAAGzB,kBAAkB,CAAC0B,WAAW,CACjD,4BAA4B,EAC5BJ,gCACF,CAAC;IAED,OAAO,MAAM;MACXG,YAAY,CAACE,MAAM,CAAC,CAAC;IACvB,CAAC;EACH,CAAC,EAAE,CAACf,OAAO,EAAEF,KAAK,CAAC,CAAC;EAEpB,OAAOI,eAAe;AACxB","ignoreList":[]}
@@ -4,5 +4,5 @@ Object.defineProperty(exports, "__esModule", {
4
4
  value: true
5
5
  });
6
6
  exports.version = void 0;
7
- const version = exports.version = '1.20.1';
7
+ const version = exports.version = '1.20.3';
8
8
  //# sourceMappingURL=version.js.map
@@ -1,10 +1,11 @@
1
1
  import { CallingState, getLogger, hasScreenShare, speakerLayoutSortPreset } from '@stream-io/video-client';
2
2
  import { useCall, useCallStateHooks } from '@stream-io/video-react-bindings';
3
- import React, { useEffect, useMemo } from 'react';
3
+ import React, { useEffect, useMemo, useCallback } from 'react';
4
4
  import { findNodeHandle } from 'react-native';
5
- import { onNativeCallClosed, RTCViewPipNative } from './RTCViewPipNative';
5
+ import { onNativeCallClosed, onNativeDimensionsUpdated, RTCViewPipNative } from './RTCViewPipNative';
6
6
  import { useDebouncedValue } from '../../../utils/hooks';
7
7
  import { shouldDisableIOSLocalVideoOnBackgroundRef } from '../../../utils/internal/shouldDisableIOSLocalVideoOnBackground';
8
+ import { useTrackDimensions } from '../../../hooks/useTrackDimensions';
8
9
  export const RTCViewPipIOS = /*#__PURE__*/React.memo(props => {
9
10
  const {
10
11
  includeLocalParticipantVideo
@@ -59,22 +60,48 @@ export const RTCViewPipIOS = /*#__PURE__*/React.memo(props => {
59
60
  subscription?.unsubscribe();
60
61
  };
61
62
  }, [call]);
63
+ const onDimensionsUpdated = useCallback((width, height) => {
64
+ const node = findNodeHandle(nativeRef.current);
65
+ if (node !== null && width > 0 && height > 0) {
66
+ onNativeDimensionsUpdated(node, width, height);
67
+ }
68
+ }, []);
69
+ const {
70
+ videoStream,
71
+ screenShareStream
72
+ } = participantInSpotlight || {};
73
+ const isScreenSharing = participantInSpotlight ? hasScreenShare(participantInSpotlight) : false;
74
+ const videoStreamToRender = isScreenSharing ? screenShareStream : videoStream;
62
75
  const streamURL = useMemo(() => {
63
- if (!participantInSpotlight) {
76
+ if (!videoStreamToRender) {
64
77
  return undefined;
65
78
  }
66
- const {
67
- videoStream,
68
- screenShareStream
69
- } = participantInSpotlight;
70
- const isScreenSharing = hasScreenShare(participantInSpotlight);
71
- const videoStreamToRender = isScreenSharing ? screenShareStream : videoStream;
72
79
  return videoStreamToRender?.toURL();
73
- }, [participantInSpotlight]);
74
- return /*#__PURE__*/React.createElement(RTCViewPipNative, {
80
+ }, [videoStreamToRender]);
81
+ return /*#__PURE__*/React.createElement(React.Fragment, null, /*#__PURE__*/React.createElement(RTCViewPipNative, {
75
82
  streamURL: streamURL,
76
83
  ref: nativeRef
77
- });
84
+ }), participantInSpotlight && /*#__PURE__*/React.createElement(DimensionsUpdatedRenderless, {
85
+ participant: participantInSpotlight,
86
+ trackType: isScreenSharing ? 'screenShareTrack' : 'videoTrack',
87
+ onDimensionsUpdated: onDimensionsUpdated,
88
+ key: streamURL
89
+ }));
90
+ });
91
+ const DimensionsUpdatedRenderless = /*#__PURE__*/React.memo(({
92
+ participant,
93
+ trackType,
94
+ onDimensionsUpdated
95
+ }) => {
96
+ const {
97
+ width,
98
+ height
99
+ } = useTrackDimensions(participant, trackType);
100
+ useEffect(() => {
101
+ onDimensionsUpdated(width, height);
102
+ }, [width, height, onDimensionsUpdated]);
103
+ return null;
78
104
  });
105
+ DimensionsUpdatedRenderless.displayName = 'DimensionsUpdatedRenderless';
79
106
  RTCViewPipIOS.displayName = 'RTCViewPipIOS';
80
107
  //# sourceMappingURL=RTCViewPipIOS.js.map
@@ -1 +1 @@
1
- {"version":3,"names":["CallingState","getLogger","hasScreenShare","speakerLayoutSortPreset","useCall","useCallStateHooks","React","useEffect","useMemo","findNodeHandle","onNativeCallClosed","RTCViewPipNative","useDebouncedValue","shouldDisableIOSLocalVideoOnBackgroundRef","RTCViewPipIOS","memo","props","includeLocalParticipantVideo","call","useParticipants","_allParticipants","sortBy","allParticipants","dominantSpeaker","dominantSpeaker2","filter","participant","isLocalParticipant","participantInSpotlight","current","nativeRef","useRef","callClosedInvokedOnce","onCallClosed","node","unsubFunc","on","subscription","state","callingState$","subscribe","LEFT","unsubscribe","streamURL","undefined","videoStream","screenShareStream","isScreenSharing","videoStreamToRender","toURL","createElement","ref","displayName"],"sourceRoot":"../../../../../src","sources":["components/Call/CallContent/RTCViewPipIOS.tsx"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["CallingState","getLogger","hasScreenShare","speakerLayoutSortPreset","useCall","useCallStateHooks","React","useEffect","useMemo","useCallback","findNodeHandle","onNativeCallClosed","onNativeDimensionsUpdated","RTCViewPipNative","useDebouncedValue","shouldDisableIOSLocalVideoOnBackgroundRef","useTrackDimensions","RTCViewPipIOS","memo","props","includeLocalParticipantVideo","call","useParticipants","_allParticipants","sortBy","allParticipants","dominantSpeaker","dominantSpeaker2","filter","participant","isLocalParticipant","participantInSpotlight","current","nativeRef","useRef","callClosedInvokedOnce","onCallClosed","node","unsubFunc","on","subscription","state","callingState$","subscribe","LEFT","unsubscribe","onDimensionsUpdated","width","height","videoStream","screenShareStream","isScreenSharing","videoStreamToRender","streamURL","undefined","toURL","createElement","Fragment","ref","DimensionsUpdatedRenderless","trackType","key","displayName"],"sourceRoot":"../../../../../src","sources":["components/Call/CallContent/RTCViewPipIOS.tsx"],"mappings":"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","ignoreList":[]}
@@ -5,7 +5,18 @@ const COMPONENT_NAME = 'RTCViewPip';
5
5
  const NativeComponent = requireNativeComponent(COMPONENT_NAME);
6
6
  export function onNativeCallClosed(reactTag) {
7
7
  getLogger(['RTCViewPipNative'])('debug', 'onNativeCallClosed');
8
- UIManager.dispatchViewManagerCommand(reactTag, UIManager.getViewManagerConfig(COMPONENT_NAME).Commands.onCallClosed, []);
8
+ const commandId = UIManager.getViewManagerConfig(COMPONENT_NAME).Commands.onCallClosed;
9
+ if (!commandId) return;
10
+ UIManager.dispatchViewManagerCommand(reactTag, commandId, []);
11
+ }
12
+ export function onNativeDimensionsUpdated(reactTag, width, height) {
13
+ getLogger(['RTCViewPipNative'])('debug', 'onNativeDimensionsUpdated', {
14
+ width,
15
+ height
16
+ });
17
+ const commandId = UIManager.getViewManagerConfig(COMPONENT_NAME).Commands.setPreferredContentSize;
18
+ if (!commandId) return;
19
+ UIManager.dispatchViewManagerCommand(reactTag, commandId, [width, height]);
9
20
  }
10
21
 
11
22
  /** Wrapper for the native view
@@ -1 +1 @@
1
- {"version":3,"names":["getLogger","React","Platform","requireNativeComponent","StyleSheet","UIManager","COMPONENT_NAME","NativeComponent","onNativeCallClosed","reactTag","dispatchViewManagerCommand","getViewManagerConfig","Commands","onCallClosed","RTCViewPipNative","memo","forwardRef","props","ref","OS","createElement","style","absoluteFill","pointerEvents","streamURL"],"sourceRoot":"../../../../../src","sources":["components/Call/CallContent/RTCViewPipNative.tsx"],"mappings":"AAAA,SAASA,SAAS,QAAQ,yBAAyB;AACnD,OAAOC,KAAK,MAAM,OAAO;AACzB,SAEEC,QAAQ,EACRC,sBAAsB,EACtBC,UAAU,EACVC,SAAS,QACJ,cAAc;AAErB,MAAMC,cAAc,GAAG,YAAY;AAMnC,MAAMC,eAAqD,GACzDJ,sBAAsB,CAACG,cAAc,CAAC;AAExC,OAAO,SAASE,kBAAkBA,CAACC,QAAgB,EAAE;EACnDT,SAAS,CAAC,CAAC,kBAAkB,CAAC,CAAC,CAAC,OAAO,EAAE,oBAAoB,CAAC;EAC9DK,SAAS,CAACK,0BAA0B,CAClCD,QAAQ,EACRJ,SAAS,CAACM,oBAAoB,CAACL,cAAc,CAAC,CAACM,QAAQ,CAACC,YAAY,EACpE,EACF,CAAC;AACH;;AAEA;AACA;AACA,OAAO,MAAMC,gBAAgB,gBAAGb,KAAK,CAACc,IAAI,cACxCd,KAAK,CAACe,UAAU,CAKd,CAACC,KAAK,EAAEC,GAAG,KAAK;EAChB,IAAIhB,QAAQ,CAACiB,EAAE,KAAK,KAAK,EAAE,OAAO,IAAI;EAEtC,oBACElB,KAAA,CAAAmB,aAAA,CAACb,eAAe;IACdc,KAAK,EAAEjB,UAAU,CAACkB,YAAa;IAC/BC,aAAa,EAAE;IACf;IAAA;IACAC,SAAS,EAAEP,KAAK,CAACO;IACjB;IAAA;IACAN,GAAG,EAAEA;EAAI,CACV,CAAC;AAEN,CAAC,CACH,CAAC","ignoreList":[]}
1
+ {"version":3,"names":["getLogger","React","Platform","requireNativeComponent","StyleSheet","UIManager","COMPONENT_NAME","NativeComponent","onNativeCallClosed","reactTag","commandId","getViewManagerConfig","Commands","onCallClosed","dispatchViewManagerCommand","onNativeDimensionsUpdated","width","height","setPreferredContentSize","RTCViewPipNative","memo","forwardRef","props","ref","OS","createElement","style","absoluteFill","pointerEvents","streamURL"],"sourceRoot":"../../../../../src","sources":["components/Call/CallContent/RTCViewPipNative.tsx"],"mappings":"AAAA,SAASA,SAAS,QAAQ,yBAAyB;AACnD,OAAOC,KAAK,MAAM,OAAO;AACzB,SAEEC,QAAQ,EACRC,sBAAsB,EACtBC,UAAU,EACVC,SAAS,QACJ,cAAc;AAErB,MAAMC,cAAc,GAAG,YAAY;AAMnC,MAAMC,eAAqD,GACzDJ,sBAAsB,CAACG,cAAc,CAAC;AAExC,OAAO,SAASE,kBAAkBA,CAACC,QAAgB,EAAE;EACnDT,SAAS,CAAC,CAAC,kBAAkB,CAAC,CAAC,CAAC,OAAO,EAAE,oBAAoB,CAAC;EAC9D,MAAMU,SAAS,GACbL,SAAS,CAACM,oBAAoB,CAACL,cAAc,CAAC,CAACM,QAAQ,CAACC,YAAY;EACtE,IAAI,CAACH,SAAS,EAAE;EAChBL,SAAS,CAACS,0BAA0B,CAACL,QAAQ,EAAEC,SAAS,EAAE,EAAE,CAAC;AAC/D;AAEA,OAAO,SAASK,yBAAyBA,CACvCN,QAAgB,EAChBO,KAAa,EACbC,MAAc,EACd;EACAjB,SAAS,CAAC,CAAC,kBAAkB,CAAC,CAAC,CAAC,OAAO,EAAE,2BAA2B,EAAE;IACpEgB,KAAK;IACLC;EACF,CAAC,CAAC;EACF,MAAMP,SAAS,GACbL,SAAS,CAACM,oBAAoB,CAACL,cAAc,CAAC,CAACM,QAAQ,CACpDM,uBAAuB;EAC5B,IAAI,CAACR,SAAS,EAAE;EAChBL,SAAS,CAACS,0BAA0B,CAACL,QAAQ,EAAEC,SAAS,EAAE,CAACM,KAAK,EAAEC,MAAM,CAAC,CAAC;AAC5E;;AAEA;AACA;AACA,OAAO,MAAME,gBAAgB,gBAAGlB,KAAK,CAACmB,IAAI,cACxCnB,KAAK,CAACoB,UAAU,CAKd,CAACC,KAAK,EAAEC,GAAG,KAAK;EAChB,IAAIrB,QAAQ,CAACsB,EAAE,KAAK,KAAK,EAAE,OAAO,IAAI;EAEtC,oBACEvB,KAAA,CAAAwB,aAAA,CAAClB,eAAe;IACdmB,KAAK,EAAEtB,UAAU,CAACuB,YAAa;IAC/BC,aAAa,EAAE;IACf;IAAA;IACAC,SAAS,EAAEP,KAAK,CAACO;IACjB;IAAA;IACAN,GAAG,EAAEA;EAAI,CACV,CAAC;AAEN,CAAC,CACH,CAAC","ignoreList":[]}
@@ -6,7 +6,7 @@ import { usePrevious } from '../utils/hooks';
6
6
  import { useIsIosScreenshareBroadcastStarted } from './useIsIosScreenshareBroadcastStarted';
7
7
 
8
8
  // ios >= 14.0 or android - platform restrictions
9
- const CanDeviceScreenShare = Platform.OS === 'ios' && Number.parseInt(Platform.Version.split('.')[0], 10) >= 14 || Platform.OS === 'android';
9
+ const CanDeviceScreenShare = Platform.OS === 'ios' && Number.parseInt(Platform.Version?.split('.')[0] ?? '0', 10) >= 14 || Platform.OS === 'android';
10
10
  export const useScreenShareButton = (screenCapturePickerViewiOSRef, onScreenShareStartedHandler, onScreenShareStoppedHandler, onMissingScreenShareStreamPermission) => {
11
11
  const call = useCall();
12
12
  const {
@@ -1 +1 @@
1
- {"version":3,"names":["getLogger","hasScreenShare","OwnCapability","useCall","useCallStateHooks","useEffect","useRef","findNodeHandle","NativeModules","Platform","usePrevious","useIsIosScreenshareBroadcastStarted","CanDeviceScreenShare","OS","Number","parseInt","Version","split","useScreenShareButton","screenCapturePickerViewiOSRef","onScreenShareStartedHandler","onScreenShareStoppedHandler","onMissingScreenShareStreamPermission","call","useLocalParticipant","useCallSettings","useOwnCapabilities","callSettings","ownCapabilities","hasScreenSharingPermissions","includes","SCREENSHARE","isScreenSharingEnabledInCall","screensharing","enabled","onScreenShareStartedHandlerRef","current","onScreenShareStoppedHandlerRef","iosScreenShareStartedFromSystem","prevIosScreenShareStartedFromSystem","localParticipant","hasPublishedScreenShare","screenShare","enable","disable","onPress","logger","reactTag","ScreenCapturePickerViewManager","show","error","undefined"],"sourceRoot":"../../../src","sources":["hooks/useScreenShareButton.ts"],"mappings":"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","ignoreList":[]}
1
+ {"version":3,"names":["getLogger","hasScreenShare","OwnCapability","useCall","useCallStateHooks","useEffect","useRef","findNodeHandle","NativeModules","Platform","usePrevious","useIsIosScreenshareBroadcastStarted","CanDeviceScreenShare","OS","Number","parseInt","Version","split","useScreenShareButton","screenCapturePickerViewiOSRef","onScreenShareStartedHandler","onScreenShareStoppedHandler","onMissingScreenShareStreamPermission","call","useLocalParticipant","useCallSettings","useOwnCapabilities","callSettings","ownCapabilities","hasScreenSharingPermissions","includes","SCREENSHARE","isScreenSharingEnabledInCall","screensharing","enabled","onScreenShareStartedHandlerRef","current","onScreenShareStoppedHandlerRef","iosScreenShareStartedFromSystem","prevIosScreenShareStartedFromSystem","localParticipant","hasPublishedScreenShare","screenShare","enable","disable","onPress","logger","reactTag","ScreenCapturePickerViewManager","show","error","undefined"],"sourceRoot":"../../../src","sources":["hooks/useScreenShareButton.ts"],"mappings":"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","ignoreList":[]}
@@ -27,21 +27,34 @@ export function useTrackDimensions(participant, trackType) {
27
27
 
28
28
  // Set up videoTrackDimensionChanged event listener for more direct dimension updates
29
29
  useEffect(() => {
30
- if (!trackId || !NativeModules.WebRTCModule) return;
30
+ if (!trackId || !track) return;
31
31
  const handleVideoTrackDimensionChanged = eventData => {
32
32
  // Only handle events for this specific participant
33
33
  if (eventData.trackId === trackId) {
34
34
  setTrackDimensions(prev => {
35
- if (prev.width !== eventData.width || prev.height !== eventData.height) {
36
- return {
37
- width: eventData.width,
38
- height: eventData.height
39
- };
35
+ if (prev.width === eventData.width && prev.height === eventData.height) {
36
+ return prev;
40
37
  }
41
- return prev;
38
+ return {
39
+ width: eventData.width,
40
+ height: eventData.height
41
+ };
42
42
  });
43
43
  }
44
44
  };
45
+ const {
46
+ width,
47
+ height
48
+ } = track.getSettings();
49
+ setTrackDimensions(prev => {
50
+ if (prev.width === width && prev.height === height) {
51
+ return prev;
52
+ }
53
+ return {
54
+ width: width ?? 0,
55
+ height: height ?? 0
56
+ };
57
+ });
45
58
  const subscription = webRTCEventEmitter.addListener('videoTrackDimensionChanged', handleVideoTrackDimensionChanged);
46
59
  return () => {
47
60
  subscription.remove();
@@ -1 +1 @@
1
- {"version":3,"names":["useEffect","useState","NativeEventEmitter","NativeModules","webRTCEventEmitter","WebRTCModule","useTrackDimensions","participant","trackType","videoStream","screenShareStream","stream","track","getVideoTracks","trackId","id","trackDimensions","setTrackDimensions","settings","getSettings","width","height","handleVideoTrackDimensionChanged","eventData","prev","subscription","addListener","remove"],"sourceRoot":"../../../src","sources":["hooks/useTrackDimensions.ts"],"mappings":"AAIA,SAASA,SAAS,EAAEC,QAAQ,QAAQ,OAAO;AAC3C,SAASC,kBAAkB,EAAEC,aAAa,QAAQ,cAAc;AAEhE,MAAMC,kBAAkB,GAAG,IAAIF,kBAAkB,CAACC,aAAa,CAACE,YAAY,CAAC;;AAE7E;AACA;AACA;AACA;AACA;AACA,OAAO,SAASC,kBAAkBA,CAChCC,WAAmC,EACnCC,SAAyB,EACzB;EACA,MAAM;IAAEC,WAAW;IAAEC;EAAkB,CAAC,GAAGH,WAAW;EACtD,MAAMI,MAAM,GACVH,SAAS,KAAK,kBAAkB,GAAGE,iBAAiB,GAAGD,WAAW;EACpE,MAAM,CAACG,KAAK,CAAC,GAAGD,MAAM,EAAEE,cAAc,CAAC,CAAC,IAAI,EAAE;EAC9C,MAAMC,OAAO,GAAGF,KAAK,EAAEG,EAAE;EAEzB,MAAM,CAACC,eAAe,EAAEC,kBAAkB,CAAC,GAAGhB,QAAQ,CAAC,MAAM;IAC3D,MAAMiB,QAAQ,GAAGN,KAAK,EAAEO,WAAW,CAAC,CAAC;IACrC,MAAMC,KAAK,GAAGF,QAAQ,EAAEE,KAAK,IAAI,CAAC;IAClC,MAAMC,MAAM,GAAGH,QAAQ,EAAEG,MAAM,IAAI,CAAC;IACpC,OAAO;MACLD,KAAK;MACLC;IACF,CAAC;EACH,CAAC,CAAC;;EAEF;EACArB,SAAS,CAAC,MAAM;IACd,IAAI,CAACc,OAAO,IAAI,CAACX,aAAa,CAACE,YAAY,EAAE;IAE7C,MAAMiB,gCAAgC,GAAIC,SAKzC,IAAK;MACJ;MACA,IAAIA,SAAS,CAACT,OAAO,KAAKA,OAAO,EAAE;QACjCG,kBAAkB,CAAEO,IAAI,IAAK;UAC3B,IACEA,IAAI,CAACJ,KAAK,KAAKG,SAAS,CAACH,KAAK,IAC9BI,IAAI,CAACH,MAAM,KAAKE,SAAS,CAACF,MAAM,EAChC;YACA,OAAO;cAAED,KAAK,EAAEG,SAAS,CAACH,KAAK;cAAEC,MAAM,EAAEE,SAAS,CAACF;YAAO,CAAC;UAC7D;UACA,OAAOG,IAAI;QACb,CAAC,CAAC;MACJ;IACF,CAAC;IAED,MAAMC,YAAY,GAAGrB,kBAAkB,CAACsB,WAAW,CACjD,4BAA4B,EAC5BJ,gCACF,CAAC;IAED,OAAO,MAAM;MACXG,YAAY,CAACE,MAAM,CAAC,CAAC;IACvB,CAAC;EACH,CAAC,EAAE,CAACb,OAAO,EAAEF,KAAK,CAAC,CAAC;EAEpB,OAAOI,eAAe;AACxB","ignoreList":[]}
1
+ {"version":3,"names":["useEffect","useState","NativeEventEmitter","NativeModules","webRTCEventEmitter","WebRTCModule","useTrackDimensions","participant","trackType","videoStream","screenShareStream","stream","track","getVideoTracks","trackId","id","trackDimensions","setTrackDimensions","settings","getSettings","width","height","handleVideoTrackDimensionChanged","eventData","prev","subscription","addListener","remove"],"sourceRoot":"../../../src","sources":["hooks/useTrackDimensions.ts"],"mappings":"AAIA,SAASA,SAAS,EAAEC,QAAQ,QAAQ,OAAO;AAC3C,SAASC,kBAAkB,EAAEC,aAAa,QAAQ,cAAc;AAEhE,MAAMC,kBAAkB,GAAG,IAAIF,kBAAkB,CAACC,aAAa,CAACE,YAAY,CAAC;;AAE7E;AACA;AACA;AACA;AACA;AACA,OAAO,SAASC,kBAAkBA,CAChCC,WAAmC,EACnCC,SAAyB,EACzB;EACA,MAAM;IAAEC,WAAW;IAAEC;EAAkB,CAAC,GAAGH,WAAW;EACtD,MAAMI,MAAM,GACVH,SAAS,KAAK,kBAAkB,GAAGE,iBAAiB,GAAGD,WAAW;EACpE,MAAM,CAACG,KAAK,CAAC,GAAGD,MAAM,EAAEE,cAAc,CAAC,CAAC,IAAI,EAAE;EAC9C,MAAMC,OAAO,GAAGF,KAAK,EAAEG,EAAE;EAEzB,MAAM,CAACC,eAAe,EAAEC,kBAAkB,CAAC,GAAGhB,QAAQ,CAAC,MAAM;IAC3D,MAAMiB,QAAQ,GAAGN,KAAK,EAAEO,WAAW,CAAC,CAAC;IACrC,MAAMC,KAAK,GAAGF,QAAQ,EAAEE,KAAK,IAAI,CAAC;IAClC,MAAMC,MAAM,GAAGH,QAAQ,EAAEG,MAAM,IAAI,CAAC;IACpC,OAAO;MACLD,KAAK;MACLC;IACF,CAAC;EACH,CAAC,CAAC;;EAEF;EACArB,SAAS,CAAC,MAAM;IACd,IAAI,CAACc,OAAO,IAAI,CAACF,KAAK,EAAE;IAExB,MAAMU,gCAAgC,GAAIC,SAKzC,IAAK;MACJ;MACA,IAAIA,SAAS,CAACT,OAAO,KAAKA,OAAO,EAAE;QACjCG,kBAAkB,CAAEO,IAAI,IAAK;UAC3B,IACEA,IAAI,CAACJ,KAAK,KAAKG,SAAS,CAACH,KAAK,IAC9BI,IAAI,CAACH,MAAM,KAAKE,SAAS,CAACF,MAAM,EAChC;YACA,OAAOG,IAAI;UACb;UACA,OAAO;YAAEJ,KAAK,EAAEG,SAAS,CAACH,KAAK;YAAEC,MAAM,EAAEE,SAAS,CAACF;UAAO,CAAC;QAC7D,CAAC,CAAC;MACJ;IACF,CAAC;IAED,MAAM;MAAED,KAAK;MAAEC;IAAO,CAAC,GAAGT,KAAK,CAACO,WAAW,CAAC,CAAC;IAC7CF,kBAAkB,CAAEO,IAAI,IAAK;MAC3B,IAAIA,IAAI,CAACJ,KAAK,KAAKA,KAAK,IAAII,IAAI,CAACH,MAAM,KAAKA,MAAM,EAAE;QAClD,OAAOG,IAAI;MACb;MACA,OAAO;QACLJ,KAAK,EAAEA,KAAK,IAAI,CAAC;QACjBC,MAAM,EAAEA,MAAM,IAAI;MACpB,CAAC;IACH,CAAC,CAAC;IAEF,MAAMI,YAAY,GAAGrB,kBAAkB,CAACsB,WAAW,CACjD,4BAA4B,EAC5BJ,gCACF,CAAC;IAED,OAAO,MAAM;MACXG,YAAY,CAACE,MAAM,CAAC,CAAC;IACvB,CAAC;EACH,CAAC,EAAE,CAACb,OAAO,EAAEF,KAAK,CAAC,CAAC;EAEpB,OAAOI,eAAe;AACxB","ignoreList":[]}
@@ -1,2 +1,2 @@
1
- export const version = '1.20.1';
1
+ export const version = '1.20.3';
2
2
  //# sourceMappingURL=version.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"RTCViewPipIOS.d.ts","sourceRoot":"","sources":["../../../../../src/components/Call/CallContent/RTCViewPipIOS.tsx"],"names":[],"mappings":"AAQA,OAAO,KAA6B,MAAM,OAAO,CAAC;AAMlD,KAAK,KAAK,GAAG;IACX,4BAA4B,CAAC,EAAE,OAAO,CAAC;CACxC,CAAC;AAEF,eAAO,MAAM,aAAa,oCAAsB,KAAK,uBAiFnD,CAAC"}
1
+ {"version":3,"file":"RTCViewPipIOS.d.ts","sourceRoot":"","sources":["../../../../../src/components/Call/CallContent/RTCViewPipIOS.tsx"],"names":[],"mappings":"AAUA,OAAO,KAA0C,MAAM,OAAO,CAAC;AAW/D,KAAK,KAAK,GAAG;IACX,4BAA4B,CAAC,EAAE,OAAO,CAAC;CACxC,CAAC;AAEF,eAAO,MAAM,aAAa,oCAAsB,KAAK,uBAsGnD,CAAC"}
@@ -1,5 +1,6 @@
1
1
  import React from 'react';
2
2
  export declare function onNativeCallClosed(reactTag: number): void;
3
+ export declare function onNativeDimensionsUpdated(reactTag: number, width: number, height: number): void;
3
4
  /** Wrapper for the native view
4
5
  * meant to stay private and not exposed */
5
6
  export declare const RTCViewPipNative: React.NamedExoticComponent<{
@@ -1 +1 @@
1
- {"version":3,"file":"RTCViewPipNative.d.ts","sourceRoot":"","sources":["../../../../../src/components/Call/CallContent/RTCViewPipNative.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,MAAM,OAAO,CAAC;AAkB1B,wBAAgB,kBAAkB,CAAC,QAAQ,EAAE,MAAM,QAOlD;AAED;2CAC2C;AAC3C,eAAO,MAAM,gBAAgB;gBAIX,MAAM;wCAgBvB,CAAC"}
1
+ {"version":3,"file":"RTCViewPipNative.d.ts","sourceRoot":"","sources":["../../../../../src/components/Call/CallContent/RTCViewPipNative.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,MAAM,OAAO,CAAC;AAkB1B,wBAAgB,kBAAkB,CAAC,QAAQ,EAAE,MAAM,QAMlD;AAED,wBAAgB,yBAAyB,CACvC,QAAQ,EAAE,MAAM,EAChB,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,MAAM,QAWf;AAED;2CAC2C;AAC3C,eAAO,MAAM,gBAAgB;gBAIX,MAAM;wCAgBvB,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"useTrackDimensions.d.ts","sourceRoot":"","sources":["../../../src/hooks/useTrackDimensions.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,sBAAsB,EAC3B,KAAK,cAAc,EACpB,MAAM,yBAAyB,CAAC;AAMjC;;;;GAIG;AACH,wBAAgB,kBAAkB,CAChC,WAAW,EAAE,sBAAsB,EACnC,SAAS,EAAE,cAAc;;;EAqD1B"}
1
+ {"version":3,"file":"useTrackDimensions.d.ts","sourceRoot":"","sources":["../../../src/hooks/useTrackDimensions.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,sBAAsB,EAC3B,KAAK,cAAc,EACpB,MAAM,yBAAyB,CAAC;AAMjC;;;;GAIG;AACH,wBAAgB,kBAAkB,CAChC,WAAW,EAAE,sBAAsB,EACnC,SAAS,EAAE,cAAc;;;EAgE1B"}
@@ -1,2 +1,2 @@
1
- export declare const version = "1.20.1";
1
+ export declare const version = "1.20.3";
2
2
  //# sourceMappingURL=version.d.ts.map
@@ -81,6 +81,10 @@ import Foundation
81
81
  super.init()
82
82
  }
83
83
 
84
+ func setPreferredContentSize(_ size: CGSize) {
85
+ contentViewController?.preferredContentSize = size
86
+ }
87
+
84
88
  // MARK: - AVPictureInPictureControllerDelegate
85
89
 
86
90
  func pictureInPictureController(
@@ -6,6 +6,7 @@
6
6
  //
7
7
 
8
8
  import Foundation
9
+ import React
9
10
 
10
11
  @objc(RTCViewPip)
11
12
  class RTCViewPip: UIView {
@@ -13,17 +14,6 @@ class RTCViewPip: UIView {
13
14
  private var pictureInPictureController = StreamPictureInPictureController()
14
15
  private var webRtcModule: WebRTCModule?
15
16
 
16
- override init(frame: CGRect) {
17
- super.init(frame: frame)
18
- setupNotificationObserver()
19
- self.pictureInPictureController?.sourceView = self
20
- }
21
-
22
- required init?(coder aDecoder: NSCoder) {
23
- super.init(coder: aDecoder)
24
- setupNotificationObserver()
25
- }
26
-
27
17
  private func setupNotificationObserver() {
28
18
  NotificationCenter.default.addObserver(
29
19
  self,
@@ -33,10 +23,6 @@ class RTCViewPip: UIView {
33
23
  )
34
24
  }
35
25
 
36
- deinit {
37
- NotificationCenter.default.removeObserver(self)
38
- }
39
-
40
26
  func setWebRtcModule(_ module: WebRTCModule) {
41
27
  webRtcModule = module
42
28
  }
@@ -64,7 +50,7 @@ class RTCViewPip: UIView {
64
50
  }
65
51
 
66
52
  DispatchQueue.main.async {
67
- NSLog("PiP - Setting video track for streamURL: -\(streamURLString)")
53
+ NSLog("PiP - Setting video track for streamURL: -\(streamURLString) trackId: \(videoTrack.trackId)")
68
54
  self.pictureInPictureController?.track = videoTrack
69
55
  }
70
56
  }
@@ -82,16 +68,34 @@ class RTCViewPip: UIView {
82
68
  self.pictureInPictureController = nil
83
69
  }
84
70
 
85
- override func didMoveToWindow() {
86
- super.didMoveToWindow()
87
- let isVisible = self.superview != nil && self.window != nil;
88
- if (!isVisible) {
89
- // view is detached so we cleanup the pip controller
90
- // taken from: https://github.com/software-mansion/react-native-screens/blob/main/Example/ios/ScreensExample/RNSSampleLifecycleAwareView.m
71
+ @objc
72
+ func setPreferredContentSize(_ size: CGSize) {
73
+ NSLog("PiP - RTCViewPip setPreferredContentSize \(size)")
74
+ self.pictureInPictureController?.setPreferredContentSize(size)
75
+ }
76
+
77
+ override func didMoveToSuperview() {
78
+ super.didMoveToSuperview()
79
+ if self.superview == nil {
80
+ NSLog("PiP - RTCViewPip has been removed from its superview.")
81
+ NotificationCenter.default.removeObserver(self)
91
82
  DispatchQueue.main.async {
92
83
  NSLog("PiP - onCallClosed called due to view detaching")
93
84
  self.onCallClosed()
94
85
  }
86
+ } else {
87
+ NSLog("PiP - RTCViewPip has been added to a superview.")
88
+ setupNotificationObserver()
89
+ DispatchQueue.main.async {
90
+ self.pictureInPictureController?.sourceView = self
91
+ if let reactTag = self.reactTag, let bridge = self.webRtcModule?.bridge {
92
+ if let manager = bridge.module(for: RTCViewPipManager.self) as? RTCViewPipManager,
93
+ let size = manager.getCachedSize(for: reactTag) {
94
+ NSLog("PiP - Applying cached size \(size) for reactTag \(reactTag)")
95
+ self.setPreferredContentSize(size)
96
+ }
97
+ }
98
+ }
95
99
  }
96
100
  }
97
101
  }
@@ -12,5 +12,6 @@
12
12
 
13
13
  RCT_EXPORT_VIEW_PROPERTY(streamURL, NSString)
14
14
  RCT_EXTERN_METHOD(onCallClosed:(nonnull NSNumber*) reactTag)
15
+ RCT_EXTERN_METHOD(setPreferredContentSize:(nonnull NSNumber *)reactTag width:(CGFloat)w height:(CGFloat)h);
15
16
 
16
17
  @end
@@ -9,39 +9,59 @@ import Foundation
9
9
 
10
10
  @objc(RTCViewPipManager)
11
11
  class RTCViewPipManager: RCTViewManager {
12
-
13
- // A cached RTCViewPip reference.
14
- //
15
- // Often, the view unmounts before the `onCallClosed` command arrives and as a consequence
16
- // pipView.onCallClosed() method wasn't called, as the view can't be found in the ViewRegistry
17
- // causing dangling PiP window with the last video frame frozen.
18
- // Now, once this happens, instead forwarding the command to the view returned by the registry,
19
- // we manually apply it to the cached view. The current setup allows only one PipView, so we
20
- // don't have to introduce more complex view tracking mechanism.
21
- private var _view: RTCViewPip? = nil
22
-
12
+
13
+ private var cachedSizes: [NSNumber: CGSize] = [:]
14
+
23
15
  override func view() -> UIView! {
24
16
  let view = RTCViewPip()
25
17
  view.setWebRtcModule(self.bridge.module(forName: "WebRTCModule") as! WebRTCModule)
26
- self._view = view
27
18
  return view
28
19
  }
29
-
20
+
30
21
  override static func requiresMainQueueSetup() -> Bool {
31
22
  return true
32
23
  }
33
-
34
- @objc func onCallClosed(_ reactTag: NSNumber) {
35
- self.bridge!.uiManager.addUIBlock { (_: RCTUIManager?, viewRegistry: [NSNumber: UIView]?) in
36
- guard let pipView = viewRegistry?[reactTag] as? RTCViewPip else {
37
- NSLog("PiP - onCallClosed can't be called, Invalid view returned from registry, expecting RTCViewPip. Disposing the cached view.")
38
- self._view?.onCallClosed()
39
- self._view = nil
40
- return
24
+
25
+ @objc(onCallClosed:)
26
+ func onCallClosed(_ reactTag: NSNumber) {
27
+
28
+ bridge.uiManager.addUIBlock({ (uiManager, viewRegistry) in
29
+ let view = uiManager?.view(forReactTag: reactTag)
30
+ if let pipView = view as? RTCViewPip {
31
+ DispatchQueue.main.async {
32
+ pipView.onCallClosed()
33
+ }
34
+ } else {
35
+ NSLog("PiP - onCallClosed cant be called, Invalid view returned from registry, expecting RTCViewPip")
41
36
  }
42
- DispatchQueue.main.async {
43
- pipView.onCallClosed()
37
+ })
38
+ }
39
+
40
+
41
+ @objc(setPreferredContentSize:width:height:)
42
+ func setPreferredContentSize(_ reactTag: NSNumber, width: CGFloat, height: CGFloat) {
43
+ let size = CGSize(width: width, height: height)
44
+
45
+ bridge.uiManager.addUIBlock({ (uiManager, viewRegistry) in
46
+ let view = uiManager?.view(forReactTag: reactTag)
47
+ if let pipView = view as? RTCViewPip {
48
+ DispatchQueue.main.async {
49
+ pipView.setPreferredContentSize(size)
50
+ }
51
+ } else {
52
+ // If the view is not found, cache the size.
53
+ // this happens when this method is called before the view can attach react super view
54
+ NSLog("PiP - View not found for reactTag \(reactTag), caching size.")
55
+ self.cachedSizes[reactTag] = size
44
56
  }
57
+ })
58
+ }
59
+
60
+ func getCachedSize(for reactTag: NSNumber) -> CGSize? {
61
+ let size = self.cachedSizes.removeValue(forKey: reactTag)
62
+ if size != nil {
63
+ NSLog("PiP - Found and removed cached size for reactTag \(reactTag).")
45
64
  }
65
+ return size
46
66
  }
47
67
  }
@@ -5,6 +5,7 @@
5
5
  #import <React/RCTUIManager.h>
6
6
  #import <React/RCTView.h>
7
7
  #import <React/RCTBridge.h>
8
+ #import <React/UIView+React.h>
8
9
 
9
10
  #import <WebRTC/RTCCVPixelBuffer.h>
10
11
  #import <WebRTC/RTCVideoFrame.h>
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@stream-io/video-react-native-sdk",
3
- "version": "1.20.1",
3
+ "version": "1.20.3",
4
4
  "description": "Stream Video SDK for React Native",
5
5
  "author": "https://getstream.io",
6
6
  "homepage": "https://getstream.io/video/docs/react-native/",
@@ -45,8 +45,8 @@
45
45
  "!**/.*"
46
46
  ],
47
47
  "dependencies": {
48
- "@stream-io/video-client": "1.27.1",
49
- "@stream-io/video-react-bindings": "1.7.10",
48
+ "@stream-io/video-client": "1.27.2",
49
+ "@stream-io/video-react-bindings": "1.7.11",
50
50
  "intl-pluralrules": "2.0.1",
51
51
  "lodash.merge": "^4.6.2",
52
52
  "react-native-url-polyfill": "1.3.0",
@@ -60,7 +60,7 @@
60
60
  "@react-native-firebase/app": ">=17.5.0",
61
61
  "@react-native-firebase/messaging": ">=17.5.0",
62
62
  "@stream-io/noise-cancellation-react-native": ">=0.1.0",
63
- "@stream-io/react-native-webrtc": ">=125.4.0",
63
+ "@stream-io/react-native-webrtc": ">=125.4.1",
64
64
  "@stream-io/video-filters-react-native": ">=0.1.0",
65
65
  "expo": ">=47.0.0",
66
66
  "expo-build-properties": "*",
@@ -125,9 +125,9 @@
125
125
  "@react-native-firebase/app": "^22.1.0",
126
126
  "@react-native-firebase/messaging": "^22.1.0",
127
127
  "@react-native/babel-preset": "^0.79.2",
128
- "@stream-io/noise-cancellation-react-native": "^0.2.0",
129
- "@stream-io/react-native-webrtc": "^125.4.0",
130
- "@stream-io/video-filters-react-native": "^0.6.0",
128
+ "@stream-io/noise-cancellation-react-native": "^0.2.1",
129
+ "@stream-io/react-native-webrtc": "125.4.1",
130
+ "@stream-io/video-filters-react-native": "^0.6.1",
131
131
  "@testing-library/jest-native": "^5.4.3",
132
132
  "@testing-library/react-native": "13.2.0",
133
133
  "@tsconfig/node14": "14.1.3",
@@ -3,14 +3,21 @@ import {
3
3
  getLogger,
4
4
  hasScreenShare,
5
5
  speakerLayoutSortPreset,
6
+ type StreamVideoParticipant,
7
+ type VideoTrackType,
6
8
  } from '@stream-io/video-client';
7
9
  import { useCall, useCallStateHooks } from '@stream-io/video-react-bindings';
8
10
  import type { MediaStream } from '@stream-io/react-native-webrtc';
9
- import React, { useEffect, useMemo } from 'react';
11
+ import React, { useEffect, useMemo, useCallback } from 'react';
10
12
  import { findNodeHandle } from 'react-native';
11
- import { onNativeCallClosed, RTCViewPipNative } from './RTCViewPipNative';
13
+ import {
14
+ onNativeCallClosed,
15
+ onNativeDimensionsUpdated,
16
+ RTCViewPipNative,
17
+ } from './RTCViewPipNative';
12
18
  import { useDebouncedValue } from '../../../utils/hooks';
13
19
  import { shouldDisableIOSLocalVideoOnBackgroundRef } from '../../../utils/internal/shouldDisableIOSLocalVideoOnBackground';
20
+ import { useTrackDimensions } from '../../../hooks/useTrackDimensions';
14
21
 
15
22
  type Props = {
16
23
  includeLocalParticipantVideo?: boolean;
@@ -32,7 +39,8 @@ export const RTCViewPipIOS = React.memo((props: Props) => {
32
39
 
33
40
  // show the dominant remote speaker in PiP mode
34
41
  // local speaker is shown only if remote doesn't exist
35
- let participantInSpotlight = dominantSpeaker;
42
+ let participantInSpotlight: StreamVideoParticipant | undefined =
43
+ dominantSpeaker;
36
44
  if (dominantSpeaker?.isLocalParticipant && dominantSpeaker2) {
37
45
  participantInSpotlight = dominantSpeaker2;
38
46
  }
@@ -80,23 +88,64 @@ export const RTCViewPipIOS = React.memo((props: Props) => {
80
88
  };
81
89
  }, [call]);
82
90
 
83
- const streamURL = useMemo(() => {
84
- if (!participantInSpotlight) {
85
- return undefined;
91
+ const onDimensionsUpdated = useCallback((width: number, height: number) => {
92
+ const node = findNodeHandle(nativeRef.current);
93
+ if (node !== null && width > 0 && height > 0) {
94
+ onNativeDimensionsUpdated(node, width, height);
86
95
  }
96
+ }, []);
87
97
 
88
- const { videoStream, screenShareStream } = participantInSpotlight;
98
+ const { videoStream, screenShareStream } = participantInSpotlight || {};
89
99
 
90
- const isScreenSharing = hasScreenShare(participantInSpotlight);
100
+ const isScreenSharing = participantInSpotlight
101
+ ? hasScreenShare(participantInSpotlight)
102
+ : false;
91
103
 
92
- const videoStreamToRender = (isScreenSharing
93
- ? screenShareStream
94
- : videoStream) as unknown as MediaStream | undefined;
104
+ const videoStreamToRender = (isScreenSharing
105
+ ? screenShareStream
106
+ : videoStream) as unknown as MediaStream | undefined;
95
107
 
108
+ const streamURL = useMemo(() => {
109
+ if (!videoStreamToRender) {
110
+ return undefined;
111
+ }
96
112
  return videoStreamToRender?.toURL();
97
- }, [participantInSpotlight]);
113
+ }, [videoStreamToRender]);
98
114
 
99
- return <RTCViewPipNative streamURL={streamURL} ref={nativeRef} />;
115
+ return (
116
+ <>
117
+ <RTCViewPipNative streamURL={streamURL} ref={nativeRef} />
118
+ {participantInSpotlight && (
119
+ <DimensionsUpdatedRenderless
120
+ participant={participantInSpotlight}
121
+ trackType={isScreenSharing ? 'screenShareTrack' : 'videoTrack'}
122
+ onDimensionsUpdated={onDimensionsUpdated}
123
+ key={streamURL}
124
+ />
125
+ )}
126
+ </>
127
+ );
100
128
  });
101
129
 
130
+ const DimensionsUpdatedRenderless = React.memo(
131
+ ({
132
+ participant,
133
+ trackType,
134
+ onDimensionsUpdated,
135
+ }: {
136
+ participant: StreamVideoParticipant;
137
+ trackType: VideoTrackType;
138
+ onDimensionsUpdated: (width: number, height: number) => void;
139
+ }) => {
140
+ const { width, height } = useTrackDimensions(participant, trackType);
141
+
142
+ useEffect(() => {
143
+ onDimensionsUpdated(width, height);
144
+ }, [width, height, onDimensionsUpdated]);
145
+
146
+ return null;
147
+ },
148
+ );
149
+
150
+ DimensionsUpdatedRenderless.displayName = 'DimensionsUpdatedRenderless';
102
151
  RTCViewPipIOS.displayName = 'RTCViewPipIOS';
@@ -19,11 +19,26 @@ const NativeComponent: HostComponent<RTCViewPipNativeProps> =
19
19
 
20
20
  export function onNativeCallClosed(reactTag: number) {
21
21
  getLogger(['RTCViewPipNative'])('debug', 'onNativeCallClosed');
22
- UIManager.dispatchViewManagerCommand(
23
- reactTag,
24
- UIManager.getViewManagerConfig(COMPONENT_NAME).Commands.onCallClosed,
25
- [],
26
- );
22
+ const commandId =
23
+ UIManager.getViewManagerConfig(COMPONENT_NAME).Commands.onCallClosed;
24
+ if (!commandId) return;
25
+ UIManager.dispatchViewManagerCommand(reactTag, commandId, []);
26
+ }
27
+
28
+ export function onNativeDimensionsUpdated(
29
+ reactTag: number,
30
+ width: number,
31
+ height: number,
32
+ ) {
33
+ getLogger(['RTCViewPipNative'])('debug', 'onNativeDimensionsUpdated', {
34
+ width,
35
+ height,
36
+ });
37
+ const commandId =
38
+ UIManager.getViewManagerConfig(COMPONENT_NAME).Commands
39
+ .setPreferredContentSize;
40
+ if (!commandId) return;
41
+ UIManager.dispatchViewManagerCommand(reactTag, commandId, [width, height]);
27
42
  }
28
43
 
29
44
  /** Wrapper for the native view
@@ -12,7 +12,7 @@ import { useIsIosScreenshareBroadcastStarted } from './useIsIosScreenshareBroadc
12
12
  // ios >= 14.0 or android - platform restrictions
13
13
  const CanDeviceScreenShare =
14
14
  (Platform.OS === 'ios' &&
15
- Number.parseInt(Platform.Version.split('.')[0], 10) >= 14) ||
15
+ Number.parseInt(Platform.Version?.split('.')[0] ?? '0', 10) >= 14) ||
16
16
  Platform.OS === 'android';
17
17
 
18
18
  export const useScreenShareButton = (
@@ -34,7 +34,7 @@ export function useTrackDimensions(
34
34
 
35
35
  // Set up videoTrackDimensionChanged event listener for more direct dimension updates
36
36
  useEffect(() => {
37
- if (!trackId || !NativeModules.WebRTCModule) return;
37
+ if (!trackId || !track) return;
38
38
 
39
39
  const handleVideoTrackDimensionChanged = (eventData: {
40
40
  pcId: string;
@@ -46,16 +46,27 @@ export function useTrackDimensions(
46
46
  if (eventData.trackId === trackId) {
47
47
  setTrackDimensions((prev) => {
48
48
  if (
49
- prev.width !== eventData.width ||
50
- prev.height !== eventData.height
49
+ prev.width === eventData.width &&
50
+ prev.height === eventData.height
51
51
  ) {
52
- return { width: eventData.width, height: eventData.height };
52
+ return prev;
53
53
  }
54
- return prev;
54
+ return { width: eventData.width, height: eventData.height };
55
55
  });
56
56
  }
57
57
  };
58
58
 
59
+ const { width, height } = track.getSettings();
60
+ setTrackDimensions((prev) => {
61
+ if (prev.width === width && prev.height === height) {
62
+ return prev;
63
+ }
64
+ return {
65
+ width: width ?? 0,
66
+ height: height ?? 0,
67
+ };
68
+ });
69
+
59
70
  const subscription = webRTCEventEmitter.addListener(
60
71
  'videoTrackDimensionChanged',
61
72
  handleVideoTrackDimensionChanged,
package/src/version.ts CHANGED
@@ -1 +1 @@
1
- export const version = '1.20.1';
1
+ export const version = '1.20.3';