@fishjam-cloud/react-native-client 0.6.0 → 0.8.0
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/README.md +6 -6
- package/android/build.gradle +6 -2
- package/android/src/main/java/io/fishjam/reactnative/EmitableEvents.kt +4 -2
- package/android/src/main/java/io/fishjam/reactnative/RNFishjamClient.kt +60 -39
- package/android/src/main/java/io/fishjam/reactnative/RNFishjamClientModule.kt +11 -19
- package/build/RNFishjamClientModule.d.ts +24 -8
- package/build/RNFishjamClientModule.d.ts.map +1 -1
- package/build/RNFishjamClientModule.js +0 -1
- package/build/RNFishjamClientModule.js.map +1 -1
- package/build/common/client.d.ts +4 -4
- package/build/common/client.d.ts.map +1 -1
- package/build/common/client.js +4 -4
- package/build/common/client.js.map +1 -1
- package/build/common/metadata.d.ts +1 -0
- package/build/common/metadata.d.ts.map +1 -1
- package/build/common/metadata.js +1 -0
- package/build/common/metadata.js.map +1 -1
- package/build/components/FishjamRoom/index.d.ts +21 -0
- package/build/components/FishjamRoom/index.d.ts.map +1 -1
- package/build/components/FishjamRoom/index.js +29 -9
- package/build/components/FishjamRoom/index.js.map +1 -1
- package/build/components/VideoPreviewView.d.ts +7 -3
- package/build/components/VideoPreviewView.d.ts.map +1 -1
- package/build/components/VideoPreviewView.js +5 -1
- package/build/components/VideoPreviewView.js.map +1 -1
- package/build/components/VideoRendererView.d.ts +13 -0
- package/build/components/VideoRendererView.d.ts.map +1 -1
- package/build/components/VideoRendererView.js +13 -0
- package/build/components/VideoRendererView.js.map +1 -1
- package/build/hooks/internal/useFishjamEvent.d.ts +3 -2
- package/build/hooks/internal/useFishjamEvent.d.ts.map +1 -1
- package/build/hooks/internal/useFishjamEvent.js +25 -1
- package/build/hooks/internal/useFishjamEvent.js.map +1 -1
- package/build/hooks/internal/useFishjamEventState.d.ts +2 -2
- package/build/hooks/internal/useFishjamEventState.d.ts.map +1 -1
- package/build/hooks/internal/useFishjamEventState.js.map +1 -1
- package/build/hooks/useAppScreenShare.d.ts +10 -1
- package/build/hooks/useAppScreenShare.d.ts.map +1 -1
- package/build/hooks/useAppScreenShare.js +9 -7
- package/build/hooks/useAppScreenShare.js.map +1 -1
- package/build/hooks/useAudioSettings.d.ts +4 -0
- package/build/hooks/useAudioSettings.d.ts.map +1 -1
- package/build/hooks/useAudioSettings.js.map +1 -1
- package/build/hooks/useBandwidthEstimation.d.ts +3 -0
- package/build/hooks/useBandwidthEstimation.d.ts.map +1 -1
- package/build/hooks/useBandwidthEstimation.js +6 -1
- package/build/hooks/useBandwidthEstimation.js.map +1 -1
- package/build/hooks/useCamera.d.ts +12 -35
- package/build/hooks/useCamera.d.ts.map +1 -1
- package/build/hooks/useCamera.js +11 -60
- package/build/hooks/useCamera.js.map +1 -1
- package/build/hooks/useConnection.d.ts +29 -13
- package/build/hooks/useConnection.d.ts.map +1 -1
- package/build/hooks/useConnection.js +11 -5
- package/build/hooks/useConnection.js.map +1 -1
- package/build/hooks/useForegroundService.d.ts +20 -11
- package/build/hooks/useForegroundService.d.ts.map +1 -1
- package/build/hooks/useForegroundService.js +2 -3
- package/build/hooks/useForegroundService.js.map +1 -1
- package/build/hooks/useMicrophone.js.map +1 -1
- package/build/hooks/usePeerStatus.d.ts +2 -10
- package/build/hooks/usePeerStatus.d.ts.map +1 -1
- package/build/hooks/usePeerStatus.js +1 -0
- package/build/hooks/usePeerStatus.js.map +1 -1
- package/build/hooks/usePeers.d.ts +19 -22
- package/build/hooks/usePeers.d.ts.map +1 -1
- package/build/hooks/usePeers.js +17 -5
- package/build/hooks/usePeers.js.map +1 -1
- package/build/hooks/useReconnection.d.ts +2 -2
- package/build/hooks/useReconnection.d.ts.map +1 -1
- package/build/hooks/useReconnection.js +1 -0
- package/build/hooks/useReconnection.js.map +1 -1
- package/build/hooks/useScreenShare.d.ts +2 -23
- package/build/hooks/useScreenShare.d.ts.map +1 -1
- package/build/hooks/useScreenShare.js +1 -36
- package/build/hooks/useScreenShare.js.map +1 -1
- package/build/index.d.ts +6 -7
- package/build/index.d.ts.map +1 -1
- package/build/index.js +0 -2
- package/build/index.js.map +1 -1
- package/build/types.d.ts +3 -19
- package/build/types.d.ts.map +1 -1
- package/build/types.js.map +1 -1
- package/build/utils/eventPayloadValidator.d.ts +3 -0
- package/build/utils/eventPayloadValidator.d.ts.map +1 -0
- package/build/utils/eventPayloadValidator.js +85 -0
- package/build/utils/eventPayloadValidator.js.map +1 -0
- package/ios/Events.swift +4 -1
- package/ios/RNFishjamClient.podspec +1 -1
- package/ios/RNFishjamClient.swift +60 -48
- package/ios/RNFishjamClientModule.swift +5 -10
- package/ios/VideoPreviewView.swift +5 -0
- package/ios/VideoRendererView.swift +5 -0
- package/package.json +21 -14
- package/plugin/build/withFishjamAndroid.js +1 -0
- package/plugin/build/withFishjamIos.js +17 -7
- package/build/common/webRTC.d.ts +0 -14
- package/build/common/webRTC.d.ts.map +0 -1
- package/build/common/webRTC.js +0 -15
- package/build/common/webRTC.js.map +0 -1
- /package/{LICENSE → LICENSE.txt} +0 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/components/FishjamRoom/index.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAClC,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AAC1D,OAAO,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AAClD,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC1C,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/components/FishjamRoom/index.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAClC,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AAC1D,OAAO,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AAClD,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC1C,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAa5C;;;;;;;;;;;;;;GAcG;AACH,MAAM,CAAC,MAAM,WAAW,GAAG,CAAC,EAAE,UAAU,EAAE,SAAS,EAAoB,EAAE,EAAE;IACzE,MAAM,EAAE,aAAa,EAAE,GAAG,SAAS,EAAE,CAAC;IAEtC,SAAS,CAAC,GAAG,EAAE;QACb,MAAM,IAAI,GAAG,KAAK,IAAI,EAAE;YACtB,IAAI,CAAC;gBACH,MAAM,aAAa,CAAC;oBAClB,gBAAgB,EAAE,IAAI;oBACtB,OAAO,EAAE,OAAO;oBAChB,aAAa,EAAE,IAAI;iBACpB,CAAC,CAAC;gBACH,MAAM,QAAQ,CAAC,UAAU,EAAE,SAAS,EAAE;oBACpC,IAAI,EAAE,EAAE;oBACR,MAAM,EAAE,EAAE;iBACX,CAAC,CAAC;YACL,CAAC;YAAC,OAAO,CAAC,EAAE,CAAC;gBACX,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAClB,CAAC;QACH,CAAC,CAAC;QACF,IAAI,EAAE,CAAC;QACP,OAAO,GAAG,EAAE;YACV,SAAS,EAAE,CAAC;QACd,CAAC,CAAC;IACJ,CAAC,EAAE,CAAC,UAAU,EAAE,SAAS,EAAE,aAAa,CAAC,CAAC,CAAC;IAE3C,OAAO,CACL,CAAC,YAAY,CACX;MAAA,CAAC,UAAU,CAAC,AAAD,EACb;IAAA,EAAE,YAAY,CAAC,CAChB,CAAC;AACJ,CAAC,CAAC","sourcesContent":["import { useEffect } from 'react';\nimport { joinRoom, leaveRoom } from '../../common/client';\nimport { useCamera } from '../../hooks/useCamera';\nimport { VideosGrid } from './VideosGrid';\nimport { SafeAreaView } from 'react-native';\n\nexport type FishjamRoomProps = {\n /**\n * URL to your fishjam instance\n */\n fishjamUrl: string;\n /**\n * Peer Token\n */\n peerToken: string;\n};\n\n/**\n * Simple component that enables your camera and show all tracks\n *\n * Example usage:\n * ```tsx\n * <FishjamRoom\n * fishjamUrl={FISHJAM_URL}\n * peerToken={PEER_TOKEN}\n * />\n * ```\n * @category Components\n * @param {object} props\n * @param {string} props.fishjamUrl\n * @param {string} props.peerToken\n */\nexport const FishjamRoom = ({ fishjamUrl, peerToken }: FishjamRoomProps) => {\n const { prepareCamera } = useCamera();\n\n useEffect(() => {\n const join = async () => {\n try {\n await prepareCamera({\n simulcastEnabled: true,\n quality: 'HD169',\n cameraEnabled: true,\n });\n await joinRoom(fishjamUrl, peerToken, {\n peer: {},\n server: {},\n });\n } catch (e) {\n console.warn(e);\n }\n };\n join();\n return () => {\n leaveRoom();\n };\n }, [fishjamUrl, peerToken, prepareCamera]);\n\n return (\n <SafeAreaView>\n <VideosGrid />\n </SafeAreaView>\n );\n};\n"]}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import * as React from 'react';
|
|
2
|
-
import { ViewStyle } from 'react-native';
|
|
2
|
+
import { StyleProp, ViewStyle } from 'react-native';
|
|
3
3
|
import { VideoLayout } from '../types';
|
|
4
4
|
import { CameraId } from '../hooks/useCamera';
|
|
5
5
|
export type VideoPreviewViewProps = {
|
|
@@ -8,7 +8,7 @@ export type VideoPreviewViewProps = {
|
|
|
8
8
|
* @default `FILL`
|
|
9
9
|
*/
|
|
10
10
|
videoLayout?: VideoLayout;
|
|
11
|
-
style?: ViewStyle
|
|
11
|
+
style?: StyleProp<ViewStyle>;
|
|
12
12
|
/**
|
|
13
13
|
* Id of the camera used for preview. Get available cameras with `cameras` property.
|
|
14
14
|
* @default the first front camera
|
|
@@ -17,8 +17,12 @@ export type VideoPreviewViewProps = {
|
|
|
17
17
|
};
|
|
18
18
|
/**
|
|
19
19
|
* Render camera preview.
|
|
20
|
-
* Allows to display camera preview
|
|
20
|
+
* Allows to display camera preview before streaming is started
|
|
21
|
+
*
|
|
22
|
+
*
|
|
21
23
|
* @category Components
|
|
24
|
+
* @param {object} props
|
|
25
|
+
* @param {string} props.cameraId
|
|
22
26
|
*/
|
|
23
27
|
export declare const VideoPreviewView: React.ForwardRefExoticComponent<VideoPreviewViewProps & React.RefAttributes<React.ComponentType<VideoPreviewViewProps>>>;
|
|
24
28
|
//# sourceMappingURL=VideoPreviewView.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"VideoPreviewView.d.ts","sourceRoot":"","sources":["../../src/components/VideoPreviewView.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAC/B,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;
|
|
1
|
+
{"version":3,"file":"VideoPreviewView.d.ts","sourceRoot":"","sources":["../../src/components/VideoPreviewView.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAC/B,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAEpD,OAAO,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AACvC,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAE9C,MAAM,MAAM,qBAAqB,GAAG;IAClC;;;OAGG;IACH,WAAW,CAAC,EAAE,WAAW,CAAC;IAE1B,KAAK,CAAC,EAAE,SAAS,CAAC,SAAS,CAAC,CAAC;IAC7B;;;OAGG;IACH,QAAQ,CAAC,EAAE,QAAQ,CAAC;CACrB,CAAC;AAKF;;;;;;;;GAQG;AACH,eAAO,MAAM,gBAAgB,0HAM3B,CAAC"}
|
|
@@ -3,8 +3,12 @@ import * as React from 'react';
|
|
|
3
3
|
const NativeView = requireNativeViewManager('VideoPreviewViewModule');
|
|
4
4
|
/**
|
|
5
5
|
* Render camera preview.
|
|
6
|
-
* Allows to display camera preview
|
|
6
|
+
* Allows to display camera preview before streaming is started
|
|
7
|
+
*
|
|
8
|
+
*
|
|
7
9
|
* @category Components
|
|
10
|
+
* @param {object} props
|
|
11
|
+
* @param {string} props.cameraId
|
|
8
12
|
*/
|
|
9
13
|
export const VideoPreviewView = React.forwardRef((props, ref) => (
|
|
10
14
|
// @ts-expect-error ref prop needs to be updated
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"VideoPreviewView.js","sourceRoot":"","sources":["../../src/components/VideoPreviewView.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,wBAAwB,EAAE,MAAM,mBAAmB,CAAC;AAC7D,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"VideoPreviewView.js","sourceRoot":"","sources":["../../src/components/VideoPreviewView.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,wBAAwB,EAAE,MAAM,mBAAmB,CAAC;AAC7D,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAqB/B,MAAM,UAAU,GACd,wBAAwB,CAAC,wBAAwB,CAAC,CAAC;AAErD;;;;;;;;GAQG;AACH,MAAM,CAAC,MAAM,gBAAgB,GAAG,KAAK,CAAC,UAAU,CAG9C,CAAC,KAAK,EAAE,GAAG,EAAE,EAAE,CAAC;AAChB,gDAAgD;AAChD,CAAC,UAAU,CAAC,IAAI,KAAK,CAAC,CAAC,eAAe,CAAC,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,EAAG,CACrE,CAAC,CAAC","sourcesContent":["import { requireNativeViewManager } from 'expo-modules-core';\nimport * as React from 'react';\nimport { StyleProp, ViewStyle } from 'react-native';\n\nimport { VideoLayout } from '../types';\nimport { CameraId } from '../hooks/useCamera';\n\nexport type VideoPreviewViewProps = {\n /**\n * Video layout inside of the component\n * @default `FILL`\n */\n videoLayout?: VideoLayout;\n\n style?: StyleProp<ViewStyle>;\n /**\n * Id of the camera used for preview. Get available cameras with `cameras` property.\n * @default the first front camera\n */\n cameraId?: CameraId;\n};\n\nconst NativeView: React.ComponentType<VideoPreviewViewProps> =\n requireNativeViewManager('VideoPreviewViewModule');\n\n/**\n * Render camera preview.\n * Allows to display camera preview before streaming is started\n *\n *\n * @category Components\n * @param {object} props\n * @param {string} props.cameraId\n */\nexport const VideoPreviewView = React.forwardRef<\n React.ComponentType<VideoPreviewViewProps>,\n VideoPreviewViewProps\n>((props, ref) => (\n // @ts-expect-error ref prop needs to be updated\n <NativeView {...props} captureDeviceId={props.cameraId} ref={ref} />\n));\n"]}
|
|
@@ -20,7 +20,20 @@ export type VideoRendererProps = {
|
|
|
20
20
|
};
|
|
21
21
|
/**
|
|
22
22
|
* Render video track received from {@link usePeers} hook
|
|
23
|
+
*
|
|
24
|
+
* Example usage:
|
|
25
|
+
* ```tsx
|
|
26
|
+
* <VideoRendererView
|
|
27
|
+
* trackId={peer.track.id}
|
|
28
|
+
* videoLayout="FIT"
|
|
29
|
+
* style={styles.videoContent}
|
|
30
|
+
* />
|
|
31
|
+
* ```
|
|
32
|
+
*
|
|
23
33
|
* @category Components
|
|
34
|
+
*
|
|
35
|
+
* @param {Object} props
|
|
36
|
+
* @param props.trackId
|
|
24
37
|
*/
|
|
25
38
|
export declare const VideoRendererView: React.ForwardRefExoticComponent<VideoRendererProps & React.RefAttributes<React.ComponentType<VideoRendererProps>>>;
|
|
26
39
|
//# sourceMappingURL=VideoRendererView.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"VideoRendererView.d.ts","sourceRoot":"","sources":["../../src/components/VideoRendererView.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAC/B,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAEzC,OAAO,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AACvC,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAC;AAEjD,MAAM,MAAM,kBAAkB,GAAG;IAC/B;;OAEG;IACH,OAAO,EAAE,OAAO,CAAC;IACjB;;;OAGG;IACH,WAAW,CAAC,EAAE,WAAW,CAAC;IAC1B;;OAEG;IACH,4BAA4B,CAAC,EAAE,OAAO,CAAC;IACvC,KAAK,CAAC,EAAE,SAAS,CAAC;CACnB,CAAC;AAKF
|
|
1
|
+
{"version":3,"file":"VideoRendererView.d.ts","sourceRoot":"","sources":["../../src/components/VideoRendererView.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAC/B,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAEzC,OAAO,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AACvC,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,mBAAmB,CAAC;AAEjD,MAAM,MAAM,kBAAkB,GAAG;IAC/B;;OAEG;IACH,OAAO,EAAE,OAAO,CAAC;IACjB;;;OAGG;IACH,WAAW,CAAC,EAAE,WAAW,CAAC;IAC1B;;OAEG;IACH,4BAA4B,CAAC,EAAE,OAAO,CAAC;IACvC,KAAK,CAAC,EAAE,SAAS,CAAC;CACnB,CAAC;AAKF;;;;;;;;;;;;;;;;GAgBG;AACH,eAAO,MAAM,iBAAiB,oHAM5B,CAAC"}
|
|
@@ -3,7 +3,20 @@ import * as React from 'react';
|
|
|
3
3
|
const NativeView = requireNativeViewManager('VideoRendererViewModule');
|
|
4
4
|
/**
|
|
5
5
|
* Render video track received from {@link usePeers} hook
|
|
6
|
+
*
|
|
7
|
+
* Example usage:
|
|
8
|
+
* ```tsx
|
|
9
|
+
* <VideoRendererView
|
|
10
|
+
* trackId={peer.track.id}
|
|
11
|
+
* videoLayout="FIT"
|
|
12
|
+
* style={styles.videoContent}
|
|
13
|
+
* />
|
|
14
|
+
* ```
|
|
15
|
+
*
|
|
6
16
|
* @category Components
|
|
17
|
+
*
|
|
18
|
+
* @param {Object} props
|
|
19
|
+
* @param props.trackId
|
|
7
20
|
*/
|
|
8
21
|
export const VideoRendererView = React.forwardRef((props, ref) => (
|
|
9
22
|
// @ts-expect-error ref prop needs to be updated
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"VideoRendererView.js","sourceRoot":"","sources":["../../src/components/VideoRendererView.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,wBAAwB,EAAE,MAAM,mBAAmB,CAAC;AAC7D,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAuB/B,MAAM,UAAU,GACd,wBAAwB,CAAC,yBAAyB,CAAC,CAAC;AAEtD
|
|
1
|
+
{"version":3,"file":"VideoRendererView.js","sourceRoot":"","sources":["../../src/components/VideoRendererView.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,wBAAwB,EAAE,MAAM,mBAAmB,CAAC;AAC7D,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAuB/B,MAAM,UAAU,GACd,wBAAwB,CAAC,yBAAyB,CAAC,CAAC;AAEtD;;;;;;;;;;;;;;;;GAgBG;AACH,MAAM,CAAC,MAAM,iBAAiB,GAAG,KAAK,CAAC,UAAU,CAG/C,CAAC,KAAK,EAAE,GAAG,EAAE,EAAE,CAAC;AAChB,gDAAgD;AAChD,CAAC,UAAU,CAAC,IAAI,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,EAAG,CACpC,CAAC,CAAC","sourcesContent":["import { requireNativeViewManager } from 'expo-modules-core';\nimport * as React from 'react';\nimport { ViewStyle } from 'react-native';\n\nimport { VideoLayout } from '../types';\nimport type { TrackId } from '../hooks/usePeers';\n\nexport type VideoRendererProps = {\n /**\n * id of the video track which you want to render.\n */\n trackId: TrackId;\n /**\n * Video layout inside of the component\n * @default `FILL`\n */\n videoLayout?: VideoLayout;\n /**\n * Whether the video should be rendered if it's off screen or hidden.\n */\n skipRenderOutsideVisibleArea?: boolean;\n style?: ViewStyle;\n};\n\nconst NativeView: React.ComponentType<VideoRendererProps> =\n requireNativeViewManager('VideoRendererViewModule');\n\n/**\n * Render video track received from {@link usePeers} hook\n *\n * Example usage:\n * ```tsx\n * <VideoRendererView\n * trackId={peer.track.id}\n * videoLayout=\"FIT\"\n * style={styles.videoContent}\n * />\n * ```\n *\n * @category Components\n *\n * @param {Object} props\n * @param props.trackId\n */\nexport const VideoRendererView = React.forwardRef<\n React.ComponentType<VideoRendererProps>,\n VideoRendererProps\n>((props, ref) => (\n // @ts-expect-error ref prop needs to be updated\n <NativeView {...props} ref={ref} />\n));\n"]}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
-
import { ReceivableEvents } from '../../RNFishjamClientModule';
|
|
2
|
-
export declare function useFishjamEvent<T
|
|
1
|
+
import { ReceivableEvents, ReceivableEventPayloads } from '../../RNFishjamClientModule';
|
|
2
|
+
export declare function useFishjamEvent<T extends keyof typeof ReceivableEvents>(eventName: T, callback: (event: ReceivableEventPayloads[T]) => void): void;
|
|
3
|
+
export declare function validateAndLogEventPayload<T extends keyof typeof ReceivableEvents>(eventName: T, payload: ReceivableEventPayloads[T]): void;
|
|
3
4
|
//# sourceMappingURL=useFishjamEvent.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useFishjamEvent.d.ts","sourceRoot":"","sources":["../../../src/hooks/internal/useFishjamEvent.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"useFishjamEvent.d.ts","sourceRoot":"","sources":["../../../src/hooks/internal/useFishjamEvent.ts"],"names":[],"mappings":"AAEA,OAAqB,EACnB,gBAAgB,EAChB,uBAAuB,EACxB,MAAM,6BAA6B,CAAC;AAGrC,wBAAgB,eAAe,CAAC,CAAC,SAAS,MAAM,OAAO,gBAAgB,EACrE,SAAS,EAAE,CAAC,EACZ,QAAQ,EAAE,CAAC,KAAK,EAAE,uBAAuB,CAAC,CAAC,CAAC,KAAK,IAAI,QActD;AAED,wBAAgB,0BAA0B,CACxC,CAAC,SAAS,MAAM,OAAO,gBAAgB,EACvC,SAAS,EAAE,CAAC,EAAE,OAAO,EAAE,uBAAuB,CAAC,CAAC,CAAC,GAAG,IAAI,CAsBzD"}
|
|
@@ -1,11 +1,35 @@
|
|
|
1
|
+
import { ZodError } from 'zod';
|
|
1
2
|
import { useEffect } from 'react';
|
|
2
3
|
import nativeModule from '../../RNFishjamClientModule';
|
|
4
|
+
import { validateNativeEventPayload } from '../../utils/eventPayloadValidator';
|
|
3
5
|
export function useFishjamEvent(eventName, callback) {
|
|
4
6
|
useEffect(() => {
|
|
5
7
|
const eventListener = nativeModule.addListener(eventName, (event) => {
|
|
6
|
-
|
|
8
|
+
const payload = event[eventName];
|
|
9
|
+
if (__DEV__) {
|
|
10
|
+
validateAndLogEventPayload(eventName, payload);
|
|
11
|
+
}
|
|
12
|
+
callback(payload);
|
|
7
13
|
});
|
|
8
14
|
return () => eventListener.remove();
|
|
9
15
|
}, [callback, eventName]);
|
|
10
16
|
}
|
|
17
|
+
export function validateAndLogEventPayload(eventName, payload) {
|
|
18
|
+
// Double check just to make sure
|
|
19
|
+
if (!__DEV__)
|
|
20
|
+
return;
|
|
21
|
+
try {
|
|
22
|
+
validateNativeEventPayload(eventName, payload);
|
|
23
|
+
}
|
|
24
|
+
catch (error) {
|
|
25
|
+
if (error instanceof ZodError) {
|
|
26
|
+
console.error(`Invalid payload received for event ${eventName}:\n`, error.errors
|
|
27
|
+
.map((err) => `- ${err.path.join('.')}: ${err.message}`)
|
|
28
|
+
.join('\n'), `\n Received:\n${JSON.stringify(payload, null, 2)}\n\n`);
|
|
29
|
+
}
|
|
30
|
+
else {
|
|
31
|
+
console.error(`Unexpected error validating payload for event ${eventName}:`, error);
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
}
|
|
11
35
|
//# sourceMappingURL=useFishjamEvent.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useFishjamEvent.js","sourceRoot":"","sources":["../../../src/hooks/internal/useFishjamEvent.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAClC,OAAO,
|
|
1
|
+
{"version":3,"file":"useFishjamEvent.js","sourceRoot":"","sources":["../../../src/hooks/internal/useFishjamEvent.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,KAAK,CAAC;AAC/B,OAAO,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAClC,OAAO,YAGN,MAAM,6BAA6B,CAAC;AACrC,OAAO,EAAE,0BAA0B,EAAE,MAAM,mCAAmC,CAAC;AAE/E,MAAM,UAAU,eAAe,CAC7B,SAAY,EACZ,QAAqD;IAErD,SAAS,CAAC,GAAG,EAAE;QACb,MAAM,aAAa,GAAG,YAAY,CAAC,WAAW,CAAC,SAAS,EAAE,CAAC,KAAK,EAAE,EAAE;YAClE,MAAM,OAAO,GAAG,KAAK,CAAC,SAAS,CAAC,CAAC;YAEjC,IAAI,OAAO,EAAE,CAAC;gBACZ,0BAA0B,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;YACjD,CAAC;YAED,QAAQ,CAAC,OAAO,CAAC,CAAC;QACpB,CAAC,CAAC,CAAC;QACH,OAAO,GAAG,EAAE,CAAC,aAAa,CAAC,MAAM,EAAE,CAAC;IACtC,CAAC,EAAE,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC,CAAC;AAC5B,CAAC;AAED,MAAM,UAAU,0BAA0B,CAExC,SAAY,EAAE,OAAmC;IACjD,iCAAiC;IACjC,IAAI,CAAC,OAAO;QAAE,OAAO;IAErB,IAAI,CAAC;QACH,0BAA0B,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;IACjD,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,IAAI,KAAK,YAAY,QAAQ,EAAE,CAAC;YAC9B,OAAO,CAAC,KAAK,CACX,sCAAsC,SAAS,KAAK,EACpD,KAAK,CAAC,MAAM;iBACT,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,KAAK,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,GAAG,CAAC,OAAO,EAAE,CAAC;iBACvD,IAAI,CAAC,IAAI,CAAC,EACb,iBAAiB,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,MAAM,CACxD,CAAC;QACJ,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,KAAK,CACX,iDAAiD,SAAS,GAAG,EAC7D,KAAK,CACN,CAAC;QACJ,CAAC;IACH,CAAC;AACH,CAAC","sourcesContent":["import { ZodError } from 'zod';\nimport { useEffect } from 'react';\nimport nativeModule, {\n ReceivableEvents,\n ReceivableEventPayloads,\n} from '../../RNFishjamClientModule';\nimport { validateNativeEventPayload } from '../../utils/eventPayloadValidator';\n\nexport function useFishjamEvent<T extends keyof typeof ReceivableEvents>(\n eventName: T,\n callback: (event: ReceivableEventPayloads[T]) => void,\n) {\n useEffect(() => {\n const eventListener = nativeModule.addListener(eventName, (event) => {\n const payload = event[eventName];\n\n if (__DEV__) {\n validateAndLogEventPayload(eventName, payload);\n }\n\n callback(payload);\n });\n return () => eventListener.remove();\n }, [callback, eventName]);\n}\n\nexport function validateAndLogEventPayload<\n T extends keyof typeof ReceivableEvents,\n>(eventName: T, payload: ReceivableEventPayloads[T]): void {\n // Double check just to make sure\n if (!__DEV__) return;\n\n try {\n validateNativeEventPayload(eventName, payload);\n } catch (error) {\n if (error instanceof ZodError) {\n console.error(\n `Invalid payload received for event ${eventName}:\\n`,\n error.errors\n .map((err) => `- ${err.path.join('.')}: ${err.message}`)\n .join('\\n'),\n `\\n Received:\\n${JSON.stringify(payload, null, 2)}\\n\\n`,\n );\n } else {\n console.error(\n `Unexpected error validating payload for event ${eventName}:`,\n error,\n );\n }\n }\n}\n"]}
|
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
import { ReceivableEvents } from '../../RNFishjamClientModule';
|
|
2
|
-
export declare function useFishjamEventState<
|
|
1
|
+
import { ReceivableEventPayloads, ReceivableEvents } from '../../RNFishjamClientModule';
|
|
2
|
+
export declare function useFishjamEventState<EventName extends keyof typeof ReceivableEvents, StateType = ReceivableEventPayloads[EventName]>(eventName: EventName, defaultValue: ReceivableEventPayloads[EventName], transform?: (eventValue: ReceivableEventPayloads[EventName]) => StateType): StateType;
|
|
3
3
|
//# sourceMappingURL=useFishjamEventState.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useFishjamEventState.d.ts","sourceRoot":"","sources":["../../../src/hooks/internal/useFishjamEventState.ts"],"names":[],"mappings":"AAEA,OAAO,
|
|
1
|
+
{"version":3,"file":"useFishjamEventState.d.ts","sourceRoot":"","sources":["../../../src/hooks/internal/useFishjamEventState.ts"],"names":[],"mappings":"AAEA,OAAO,EACL,uBAAuB,EACvB,gBAAgB,EACjB,MAAM,6BAA6B,CAAC;AAErC,wBAAgB,oBAAoB,CAClC,SAAS,SAAS,MAAM,OAAO,gBAAgB,EAC/C,SAAS,GAAG,uBAAuB,CAAC,SAAS,CAAC,EAE9C,SAAS,EAAE,SAAS,EACpB,YAAY,EAAE,uBAAuB,CAAC,SAAS,CAAC,EAChD,SAAS,CAAC,EAAE,CAAC,UAAU,EAAE,uBAAuB,CAAC,SAAS,CAAC,KAAK,SAAS,aAsB1E"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useFishjamEventState.js","sourceRoot":"","sources":["../../../src/hooks/internal/useFishjamEventState.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AAC9C,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;
|
|
1
|
+
{"version":3,"file":"useFishjamEventState.js","sourceRoot":"","sources":["../../../src/hooks/internal/useFishjamEventState.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AAC9C,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAMpD,MAAM,UAAU,oBAAoB,CAIlC,SAAoB,EACpB,YAAgD,EAChD,SAAyE;IAEzE,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,QAAQ,CAChC,SAAS;QACP,CAAC,CAAC,SAAS,CAAC,YAAY,CAAC;QACzB,CAAC,CAAE,YAAqC,CAC3C,CAAC;IAEF,MAAM,OAAO,GAAG,WAAW,CACzB,CAAC,QAA4C,EAAE,EAAE;QAC/C,IAAI,SAAS,EAAE,CAAC;YACd,QAAQ,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,CAAC;QAChC,CAAC;aAAM,CAAC;YACN,QAAQ,CAAC,QAAgC,CAAC,CAAC;QAC7C,CAAC;IACH,CAAC,EACD,CAAC,SAAS,CAAC,CACZ,CAAC;IAEF,eAAe,CAAY,SAAS,EAAE,OAAO,CAAC,CAAC;IAE/C,OAAO,KAAK,CAAC;AACf,CAAC","sourcesContent":["import { useCallback, useState } from 'react';\nimport { useFishjamEvent } from './useFishjamEvent';\nimport {\n ReceivableEventPayloads,\n ReceivableEvents,\n} from '../../RNFishjamClientModule';\n\nexport function useFishjamEventState<\n EventName extends keyof typeof ReceivableEvents,\n StateType = ReceivableEventPayloads[EventName],\n>(\n eventName: EventName,\n defaultValue: ReceivableEventPayloads[EventName],\n transform?: (eventValue: ReceivableEventPayloads[EventName]) => StateType,\n) {\n const [value, setValue] = useState<StateType>(\n transform\n ? transform(defaultValue)\n : (defaultValue as unknown as StateType),\n );\n\n const onEvent = useCallback(\n (newValue: ReceivableEventPayloads[EventName]) => {\n if (transform) {\n setValue(transform(newValue));\n } else {\n setValue(newValue as unknown as StateType);\n }\n },\n [transform],\n );\n\n useFishjamEvent<EventName>(eventName, onEvent);\n\n return value;\n}\n"]}
|
|
@@ -1,11 +1,20 @@
|
|
|
1
1
|
import { SimulcastConfig } from '../types';
|
|
2
2
|
import { ScreenShareOptions } from './useScreenShare';
|
|
3
|
-
type AppScreenShareData = {
|
|
3
|
+
export type AppScreenShareData = {
|
|
4
4
|
isAppScreenShareOn: boolean;
|
|
5
5
|
simulcastConfig: SimulcastConfig;
|
|
6
6
|
toggleAppScreenShare: (screenShareOptions?: Partial<ScreenShareOptions>) => Promise<void>;
|
|
7
7
|
};
|
|
8
8
|
declare function useDefaultAppScreenShareAndroid(): AppScreenShareData;
|
|
9
|
+
/**
|
|
10
|
+
* This hook can toggle client app screen sharing on/off and provides current screen share state.
|
|
11
|
+
*
|
|
12
|
+
* It works only on iOS.
|
|
13
|
+
*
|
|
14
|
+
* @returns An object with functions to manage app screen share on iOS and null on android.
|
|
15
|
+
* @category Connection
|
|
16
|
+
* @group Hooks
|
|
17
|
+
*/
|
|
9
18
|
export declare const useAppScreenShare: typeof useDefaultAppScreenShareAndroid;
|
|
10
19
|
export {};
|
|
11
20
|
//# sourceMappingURL=useAppScreenShare.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useAppScreenShare.d.ts","sourceRoot":"","sources":["../../src/hooks/useAppScreenShare.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,eAAe,EAAE,MAAM,UAAU,CAAC;AAC3C,OAAO,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AAWtD,
|
|
1
|
+
{"version":3,"file":"useAppScreenShare.d.ts","sourceRoot":"","sources":["../../src/hooks/useAppScreenShare.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,eAAe,EAAE,MAAM,UAAU,CAAC;AAC3C,OAAO,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AAWtD,MAAM,MAAM,kBAAkB,GAAG;IAC/B,kBAAkB,EAAE,OAAO,CAAC;IAC5B,eAAe,EAAE,eAAe,CAAC;IACjC,oBAAoB,EAAE,CACpB,kBAAkB,CAAC,EAAE,OAAO,CAAC,kBAAkB,CAAC,KAC7C,OAAO,CAAC,IAAI,CAAC,CAAC;CACpB,CAAC;AAwCF,iBAAS,+BAA+B,IAAI,kBAAkB,CAM7D;AAED;;;;;;;;GAQG;AACH,eAAO,MAAM,iBAAiB,wCAG5B,CAAC"}
|
|
@@ -4,15 +4,8 @@ import { Platform } from 'react-native';
|
|
|
4
4
|
import { useFishjamEventState } from './internal/useFishjamEventState';
|
|
5
5
|
const defaultSimulcastConfig = () => ({
|
|
6
6
|
enabled: false,
|
|
7
|
-
activeEncodings: [],
|
|
8
7
|
});
|
|
9
8
|
let screenShareSimulcastConfig = defaultSimulcastConfig();
|
|
10
|
-
/**
|
|
11
|
-
* This hook can toggle client app screen sharing on/off and provides current screen share state. It works only on iOS.
|
|
12
|
-
* @returns An object with functions to manage app screen share on iOS and null on android.
|
|
13
|
-
* @category Screenshare
|
|
14
|
-
* @group Hooks
|
|
15
|
-
*/
|
|
16
9
|
function useIosAppScreenShare() {
|
|
17
10
|
const isAppScreenShareOn = useFishjamEventState(ReceivableEvents.IsAppScreenShareOn, RNFishjamClientModule.isAppScreenShareOn);
|
|
18
11
|
const simulcastConfig = useFishjamEventState(ReceivableEvents.SimulcastConfigUpdate, screenShareSimulcastConfig);
|
|
@@ -45,6 +38,15 @@ function useDefaultAppScreenShareAndroid() {
|
|
|
45
38
|
toggleAppScreenShare: async () => { },
|
|
46
39
|
};
|
|
47
40
|
}
|
|
41
|
+
/**
|
|
42
|
+
* This hook can toggle client app screen sharing on/off and provides current screen share state.
|
|
43
|
+
*
|
|
44
|
+
* It works only on iOS.
|
|
45
|
+
*
|
|
46
|
+
* @returns An object with functions to manage app screen share on iOS and null on android.
|
|
47
|
+
* @category Connection
|
|
48
|
+
* @group Hooks
|
|
49
|
+
*/
|
|
48
50
|
export const useAppScreenShare = Platform.select({
|
|
49
51
|
ios: useIosAppScreenShare,
|
|
50
52
|
default: useDefaultAppScreenShareAndroid,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useAppScreenShare.js","sourceRoot":"","sources":["../../src/hooks/useAppScreenShare.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,OAAO,CAAC;AACpC,OAAO,qBAAqB,EAAE,EAC5B,gBAAgB,GACjB,MAAM,0BAA0B,CAAC;AAGlC,OAAO,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAC;AACxC,OAAO,EAAE,oBAAoB,EAAE,MAAM,iCAAiC,CAAC;AAEvE,MAAM,sBAAsB,GAAG,GAAG,EAAE,
|
|
1
|
+
{"version":3,"file":"useAppScreenShare.js","sourceRoot":"","sources":["../../src/hooks/useAppScreenShare.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,OAAO,CAAC;AACpC,OAAO,qBAAqB,EAAE,EAC5B,gBAAgB,GACjB,MAAM,0BAA0B,CAAC;AAGlC,OAAO,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAC;AACxC,OAAO,EAAE,oBAAoB,EAAE,MAAM,iCAAiC,CAAC;AAEvE,MAAM,sBAAsB,GAAG,GAAG,EAAE,CAClC,CAAC;IACC,OAAO,EAAE,KAAK;CACf,CAA2B,CAAC;AAE/B,IAAI,0BAA0B,GAAoB,sBAAsB,EAAE,CAAC;AAU3E,SAAS,oBAAoB;IAC3B,MAAM,kBAAkB,GAAG,oBAAoB,CAC7C,gBAAgB,CAAC,kBAAkB,EACnC,qBAAqB,CAAC,kBAAkB,CACzC,CAAC;IAEF,MAAM,eAAe,GAAG,oBAAoB,CAC1C,gBAAgB,CAAC,qBAAqB,EACtC,0BAA0B,CAC3B,CAAC;IAEF,MAAM,oBAAoB,GAAG,WAAW,CACtC,KAAK,EAAE,qBAAkD,EAAE,EAAE,EAAE;QAC7D,MAAM,OAAO,GAAG;YACd,GAAG,kBAAkB;YACrB,mBAAmB,EAAE;gBACnB,WAAW,EAAE,YAAY;gBACzB,IAAI,EAAE,kBAA2B;gBACjC,MAAM,EAAE,CAAC,kBAAkB;aAC5B;SACF,CAAC;QACF,MAAM,qBAAqB,CAAC,oBAAoB,CAAC,OAAO,CAAC,CAAC;QAC1D,0BAA0B,GAAG,sBAAsB,EAAE,CAAC,CAAC,kCAAkC;IAC3F,CAAC,EACD,CAAC,kBAAkB,CAAC,CACrB,CAAC;IAEF,OAAO;QACL,kBAAkB;QAClB,eAAe;QACf;;;WAGG;QACH,oBAAoB;KACrB,CAAC;AACJ,CAAC;AAED,SAAS,+BAA+B;IACtC,OAAO;QACL,kBAAkB,EAAE,KAAK;QACzB,eAAe,EAAE,sBAAsB,EAAE;QACzC,oBAAoB,EAAE,KAAK,IAAI,EAAE,GAAE,CAAC;KACrC,CAAC;AACJ,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,CAAC,MAAM,iBAAiB,GAAG,QAAQ,CAAC,MAAM,CAAC;IAC/C,GAAG,EAAE,oBAAoB;IACzB,OAAO,EAAE,+BAA+B;CACzC,CAAC,CAAC","sourcesContent":["import { useCallback } from 'react';\nimport RNFishjamClientModule, {\n ReceivableEvents,\n} from '../RNFishjamClientModule';\nimport { SimulcastConfig } from '../types';\nimport { ScreenShareOptions } from './useScreenShare';\nimport { Platform } from 'react-native';\nimport { useFishjamEventState } from './internal/useFishjamEventState';\n\nconst defaultSimulcastConfig = () =>\n ({\n enabled: false,\n }) satisfies SimulcastConfig;\n\nlet screenShareSimulcastConfig: SimulcastConfig = defaultSimulcastConfig();\n\nexport type AppScreenShareData = {\n isAppScreenShareOn: boolean;\n simulcastConfig: SimulcastConfig;\n toggleAppScreenShare: (\n screenShareOptions?: Partial<ScreenShareOptions>,\n ) => Promise<void>;\n};\n\nfunction useIosAppScreenShare(): AppScreenShareData {\n const isAppScreenShareOn = useFishjamEventState(\n ReceivableEvents.IsAppScreenShareOn,\n RNFishjamClientModule.isAppScreenShareOn,\n );\n\n const simulcastConfig = useFishjamEventState(\n ReceivableEvents.SimulcastConfigUpdate,\n screenShareSimulcastConfig,\n );\n\n const toggleAppScreenShare = useCallback(\n async (screenShareOptions: Partial<ScreenShareOptions> = {}) => {\n const options = {\n ...screenShareOptions,\n screenShareMetadata: {\n displayName: 'presenting',\n type: 'screenShareVideo' as const,\n active: !isAppScreenShareOn,\n },\n };\n await RNFishjamClientModule.toggleAppScreenShare(options);\n screenShareSimulcastConfig = defaultSimulcastConfig(); //to do: sync with camera settings\n },\n [isAppScreenShareOn],\n );\n\n return {\n isAppScreenShareOn,\n simulcastConfig,\n /**\n * Toggles the screen share on/off.\n * Emits warning on ios when user is screensharing full screen.\n */\n toggleAppScreenShare,\n };\n}\n\nfunction useDefaultAppScreenShareAndroid(): AppScreenShareData {\n return {\n isAppScreenShareOn: false,\n simulcastConfig: defaultSimulcastConfig(),\n toggleAppScreenShare: async () => {},\n };\n}\n\n/**\n * This hook can toggle client app screen sharing on/off and provides current screen share state.\n *\n * It works only on iOS.\n *\n * @returns An object with functions to manage app screen share on iOS and null on android.\n * @category Connection\n * @group Hooks\n */\nexport const useAppScreenShare = Platform.select({\n ios: useIosAppScreenShare,\n default: useDefaultAppScreenShareAndroid,\n});\n"]}
|
|
@@ -4,6 +4,10 @@ export type AudioOutputDevice = {
|
|
|
4
4
|
type: AudioOutputDeviceType;
|
|
5
5
|
name: string;
|
|
6
6
|
};
|
|
7
|
+
export type OnAudioDeviceEvent = {
|
|
8
|
+
selectedDevice: AudioOutputDevice | null;
|
|
9
|
+
availableDevices: AudioOutputDevice[];
|
|
10
|
+
};
|
|
7
11
|
/**
|
|
8
12
|
* This hook manages audio settings.
|
|
9
13
|
* @category Devices
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useAudioSettings.d.ts","sourceRoot":"","sources":["../../src/hooks/useAudioSettings.ts"],"names":[],"mappings":"AAQA,MAAM,MAAM,qBAAqB,GAC7B,WAAW,GACX,SAAS,GACT,SAAS,GACT,UAAU,CAAC;AAEf,MAAM,MAAM,gBAAgB,GAAG,WAAW,GAAG,WAAW,CAAC;AAEzD,MAAM,MAAM,iBAAiB,GAAG;IAC9B,IAAI,EAAE,qBAAqB,CAAC;IAC5B,IAAI,EAAE,MAAM,CAAC;CACd,CAAC;
|
|
1
|
+
{"version":3,"file":"useAudioSettings.d.ts","sourceRoot":"","sources":["../../src/hooks/useAudioSettings.ts"],"names":[],"mappings":"AAQA,MAAM,MAAM,qBAAqB,GAC7B,WAAW,GACX,SAAS,GACT,SAAS,GACT,UAAU,CAAC;AAEf,MAAM,MAAM,gBAAgB,GAAG,WAAW,GAAG,WAAW,CAAC;AAEzD,MAAM,MAAM,iBAAiB,GAAG;IAC9B,IAAI,EAAE,qBAAqB,CAAC;IAC5B,IAAI,EAAE,MAAM,CAAC;CACd,CAAC;AAEF,MAAM,MAAM,kBAAkB,GAAG;IAC/B,cAAc,EAAE,iBAAiB,GAAG,IAAI,CAAC;IACzC,gBAAgB,EAAE,iBAAiB,EAAE,CAAC;CACvC,CAAC;AAEF;;;;GAIG;AACH,wBAAgB,gBAAgB;IAkD5B;;OAEG;;IAEH;;OAEG;;IAEH;;;OAGG;sCA5CY,qBAAqB;IA8CpC;;;;OAIG;+CArCsB,gBAAgB;IAuCzC;;;OAGG;;EAGN"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useAudioSettings.js","sourceRoot":"","sources":["../../src/hooks/useAudioSettings.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAC/C,OAAO,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAC;AAExC,OAAO,qBAAqB,EAAE,EAC5B,gBAAgB,GACjB,MAAM,0BAA0B,CAAC;AAClC,OAAO,EAAE,oBAAoB,EAAE,MAAM,iCAAiC,CAAC;AAoBvE;;;;GAIG;AACH,MAAM,UAAU,gBAAgB;IAC9B,MAAM,EAAE,cAAc,EAAE,yBAAyB,EAAE,gBAAgB,EAAE,GACnE,oBAAoB,
|
|
1
|
+
{"version":3,"file":"useAudioSettings.js","sourceRoot":"","sources":["../../src/hooks/useAudioSettings.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAC/C,OAAO,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAC;AAExC,OAAO,qBAAqB,EAAE,EAC5B,gBAAgB,GACjB,MAAM,0BAA0B,CAAC;AAClC,OAAO,EAAE,oBAAoB,EAAE,MAAM,iCAAiC,CAAC;AAoBvE;;;;GAIG;AACH,MAAM,UAAU,gBAAgB;IAC9B,MAAM,EAAE,cAAc,EAAE,yBAAyB,EAAE,gBAAgB,EAAE,GACnE,oBAAoB,CAAC,gBAAgB,CAAC,iBAAiB,EAAE;QACvD,cAAc,EAAE,IAAI;QACpB,gBAAgB,EAAE,EAAE;KACrB,CAAC,CAAC;IAEL,SAAS,CAAC,GAAG,EAAE;QACb,qBAAqB,CAAC,kBAAkB,EAAE,CAAC;QAC3C,OAAO,GAAG,EAAE;YACV,IAAI,QAAQ,CAAC,EAAE,KAAK,SAAS,EAAE,CAAC;gBAC9B,qBAAqB,CAAC,iBAAiB,EAAE,CAAC;YAC5C,CAAC;QACH,CAAC,CAAC;IACJ,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,MAAM,uBAAuB,GAAG,WAAW,CACzC,KAAK,EAAE,MAA6B,EAAE,EAAE;QACtC,IAAI,QAAQ,CAAC,EAAE,KAAK,KAAK,EAAE,CAAC;YAC1B,MAAM,KAAK,CACT,iEAAiE;gBAC/D,sGAAsG,CACzG,CAAC;QACJ,CAAC;QACD,MAAM,qBAAqB,CAAC,oBAAoB,CAAC,MAAM,CAAC,CAAC;IAC3D,CAAC,EACD,EAAE,CACH,CAAC;IAEF,MAAM,sBAAsB,GAAG,WAAW,CACxC,KAAK,EAAE,gBAAkC,EAAE,EAAE;QAC3C,IAAI,QAAQ,CAAC,EAAE,KAAK,SAAS,EAAE,CAAC;YAC9B,MAAM,KAAK,CAAC,0DAA0D,CAAC,CAAC;QAC1E,CAAC;QACD,MAAM,qBAAqB,CAAC,sBAAsB,CAAC,gBAAgB,CAAC,CAAC;IACvE,CAAC,EACD,EAAE,CACH,CAAC;IAEF,MAAM,oBAAoB,GAAG,WAAW,CAAC,KAAK,IAAI,EAAE;QAClD,IAAI,QAAQ,CAAC,EAAE,KAAK,SAAS,EAAE,CAAC;YAC9B,MAAM,KAAK,CACT,0DAA0D;gBACxD,kFAAkF,CACrF,CAAC;QACJ,CAAC;QACD,MAAM,qBAAqB,CAAC,oBAAoB,EAAE,CAAC;IACrD,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,OAAO;QACL;;WAEG;QACH,yBAAyB;QACzB;;WAEG;QACH,gBAAgB;QAChB;;;WAGG;QACH,uBAAuB;QACvB;;;;WAIG;QACH,sBAAsB;QACtB;;;WAGG;QACH,oBAAoB;KACrB,CAAC;AACJ,CAAC","sourcesContent":["import { useCallback, useEffect } from 'react';\nimport { Platform } from 'react-native';\n\nimport RNFishjamClientModule, {\n ReceivableEvents,\n} from '../RNFishjamClientModule';\nimport { useFishjamEventState } from './internal/useFishjamEventState';\n\nexport type AudioOutputDeviceType =\n | 'bluetooth'\n | 'headset'\n | 'speaker'\n | 'earpiece';\n\nexport type AudioSessionMode = 'voiceChat' | 'videoChat';\n\nexport type AudioOutputDevice = {\n type: AudioOutputDeviceType;\n name: string;\n};\n\nexport type OnAudioDeviceEvent = {\n selectedDevice: AudioOutputDevice | null;\n availableDevices: AudioOutputDevice[];\n};\n\n/**\n * This hook manages audio settings.\n * @category Devices\n * @group Hooks\n */\nexport function useAudioSettings() {\n const { selectedDevice: selectedAudioOutputDevice, availableDevices } =\n useFishjamEventState(ReceivableEvents.AudioDeviceUpdate, {\n selectedDevice: null,\n availableDevices: [],\n });\n\n useEffect(() => {\n RNFishjamClientModule.startAudioSwitcher();\n return () => {\n if (Platform.OS === 'android') {\n RNFishjamClientModule.stopAudioSwitcher();\n }\n };\n }, []);\n\n const selectOutputAudioDevice = useCallback(\n async (device: AudioOutputDeviceType) => {\n if (Platform.OS === 'ios') {\n throw Error(\n 'selectOutputAudioDevice function is supported only on Android. ' +\n 'To select an output audio device on iOS use selectAudioSessionMode or showAudioRoutePicker functions',\n );\n }\n await RNFishjamClientModule.setOutputAudioDevice(device);\n },\n [],\n );\n\n const selectAudioSessionMode = useCallback(\n async (audioSessionMode: AudioSessionMode) => {\n if (Platform.OS === 'android') {\n throw Error('selectAudioSessionMode function is supported only on iOS');\n }\n await RNFishjamClientModule.selectAudioSessionMode(audioSessionMode);\n },\n [],\n );\n\n const showAudioRoutePicker = useCallback(async () => {\n if (Platform.OS === 'android') {\n throw Error(\n 'showAudioRoutePicker function is supported only on iOS. ' +\n 'To select an output audio device on Android use selectOutputAudioDevice function',\n );\n }\n await RNFishjamClientModule.showAudioRoutePicker();\n }, []);\n\n return {\n /**\n * currently selected output audio device\n */\n selectedAudioOutputDevice,\n /**\n * [Android only] available audio output devices to be set\n */\n availableDevices,\n /**\n * [Android only] selects output audio device.\n * For detecting and selecting bluettoth devices make sure you have the BLUETOOTH_CONNECT permission.\n */\n selectOutputAudioDevice,\n /**\n * [iOS only] selects audio session mode. For more information refer to Apple's documentation:\n * https://developer.apple.com/documentation/avfaudio/avaudiosession/mode/\n *\n */\n selectAudioSessionMode,\n /**\n * [iOS only] Shows a picker modal that allows user to select output audio device. For more\n * information refer to Apple's documentation: https://developer.apple.com/documentation/avkit/avroutepickerview\n */\n showAudioRoutePicker,\n };\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useBandwidthEstimation.d.ts","sourceRoot":"","sources":["../../src/hooks/useBandwidthEstimation.ts"],"names":[],"mappings":"AAGA;;;;;;GAMG;AACH,wBAAgB,sBAAsB;;
|
|
1
|
+
{"version":3,"file":"useBandwidthEstimation.d.ts","sourceRoot":"","sources":["../../src/hooks/useBandwidthEstimation.ts"],"names":[],"mappings":"AAGA;;;;;;GAMG;AACH,wBAAgB,sBAAsB;IAMlC;;OAEG;;EAGN"}
|
|
@@ -9,6 +9,11 @@ import { useFishjamEventState } from './internal/useFishjamEventState';
|
|
|
9
9
|
*/
|
|
10
10
|
export function useBandwidthEstimation() {
|
|
11
11
|
const estimation = useFishjamEventState(ReceivableEvents.BandwidthEstimation, null);
|
|
12
|
-
return {
|
|
12
|
+
return {
|
|
13
|
+
/**
|
|
14
|
+
* Bandwidth estimation, measured in bits per second
|
|
15
|
+
*/
|
|
16
|
+
estimation,
|
|
17
|
+
};
|
|
13
18
|
}
|
|
14
19
|
//# sourceMappingURL=useBandwidthEstimation.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useBandwidthEstimation.js","sourceRoot":"","sources":["../../src/hooks/useBandwidthEstimation.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AAC5D,OAAO,EAAE,oBAAoB,EAAE,MAAM,iCAAiC,CAAC;AAEvE;;;;;;GAMG;AACH,MAAM,UAAU,sBAAsB;IACpC,MAAM,UAAU,GAAG,oBAAoB,CACrC,gBAAgB,CAAC,mBAAmB,EACpC,IAAI,CACL,CAAC;IACF,OAAO,
|
|
1
|
+
{"version":3,"file":"useBandwidthEstimation.js","sourceRoot":"","sources":["../../src/hooks/useBandwidthEstimation.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AAC5D,OAAO,EAAE,oBAAoB,EAAE,MAAM,iCAAiC,CAAC;AAEvE;;;;;;GAMG;AACH,MAAM,UAAU,sBAAsB;IACpC,MAAM,UAAU,GAAG,oBAAoB,CACrC,gBAAgB,CAAC,mBAAmB,EACpC,IAAI,CACL,CAAC;IACF,OAAO;QACL;;WAEG;QACH,UAAU;KACX,CAAC;AACJ,CAAC","sourcesContent":["import { ReceivableEvents } from '../RNFishjamClientModule';\nimport { useFishjamEventState } from './internal/useFishjamEventState';\n\n/**\n * This hook provides current bandwidth estimation\n * estimation - client's available incoming bitrate estimated\n * by the server. It's measured in bits per second.\n * @category Debugging\n * @group Hooks\n */\nexport function useBandwidthEstimation() {\n const estimation = useFishjamEventState(\n ReceivableEvents.BandwidthEstimation,\n null,\n );\n return {\n /**\n * Bandwidth estimation, measured in bits per second\n */\n estimation,\n };\n}\n"]}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { Brand, SimulcastConfig } from '../types';
|
|
2
2
|
export type CameraId = Brand<string, 'CameraId'>;
|
|
3
3
|
export type CameraFacingDirection = 'front' | 'back' | 'unspecified';
|
|
4
4
|
export type Camera = {
|
|
@@ -9,9 +9,10 @@ export type Camera = {
|
|
|
9
9
|
export type CurrentCameraChangedType = {
|
|
10
10
|
currentCamera: Camera | null;
|
|
11
11
|
isCameraOn: boolean;
|
|
12
|
+
isCameraInitialized: boolean;
|
|
12
13
|
};
|
|
13
14
|
export type VideoQuality = 'QVGA169' | 'VGA169' | 'QHD169' | 'HD169' | 'FHD169' | 'QVGA43' | 'VGA43' | 'QHD43' | 'HD43' | 'FHD43';
|
|
14
|
-
type CameraConfigBase = {
|
|
15
|
+
export type CameraConfigBase = {
|
|
15
16
|
/**
|
|
16
17
|
* resolution + aspect ratio of local video track, one of: `QVGA_169`, `VGA_169`, `QHD_169`, `HD_169`,
|
|
17
18
|
* `FHD_169`, `QVGA_43`, `VGA_43`, `QHD_43`, `HD_43`, `FHD_43`. Note that quality might be worse than
|
|
@@ -63,15 +64,7 @@ export type CameraConfigInternal = CameraConfigBase & {
|
|
|
63
64
|
* SimulcastConfig of a video track. By default simulcast is disabled.
|
|
64
65
|
*/
|
|
65
66
|
simulcastConfig?: SimulcastConfig;
|
|
66
|
-
|
|
67
|
-
* bandwidth limit of a video track. By default there is no bandwidth limit.
|
|
68
|
-
*/
|
|
69
|
-
maxBandwidth?: TrackBandwidthLimit;
|
|
70
|
-
} & ({
|
|
71
|
-
maxBandwidthInt?: BandwidthLimit;
|
|
72
|
-
} | {
|
|
73
|
-
maxBandwidthMap?: SimulcastBandwidthLimit;
|
|
74
|
-
});
|
|
67
|
+
};
|
|
75
68
|
export declare function updateCameraConfig(config: Readonly<CameraConfig>): CameraConfigInternal;
|
|
76
69
|
/**
|
|
77
70
|
* This hook can toggle camera on/off and provides current camera state.
|
|
@@ -96,7 +89,13 @@ export declare function useCamera(): {
|
|
|
96
89
|
* @returns A promise that resolves to the list of available cameras.
|
|
97
90
|
*/
|
|
98
91
|
cameras: readonly Camera[];
|
|
99
|
-
/**
|
|
92
|
+
/**
|
|
93
|
+
* A value indicating if camera was already initialized (if `prepareCamera` was called).
|
|
94
|
+
*/
|
|
95
|
+
isInitialized: boolean;
|
|
96
|
+
/**
|
|
97
|
+
* Enable/disable current camera
|
|
98
|
+
*/
|
|
100
99
|
toggleCamera: () => Promise<void>;
|
|
101
100
|
/**
|
|
102
101
|
* Prepares camera and starts local video track
|
|
@@ -108,29 +107,7 @@ export declare function useCamera(): {
|
|
|
108
107
|
* Switches to the specified camera.
|
|
109
108
|
* List of available devices can be retrieved from `cameras` variable
|
|
110
109
|
* @returns A promise that resolves when camera is switched.
|
|
111
|
-
*/ switchCamera: (cameraId: CameraId) => Promise<void>;
|
|
112
|
-
/**
|
|
113
|
-
* @deprecated
|
|
114
|
-
* toggles encoding of a video track on/off
|
|
115
|
-
* @param encoding encoding to toggle
|
|
116
|
-
*/
|
|
117
|
-
toggleVideoTrackEncoding: (encoding: TrackEncoding) => Promise<void>;
|
|
118
|
-
/**
|
|
119
|
-
* updates maximum bandwidth for the given simulcast encoding of the video track
|
|
120
|
-
* @param encoding encoding to update
|
|
121
|
-
* @param bandwidth BandwidthLimit to set
|
|
122
|
-
* @deprecated
|
|
123
|
-
*/
|
|
124
|
-
setVideoTrackEncodingBandwidth: (encoding: TrackEncoding, bandwidth: BandwidthLimit) => Promise<void>;
|
|
125
|
-
/**
|
|
126
|
-
* updates maximum bandwidth for the video track. This value directly translates
|
|
127
|
-
* to quality of the stream and the amount of RTP packets being sent. In case simulcast
|
|
128
|
-
* is enabled bandwidth is split between all of the variant streams proportionally to
|
|
129
|
-
* their resolution.
|
|
130
|
-
* @param BandwidthLimit to set
|
|
131
|
-
* @deprecated
|
|
132
110
|
*/
|
|
133
|
-
|
|
111
|
+
switchCamera: (cameraId: CameraId) => Promise<void>;
|
|
134
112
|
};
|
|
135
|
-
export {};
|
|
136
113
|
//# sourceMappingURL=useCamera.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useCamera.d.ts","sourceRoot":"","sources":["../../src/hooks/useCamera.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"useCamera.d.ts","sourceRoot":"","sources":["../../src/hooks/useCamera.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,EAAE,eAAe,EAAE,MAAM,UAAU,CAAC;AAMlD,MAAM,MAAM,QAAQ,GAAG,KAAK,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;AAEjD,MAAM,MAAM,qBAAqB,GAAG,OAAO,GAAG,MAAM,GAAG,aAAa,CAAC;AAErE,MAAM,MAAM,MAAM,GAAG;IACnB,EAAE,EAAE,QAAQ,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,eAAe,EAAE,qBAAqB,CAAC;CACxC,CAAC;AAEF,MAAM,MAAM,wBAAwB,GAAG;IACrC,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,UAAU,EAAE,OAAO,CAAC;IACpB,mBAAmB,EAAE,OAAO,CAAC;CAC9B,CAAC;AAEF,MAAM,MAAM,YAAY,GACpB,SAAS,GACT,QAAQ,GACR,QAAQ,GACR,OAAO,GACP,QAAQ,GACR,QAAQ,GACR,OAAO,GACP,OAAO,GACP,MAAM,GACN,OAAO,CAAC;AAEZ,MAAM,MAAM,gBAAgB,GAAG;IAC7B;;;;;OAKG;IACH,OAAO,CAAC,EAAE,YAAY,CAAC;IACvB;;;;;;;;;;;;;;;OAeG;IACH,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB;;;OAGG;IACH,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB;;;;OAIG;IACH,QAAQ,CAAC,EAAE,QAAQ,CAAC;CACrB,CAAC;AAEF,MAAM,MAAM,YAAY,GAAG,gBAAgB,GAAG;IAC5C;;OAEG;IACH,gBAAgB,CAAC,EAAE,OAAO,CAAC;CAI5B,CAAC;AAEF,MAAM,MAAM,oBAAoB,GAAG,gBAAgB,GAAG;IACpD,kBAAkB,CAAC,EAAE;QAAE,MAAM,EAAE,OAAO,CAAC;QAAC,IAAI,EAAE,QAAQ,CAAA;KAAE,CAAC;IACzD;;OAEG;IACH,eAAe,CAAC,EAAE,eAAe,CAAC;CACnC,CAAC;AAgBF,wBAAgB,kBAAkB,CAChC,MAAM,EAAE,QAAQ,CAAC,YAAY,CAAC,GAC7B,oBAAoB,CAMtB;AAED;;;;GAIG;AACH,wBAAgB,SAAS;IAmDrB;;OAEG;;IAEH;;OAEG;;IAEH;;OAEG;;IAEH;;;OAGG;;IAEH;;OAEG;;IAEH;;OAEG;;IAEH;;;;OAIG;6BA1DY,QAAQ,CAAC,YAAY,CAAC;IA4DrC;;;;OAIG;6BAxC6C,QAAQ;EA2C3D"}
|
package/build/hooks/useCamera.js
CHANGED
|
@@ -1,44 +1,18 @@
|
|
|
1
1
|
import { useCallback, useMemo } from 'react';
|
|
2
|
-
import { Platform } from 'react-native';
|
|
3
2
|
import RNFishjamClientModule, { ReceivableEvents, } from '../RNFishjamClientModule';
|
|
4
3
|
import { useFishjamEventState } from './internal/useFishjamEventState';
|
|
5
4
|
const defaultSimulcastConfig = () => ({
|
|
6
5
|
enabled: false,
|
|
7
|
-
activeEncodings: [],
|
|
8
6
|
});
|
|
9
|
-
function maxBandwidthConfig(maxBandwidth) {
|
|
10
|
-
if (Platform.OS === 'android') {
|
|
11
|
-
if (typeof maxBandwidth === 'object') {
|
|
12
|
-
return {
|
|
13
|
-
maxBandwidth: undefined,
|
|
14
|
-
maxBandwidthMap: maxBandwidth,
|
|
15
|
-
};
|
|
16
|
-
}
|
|
17
|
-
else {
|
|
18
|
-
return {
|
|
19
|
-
maxBandwidth: undefined,
|
|
20
|
-
maxBandwidthInt: maxBandwidth,
|
|
21
|
-
};
|
|
22
|
-
}
|
|
23
|
-
}
|
|
24
|
-
return { maxBandwidth };
|
|
25
|
-
}
|
|
26
7
|
function getSimulcastConfig(simulcastEnabled) {
|
|
27
|
-
// iOS has a limit of 3 hardware encoders
|
|
28
|
-
// 3 simulcast layers + 1 screen share layer = 4, which is too much
|
|
29
|
-
// so we limit simulcast layers to 2
|
|
30
8
|
if (simulcastEnabled) {
|
|
31
|
-
return
|
|
32
|
-
ios: { enabled: true, activeEncodings: ['l', 'h'] },
|
|
33
|
-
android: { enabled: true, activeEncodings: ['l', 'm', 'h'] },
|
|
34
|
-
});
|
|
9
|
+
return { enabled: true };
|
|
35
10
|
}
|
|
36
11
|
return undefined;
|
|
37
12
|
}
|
|
38
13
|
export function updateCameraConfig(config) {
|
|
39
14
|
return {
|
|
40
15
|
...config,
|
|
41
|
-
...maxBandwidthConfig({ l: 150, m: 500, h: 1500 }),
|
|
42
16
|
videoTrackMetadata: { active: true, type: 'camera' },
|
|
43
17
|
simulcastConfig: getSimulcastConfig(config.simulcastEnabled),
|
|
44
18
|
};
|
|
@@ -50,9 +24,10 @@ export function updateCameraConfig(config) {
|
|
|
50
24
|
*/
|
|
51
25
|
export function useCamera() {
|
|
52
26
|
const simulcastConfig = useFishjamEventState(ReceivableEvents.SimulcastConfigUpdate, defaultSimulcastConfig());
|
|
53
|
-
const { currentCamera: currentCameraState, isCameraOn } = useFishjamEventState(ReceivableEvents.CurrentCameraChanged, {
|
|
27
|
+
const { currentCamera: currentCameraState, isCameraOn, isCameraInitialized, } = useFishjamEventState(ReceivableEvents.CurrentCameraChanged, {
|
|
54
28
|
currentCamera: RNFishjamClientModule.currentCamera,
|
|
55
29
|
isCameraOn: RNFishjamClientModule.isCameraOn,
|
|
30
|
+
isCameraInitialized: RNFishjamClientModule.isCameraInitialized,
|
|
56
31
|
});
|
|
57
32
|
// For Android Expo converts null to undefined ¯\_(ツ)_/¯
|
|
58
33
|
const currentCamera = currentCameraState ?? null;
|
|
@@ -77,15 +52,6 @@ export function useCamera() {
|
|
|
77
52
|
const switchCamera = useCallback(async (cameraId) => {
|
|
78
53
|
await RNFishjamClientModule.switchCamera(cameraId);
|
|
79
54
|
}, []);
|
|
80
|
-
const setVideoTrackBandwidth = useCallback(async (bandwidth) => {
|
|
81
|
-
await RNFishjamClientModule.setVideoTrackBandwidth(bandwidth);
|
|
82
|
-
}, []);
|
|
83
|
-
const toggleVideoTrackEncoding = useCallback(async (encoding) => {
|
|
84
|
-
await RNFishjamClientModule.toggleVideoTrackEncoding(encoding);
|
|
85
|
-
}, []);
|
|
86
|
-
const setVideoTrackEncodingBandwidth = useCallback(async (encoding, bandwidth) => {
|
|
87
|
-
await RNFishjamClientModule.setVideoTrackEncodingBandwidth(encoding, bandwidth);
|
|
88
|
-
}, []);
|
|
89
55
|
return {
|
|
90
56
|
/**
|
|
91
57
|
* Informs if user camera is streaming video
|
|
@@ -104,7 +70,13 @@ export function useCamera() {
|
|
|
104
70
|
* @returns A promise that resolves to the list of available cameras.
|
|
105
71
|
*/
|
|
106
72
|
cameras,
|
|
107
|
-
/**
|
|
73
|
+
/**
|
|
74
|
+
* A value indicating if camera was already initialized (if `prepareCamera` was called).
|
|
75
|
+
*/
|
|
76
|
+
isInitialized: isCameraInitialized,
|
|
77
|
+
/**
|
|
78
|
+
* Enable/disable current camera
|
|
79
|
+
*/
|
|
108
80
|
toggleCamera,
|
|
109
81
|
/**
|
|
110
82
|
* Prepares camera and starts local video track
|
|
@@ -116,29 +88,8 @@ export function useCamera() {
|
|
|
116
88
|
* Switches to the specified camera.
|
|
117
89
|
* List of available devices can be retrieved from `cameras` variable
|
|
118
90
|
* @returns A promise that resolves when camera is switched.
|
|
119
|
-
*/ switchCamera,
|
|
120
|
-
/**
|
|
121
|
-
* @deprecated
|
|
122
|
-
* toggles encoding of a video track on/off
|
|
123
|
-
* @param encoding encoding to toggle
|
|
124
|
-
*/
|
|
125
|
-
toggleVideoTrackEncoding,
|
|
126
|
-
/**
|
|
127
|
-
* updates maximum bandwidth for the given simulcast encoding of the video track
|
|
128
|
-
* @param encoding encoding to update
|
|
129
|
-
* @param bandwidth BandwidthLimit to set
|
|
130
|
-
* @deprecated
|
|
131
|
-
*/
|
|
132
|
-
setVideoTrackEncodingBandwidth,
|
|
133
|
-
/**
|
|
134
|
-
* updates maximum bandwidth for the video track. This value directly translates
|
|
135
|
-
* to quality of the stream and the amount of RTP packets being sent. In case simulcast
|
|
136
|
-
* is enabled bandwidth is split between all of the variant streams proportionally to
|
|
137
|
-
* their resolution.
|
|
138
|
-
* @param BandwidthLimit to set
|
|
139
|
-
* @deprecated
|
|
140
91
|
*/
|
|
141
|
-
|
|
92
|
+
switchCamera,
|
|
142
93
|
};
|
|
143
94
|
}
|
|
144
95
|
//# sourceMappingURL=useCamera.js.map
|