@fishjam-cloud/react-native-client 0.2.3 → 0.3.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/LICENSE +201 -0
- package/README.md +14 -401
- package/android/build.gradle +3 -3
- package/android/src/main/java/io/fishjam/reactnative/EmitableEvents.kt +25 -12
- package/android/src/main/java/io/fishjam/reactnative/Errors.kt +3 -2
- package/android/src/main/java/io/fishjam/reactnative/RNFishjamClient.kt +122 -105
- package/android/src/main/java/io/fishjam/reactnative/RNFishjamClientModule.kt +24 -33
- package/android/src/main/java/io/fishjam/reactnative/VideoPreviewView.kt +13 -3
- package/build/RNFishjamClientModule.d.ts +17 -15
- package/build/RNFishjamClientModule.d.ts.map +1 -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 +5 -5
- package/build/common/client.js.map +1 -1
- package/build/common/metadata.d.ts +3 -3
- package/build/common/metadata.d.ts.map +1 -1
- package/build/common/metadata.js +4 -4
- package/build/common/metadata.js.map +1 -1
- package/build/common/webRTC.d.ts +0 -8
- package/build/common/webRTC.d.ts.map +1 -1
- package/build/common/webRTC.js +0 -9
- package/build/common/webRTC.js.map +1 -1
- package/build/components/VideoRendererView.d.ts +1 -1
- package/build/components/VideoRendererView.js +1 -1
- package/build/components/VideoRendererView.js.map +1 -1
- package/build/debug/common/webRTC.d.ts +9 -0
- package/build/debug/common/webRTC.d.ts.map +1 -0
- package/build/debug/common/webRTC.js +11 -0
- package/build/debug/common/webRTC.js.map +1 -0
- package/build/debug/index.d.ts +4 -0
- package/build/debug/index.d.ts.map +1 -0
- package/build/debug/index.js +3 -0
- package/build/debug/index.js.map +1 -0
- package/build/debug/stats/types.d.ts.map +1 -0
- package/build/debug/stats/types.js.map +1 -0
- package/build/debug/stats/useRTCStatistics.d.ts.map +1 -0
- package/build/{stats → debug/stats}/useRTCStatistics.js +1 -1
- package/build/debug/stats/useRTCStatistics.js.map +1 -0
- package/build/hooks/useCamera.d.ts +17 -0
- package/build/hooks/useCamera.d.ts.map +1 -1
- package/build/hooks/useCamera.js +1 -1
- package/build/hooks/useCamera.js.map +1 -1
- package/build/hooks/useFishjamEvent.d.ts +2 -1
- package/build/hooks/useFishjamEvent.d.ts.map +1 -1
- package/build/hooks/useFishjamEvent.js +2 -1
- package/build/hooks/useFishjamEvent.js.map +1 -1
- package/build/hooks/usePeerStatus.d.ts +19 -0
- package/build/hooks/usePeerStatus.d.ts.map +1 -0
- package/build/hooks/usePeerStatus.js +18 -0
- package/build/hooks/usePeerStatus.js.map +1 -0
- package/build/hooks/{useParticipants.d.ts → usePeers.d.ts} +11 -11
- package/build/hooks/usePeers.d.ts.map +1 -0
- package/build/hooks/usePeers.js +34 -0
- package/build/hooks/usePeers.js.map +1 -0
- package/build/hooks/useScreenShare.d.ts +57 -0
- package/build/hooks/useScreenShare.d.ts.map +1 -0
- package/build/hooks/useScreenShare.js +85 -0
- package/build/hooks/useScreenShare.js.map +1 -0
- package/build/index.d.ts +8 -7
- package/build/index.d.ts.map +1 -1
- package/build/index.js +4 -4
- package/build/index.js.map +1 -1
- package/debug/package.json +4 -0
- package/ios/Events.swift +29 -13
- package/ios/RNFishjamClient.podspec +1 -1
- package/ios/RNFishjamClient.swift +110 -107
- package/ios/RNFishjamClientModule.swift +22 -29
- package/ios/VideoPreviewView.swift +27 -9
- package/package.json +14 -11
- package/plugin/broadcastExtensionFiles/FishjamBroadcastSampleHandler.swift +1 -1
- package/plugin/build/withFishjamIos.js +3 -3
- package/build/hooks/useParticipants.d.ts.map +0 -1
- package/build/hooks/useParticipants.js +0 -34
- package/build/hooks/useParticipants.js.map +0 -1
- package/build/hooks/useScreencast.d.ts +0 -57
- package/build/hooks/useScreencast.d.ts.map +0 -1
- package/build/hooks/useScreencast.js +0 -85
- package/build/hooks/useScreencast.js.map +0 -1
- package/build/stats/types.d.ts.map +0 -1
- package/build/stats/types.js.map +0 -1
- package/build/stats/useRTCStatistics.d.ts.map +0 -1
- package/build/stats/useRTCStatistics.js.map +0 -1
- /package/build/{stats → debug/stats}/types.d.ts +0 -0
- /package/build/{stats → debug/stats}/types.js +0 -0
- /package/build/{stats → debug/stats}/useRTCStatistics.d.ts +0 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useCamera.js","sourceRoot":"","sources":["../../src/hooks/useCamera.ts"],"names":[],"mappings":"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","sourcesContent":["import { useCallback, useMemo, useState } from 'react';\nimport { Platform } from 'react-native';\n\nimport {\n BandwidthLimit,\n Brand,\n SimulcastBandwidthLimit,\n SimulcastConfig,\n TrackBandwidthLimit,\n TrackEncoding,\n} from '../types';\nimport RNFishjamClientModule from '../RNFishjamClientModule';\nimport { ReceivableEvents, useFishjamEvent } from './useFishjamEvent';\n\ntype SimulcastConfigUpdateEvent = SimulcastConfig;\nexport type CameraId = Brand<string, 'CameraId'>;\n\nexport type CameraFacingDirection = 'front' | 'back' | 'unspecified';\n\nexport type Camera = {\n id: CameraId;\n name: string;\n facingDirection: CameraFacingDirection;\n};\n\nexport type VideoQuality =\n | 'QVGA169'\n | 'VGA169'\n | 'QHD169'\n | 'HD169'\n | 'FHD169'\n | 'QVGA43'\n | 'VGA43'\n | 'QHD43'\n | 'HD43'\n | 'FHD43';\n\ntype CameraConfigBase = {\n /**\n * resolution + aspect ratio of local video track, one of: `QVGA_169`, `VGA_169`, `QHD_169`, `HD_169`,\n * `FHD_169`, `QVGA_43`, `VGA_43`, `QHD_43`, `HD_43`, `FHD_43`. Note that quality might be worse than\n * specified due to device capabilities, internet connection etc.\n * @default `VGA_169`\n */\n quality?: VideoQuality;\n /**\n * whether the camera track is initially enabled, you can toggle it on/off later with toggleCamera method\n * @default `true`\n */\n cameraEnabled?: boolean;\n /**\n * id of the camera to start capture with. Get available cameras with `cameras`.\n * You can switch the cameras later with `switchCamera` functions.\n * @default the first front camera\n */\n cameraId?: CameraId;\n};\n\nexport type CameraConfig = CameraConfigBase & {\n /**\n * whether video track uses simulcast. By default simulcast is disabled.\n */\n simulcastEnabled?: boolean;\n /**\n * bandwidth limit of a video track. By default there is no bandwidth limit.\n */\n};\n\nexport type CameraConfigInternal = CameraConfigBase & {\n videoTrackMetadata?: { active: boolean; type: 'camera' };\n /**\n * SimulcastConfig of a video track. By default simulcast is disabled.\n */\n simulcastConfig?: SimulcastConfig;\n /**\n * bandwidth limit of a video track. By default there is no bandwidth limit.\n */\n maxBandwidth?: TrackBandwidthLimit;\n} & (\n | { maxBandwidthInt?: BandwidthLimit }\n | { maxBandwidthMap?: SimulcastBandwidthLimit }\n );\n\nconst defaultSimulcastConfig = () => ({\n enabled: false,\n activeEncodings: [],\n});\n\nfunction maxBandwidthConfig(maxBandwidth: TrackBandwidthLimit | undefined) {\n if (Platform.OS === 'android') {\n if (typeof maxBandwidth === 'object') {\n return {\n maxBandwidth: undefined,\n maxBandwidthMap: maxBandwidth,\n };\n } else {\n return {\n maxBandwidth: undefined,\n maxBandwidthInt: maxBandwidth,\n };\n }\n }\n return { maxBandwidth };\n}\n\nfunction simulcastConfig(\n simulcastEnabled: boolean | undefined,\n): SimulcastConfig | undefined {\n // iOS has a limit of 3 hardware encoders\n // 3 simulcast layers + 1 screencast layer = 4, which is too much\n // so we limit simulcast layers to 2\n if (simulcastEnabled) {\n return Platform.select<SimulcastConfig>({\n ios: { enabled: true, activeEncodings: ['l', 'h'] },\n android: { enabled: true, activeEncodings: ['l', 'm', 'h'] },\n });\n }\n return undefined;\n}\n\nexport function updateCameraConfig(\n config: Readonly<CameraConfig>,\n): CameraConfigInternal {\n return {\n ...config,\n ...maxBandwidthConfig({ l: 150, m: 500, h: 1500 }),\n videoTrackMetadata: { active: true, type: 'camera' },\n simulcastConfig: simulcastConfig(config.simulcastEnabled),\n };\n}\n\n/**\n * This hook can toggle camera on/off and provides current camera state.\n * @category Devices\n * @group Hooks\n */\nexport function useCamera() {\n const [isCameraOn, setIsCameraOn] = useState<boolean>(\n RNFishjamClientModule.isCameraOn,\n );\n\n const [currentCamera, setCurrentCamera] = useState<Camera | undefined>(\n undefined,\n );\n\n const [simulcastConfig, setSimulcastConfig] = useState<SimulcastConfig>(\n defaultSimulcastConfig(),\n );\n\n useFishjamEvent<SimulcastConfigUpdateEvent>(\n ReceivableEvents.SimulcastConfigUpdate,\n setSimulcastConfig,\n );\n\n useFishjamEvent(ReceivableEvents.IsCameraOn, setIsCameraOn);\n\n const cameras = useMemo(() => {\n return RNFishjamClientModule.cameras;\n }, []);\n\n const prepareCamera = useCallback(\n async (config: Readonly<CameraConfig> = {}) => {\n const camera = RNFishjamClientModule.cameras.find((camera) =>\n config.cameraId\n ? camera.id === config.cameraId\n : camera.facingDirection === 'front',\n );\n\n setCurrentCamera(camera);\n const updatedConfig = updateCameraConfig({\n ...config,\n cameraId: camera?.id,\n });\n await RNFishjamClientModule.startCamera(updatedConfig);\n },\n [],\n );\n\n const toggleCamera = useCallback(async () => {\n const state = await RNFishjamClientModule.toggleCamera();\n await RNFishjamClientModule.updateVideoTrackMetadata({\n active: state,\n type: 'camera',\n });\n setIsCameraOn(state);\n }, []);\n\n const switchCamera = useCallback(\n async (cameraId: CameraId) => {\n await RNFishjamClientModule.switchCamera(cameraId);\n setCurrentCamera(cameras.find((camera) => camera.id === cameraId));\n },\n [cameras],\n );\n\n const setVideoTrackBandwidth = useCallback(\n async (bandwidth: BandwidthLimit) => {\n await RNFishjamClientModule.setVideoTrackBandwidth(bandwidth);\n },\n [],\n );\n\n const toggleVideoTrackEncoding = useCallback(\n async (encoding: TrackEncoding) => {\n const videoSimulcastConfig =\n await RNFishjamClientModule.toggleVideoTrackEncoding(encoding);\n setSimulcastConfig(videoSimulcastConfig);\n },\n [],\n );\n\n const setVideoTrackEncodingBandwidth = useCallback(\n async (encoding: TrackEncoding, bandwidth: BandwidthLimit) => {\n await RNFishjamClientModule.setVideoTrackEncodingBandwidth(\n encoding,\n bandwidth,\n );\n },\n [],\n );\n\n return {\n /**\n * Informs if user camera is streaming video\n */\n isCameraOn,\n /**\n * Which camera is now used for streaming (or will be used as default when camera will be enabled)\n */\n currentCamera,\n /**\n * Simulcast configuration\n */\n simulcastConfig,\n /**\n * Property that lists cameras available on device.\n * @returns A promise that resolves to the list of available cameras.\n */\n cameras,\n\n /** Enable/disable current camera */\n toggleCamera,\n /**\n * Prepares camera and starts local video track\n * @param config configuration of the camera capture\n * @returns A promise that resolves when camera is started.\n */\n prepareCamera,\n /**\n * Switches to the specified camera.\n * List of available devices can be retrieved from `cameras` variable\n * @returns A promise that resolves when camera is switched.\n */ switchCamera,\n\n /**\n * @deprecated\n * toggles encoding of a video track on/off\n * @param encoding encoding to toggle\n */\n toggleVideoTrackEncoding,\n /**\n * updates maximum bandwidth for the given simulcast encoding of the video track\n * @param encoding encoding to update\n * @param bandwidth BandwidthLimit to set\n * @deprecated\n */\n setVideoTrackEncodingBandwidth,\n /**\n * updates maximum bandwidth for the video track. This value directly translates\n * to quality of the stream and the amount of RTP packets being sent. In case simulcast\n * is enabled bandwidth is split between all of the variant streams proportionally to\n * their resolution.\n * @param BandwidthLimit to set\n * @deprecated\n */\n setVideoTrackBandwidth,\n };\n}\n"]}
|
|
1
|
+
{"version":3,"file":"useCamera.js","sourceRoot":"","sources":["../../src/hooks/useCamera.ts"],"names":[],"mappings":"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","sourcesContent":["import { useCallback, useMemo, useState } from 'react';\nimport { Platform } from 'react-native';\n\nimport {\n BandwidthLimit,\n Brand,\n SimulcastBandwidthLimit,\n SimulcastConfig,\n TrackBandwidthLimit,\n TrackEncoding,\n} from '../types';\nimport RNFishjamClientModule from '../RNFishjamClientModule';\nimport { ReceivableEvents, useFishjamEvent } from './useFishjamEvent';\n\ntype SimulcastConfigUpdateEvent = SimulcastConfig;\nexport type CameraId = Brand<string, 'CameraId'>;\n\nexport type CameraFacingDirection = 'front' | 'back' | 'unspecified';\n\nexport type Camera = {\n id: CameraId;\n name: string;\n facingDirection: CameraFacingDirection;\n};\n\nexport type VideoQuality =\n | 'QVGA169'\n | 'VGA169'\n | 'QHD169'\n | 'HD169'\n | 'FHD169'\n | 'QVGA43'\n | 'VGA43'\n | 'QHD43'\n | 'HD43'\n | 'FHD43';\n\ntype CameraConfigBase = {\n /**\n * resolution + aspect ratio of local video track, one of: `QVGA_169`, `VGA_169`, `QHD_169`, `HD_169`,\n * `FHD_169`, `QVGA_43`, `VGA_43`, `QHD_43`, `HD_43`, `FHD_43`. Note that quality might be worse than\n * specified due to device capabilities, internet connection etc.\n * @default `VGA_169`\n */\n quality?: VideoQuality;\n /**\n * whether to flip the dimensions of the video, that is whether to film in vertical orientation.\n * This basically switches width with height and is only used to select closes capture format.\n *\n * To record horizontal video your phone orientation must be in landscape and your app must support this orientation.\n *\n * Platform specific capture formats:\n * @see iOS: https://developer.apple.com/documentation/avfoundation/avcapturedevice/format\n * @see Android: https://github.com/webrtc-sdk/webrtc/blob/cdc3bba5aa38910a55428b919ba45aceac1ad9ad/sdk/android/api/org/webrtc/CameraEnumerationAndroid.java#L50\n *\n * WebRTC device orientation handling:\n * @see iOS: https://github.com/webrtc-sdk/webrtc/blob/cdc3bba5aa38910a55428b919ba45aceac1ad9ad/sdk/objc/components/capturer/RTCCameraVideoCapturer.m#L285\n * @see Android: https://github.com/pristineio/webrtc-mirror/blob/7a5bcdffaab90a05bc1146b2b1ea71c004e54d71/webrtc/sdk/android/src/java/org/webrtc/Camera2Session.java#L347\n *\n * @default `true`\n */\n flipDimensions?: boolean;\n /**\n * whether the camera track is initially enabled, you can toggle it on/off later with toggleCamera method\n * @default `true`\n */\n cameraEnabled?: boolean;\n /**\n * id of the camera to start capture with. Get available cameras with `cameras`.\n * You can switch the cameras later with `switchCamera` functions.\n * @default the first front camera\n */\n cameraId?: CameraId;\n};\n\nexport type CameraConfig = CameraConfigBase & {\n /**\n * whether video track uses simulcast. By default simulcast is disabled.\n */\n simulcastEnabled?: boolean;\n /**\n * bandwidth limit of a video track. By default there is no bandwidth limit.\n */\n};\n\nexport type CameraConfigInternal = CameraConfigBase & {\n videoTrackMetadata?: { active: boolean; type: 'camera' };\n /**\n * SimulcastConfig of a video track. By default simulcast is disabled.\n */\n simulcastConfig?: SimulcastConfig;\n /**\n * bandwidth limit of a video track. By default there is no bandwidth limit.\n */\n maxBandwidth?: TrackBandwidthLimit;\n} & (\n | { maxBandwidthInt?: BandwidthLimit }\n | { maxBandwidthMap?: SimulcastBandwidthLimit }\n );\n\nconst defaultSimulcastConfig = () => ({\n enabled: false,\n activeEncodings: [],\n});\n\nfunction maxBandwidthConfig(maxBandwidth: TrackBandwidthLimit | undefined) {\n if (Platform.OS === 'android') {\n if (typeof maxBandwidth === 'object') {\n return {\n maxBandwidth: undefined,\n maxBandwidthMap: maxBandwidth,\n };\n } else {\n return {\n maxBandwidth: undefined,\n maxBandwidthInt: maxBandwidth,\n };\n }\n }\n return { maxBandwidth };\n}\n\nfunction simulcastConfig(\n simulcastEnabled: boolean | undefined,\n): SimulcastConfig | undefined {\n // iOS has a limit of 3 hardware encoders\n // 3 simulcast layers + 1 screen share layer = 4, which is too much\n // so we limit simulcast layers to 2\n if (simulcastEnabled) {\n return Platform.select<SimulcastConfig>({\n ios: { enabled: true, activeEncodings: ['l', 'h'] },\n android: { enabled: true, activeEncodings: ['l', 'm', 'h'] },\n });\n }\n return undefined;\n}\n\nexport function updateCameraConfig(\n config: Readonly<CameraConfig>,\n): CameraConfigInternal {\n return {\n ...config,\n ...maxBandwidthConfig({ l: 150, m: 500, h: 1500 }),\n videoTrackMetadata: { active: true, type: 'camera' },\n simulcastConfig: simulcastConfig(config.simulcastEnabled),\n };\n}\n\n/**\n * This hook can toggle camera on/off and provides current camera state.\n * @category Devices\n * @group Hooks\n */\nexport function useCamera() {\n const [isCameraOn, setIsCameraOn] = useState<boolean>(\n RNFishjamClientModule.isCameraOn,\n );\n\n const [currentCamera, setCurrentCamera] = useState<Camera | undefined>(\n undefined,\n );\n\n const [simulcastConfig, setSimulcastConfig] = useState<SimulcastConfig>(\n defaultSimulcastConfig(),\n );\n\n useFishjamEvent<SimulcastConfigUpdateEvent>(\n ReceivableEvents.SimulcastConfigUpdate,\n setSimulcastConfig,\n );\n\n useFishjamEvent(ReceivableEvents.IsCameraOn, setIsCameraOn);\n\n const cameras = useMemo(() => {\n return RNFishjamClientModule.cameras;\n }, []);\n\n const prepareCamera = useCallback(\n async (config: Readonly<CameraConfig> = {}) => {\n const camera = RNFishjamClientModule.cameras.find((camera) =>\n config.cameraId\n ? camera.id === config.cameraId\n : camera.facingDirection === 'front',\n );\n\n setCurrentCamera(camera);\n const updatedConfig = updateCameraConfig({\n ...config,\n cameraId: camera?.id,\n });\n await RNFishjamClientModule.startCamera(updatedConfig);\n },\n [],\n );\n\n const toggleCamera = useCallback(async () => {\n const state = await RNFishjamClientModule.toggleCamera();\n await RNFishjamClientModule.updateVideoTrackMetadata({\n active: state,\n type: 'camera',\n });\n setIsCameraOn(state);\n }, []);\n\n const switchCamera = useCallback(\n async (cameraId: CameraId) => {\n await RNFishjamClientModule.switchCamera(cameraId);\n setCurrentCamera(cameras.find((camera) => camera.id === cameraId));\n },\n [cameras],\n );\n\n const setVideoTrackBandwidth = useCallback(\n async (bandwidth: BandwidthLimit) => {\n await RNFishjamClientModule.setVideoTrackBandwidth(bandwidth);\n },\n [],\n );\n\n const toggleVideoTrackEncoding = useCallback(\n async (encoding: TrackEncoding) => {\n const videoSimulcastConfig =\n await RNFishjamClientModule.toggleVideoTrackEncoding(encoding);\n setSimulcastConfig(videoSimulcastConfig);\n },\n [],\n );\n\n const setVideoTrackEncodingBandwidth = useCallback(\n async (encoding: TrackEncoding, bandwidth: BandwidthLimit) => {\n await RNFishjamClientModule.setVideoTrackEncodingBandwidth(\n encoding,\n bandwidth,\n );\n },\n [],\n );\n\n return {\n /**\n * Informs if user camera is streaming video\n */\n isCameraOn,\n /**\n * Which camera is now used for streaming (or will be used as default when camera will be enabled)\n */\n currentCamera,\n /**\n * Simulcast configuration\n */\n simulcastConfig,\n /**\n * Property that lists cameras available on device.\n * @returns A promise that resolves to the list of available cameras.\n */\n cameras,\n\n /** Enable/disable current camera */\n toggleCamera,\n /**\n * Prepares camera and starts local video track\n * @param config configuration of the camera capture\n * @returns A promise that resolves when camera is started.\n */\n prepareCamera,\n /**\n * Switches to the specified camera.\n * List of available devices can be retrieved from `cameras` variable\n * @returns A promise that resolves when camera is switched.\n */ switchCamera,\n\n /**\n * @deprecated\n * toggles encoding of a video track on/off\n * @param encoding encoding to toggle\n */\n toggleVideoTrackEncoding,\n /**\n * updates maximum bandwidth for the given simulcast encoding of the video track\n * @param encoding encoding to update\n * @param bandwidth BandwidthLimit to set\n * @deprecated\n */\n setVideoTrackEncodingBandwidth,\n /**\n * updates maximum bandwidth for the video track. This value directly translates\n * to quality of the stream and the amount of RTP packets being sent. In case simulcast\n * is enabled bandwidth is split between all of the variant streams proportionally to\n * their resolution.\n * @param BandwidthLimit to set\n * @deprecated\n */\n setVideoTrackBandwidth,\n };\n}\n"]}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
export declare const ReceivableEvents: {
|
|
2
2
|
readonly IsCameraOn: "IsCameraOn";
|
|
3
3
|
readonly IsMicrophoneOn: "IsMicrophoneOn";
|
|
4
|
-
readonly
|
|
4
|
+
readonly IsScreenShareOn: "IsScreenShareOn";
|
|
5
5
|
readonly SimulcastConfigUpdate: "SimulcastConfigUpdate";
|
|
6
6
|
readonly PeersUpdate: "PeersUpdate";
|
|
7
7
|
readonly AudioDeviceUpdate: "AudioDeviceUpdate";
|
|
@@ -11,6 +11,7 @@ export declare const ReceivableEvents: {
|
|
|
11
11
|
readonly ReconnectionStarted: "ReconnectionStarted";
|
|
12
12
|
readonly Reconnected: "Reconnected";
|
|
13
13
|
readonly Warning: "Warning";
|
|
14
|
+
readonly PeerStatusChanged: "PeerStatusChanged";
|
|
14
15
|
};
|
|
15
16
|
export declare function useFishjamEvent<T>(eventName: keyof typeof ReceivableEvents, callback: (event: T) => void): void;
|
|
16
17
|
//# sourceMappingURL=useFishjamEvent.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useFishjamEvent.d.ts","sourceRoot":"","sources":["../../src/hooks/useFishjamEvent.ts"],"names":[],"mappings":"AAGA,eAAO,MAAM,gBAAgB
|
|
1
|
+
{"version":3,"file":"useFishjamEvent.d.ts","sourceRoot":"","sources":["../../src/hooks/useFishjamEvent.ts"],"names":[],"mappings":"AAGA,eAAO,MAAM,gBAAgB;;;;;;;;;;;;;;CAcnB,CAAC;AAEX,wBAAgB,eAAe,CAAC,CAAC,EAC/B,SAAS,EAAE,MAAM,OAAO,gBAAgB,EACxC,QAAQ,EAAE,CAAC,KAAK,EAAE,CAAC,KAAK,IAAI,QAU7B"}
|
|
@@ -3,7 +3,7 @@ import { nativeModuleEventEmitter } from '../RNFishjamClientModule';
|
|
|
3
3
|
export const ReceivableEvents = {
|
|
4
4
|
IsCameraOn: 'IsCameraOn',
|
|
5
5
|
IsMicrophoneOn: 'IsMicrophoneOn',
|
|
6
|
-
|
|
6
|
+
IsScreenShareOn: 'IsScreenShareOn',
|
|
7
7
|
SimulcastConfigUpdate: 'SimulcastConfigUpdate',
|
|
8
8
|
PeersUpdate: 'PeersUpdate',
|
|
9
9
|
AudioDeviceUpdate: 'AudioDeviceUpdate',
|
|
@@ -13,6 +13,7 @@ export const ReceivableEvents = {
|
|
|
13
13
|
ReconnectionStarted: 'ReconnectionStarted',
|
|
14
14
|
Reconnected: 'Reconnected',
|
|
15
15
|
Warning: 'Warning',
|
|
16
|
+
PeerStatusChanged: 'PeerStatusChanged',
|
|
16
17
|
};
|
|
17
18
|
export function useFishjamEvent(eventName, callback) {
|
|
18
19
|
useEffect(() => {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useFishjamEvent.js","sourceRoot":"","sources":["../../src/hooks/useFishjamEvent.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAClC,OAAO,EAAE,wBAAwB,EAAE,MAAM,0BAA0B,CAAC;AAEpE,MAAM,CAAC,MAAM,gBAAgB,GAAG;IAC9B,UAAU,EAAE,YAAY;IACxB,cAAc,EAAE,gBAAgB;IAChC,
|
|
1
|
+
{"version":3,"file":"useFishjamEvent.js","sourceRoot":"","sources":["../../src/hooks/useFishjamEvent.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAClC,OAAO,EAAE,wBAAwB,EAAE,MAAM,0BAA0B,CAAC;AAEpE,MAAM,CAAC,MAAM,gBAAgB,GAAG;IAC9B,UAAU,EAAE,YAAY;IACxB,cAAc,EAAE,gBAAgB;IAChC,eAAe,EAAE,iBAAiB;IAClC,qBAAqB,EAAE,uBAAuB;IAC9C,WAAW,EAAE,aAAa;IAC1B,iBAAiB,EAAE,mBAAmB;IACtC,cAAc,EAAE,gBAAgB;IAChC,mBAAmB,EAAE,qBAAqB;IAC1C,+BAA+B,EAAE,iCAAiC;IAClE,mBAAmB,EAAE,qBAAqB;IAC1C,WAAW,EAAE,aAAa;IAC1B,OAAO,EAAE,SAAS;IAClB,iBAAiB,EAAE,mBAAmB;CAC9B,CAAC;AAEX,MAAM,UAAU,eAAe,CAC7B,SAAwC,EACxC,QAA4B;IAE5B,SAAS,CAAC,GAAG,EAAE;QACb,MAAM,aAAa,GAAG,wBAAwB,CAAC,WAAW,CAExD,SAAS,EAAE,CAAC,KAAK,EAAE,EAAE;YACrB,QAAQ,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC;QAC7B,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","sourcesContent":["import { useEffect } from 'react';\nimport { nativeModuleEventEmitter } from '../RNFishjamClientModule';\n\nexport const ReceivableEvents = {\n IsCameraOn: 'IsCameraOn',\n IsMicrophoneOn: 'IsMicrophoneOn',\n IsScreenShareOn: 'IsScreenShareOn',\n SimulcastConfigUpdate: 'SimulcastConfigUpdate',\n PeersUpdate: 'PeersUpdate',\n AudioDeviceUpdate: 'AudioDeviceUpdate',\n SendMediaEvent: 'SendMediaEvent',\n BandwidthEstimation: 'BandwidthEstimation',\n ReconnectionRetriesLimitReached: 'ReconnectionRetriesLimitReached',\n ReconnectionStarted: 'ReconnectionStarted',\n Reconnected: 'Reconnected',\n Warning: 'Warning',\n PeerStatusChanged: 'PeerStatusChanged',\n} as const;\n\nexport function useFishjamEvent<T>(\n eventName: keyof typeof ReceivableEvents,\n callback: (event: T) => void,\n) {\n useEffect(() => {\n const eventListener = nativeModuleEventEmitter.addListener<\n Record<keyof typeof ReceivableEvents, T>\n >(eventName, (event) => {\n callback(event[eventName]);\n });\n return () => eventListener.remove();\n }, [callback, eventName]);\n}\n"]}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Represents the possible statuses of a peer connection to a room (websocket state).
|
|
3
|
+
*
|
|
4
|
+
* idle - Peer is not connected, either never connected or successfully disconnected.
|
|
5
|
+
* connecting - Peer is in the process of connecting.
|
|
6
|
+
* connected - Peer has successfully connected.
|
|
7
|
+
* error - There was an error in the connection process.
|
|
8
|
+
*/
|
|
9
|
+
export type PeerStatus = 'connecting' | 'connected' | 'error' | 'idle';
|
|
10
|
+
/**
|
|
11
|
+
* This hook provides live updates of current connection state of the local peer to a room (websocket state)
|
|
12
|
+
* @returns Current peer status.
|
|
13
|
+
* @category Connection
|
|
14
|
+
* @group Hooks
|
|
15
|
+
*/
|
|
16
|
+
export declare const usePeerStatus: () => {
|
|
17
|
+
peerStatus: "connecting" | "connected" | "error" | "idle";
|
|
18
|
+
};
|
|
19
|
+
//# sourceMappingURL=usePeerStatus.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"usePeerStatus.d.ts","sourceRoot":"","sources":["../../src/hooks/usePeerStatus.ts"],"names":[],"mappings":"AAIA;;;;;;;GAOG;AACH,MAAM,MAAM,UAAU,GAAG,YAAY,GAAG,WAAW,GAAG,OAAO,GAAG,MAAM,CAAC;AAEvE;;;;;GAKG;AACH,eAAO,MAAM,aAAa;;CAYzB,CAAC"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { useCallback, useState } from 'react';
|
|
2
|
+
import { ReceivableEvents, useFishjamEvent } from './useFishjamEvent';
|
|
3
|
+
import RNFishjamClientModule from '../RNFishjamClientModule';
|
|
4
|
+
/**
|
|
5
|
+
* This hook provides live updates of current connection state of the local peer to a room (websocket state)
|
|
6
|
+
* @returns Current peer status.
|
|
7
|
+
* @category Connection
|
|
8
|
+
* @group Hooks
|
|
9
|
+
*/
|
|
10
|
+
export const usePeerStatus = () => {
|
|
11
|
+
const [peerStatus, setPeerStatus] = useState(RNFishjamClientModule.peerStatus);
|
|
12
|
+
const onPeerStatusChanged = useCallback((status) => {
|
|
13
|
+
status && setPeerStatus(status);
|
|
14
|
+
}, []);
|
|
15
|
+
useFishjamEvent(ReceivableEvents.PeerStatusChanged, onPeerStatusChanged);
|
|
16
|
+
return { peerStatus };
|
|
17
|
+
};
|
|
18
|
+
//# sourceMappingURL=usePeerStatus.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"usePeerStatus.js","sourceRoot":"","sources":["../../src/hooks/usePeerStatus.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AAC9C,OAAO,EAAE,gBAAgB,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACtE,OAAO,qBAAqB,MAAM,0BAA0B,CAAC;AAY7D;;;;;GAKG;AACH,MAAM,CAAC,MAAM,aAAa,GAAG,GAAG,EAAE;IAChC,MAAM,CAAC,UAAU,EAAE,aAAa,CAAC,GAAG,QAAQ,CAC1C,qBAAqB,CAAC,UAAU,CACjC,CAAC;IAEF,MAAM,mBAAmB,GAAG,WAAW,CAAC,CAAC,MAAmB,EAAE,EAAE;QAC9D,MAAM,IAAI,aAAa,CAAC,MAAM,CAAC,CAAC;IAClC,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,eAAe,CAAC,gBAAgB,CAAC,iBAAiB,EAAE,mBAAmB,CAAC,CAAC;IAEzE,OAAO,EAAE,UAAU,EAAE,CAAC;AACxB,CAAC,CAAC","sourcesContent":["import { useCallback, useState } from 'react';\nimport { ReceivableEvents, useFishjamEvent } from './useFishjamEvent';\nimport RNFishjamClientModule from '../RNFishjamClientModule';\n\n/**\n * Represents the possible statuses of a peer connection to a room (websocket state).\n *\n * idle - Peer is not connected, either never connected or successfully disconnected.\n * connecting - Peer is in the process of connecting.\n * connected - Peer has successfully connected.\n * error - There was an error in the connection process.\n */\nexport type PeerStatus = 'connecting' | 'connected' | 'error' | 'idle';\n\n/**\n * This hook provides live updates of current connection state of the local peer to a room (websocket state)\n * @returns Current peer status.\n * @category Connection\n * @group Hooks\n */\nexport const usePeerStatus = () => {\n const [peerStatus, setPeerStatus] = useState(\n RNFishjamClientModule.peerStatus,\n );\n\n const onPeerStatusChanged = useCallback((status?: PeerStatus) => {\n status && setPeerStatus(status);\n }, []);\n\n useFishjamEvent(ReceivableEvents.PeerStatusChanged, onPeerStatusChanged);\n\n return { peerStatus };\n};\n"]}
|
|
@@ -30,32 +30,32 @@ export type Track = VideoTrack | AudioTrack;
|
|
|
30
30
|
* - low_bandwidth - there is no longer enough bandwidth to maintain previously selected encoding
|
|
31
31
|
*/
|
|
32
32
|
export type EncodingReason = 'other' | 'encoding_inactive' | 'low_bandwidth';
|
|
33
|
-
export type
|
|
33
|
+
export type Peer<PeerMetadata extends GenericMetadata = GenericMetadata> = {
|
|
34
34
|
/**
|
|
35
|
-
* id used to identify a
|
|
35
|
+
* id used to identify a peer
|
|
36
36
|
*/
|
|
37
37
|
id: string;
|
|
38
38
|
/**
|
|
39
|
-
* whether the
|
|
39
|
+
* whether the peer is local or remote
|
|
40
40
|
*/
|
|
41
41
|
isLocal: boolean;
|
|
42
42
|
/**
|
|
43
|
-
* a map indexed by strings, containing
|
|
43
|
+
* a map indexed by strings, containing peer metadata from the server
|
|
44
44
|
*/
|
|
45
|
-
metadata:
|
|
45
|
+
metadata: PeerMetadata;
|
|
46
46
|
/**
|
|
47
|
-
* a list of
|
|
47
|
+
* a list of peer's video and audio tracks
|
|
48
48
|
*/
|
|
49
49
|
tracks: Track[];
|
|
50
50
|
};
|
|
51
51
|
/**
|
|
52
|
-
* This hook provides live updates of room
|
|
53
|
-
* @returns An array of room
|
|
52
|
+
* This hook provides live updates of room peers.
|
|
53
|
+
* @returns An array of room peers.
|
|
54
54
|
* @category Connection
|
|
55
55
|
* @group Hooks
|
|
56
56
|
*/
|
|
57
|
-
export declare function
|
|
58
|
-
|
|
57
|
+
export declare function usePeers<PeerMetadata extends GenericMetadata = GenericMetadata>(): {
|
|
58
|
+
peers: Peer<PeerMetadata>[];
|
|
59
59
|
};
|
|
60
60
|
export {};
|
|
61
|
-
//# sourceMappingURL=
|
|
61
|
+
//# sourceMappingURL=usePeers.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"usePeers.d.ts","sourceRoot":"","sources":["../../src/hooks/usePeers.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,eAAe,EAAE,aAAa,EAAiB,MAAM,UAAU,CAAC;AAIzE,MAAM,MAAM,SAAS,GAAG,OAAO,GAAG,OAAO,CAAC;AAE1C;;;;;GAKG;AACH,MAAM,MAAM,SAAS,GAAG,SAAS,GAAG,QAAQ,CAAC;AAE7C,KAAK,SAAS,GAAG;IACf,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,SAAS,CAAC;IAChB,QAAQ,EAAE,OAAO,CAAC;CACnB,CAAC;AAEF,MAAM,MAAM,UAAU,GAAG,SAAS,GAAG;IACnC,IAAI,EAAE,OAAO,CAAC;IACd,SAAS,EAAE,SAAS,GAAG,SAAS,CAAC;CAClC,CAAC;AAEF,MAAM,MAAM,UAAU,GAAG,SAAS,GAAG;IACnC,IAAI,EAAE,OAAO,CAAC;IAEd,QAAQ,EAAE,aAAa,GAAG,IAAI,CAAC;IAE/B,cAAc,EAAE,cAAc,GAAG,IAAI,CAAC;CACvC,CAAC;AAEF,MAAM,MAAM,KAAK,GAAG,UAAU,GAAG,UAAU,CAAC;AAC5C;;;;;;GAMG;AACH,MAAM,MAAM,cAAc,GAAG,OAAO,GAAG,mBAAmB,GAAG,eAAe,CAAC;AAE7E,MAAM,MAAM,IAAI,CAAC,YAAY,SAAS,eAAe,GAAG,eAAe,IAAI;IACzE;;OAEG;IACH,EAAE,EAAE,MAAM,CAAC;IACX;;OAEG;IACH,OAAO,EAAE,OAAO,CAAC;IACjB;;OAEG;IACH,QAAQ,EAAE,YAAY,CAAC;IACvB;;OAEG;IACH,MAAM,EAAE,KAAK,EAAE,CAAC;CACjB,CAAC;AAcF;;;;;GAKG;AACH,wBAAgB,QAAQ,CACtB,YAAY,SAAS,eAAe,GAAG,eAAe;;EAoBvD"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import { useCallback, useEffect, useState } from 'react';
|
|
2
|
+
import RNFishjamClientModule from '../RNFishjamClientModule';
|
|
3
|
+
import { ReceivableEvents, useFishjamEvent } from './useFishjamEvent';
|
|
4
|
+
function addIsActiveToTracks(peers) {
|
|
5
|
+
return peers.map((peer) => ({
|
|
6
|
+
...peer,
|
|
7
|
+
tracks: peer.tracks.map((track) => ({
|
|
8
|
+
...track,
|
|
9
|
+
isActive: track?.metadata?.active ?? true,
|
|
10
|
+
})),
|
|
11
|
+
}));
|
|
12
|
+
}
|
|
13
|
+
/**
|
|
14
|
+
* This hook provides live updates of room peers.
|
|
15
|
+
* @returns An array of room peers.
|
|
16
|
+
* @category Connection
|
|
17
|
+
* @group Hooks
|
|
18
|
+
*/
|
|
19
|
+
export function usePeers() {
|
|
20
|
+
const [peers, setPeers] = useState([]);
|
|
21
|
+
const updateActivePeers = useCallback((peers) => {
|
|
22
|
+
setPeers(addIsActiveToTracks(peers));
|
|
23
|
+
}, []);
|
|
24
|
+
useFishjamEvent(ReceivableEvents.PeersUpdate, updateActivePeers);
|
|
25
|
+
useEffect(() => {
|
|
26
|
+
async function updatePeers() {
|
|
27
|
+
const peers = await RNFishjamClientModule.getPeers();
|
|
28
|
+
setPeers(addIsActiveToTracks(peers));
|
|
29
|
+
}
|
|
30
|
+
updatePeers();
|
|
31
|
+
}, []);
|
|
32
|
+
return { peers };
|
|
33
|
+
}
|
|
34
|
+
//# sourceMappingURL=usePeers.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"usePeers.js","sourceRoot":"","sources":["../../src/hooks/usePeers.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AAGzD,OAAO,qBAAqB,MAAM,0BAA0B,CAAC;AAC7D,OAAO,EAAE,gBAAgB,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AA4DtE,SAAS,mBAAmB,CAE1B,KAAwC;IACxC,OAAO,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;QAC1B,GAAG,IAAI;QACP,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;YAClC,GAAG,KAAK;YACR,QAAQ,EACL,KAAsC,EAAE,QAAQ,EAAE,MAAM,IAAI,IAAI;SACpE,CAAC,CAAC;KACJ,CAAC,CAAC,CAAC;AACN,CAAC;AACD;;;;;GAKG;AACH,MAAM,UAAU,QAAQ;IAGtB,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,GAAG,QAAQ,CAAuB,EAAE,CAAC,CAAC;IAE7D,MAAM,iBAAiB,GAAG,WAAW,CAAC,CAAC,KAA2B,EAAE,EAAE;QACpE,QAAQ,CAAC,mBAAmB,CAAe,KAAK,CAAC,CAAC,CAAC;IACrD,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,eAAe,CAAC,gBAAgB,CAAC,WAAW,EAAE,iBAAiB,CAAC,CAAC;IAEjE,SAAS,CAAC,GAAG,EAAE;QACb,KAAK,UAAU,WAAW;YACxB,MAAM,KAAK,GAAG,MAAM,qBAAqB,CAAC,QAAQ,EAAgB,CAAC;YACnE,QAAQ,CAAC,mBAAmB,CAAe,KAAK,CAAC,CAAC,CAAC;QACrD,CAAC;QAED,WAAW,EAAE,CAAC;IAChB,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,OAAO,EAAE,KAAK,EAAE,CAAC;AACnB,CAAC","sourcesContent":["import { useCallback, useEffect, useState } from 'react';\n\nimport { GenericMetadata, TrackEncoding, TrackMetadata } from '../types';\nimport RNFishjamClientModule from '../RNFishjamClientModule';\nimport { ReceivableEvents, useFishjamEvent } from './useFishjamEvent';\n\nexport type TrackType = 'Audio' | 'Video';\n\n/**\n * Type describing Voice Activity Detection statuses.\n *\n * speech - voice activity has been detected\n * silence - lack of voice activity has been detected\n */\nexport type VadStatus = 'silence' | 'speech';\n\ntype TrackBase = {\n id: string;\n type: TrackType;\n isActive: boolean;\n};\n\nexport type AudioTrack = TrackBase & {\n type: 'Audio';\n vadStatus: VadStatus | undefined;\n};\n\nexport type VideoTrack = TrackBase & {\n type: 'Video';\n // Encoding that is currently received. Only present for remote tracks.\n encoding: TrackEncoding | null;\n // The reason of currently selected encoding. Only present for remote tracks.\n encodingReason: EncodingReason | null;\n};\n\nexport type Track = VideoTrack | AudioTrack;\n/**\n * Type describing possible reasons of currently selected encoding.\n *\n * - other - the exact reason couldn't be determined\n * - encoding_inactive - previously selected encoding became inactive\n * - low_bandwidth - there is no longer enough bandwidth to maintain previously selected encoding\n */\nexport type EncodingReason = 'other' | 'encoding_inactive' | 'low_bandwidth';\n\nexport type Peer<PeerMetadata extends GenericMetadata = GenericMetadata> = {\n /**\n * id used to identify a peer\n */\n id: string;\n /**\n * whether the peer is local or remote\n */\n isLocal: boolean;\n /**\n * a map indexed by strings, containing peer metadata from the server\n */\n metadata: PeerMetadata;\n /**\n * a list of peer's video and audio tracks\n */\n tracks: Track[];\n};\n\nfunction addIsActiveToTracks<\n PeerMetadata extends GenericMetadata = GenericMetadata,\n>(peers: ReadonlyArray<Peer<PeerMetadata>>): Peer<PeerMetadata>[] {\n return peers.map((peer) => ({\n ...peer,\n tracks: peer.tracks.map((track) => ({\n ...track,\n isActive:\n (track as { metadata?: TrackMetadata })?.metadata?.active ?? true,\n })),\n }));\n}\n/**\n * This hook provides live updates of room peers.\n * @returns An array of room peers.\n * @category Connection\n * @group Hooks\n */\nexport function usePeers<\n PeerMetadata extends GenericMetadata = GenericMetadata,\n>() {\n const [peers, setPeers] = useState<Peer<PeerMetadata>[]>([]);\n\n const updateActivePeers = useCallback((peers: Peer<PeerMetadata>[]) => {\n setPeers(addIsActiveToTracks<PeerMetadata>(peers));\n }, []);\n\n useFishjamEvent(ReceivableEvents.PeersUpdate, updateActivePeers);\n\n useEffect(() => {\n async function updatePeers() {\n const peers = await RNFishjamClientModule.getPeers<PeerMetadata>();\n setPeers(addIsActiveToTracks<PeerMetadata>(peers));\n }\n\n updatePeers();\n }, []);\n\n return { peers };\n}\n"]}
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
import { BandwidthLimit, SimulcastConfig, TrackBandwidthLimit, TrackEncoding, TrackMetadata } from '../types';
|
|
2
|
+
export type ScreenShareQuality = 'VGA' | 'HD5' | 'HD15' | 'FHD15' | 'FHD30';
|
|
3
|
+
export type ScreenShareOptions = {
|
|
4
|
+
/**
|
|
5
|
+
* Resolution + fps of screen share track, one of: `VGA`, `HD5`, `HD15`, `FHD15`, `FHD30`.
|
|
6
|
+
* Note that quality might be worse than specified due to device capabilities, internet
|
|
7
|
+
* connection etc.
|
|
8
|
+
* @default `HD15``
|
|
9
|
+
*/
|
|
10
|
+
quality: ScreenShareQuality;
|
|
11
|
+
/**
|
|
12
|
+
* bandwidth limit of a screen share track. By default there is no bandwidth limit.
|
|
13
|
+
*/
|
|
14
|
+
maxBandwidth: TrackBandwidthLimit;
|
|
15
|
+
};
|
|
16
|
+
export type ScreenShareOptionsInternal = {
|
|
17
|
+
screenShareMetadata: TrackMetadata & {
|
|
18
|
+
displayName?: string;
|
|
19
|
+
};
|
|
20
|
+
/**
|
|
21
|
+
* SimulcastConfig of a screen share track. By default simulcast is disabled.
|
|
22
|
+
*/
|
|
23
|
+
simulcastConfig: SimulcastConfig;
|
|
24
|
+
};
|
|
25
|
+
/**
|
|
26
|
+
* This hook can toggle screen sharing on/off and provides current screen share state.
|
|
27
|
+
* @returns An object with functions to manage screen share.
|
|
28
|
+
* @category Screenshare
|
|
29
|
+
* @group Hooks
|
|
30
|
+
*/
|
|
31
|
+
export declare function useScreenShare(): {
|
|
32
|
+
isScreenShareOn: boolean;
|
|
33
|
+
simulcastConfig: SimulcastConfig;
|
|
34
|
+
/**
|
|
35
|
+
* Toggles the screen share on/off
|
|
36
|
+
*/
|
|
37
|
+
toggleScreenShare: (screenShareOptions?: Partial<ScreenShareOptions>) => Promise<void>;
|
|
38
|
+
handleScreenSharePermission: () => Promise<"granted" | "denied">;
|
|
39
|
+
/**
|
|
40
|
+
* @deprecated
|
|
41
|
+
*/
|
|
42
|
+
setScreenShareTrackBandwidth: (bandwidth: BandwidthLimit) => Promise<void>;
|
|
43
|
+
/**
|
|
44
|
+
* Toggles simulcast encoding of a screen share track on/off
|
|
45
|
+
* @param encoding encoding to toggle
|
|
46
|
+
* @deprecated
|
|
47
|
+
*/
|
|
48
|
+
toggleScreenShareTrackEncoding: (encoding: TrackEncoding) => Promise<void>;
|
|
49
|
+
/**
|
|
50
|
+
* updates maximum bandwidth for the given simulcast encoding of the screen share track
|
|
51
|
+
* @param encoding encoding to update
|
|
52
|
+
* @param bandwidth BandwidthLimit to set
|
|
53
|
+
* @deprecated
|
|
54
|
+
*/
|
|
55
|
+
setScreenShareTrackEncodingBandwidth: (encoding: TrackEncoding, bandwidth: BandwidthLimit) => Promise<void>;
|
|
56
|
+
};
|
|
57
|
+
//# sourceMappingURL=useScreenShare.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useScreenShare.d.ts","sourceRoot":"","sources":["../../src/hooks/useScreenShare.ts"],"names":[],"mappings":"AAEA,OAAO,EACL,cAAc,EACd,eAAe,EACf,mBAAmB,EACnB,aAAa,EACb,aAAa,EACd,MAAM,UAAU,CAAC;AAKlB,MAAM,MAAM,kBAAkB,GAAG,KAAK,GAAG,KAAK,GAAG,MAAM,GAAG,OAAO,GAAG,OAAO,CAAC;AAE5E,MAAM,MAAM,kBAAkB,GAAG;IAC/B;;;;;OAKG;IACH,OAAO,EAAE,kBAAkB,CAAC;IAC5B;;OAEG;IACH,YAAY,EAAE,mBAAmB,CAAC;CACnC,CAAC;AACF,MAAM,MAAM,0BAA0B,GAAG;IACvC,mBAAmB,EAAE,aAAa,GAAG;QAAE,WAAW,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IAC9D;;OAEG;IACH,eAAe,EAAE,eAAe,CAAC;CAClC,CAAC;AASF;;;;;GAKG;AACH,wBAAgB,cAAc;;;IAiE1B;;OAEG;6CAvDwB,OAAO,CAAC,kBAAkB,CAAC;;IA2DtD;;OAEG;8CAzBe,cAAc;IA2BhC;;;;OAIG;+CAlDc,aAAa;IAoD9B;;;;;OAKG;qDAhDc,aAAa,aAAa,cAAc;EA2D5D"}
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
import { useCallback, useState } from 'react';
|
|
2
|
+
import RNFishjamClientModule from '../RNFishjamClientModule';
|
|
3
|
+
import { Platform } from 'react-native';
|
|
4
|
+
import { ReceivableEvents, useFishjamEvent } from './useFishjamEvent';
|
|
5
|
+
const defaultSimulcastConfig = () => ({
|
|
6
|
+
enabled: false,
|
|
7
|
+
activeEncodings: [],
|
|
8
|
+
});
|
|
9
|
+
let screenShareSimulcastConfig = defaultSimulcastConfig();
|
|
10
|
+
/**
|
|
11
|
+
* This hook can toggle screen sharing on/off and provides current screen share state.
|
|
12
|
+
* @returns An object with functions to manage screen share.
|
|
13
|
+
* @category Screenshare
|
|
14
|
+
* @group Hooks
|
|
15
|
+
*/
|
|
16
|
+
export function useScreenShare() {
|
|
17
|
+
const [isScreenShareOn, setIsScreenShareOn] = useState(RNFishjamClientModule.isScreenShareOn);
|
|
18
|
+
const [simulcastConfig, setSimulcastConfig] = useState(screenShareSimulcastConfig);
|
|
19
|
+
useFishjamEvent(ReceivableEvents.IsScreenShareOn, setIsScreenShareOn);
|
|
20
|
+
const toggleScreenShare = useCallback(async (screenShareOptions = {}) => {
|
|
21
|
+
const options = {
|
|
22
|
+
...screenShareOptions,
|
|
23
|
+
screenShareMetadata: {
|
|
24
|
+
displayName: 'presenting',
|
|
25
|
+
type: 'screensharing',
|
|
26
|
+
active: !isScreenShareOn,
|
|
27
|
+
},
|
|
28
|
+
};
|
|
29
|
+
await RNFishjamClientModule.toggleScreenShare(options);
|
|
30
|
+
screenShareSimulcastConfig = defaultSimulcastConfig(); //to do: sync with camera settings
|
|
31
|
+
setSimulcastConfig(screenShareSimulcastConfig);
|
|
32
|
+
}, [isScreenShareOn]);
|
|
33
|
+
const toggleScreenShareTrackEncoding = useCallback(async (encoding) => {
|
|
34
|
+
screenShareSimulcastConfig =
|
|
35
|
+
await RNFishjamClientModule.toggleScreenShareTrackEncoding(encoding);
|
|
36
|
+
setSimulcastConfig(screenShareSimulcastConfig);
|
|
37
|
+
}, []);
|
|
38
|
+
const setScreenShareTrackEncodingBandwidth = useCallback(async (encoding, bandwidth) => {
|
|
39
|
+
await RNFishjamClientModule.setScreenShareTrackEncodingBandwidth(encoding, bandwidth);
|
|
40
|
+
}, []);
|
|
41
|
+
const setScreenShareTrackBandwidth = useCallback(async (bandwidth) => {
|
|
42
|
+
await RNFishjamClientModule.setScreenShareTrackBandwidth(bandwidth);
|
|
43
|
+
}, []);
|
|
44
|
+
const handleScreenSharePermission = useCallback(async () => {
|
|
45
|
+
if (Platform.OS == 'android') {
|
|
46
|
+
return await RNFishjamClientModule.handleScreenSharePermission();
|
|
47
|
+
}
|
|
48
|
+
return 'denied';
|
|
49
|
+
}, []);
|
|
50
|
+
return {
|
|
51
|
+
isScreenShareOn,
|
|
52
|
+
simulcastConfig,
|
|
53
|
+
/**
|
|
54
|
+
* Toggles the screen share on/off
|
|
55
|
+
*/
|
|
56
|
+
toggleScreenShare,
|
|
57
|
+
handleScreenSharePermission,
|
|
58
|
+
/**
|
|
59
|
+
* @deprecated
|
|
60
|
+
*/
|
|
61
|
+
setScreenShareTrackBandwidth,
|
|
62
|
+
/**
|
|
63
|
+
* Toggles simulcast encoding of a screen share track on/off
|
|
64
|
+
* @param encoding encoding to toggle
|
|
65
|
+
* @deprecated
|
|
66
|
+
*/
|
|
67
|
+
toggleScreenShareTrackEncoding,
|
|
68
|
+
/**
|
|
69
|
+
* updates maximum bandwidth for the given simulcast encoding of the screen share track
|
|
70
|
+
* @param encoding encoding to update
|
|
71
|
+
* @param bandwidth BandwidthLimit to set
|
|
72
|
+
* @deprecated
|
|
73
|
+
*/
|
|
74
|
+
setScreenShareTrackEncodingBandwidth,
|
|
75
|
+
/**
|
|
76
|
+
* updates maximum bandwidth for the screen share track. This value directly translates
|
|
77
|
+
* to quality of the stream and the amount of RTP packets being sent. In case simulcast
|
|
78
|
+
* is enabled bandwidth is split between all of the variant streams proportionally to
|
|
79
|
+
* their resolution
|
|
80
|
+
* @param bandwidth BandwidthLimit to set
|
|
81
|
+
* @deprecated
|
|
82
|
+
*/
|
|
83
|
+
};
|
|
84
|
+
}
|
|
85
|
+
//# sourceMappingURL=useScreenShare.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useScreenShare.js","sourceRoot":"","sources":["../../src/hooks/useScreenShare.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AAS9C,OAAO,qBAAqB,MAAM,0BAA0B,CAAC;AAC7D,OAAO,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAC;AACxC,OAAO,EAAE,gBAAgB,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAyBtE,MAAM,sBAAsB,GAAG,GAAG,EAAE,CAAC,CAAC;IACpC,OAAO,EAAE,KAAK;IACd,eAAe,EAAE,EAAE;CACpB,CAAC,CAAC;AAEH,IAAI,0BAA0B,GAAoB,sBAAsB,EAAE,CAAC;AAE3E;;;;;GAKG;AACH,MAAM,UAAU,cAAc;IAC5B,MAAM,CAAC,eAAe,EAAE,kBAAkB,CAAC,GAAG,QAAQ,CACpD,qBAAqB,CAAC,eAAe,CACtC,CAAC;IAEF,MAAM,CAAC,eAAe,EAAE,kBAAkB,CAAC,GAAG,QAAQ,CACpD,0BAA0B,CAC3B,CAAC;IAEF,eAAe,CAAC,gBAAgB,CAAC,eAAe,EAAE,kBAAkB,CAAC,CAAC;IAEtE,MAAM,iBAAiB,GAAG,WAAW,CACnC,KAAK,EAAE,qBAAkD,EAAE,EAAE,EAAE;QAC7D,MAAM,OAAO,GAAG;YACd,GAAG,kBAAkB;YACrB,mBAAmB,EAAE;gBACnB,WAAW,EAAE,YAAY;gBACzB,IAAI,EAAE,eAAwB;gBAC9B,MAAM,EAAE,CAAC,eAAe;aACzB;SACF,CAAC;QACF,MAAM,qBAAqB,CAAC,iBAAiB,CAAC,OAAO,CAAC,CAAC;QACvD,0BAA0B,GAAG,sBAAsB,EAAE,CAAC,CAAC,kCAAkC;QACzF,kBAAkB,CAAC,0BAA0B,CAAC,CAAC;IACjD,CAAC,EACD,CAAC,eAAe,CAAC,CAClB,CAAC;IAEF,MAAM,8BAA8B,GAAG,WAAW,CAChD,KAAK,EAAE,QAAuB,EAAE,EAAE;QAChC,0BAA0B;YACxB,MAAM,qBAAqB,CAAC,8BAA8B,CAAC,QAAQ,CAAC,CAAC;QACvE,kBAAkB,CAAC,0BAA0B,CAAC,CAAC;IACjD,CAAC,EACD,EAAE,CACH,CAAC;IAEF,MAAM,oCAAoC,GAAG,WAAW,CACtD,KAAK,EAAE,QAAuB,EAAE,SAAyB,EAAE,EAAE;QAC3D,MAAM,qBAAqB,CAAC,oCAAoC,CAC9D,QAAQ,EACR,SAAS,CACV,CAAC;IACJ,CAAC,EACD,EAAE,CACH,CAAC;IAEF,MAAM,4BAA4B,GAAG,WAAW,CAC9C,KAAK,EAAE,SAAyB,EAAE,EAAE;QAClC,MAAM,qBAAqB,CAAC,4BAA4B,CAAC,SAAS,CAAC,CAAC;IACtE,CAAC,EACD,EAAE,CACH,CAAC;IAEF,MAAM,2BAA2B,GAAG,WAAW,CAAC,KAAK,IAAI,EAAE;QACzD,IAAI,QAAQ,CAAC,EAAE,IAAI,SAAS,EAAE,CAAC;YAC7B,OAAO,MAAM,qBAAqB,CAAC,2BAA2B,EAAE,CAAC;QACnE,CAAC;QACD,OAAO,QAAQ,CAAC;IAClB,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,OAAO;QACL,eAAe;QACf,eAAe;QAEf;;WAEG;QACH,iBAAiB;QACjB,2BAA2B;QAE3B;;WAEG;QACH,4BAA4B;QAC5B;;;;WAIG;QACH,8BAA8B;QAC9B;;;;;WAKG;QACH,oCAAoC;QACpC;;;;;;;WAOG;KACJ,CAAC;AACJ,CAAC","sourcesContent":["import { useCallback, useState } from 'react';\n\nimport {\n BandwidthLimit,\n SimulcastConfig,\n TrackBandwidthLimit,\n TrackEncoding,\n TrackMetadata,\n} from '../types';\nimport RNFishjamClientModule from '../RNFishjamClientModule';\nimport { Platform } from 'react-native';\nimport { ReceivableEvents, useFishjamEvent } from './useFishjamEvent';\n\nexport type ScreenShareQuality = 'VGA' | 'HD5' | 'HD15' | 'FHD15' | 'FHD30';\n\nexport type ScreenShareOptions = {\n /**\n * Resolution + fps of screen share track, one of: `VGA`, `HD5`, `HD15`, `FHD15`, `FHD30`.\n * Note that quality might be worse than specified due to device capabilities, internet\n * connection etc.\n * @default `HD15``\n */\n quality: ScreenShareQuality;\n /**\n * bandwidth limit of a screen share track. By default there is no bandwidth limit.\n */\n maxBandwidth: TrackBandwidthLimit;\n};\nexport type ScreenShareOptionsInternal = {\n screenShareMetadata: TrackMetadata & { displayName?: string };\n /**\n * SimulcastConfig of a screen share track. By default simulcast is disabled.\n */\n simulcastConfig: SimulcastConfig;\n};\n\nconst defaultSimulcastConfig = () => ({\n enabled: false,\n activeEncodings: [],\n});\n\nlet screenShareSimulcastConfig: SimulcastConfig = defaultSimulcastConfig();\n\n/**\n * This hook can toggle screen sharing on/off and provides current screen share state.\n * @returns An object with functions to manage screen share.\n * @category Screenshare\n * @group Hooks\n */\nexport function useScreenShare() {\n const [isScreenShareOn, setIsScreenShareOn] = useState(\n RNFishjamClientModule.isScreenShareOn,\n );\n\n const [simulcastConfig, setSimulcastConfig] = useState<SimulcastConfig>(\n screenShareSimulcastConfig,\n );\n\n useFishjamEvent(ReceivableEvents.IsScreenShareOn, setIsScreenShareOn);\n\n const toggleScreenShare = useCallback(\n async (screenShareOptions: Partial<ScreenShareOptions> = {}) => {\n const options = {\n ...screenShareOptions,\n screenShareMetadata: {\n displayName: 'presenting',\n type: 'screensharing' as const,\n active: !isScreenShareOn,\n },\n };\n await RNFishjamClientModule.toggleScreenShare(options);\n screenShareSimulcastConfig = defaultSimulcastConfig(); //to do: sync with camera settings\n setSimulcastConfig(screenShareSimulcastConfig);\n },\n [isScreenShareOn],\n );\n\n const toggleScreenShareTrackEncoding = useCallback(\n async (encoding: TrackEncoding) => {\n screenShareSimulcastConfig =\n await RNFishjamClientModule.toggleScreenShareTrackEncoding(encoding);\n setSimulcastConfig(screenShareSimulcastConfig);\n },\n [],\n );\n\n const setScreenShareTrackEncodingBandwidth = useCallback(\n async (encoding: TrackEncoding, bandwidth: BandwidthLimit) => {\n await RNFishjamClientModule.setScreenShareTrackEncodingBandwidth(\n encoding,\n bandwidth,\n );\n },\n [],\n );\n\n const setScreenShareTrackBandwidth = useCallback(\n async (bandwidth: BandwidthLimit) => {\n await RNFishjamClientModule.setScreenShareTrackBandwidth(bandwidth);\n },\n [],\n );\n\n const handleScreenSharePermission = useCallback(async () => {\n if (Platform.OS == 'android') {\n return await RNFishjamClientModule.handleScreenSharePermission();\n }\n return 'denied';\n }, []);\n\n return {\n isScreenShareOn,\n simulcastConfig,\n\n /**\n * Toggles the screen share on/off\n */\n toggleScreenShare,\n handleScreenSharePermission,\n\n /**\n * @deprecated\n */\n setScreenShareTrackBandwidth,\n /**\n * Toggles simulcast encoding of a screen share track on/off\n * @param encoding encoding to toggle\n * @deprecated\n */\n toggleScreenShareTrackEncoding,\n /**\n * updates maximum bandwidth for the given simulcast encoding of the screen share track\n * @param encoding encoding to update\n * @param bandwidth BandwidthLimit to set\n * @deprecated\n */\n setScreenShareTrackEncodingBandwidth,\n /**\n * updates maximum bandwidth for the screen share track. This value directly translates\n * to quality of the stream and the amount of RTP packets being sent. In case simulcast\n * is enabled bandwidth is split between all of the variant streams proportionally to\n * their resolution\n * @param bandwidth BandwidthLimit to set\n * @deprecated\n */\n };\n}\n"]}
|
package/build/index.d.ts
CHANGED
|
@@ -1,19 +1,18 @@
|
|
|
1
|
-
export type {
|
|
2
|
-
export {
|
|
1
|
+
export type { Peer, Track, TrackType, VadStatus, EncodingReason, } from './hooks/usePeers';
|
|
2
|
+
export { usePeers } from './hooks/usePeers';
|
|
3
3
|
export type { AudioOutputDevice, AudioOutputDeviceType, AudioSessionMode, } from './hooks/useAudioSettings';
|
|
4
4
|
export { useAudioSettings } from './hooks/useAudioSettings';
|
|
5
5
|
export { useBandwidthEstimation } from './hooks/useBandwidthEstimation';
|
|
6
6
|
export type { CameraId, Camera, CameraConfig, VideoQuality, CameraFacingDirection, } from './hooks/useCamera';
|
|
7
7
|
export { useCamera } from './hooks/useCamera';
|
|
8
8
|
export { useMicrophone } from './hooks/useMicrophone';
|
|
9
|
-
export {
|
|
10
|
-
export
|
|
11
|
-
export { useScreencast } from './hooks/useScreencast';
|
|
9
|
+
export type { ScreenShareOptions, ScreenShareQuality, } from './hooks/useScreenShare';
|
|
10
|
+
export { useScreenShare } from './hooks/useScreenShare';
|
|
12
11
|
export type { ReconnectionStatus } from './hooks/useReconnection';
|
|
13
12
|
export { useReconnection } from './hooks/useReconnection';
|
|
14
13
|
export { updatePeerMetadata } from './common/metadata';
|
|
15
|
-
export
|
|
16
|
-
export {
|
|
14
|
+
export { setTargetTrackEncoding } from './common/webRTC';
|
|
15
|
+
export type { ConnectionConfig } from './common/client';
|
|
17
16
|
export { joinRoom, leaveRoom } from './common/client';
|
|
18
17
|
export type { VideoPreviewViewProps } from './components/VideoPreviewView';
|
|
19
18
|
export { VideoPreviewView } from './components/VideoPreviewView';
|
|
@@ -21,5 +20,7 @@ export type { VideoRendererProps } from './components/VideoRendererView';
|
|
|
21
20
|
export { VideoRendererView } from './components/VideoRendererView';
|
|
22
21
|
export { AndroidForegroundServiceType } from './types';
|
|
23
22
|
export { startForegroundService, stopForegroundService, } from './utils/foregroundService';
|
|
23
|
+
export type { PeerStatus } from './hooks/usePeerStatus';
|
|
24
|
+
export { usePeerStatus } from './hooks/usePeerStatus';
|
|
24
25
|
export type { TrackBandwidthLimit, TrackEncoding, SimulcastBandwidthLimit, BandwidthLimit, SimulcastConfig, VideoLayout, } from './types';
|
|
25
26
|
//# sourceMappingURL=index.d.ts.map
|
package/build/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.tsx"],"names":[],"mappings":"AAEA,YAAY,EACV,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.tsx"],"names":[],"mappings":"AAEA,YAAY,EACV,IAAI,EACJ,KAAK,EACL,SAAS,EACT,SAAS,EACT,cAAc,GACf,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAE5C,YAAY,EACV,iBAAiB,EACjB,qBAAqB,EACrB,gBAAgB,GACjB,MAAM,0BAA0B,CAAC;AAClC,OAAO,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AAE5D,OAAO,EAAE,sBAAsB,EAAE,MAAM,gCAAgC,CAAC;AAExE,YAAY,EACV,QAAQ,EACR,MAAM,EACN,YAAY,EACZ,YAAY,EACZ,qBAAqB,GACtB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAE9C,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AAEtD,YAAY,EACV,kBAAkB,EAClB,kBAAkB,GACnB,MAAM,wBAAwB,CAAC;AAChC,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAExD,YAAY,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAClE,OAAO,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAE1D,OAAO,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AAEvD,OAAO,EAAE,sBAAsB,EAAE,MAAM,iBAAiB,CAAC;AAEzD,YAAY,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AACxD,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAEtD,YAAY,EAAE,qBAAqB,EAAE,MAAM,+BAA+B,CAAC;AAC3E,OAAO,EAAE,gBAAgB,EAAE,MAAM,+BAA+B,CAAC;AAEjE,YAAY,EAAE,kBAAkB,EAAE,MAAM,gCAAgC,CAAC;AACzE,OAAO,EAAE,iBAAiB,EAAE,MAAM,gCAAgC,CAAC;AAEnE,OAAO,EAAE,4BAA4B,EAAE,MAAM,SAAS,CAAC;AACvD,OAAO,EACL,sBAAsB,EACtB,qBAAqB,GACtB,MAAM,2BAA2B,CAAC;AAEnC,YAAY,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AACxD,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AAEtD,YAAY,EACV,mBAAmB,EACnB,aAAa,EACb,uBAAuB,EACvB,cAAc,EACd,eAAe,EACf,WAAW,GACZ,MAAM,SAAS,CAAC"}
|
package/build/index.js
CHANGED
|
@@ -1,18 +1,18 @@
|
|
|
1
1
|
import { initializeWarningListener } from './utils/errorListener';
|
|
2
|
-
export {
|
|
2
|
+
export { usePeers } from './hooks/usePeers';
|
|
3
3
|
export { useAudioSettings } from './hooks/useAudioSettings';
|
|
4
4
|
export { useBandwidthEstimation } from './hooks/useBandwidthEstimation';
|
|
5
5
|
export { useCamera } from './hooks/useCamera';
|
|
6
6
|
export { useMicrophone } from './hooks/useMicrophone';
|
|
7
|
-
export {
|
|
8
|
-
export { useScreencast } from './hooks/useScreencast';
|
|
7
|
+
export { useScreenShare } from './hooks/useScreenShare';
|
|
9
8
|
export { useReconnection } from './hooks/useReconnection';
|
|
10
9
|
export { updatePeerMetadata } from './common/metadata';
|
|
11
|
-
export {
|
|
10
|
+
export { setTargetTrackEncoding } from './common/webRTC';
|
|
12
11
|
export { joinRoom, leaveRoom } from './common/client';
|
|
13
12
|
export { VideoPreviewView } from './components/VideoPreviewView';
|
|
14
13
|
export { VideoRendererView } from './components/VideoRendererView';
|
|
15
14
|
export { AndroidForegroundServiceType } from './types';
|
|
16
15
|
export { startForegroundService, stopForegroundService, } from './utils/foregroundService';
|
|
16
|
+
export { usePeerStatus } from './hooks/usePeerStatus';
|
|
17
17
|
initializeWarningListener();
|
|
18
18
|
//# sourceMappingURL=index.js.map
|
package/build/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,yBAAyB,EAAE,MAAM,uBAAuB,CAAC;AASlE,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,yBAAyB,EAAE,MAAM,uBAAuB,CAAC;AASlE,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAO5C,OAAO,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AAE5D,OAAO,EAAE,sBAAsB,EAAE,MAAM,gCAAgC,CAAC;AASxE,OAAO,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAE9C,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AAMtD,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAGxD,OAAO,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAE1D,OAAO,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AAEvD,OAAO,EAAE,sBAAsB,EAAE,MAAM,iBAAiB,CAAC;AAGzD,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAGtD,OAAO,EAAE,gBAAgB,EAAE,MAAM,+BAA+B,CAAC;AAGjE,OAAO,EAAE,iBAAiB,EAAE,MAAM,gCAAgC,CAAC;AAEnE,OAAO,EAAE,4BAA4B,EAAE,MAAM,SAAS,CAAC;AACvD,OAAO,EACL,sBAAsB,EACtB,qBAAqB,GACtB,MAAM,2BAA2B,CAAC;AAGnC,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AAWtD,yBAAyB,EAAE,CAAC","sourcesContent":["import { initializeWarningListener } from './utils/errorListener';\n\nexport type {\n Peer,\n Track,\n TrackType,\n VadStatus,\n EncodingReason,\n} from './hooks/usePeers';\nexport { usePeers } from './hooks/usePeers';\n\nexport type {\n AudioOutputDevice,\n AudioOutputDeviceType,\n AudioSessionMode,\n} from './hooks/useAudioSettings';\nexport { useAudioSettings } from './hooks/useAudioSettings';\n\nexport { useBandwidthEstimation } from './hooks/useBandwidthEstimation';\n\nexport type {\n CameraId,\n Camera,\n CameraConfig,\n VideoQuality,\n CameraFacingDirection,\n} from './hooks/useCamera';\nexport { useCamera } from './hooks/useCamera';\n\nexport { useMicrophone } from './hooks/useMicrophone';\n\nexport type {\n ScreenShareOptions,\n ScreenShareQuality,\n} from './hooks/useScreenShare';\nexport { useScreenShare } from './hooks/useScreenShare';\n\nexport type { ReconnectionStatus } from './hooks/useReconnection';\nexport { useReconnection } from './hooks/useReconnection';\n\nexport { updatePeerMetadata } from './common/metadata';\n\nexport { setTargetTrackEncoding } from './common/webRTC';\n\nexport type { ConnectionConfig } from './common/client';\nexport { joinRoom, leaveRoom } from './common/client';\n\nexport type { VideoPreviewViewProps } from './components/VideoPreviewView';\nexport { VideoPreviewView } from './components/VideoPreviewView';\n\nexport type { VideoRendererProps } from './components/VideoRendererView';\nexport { VideoRendererView } from './components/VideoRendererView';\n\nexport { AndroidForegroundServiceType } from './types';\nexport {\n startForegroundService,\n stopForegroundService,\n} from './utils/foregroundService';\n\nexport type { PeerStatus } from './hooks/usePeerStatus';\nexport { usePeerStatus } from './hooks/usePeerStatus';\n\nexport type {\n TrackBandwidthLimit,\n TrackEncoding,\n SimulcastBandwidthLimit,\n BandwidthLimit,\n SimulcastConfig,\n VideoLayout,\n} from './types';\n\ninitializeWarningListener();\n"]}
|
package/ios/Events.swift
CHANGED
|
@@ -1,14 +1,30 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
1
|
+
enum PeerStatus: String {
|
|
2
|
+
case connecting
|
|
3
|
+
case connected
|
|
4
|
+
case error
|
|
5
|
+
case idle
|
|
6
|
+
}
|
|
7
|
+
|
|
8
|
+
enum EmitableEvents: String, CaseIterable {
|
|
9
|
+
case IsCameraOn
|
|
10
|
+
case IsMicrophoneOn
|
|
11
|
+
case IsScreenShareOn
|
|
12
|
+
case SimulcastConfigUpdate
|
|
13
|
+
case PeersUpdate
|
|
14
|
+
case AudioDeviceUpdate
|
|
15
|
+
case SendMediaEvent
|
|
16
|
+
case BandwidthEstimation
|
|
17
|
+
case ReconnectionRetriesLimitReached
|
|
18
|
+
case ReconnectionStarted
|
|
19
|
+
case Reconnected
|
|
20
|
+
case Warning
|
|
21
|
+
case PeerStatusChanged
|
|
22
|
+
|
|
23
|
+
var name: String {
|
|
24
|
+
rawValue
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
static var allEvents: [String] {
|
|
28
|
+
EmitableEvents.allCases.map(\.name)
|
|
29
|
+
}
|
|
14
30
|
}
|