@fishjam-cloud/react-native-client 0.2.3 → 0.2.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (43) hide show
  1. package/README.md +9 -397
  2. package/android/build.gradle +1 -1
  3. package/android/src/main/java/io/fishjam/reactnative/EmitableEvents.kt +1 -1
  4. package/android/src/main/java/io/fishjam/reactnative/Errors.kt +3 -2
  5. package/android/src/main/java/io/fishjam/reactnative/RNFishjamClient.kt +73 -73
  6. package/android/src/main/java/io/fishjam/reactnative/RNFishjamClientModule.kt +18 -18
  7. package/build/RNFishjamClientModule.d.ts +8 -8
  8. package/build/RNFishjamClientModule.d.ts.map +1 -1
  9. package/build/RNFishjamClientModule.js.map +1 -1
  10. package/build/common/client.d.ts +4 -4
  11. package/build/common/client.d.ts.map +1 -1
  12. package/build/common/client.js +5 -5
  13. package/build/common/client.js.map +1 -1
  14. package/build/common/metadata.d.ts +3 -3
  15. package/build/common/metadata.d.ts.map +1 -1
  16. package/build/common/metadata.js +4 -4
  17. package/build/common/metadata.js.map +1 -1
  18. package/build/hooks/useCamera.d.ts +17 -0
  19. package/build/hooks/useCamera.d.ts.map +1 -1
  20. package/build/hooks/useCamera.js +1 -1
  21. package/build/hooks/useCamera.js.map +1 -1
  22. package/build/hooks/useFishjamEvent.d.ts +1 -1
  23. package/build/hooks/useFishjamEvent.js +1 -1
  24. package/build/hooks/useFishjamEvent.js.map +1 -1
  25. package/build/hooks/useScreenShare.d.ts +57 -0
  26. package/build/hooks/useScreenShare.d.ts.map +1 -0
  27. package/build/hooks/useScreenShare.js +85 -0
  28. package/build/hooks/useScreenShare.js.map +1 -0
  29. package/build/index.d.ts +3 -2
  30. package/build/index.d.ts.map +1 -1
  31. package/build/index.js +1 -1
  32. package/build/index.js.map +1 -1
  33. package/ios/Events.swift +1 -1
  34. package/ios/RNFishjamClient.podspec +1 -1
  35. package/ios/RNFishjamClient.swift +62 -62
  36. package/ios/RNFishjamClientModule.swift +18 -17
  37. package/package.json +11 -9
  38. package/plugin/broadcastExtensionFiles/FishjamBroadcastSampleHandler.swift +1 -1
  39. package/plugin/build/withFishjamIos.js +1 -1
  40. package/build/hooks/useScreencast.d.ts +0 -57
  41. package/build/hooks/useScreencast.d.ts.map +0 -1
  42. package/build/hooks/useScreencast.js +0 -85
  43. package/build/hooks/useScreencast.js.map +0 -1
@@ -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 IsScreencastOn: "IsScreencastOn";
4
+ readonly IsScreenShareOn: "IsScreenShareOn";
5
5
  readonly SimulcastConfigUpdate: "SimulcastConfigUpdate";
6
6
  readonly PeersUpdate: "PeersUpdate";
7
7
  readonly AudioDeviceUpdate: "AudioDeviceUpdate";
@@ -3,7 +3,7 @@ import { nativeModuleEventEmitter } from '../RNFishjamClientModule';
3
3
  export const ReceivableEvents = {
4
4
  IsCameraOn: 'IsCameraOn',
5
5
  IsMicrophoneOn: 'IsMicrophoneOn',
6
- IsScreencastOn: 'IsScreencastOn',
6
+ IsScreenShareOn: 'IsScreenShareOn',
7
7
  SimulcastConfigUpdate: 'SimulcastConfigUpdate',
8
8
  PeersUpdate: 'PeersUpdate',
9
9
  AudioDeviceUpdate: 'AudioDeviceUpdate',
@@ -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,cAAc,EAAE,gBAAgB;IAChC,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;CACV,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 IsScreencastOn: 'IsScreencastOn',\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} 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"]}
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;CACV,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} 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,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
@@ -7,13 +7,14 @@ export type { CameraId, Camera, CameraConfig, VideoQuality, CameraFacingDirectio
7
7
  export { useCamera } from './hooks/useCamera';
8
8
  export { useMicrophone } from './hooks/useMicrophone';
9
9
  export { useRTCStatistics } from './stats/useRTCStatistics';
10
- export type { ScreencastOptions, ScreencastQuality, } from './hooks/useScreencast';
11
- export { useScreencast } from './hooks/useScreencast';
10
+ export type { ScreenShareOptions, ScreenShareQuality, } from './hooks/useScreenShare';
11
+ export { useScreenShare } from './hooks/useScreenShare';
12
12
  export type { ReconnectionStatus } from './hooks/useReconnection';
13
13
  export { useReconnection } from './hooks/useReconnection';
14
14
  export { updatePeerMetadata } from './common/metadata';
15
15
  export type { LoggingSeverity } from './common/webRTC';
16
16
  export { changeWebRTCLoggingSeverity, setTargetTrackEncoding, } from './common/webRTC';
17
+ export type { ConnectionConfig } from './common/client';
17
18
  export { joinRoom, leaveRoom } from './common/client';
18
19
  export type { VideoPreviewViewProps } from './components/VideoPreviewView';
19
20
  export { VideoPreviewView } from './components/VideoPreviewView';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.tsx"],"names":[],"mappings":"AAEA,YAAY,EACV,WAAW,EACX,KAAK,EACL,SAAS,EACT,SAAS,EACT,cAAc,GACf,MAAM,yBAAyB,CAAC;AACjC,OAAO,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAE1D,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,OAAO,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AAE5D,YAAY,EACV,iBAAiB,EACjB,iBAAiB,GAClB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AAEtD,YAAY,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAClE,OAAO,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAE1D,OAAO,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AAEvD,YAAY,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AACvD,OAAO,EACL,2BAA2B,EAC3B,sBAAsB,GACvB,MAAM,iBAAiB,CAAC;AAEzB,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,EACV,mBAAmB,EACnB,aAAa,EACb,uBAAuB,EACvB,cAAc,EACd,eAAe,EACf,WAAW,GACZ,MAAM,SAAS,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.tsx"],"names":[],"mappings":"AAEA,YAAY,EACV,WAAW,EACX,KAAK,EACL,SAAS,EACT,SAAS,EACT,cAAc,GACf,MAAM,yBAAyB,CAAC;AACjC,OAAO,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAE1D,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,OAAO,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AAE5D,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,YAAY,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AACvD,OAAO,EACL,2BAA2B,EAC3B,sBAAsB,GACvB,MAAM,iBAAiB,CAAC;AAEzB,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,EACV,mBAAmB,EACnB,aAAa,EACb,uBAAuB,EACvB,cAAc,EACd,eAAe,EACf,WAAW,GACZ,MAAM,SAAS,CAAC"}
package/build/index.js CHANGED
@@ -5,7 +5,7 @@ export { useBandwidthEstimation } from './hooks/useBandwidthEstimation';
5
5
  export { useCamera } from './hooks/useCamera';
6
6
  export { useMicrophone } from './hooks/useMicrophone';
7
7
  export { useRTCStatistics } from './stats/useRTCStatistics';
8
- export { useScreencast } from './hooks/useScreencast';
8
+ export { useScreenShare } from './hooks/useScreenShare';
9
9
  export { useReconnection } from './hooks/useReconnection';
10
10
  export { updatePeerMetadata } from './common/metadata';
11
11
  export { changeWebRTCLoggingSeverity, setTargetTrackEncoding, } from './common/webRTC';
@@ -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,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAO1D,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;AAEtD,OAAO,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AAM5D,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AAGtD,OAAO,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAE1D,OAAO,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AAGvD,OAAO,EACL,2BAA2B,EAC3B,sBAAsB,GACvB,MAAM,iBAAiB,CAAC;AAEzB,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;AAWnC,yBAAyB,EAAE,CAAC","sourcesContent":["import { initializeWarningListener } from './utils/errorListener';\n\nexport type {\n Participant,\n Track,\n TrackType,\n VadStatus,\n EncodingReason,\n} from './hooks/useParticipants';\nexport { useParticipants } from './hooks/useParticipants';\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 { useRTCStatistics } from './stats/useRTCStatistics';\n\nexport type {\n ScreencastOptions,\n ScreencastQuality,\n} from './hooks/useScreencast';\nexport { useScreencast } from './hooks/useScreencast';\n\nexport type { ReconnectionStatus } from './hooks/useReconnection';\nexport { useReconnection } from './hooks/useReconnection';\n\nexport { updatePeerMetadata } from './common/metadata';\n\nexport type { LoggingSeverity } from './common/webRTC';\nexport {\n changeWebRTCLoggingSeverity,\n setTargetTrackEncoding,\n} from './common/webRTC';\n\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 {\n TrackBandwidthLimit,\n TrackEncoding,\n SimulcastBandwidthLimit,\n BandwidthLimit,\n SimulcastConfig,\n VideoLayout,\n} from './types';\n\ninitializeWarningListener();\n"]}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,yBAAyB,EAAE,MAAM,uBAAuB,CAAC;AASlE,OAAO,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAO1D,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;AAEtD,OAAO,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AAM5D,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAGxD,OAAO,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAC;AAE1D,OAAO,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AAGvD,OAAO,EACL,2BAA2B,EAC3B,sBAAsB,GACvB,MAAM,iBAAiB,CAAC;AAGzB,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;AAWnC,yBAAyB,EAAE,CAAC","sourcesContent":["import { initializeWarningListener } from './utils/errorListener';\n\nexport type {\n Participant,\n Track,\n TrackType,\n VadStatus,\n EncodingReason,\n} from './hooks/useParticipants';\nexport { useParticipants } from './hooks/useParticipants';\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 { useRTCStatistics } from './stats/useRTCStatistics';\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 type { LoggingSeverity } from './common/webRTC';\nexport {\n changeWebRTCLoggingSeverity,\n setTargetTrackEncoding,\n} 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 {\n TrackBandwidthLimit,\n TrackEncoding,\n SimulcastBandwidthLimit,\n BandwidthLimit,\n SimulcastConfig,\n VideoLayout,\n} from './types';\n\ninitializeWarningListener();\n"]}
package/ios/Events.swift CHANGED
@@ -1,7 +1,7 @@
1
1
  struct EmitableEvents {
2
2
  static let IsCameraOn = "IsCameraOn"
3
3
  static let IsMicrophoneOn = "IsMicrophoneOn"
4
- static let IsScreencastOn = "IsScreencastOn"
4
+ static let IsScreenShareOn = "IsScreenShareOn"
5
5
  static let SimulcastConfigUpdate = "SimulcastConfigUpdate"
6
6
  static let PeersUpdate = "PeersUpdate"
7
7
  static let AudioDeviceUpdate = "AudioDeviceUpdate"
@@ -25,6 +25,6 @@ Pod::Spec.new do |s|
25
25
 
26
26
  s.source_files = '**/*.{h,m,swift}'
27
27
 
28
- s.dependency 'FishjamCloudClient', '0.2.3'
28
+ s.dependency 'FishjamCloudClient', '0.2.4'
29
29
 
30
30
  end
@@ -10,7 +10,7 @@ class RNFishjamClient: FishjamClientListener {
10
10
 
11
11
  var isMicrophoneOn = false
12
12
  var isCameraOn = false
13
- var isScreencastOn = false
13
+ var isScreenShareOn = false
14
14
  var isConnected = false
15
15
 
16
16
  private var isCameraInitialized = false
@@ -20,8 +20,8 @@ class RNFishjamClient: FishjamClientListener {
20
20
  var videoSimulcastConfig: SimulcastConfig = SimulcastConfig()
21
21
  var localUserMetadata: Metadata = .init()
22
22
 
23
- var screencastSimulcastConfig: SimulcastConfig = SimulcastConfig()
24
- var screencastMaxBandwidth: TrackBandwidthLimit = .BandwidthLimit(0)
23
+ var screenShareSimulcastConfig: SimulcastConfig = SimulcastConfig()
24
+ var screenShareMaxBandwidth: TrackBandwidthLimit = .BandwidthLimit(0)
25
25
 
26
26
  var cameraId: String? = nil
27
27
 
@@ -72,7 +72,7 @@ class RNFishjamClient: FishjamClientListener {
72
72
 
73
73
  func getVideoParametersFromOptions(connectionOptions: CameraConfig) throws -> VideoParameters {
74
74
  let videoQuality = connectionOptions.quality
75
- let flipVideo = connectionOptions.flipVideo
75
+ let flipDimensions = connectionOptions.flipDimensions
76
76
  let videoBandwidthLimit = getMaxBandwidthFromOptions(maxBandwidth: connectionOptions.maxBandwidth)
77
77
  let simulcastConfig = try getSimulcastConfigFromOptions(simulcastConfig: connectionOptions.simulcastConfig)
78
78
 
@@ -103,7 +103,7 @@ class RNFishjamClient: FishjamClientListener {
103
103
  }
104
104
  }()
105
105
  let videoParameters = VideoParameters(
106
- dimensions: flipVideo ? preset.dimensions.flip() : preset.dimensions,
106
+ dimensions: flipDimensions ? preset.dimensions.flip() : preset.dimensions,
107
107
  maxBandwidth: videoBandwidthLimit,
108
108
  simulcastConfig: simulcastConfig
109
109
  )
@@ -120,9 +120,9 @@ class RNFishjamClient: FishjamClientListener {
120
120
  as? LocalAudioTrack
121
121
  }
122
122
 
123
- private func getLocalScreencastTrack() -> LocalScreencastTrack? {
124
- return RNFishjamClient.fishjamClient?.getLocalEndpoint().tracks.first { $0.value is LocalScreencastTrack }?
125
- .value as? LocalScreencastTrack
123
+ private func getLocalScreenShareTrack() -> LocalScreenShareTrack? {
124
+ return RNFishjamClient.fishjamClient?.getLocalEndpoint().tracks.first { $0.value is LocalScreenShareTrack }?
125
+ .value as? LocalScreenShareTrack
126
126
  }
127
127
 
128
128
  private func ensureCreated() throws {
@@ -159,11 +159,11 @@ class RNFishjamClient: FishjamClientListener {
159
159
  }
160
160
  }
161
161
 
162
- private func ensureScreencastTrack() throws {
163
- if getLocalScreencastTrack() == nil {
162
+ private func ensureScreenShareTrack() throws {
163
+ if getLocalScreenShareTrack() == nil {
164
164
  throw Exception(
165
- name: "E_NO_LOCAL_SCREENCAST_TRACK",
166
- description: "No local screencast track. Make sure to toggle screencast on first!")
165
+ name: "E_NO_LOCAL_SCREENSHARE_TRACK",
166
+ description: "No local screen share track. Make sure to toggle screen share on first!")
167
167
  }
168
168
  }
169
169
 
@@ -202,16 +202,16 @@ class RNFishjamClient: FishjamClientListener {
202
202
  }
203
203
 
204
204
  func leaveRoom() {
205
- if isScreencastOn {
206
- let screencastExtensionBundleId =
207
- Bundle.main.infoDictionary?["ScreencastExtensionBundleId"] as? String
205
+ if isScreenShareOn {
206
+ let screenShareExtensionBundleId =
207
+ Bundle.main.infoDictionary?["ScreenShareExtensionBundleId"] as? String
208
208
  DispatchQueue.main.async {
209
- RPSystemBroadcastPickerView.show(for: screencastExtensionBundleId)
209
+ RPSystemBroadcastPickerView.show(for: screenShareExtensionBundleId)
210
210
  }
211
211
  }
212
212
  isMicrophoneOn = false
213
213
  isCameraOn = false
214
- isScreencastOn = false
214
+ isScreenShareOn = false
215
215
  isConnected = false
216
216
  isCameraInitialized = false
217
217
  RNFishjamClient.fishjamClient?.leave()
@@ -311,15 +311,15 @@ class RNFishjamClient: FishjamClientListener {
311
311
  }
312
312
  }
313
313
 
314
- func toggleScreencast(screencastOptions: ScreencastOptions) throws {
314
+ func toggleScreenShare(screenShareOptions: ScreenShareOptions) throws {
315
315
  try ensureCreated()
316
316
  try ensureConnected()
317
- guard let screencastExtensionBundleId = Bundle.main.infoDictionary?["ScreencastExtensionBundleId"] as? String
317
+ guard let screenShareExtensionBundleId = Bundle.main.infoDictionary?["ScreenShareExtensionBundleId"] as? String
318
318
  else {
319
319
  throw Exception(
320
320
  name: "E_NO_BUNDLE_ID_SET",
321
321
  description:
322
- "No screencast extension bundle id set. Please set ScreencastExtensionBundleId in Info.plist"
322
+ "No screen share extension bundle id set. Please set ScreenShareExtensionBundleId in Info.plist"
323
323
  )
324
324
  }
325
325
  guard let appGroupName = Bundle.main.infoDictionary?["AppGroupName"] as? String
@@ -329,63 +329,63 @@ class RNFishjamClient: FishjamClientListener {
329
329
  description: "No app group name set. Please set AppGroupName in Info.plist")
330
330
  }
331
331
 
332
- guard !isScreencastOn else {
332
+ guard !isScreenShareOn else {
333
333
  DispatchQueue.main.async {
334
- RPSystemBroadcastPickerView.show(for: screencastExtensionBundleId)
334
+ RPSystemBroadcastPickerView.show(for: screenShareExtensionBundleId)
335
335
  }
336
336
  return
337
337
  }
338
338
 
339
- let simulcastConfig = try getSimulcastConfigFromOptions(simulcastConfig: screencastOptions.simulcastConfig)
339
+ let simulcastConfig = try getSimulcastConfigFromOptions(simulcastConfig: screenShareOptions.simulcastConfig)
340
340
 
341
- screencastSimulcastConfig = simulcastConfig
342
- screencastMaxBandwidth = getMaxBandwidthFromOptions(
343
- maxBandwidth: screencastOptions.maxBandwidth)
344
- let screencastMetadata = screencastOptions.screencastMetadata.toMetadata()
345
- let videoParameters = getScreencastVideoParameters(options: screencastOptions)
346
- RNFishjamClient.fishjamClient!.createScreencastTrack(
341
+ screenShareSimulcastConfig = simulcastConfig
342
+ screenShareMaxBandwidth = getMaxBandwidthFromOptions(
343
+ maxBandwidth: screenShareOptions.maxBandwidth)
344
+ let screenShareMetadata = screenShareOptions.screenShareMetadata.toMetadata()
345
+ let videoParameters = getScreenShareVideoParameters(options: screenShareOptions)
346
+ RNFishjamClient.fishjamClient!.createScreenShareTrack(
347
347
  appGroup: appGroupName,
348
348
  videoParameters: videoParameters,
349
- metadata: screencastMetadata,
350
- onStart: { [weak self] screencastTrack in
349
+ metadata: screenShareMetadata,
350
+ onStart: { [weak self] screenShareTrack in
351
351
  guard let self = self else { return }
352
352
 
353
353
  do {
354
354
  //not sure should it be here, or outside or where?
355
- try setScreencastTrackState(screencastTrack, enabled: true)
355
+ try setScreenShareTrackState(screenShareTrack, enabled: true)
356
356
  } catch {
357
357
  os_log(
358
- "Error starting screencast: %{public}s", log: log, type: .error,
358
+ "Error starting screen share: %{public}s", log: log, type: .error,
359
359
  String(describing: error)
360
360
  )
361
361
  }
362
362
 
363
363
  },
364
- onStop: { [weak self] screencastTrack in
364
+ onStop: { [weak self] screenShareTrack in
365
365
  guard let self = self else { return }
366
366
  do {
367
367
  //not sure should it be here, or outside or where?
368
- try setScreencastTrackState(screencastTrack, enabled: false)
368
+ try setScreenShareTrackState(screenShareTrack, enabled: false)
369
369
  } catch {
370
370
  os_log(
371
- "Error stopping screencast: %{public}s", log: log, type: .error,
371
+ "Error stopping screen share: %{public}s", log: log, type: .error,
372
372
  String(describing: error)
373
373
  )
374
374
  }
375
375
  }
376
376
  )
377
377
  DispatchQueue.main.async {
378
- RPSystemBroadcastPickerView.show(for: screencastExtensionBundleId)
378
+ RPSystemBroadcastPickerView.show(for: screenShareExtensionBundleId)
379
379
  }
380
380
  }
381
381
 
382
- private func setScreencastTrackState(_ screencastTrack: LocalScreencastTrack, enabled: Bool) throws {
382
+ private func setScreenShareTrackState(_ screenShareTrack: LocalScreenShareTrack, enabled: Bool) throws {
383
383
  //was not present before, test and maybe delete?
384
- screencastTrack.enabled = enabled
385
- isScreencastOn = enabled
386
- let eventName = EmitableEvents.IsScreencastOn
387
- let isScreencastEnabled = [eventName: enabled]
388
- emitEvent(name: eventName, data: isScreencastEnabled)
384
+ screenShareTrack.enabled = enabled
385
+ isScreenShareOn = enabled
386
+ let eventName = EmitableEvents.IsScreenShareOn
387
+ let isScreenShareEnabled = [eventName: enabled]
388
+ emitEvent(name: eventName, data: isScreenShareEnabled)
389
389
  }
390
390
 
391
391
  //returns local endpoint and remote endpoints
@@ -429,7 +429,7 @@ class RNFishjamClient: FishjamClientListener {
429
429
  "metadata": track.metadata.toDict(),
430
430
  ]
431
431
 
432
- case let track as LocalScreencastTrack:
432
+ case let track as LocalScreenShareTrack:
433
433
  return [
434
434
  "id": track.id,
435
435
  "type": "Video",
@@ -492,9 +492,9 @@ class RNFishjamClient: FishjamClientListener {
492
492
  }
493
493
  }
494
494
 
495
- func updateLocalScreencastTrackMetadata(metadata: [String: Any]) throws {
496
- try ensureScreencastTrack()
497
- if let track = getLocalScreencastTrack() {
495
+ func updateLocalScreenShareTrackMetadata(metadata: [String: Any]) throws {
496
+ try ensureScreenShareTrack()
497
+ if let track = getLocalScreenShareTrack() {
498
498
  updateTrackMetadata(trackId: track.id, metadata: metadata)
499
499
  }
500
500
  }
@@ -518,25 +518,25 @@ class RNFishjamClient: FishjamClientListener {
518
518
  return SimulcastConfig(enabled: true, activeEncodings: updatedEncodings)
519
519
  }
520
520
 
521
- func toggleScreencastTrackEncoding(encoding: String) throws -> [String: Any] {
522
- try ensureScreencastTrack()
523
- if let track = getLocalScreencastTrack() {
524
- screencastSimulcastConfig = try toggleTrackEncoding(
525
- encoding: encoding, trackId: track.id, simulcastConfig: screencastSimulcastConfig)
521
+ func toggleScreenShareTrackEncoding(encoding: String) throws -> [String: Any] {
522
+ try ensureScreenShareTrack()
523
+ if let track = getLocalScreenShareTrack() {
524
+ screenShareSimulcastConfig = try toggleTrackEncoding(
525
+ encoding: encoding, trackId: track.id, simulcastConfig: screenShareSimulcastConfig)
526
526
  }
527
- return getSimulcastConfigAsRNMap(screencastSimulcastConfig)
527
+ return getSimulcastConfigAsRNMap(screenShareSimulcastConfig)
528
528
  }
529
529
 
530
- func setScreencastTrackBandwidth(bandwidth: Int) throws {
531
- try ensureScreencastTrack()
532
- if let track = getLocalScreencastTrack() {
530
+ func setScreenShareTrackBandwidth(bandwidth: Int) throws {
531
+ try ensureScreenShareTrack()
532
+ if let track = getLocalScreenShareTrack() {
533
533
  RNFishjamClient.fishjamClient?.setTrackBandwidth(trackId: track.id, bandwidthLimit: bandwidth)
534
534
  }
535
535
  }
536
536
 
537
- func setScreencastTrackEncodingBandwidth(encoding: String, bandwidth: Int) throws {
538
- try ensureScreencastTrack()
539
- if let track = getLocalScreencastTrack() {
537
+ func setScreenShareTrackEncodingBandwidth(encoding: String, bandwidth: Int) throws {
538
+ try ensureScreenShareTrack()
539
+ if let track = getLocalScreenShareTrack() {
540
540
  RNFishjamClient.fishjamClient?.setEncodingBandwidth(
541
541
  trackId: track.id, encoding: encoding, bandwidthLimit: bandwidth)
542
542
  }
@@ -649,7 +649,7 @@ class RNFishjamClient: FishjamClientListener {
649
649
  return Dictionary(uniqueKeysWithValues: pairs)
650
650
  }
651
651
 
652
- private func getScreencastVideoParameters(options: ScreencastOptions) -> VideoParameters {
652
+ private func getScreenShareVideoParameters(options: ScreenShareOptions) -> VideoParameters {
653
653
  let preset: VideoParameters
654
654
  switch options.quality {
655
655
  case "VGA":
@@ -667,9 +667,9 @@ class RNFishjamClient: FishjamClientListener {
667
667
  }
668
668
  return VideoParameters(
669
669
  dimensions: preset.dimensions.flip(),
670
- maxBandwidth: screencastMaxBandwidth,
670
+ maxBandwidth: screenShareMaxBandwidth,
671
671
  maxFps: preset.maxFps,
672
- simulcastConfig: screencastSimulcastConfig
672
+ simulcastConfig: screenShareSimulcastConfig
673
673
  )
674
674
  }
675
675