@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
@@ -13,7 +13,7 @@ struct CameraConfig: Record {
13
13
  var quality: String = "VGA169"
14
14
 
15
15
  @Field
16
- var flipVideo: Bool = false
16
+ var flipDimensions: Bool = false
17
17
 
18
18
  @Field
19
19
  var videoTrackMetadata: [String: Any] = [:]
@@ -39,12 +39,12 @@ struct MicrophoneConfig: Record {
39
39
  var microphoneEnabled: Bool = true
40
40
  }
41
41
 
42
- struct ScreencastOptions: Record {
42
+ struct ScreenShareOptions: Record {
43
43
  @Field
44
44
  var quality: String = "HD15"
45
45
 
46
46
  @Field
47
- var screencastMetadata: [String: Any] = [:]
47
+ var screenShareMetadata: [String: Any] = [:]
48
48
 
49
49
  @Field
50
50
  var simulcastConfig: RNSimulcastConfig = RNSimulcastConfig()
@@ -78,7 +78,7 @@ public class RNFishjamClientModule: Module {
78
78
  Events(
79
79
  "IsCameraOn",
80
80
  "IsMicrophoneOn",
81
- "IsScreencastOn",
81
+ "IsScreenShareOn",
82
82
  "SimulcastConfigUpdate",
83
83
  "PeersUpdate",
84
84
  "AudioDeviceUpdate",
@@ -86,7 +86,8 @@ public class RNFishjamClientModule: Module {
86
86
  "BandwidthEstimation",
87
87
  "ReconnectionRetriesLimitReached",
88
88
  "ReconnectionStarted",
89
- "Reconnected")
89
+ "Reconnected",
90
+ "Warning")
90
91
 
91
92
  let rnFishjamClient: RNFishjamClient = {
92
93
  let client = RNFishjamClient {
@@ -143,12 +144,12 @@ public class RNFishjamClientModule: Module {
143
144
  rnFishjamClient.getCaptureDevices()
144
145
  }
145
146
 
146
- AsyncFunction("toggleScreencast") { (screencastOptions: ScreencastOptions) in
147
- try rnFishjamClient.toggleScreencast(screencastOptions: screencastOptions)
147
+ AsyncFunction("toggleScreenShare") { (screenShareOptions: ScreenShareOptions) in
148
+ try rnFishjamClient.toggleScreenShare(screenShareOptions: screenShareOptions)
148
149
  }
149
150
 
150
- Property("isScreencastOn") {
151
- return rnFishjamClient.isScreencastOn
151
+ Property("isScreenShareOn") {
152
+ return rnFishjamClient.isScreenShareOn
152
153
  }
153
154
 
154
155
  AsyncFunction("getPeers") {
@@ -167,20 +168,20 @@ public class RNFishjamClientModule: Module {
167
168
  try rnFishjamClient.updateLocalAudioTrackMetadata(metadata: metadata)
168
169
  }
169
170
 
170
- AsyncFunction("updateScreencastTrackMetadata") { (metadata: [String: Any]) in
171
- try rnFishjamClient.updateLocalScreencastTrackMetadata(metadata: metadata)
171
+ AsyncFunction("updateScreenShareTrackMetadata") { (metadata: [String: Any]) in
172
+ try rnFishjamClient.updateLocalScreenShareTrackMetadata(metadata: metadata)
172
173
  }
173
174
 
174
- AsyncFunction("toggleScreencastTrackEncoding") { (encoding: String) in
175
- try rnFishjamClient.toggleScreencastTrackEncoding(encoding: encoding)
175
+ AsyncFunction("toggleScreenShareTrackEncoding") { (encoding: String) in
176
+ try rnFishjamClient.toggleScreenShareTrackEncoding(encoding: encoding)
176
177
  }
177
178
 
178
- AsyncFunction("setScreencastTrackBandwidth") { (bandwidth: Int) in
179
- try rnFishjamClient.setScreencastTrackBandwidth(bandwidth: bandwidth)
179
+ AsyncFunction("setScreenShareTrackBandwidth") { (bandwidth: Int) in
180
+ try rnFishjamClient.setScreenShareTrackBandwidth(bandwidth: bandwidth)
180
181
  }
181
182
 
182
- AsyncFunction("setScreencastTrackEncodingBandwidth") { (encoding: String, bandwidth: Int) in
183
- try rnFishjamClient.setScreencastTrackEncodingBandwidth(
183
+ AsyncFunction("setScreenShareTrackEncodingBandwidth") { (encoding: String, bandwidth: Int) in
184
+ try rnFishjamClient.setScreenShareTrackEncodingBandwidth(
184
185
  encoding: encoding, bandwidth: bandwidth)
185
186
  }
186
187
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@fishjam-cloud/react-native-client",
3
- "version": "0.2.3",
3
+ "version": "0.2.4",
4
4
  "description": "A React Native client for Fishjam Cloud",
5
5
  "author": "Fishjam Cloud Team",
6
6
  "license": "Apache-2.0",
@@ -22,20 +22,22 @@
22
22
  "keywords": [
23
23
  "react-native",
24
24
  "expo",
25
- "@fishjam-cloud/react-native-client",
26
- "fishjam-cloud",
25
+ "FishjamCloud",
27
26
  "MembraneWebRTC",
28
- "fishjam"
27
+ "webRTC",
28
+ "streaming",
29
+ "video",
30
+ "audio"
29
31
  ],
30
- "repository": "github:fishjam-cloud/mobile-client-sdk",
32
+ "repository": {
33
+ "type": "git",
34
+ "url": "git+https://github.com/fishjam-cloud/mobile-client-sdk.git",
35
+ "directory": "packages/react-native-client"
36
+ },
31
37
  "bugs": {
32
38
  "url": "https://github.com/fishjam-cloud/mobile-client-sdk/issues"
33
39
  },
34
40
  "homepage": "https://fishjam.io",
35
- "publishConfig": {
36
- "registry": "https://registry.npmjs.org/",
37
- "access": "public"
38
- },
39
41
  "dependencies": {
40
42
  "phoenix": "^1.7.6",
41
43
  "promise-fs": "^2.1.1",
@@ -9,7 +9,7 @@ let appGroup = "{{GROUP_IDENTIFIER}}"
9
9
 
10
10
  let logger = OSLog(subsystem: "{{BUNDLE_IDENTIFIER}}.FishjamBroadcastSampleHandler", category: "Broadcaster")
11
11
 
12
- /// An example `SampleHandler` utilizing `BroadcastSampleSource` from `MembraneRTC` sending broadcast samples and necessary notification enabling device's screencast.
12
+ /// An example `SampleHandler` utilizing `BroadcastSampleSource` from `MembraneRTC` sending broadcast samples and necessary notification enabling device's screen share.
13
13
  class FishjamBroadcastSampleHandler: RPBroadcastSampleHandler {
14
14
  let broadcastSource = BroadcastSampleSource(appGroup: appGroup)
15
15
  var started: Bool = false
@@ -99,7 +99,7 @@ const withInfoPlistConstants = (config) => {
99
99
  return (0, config_plugins_1.withInfoPlist)(config, (config) => {
100
100
  const bundleIdentifier = config.ios?.bundleIdentifier || '';
101
101
  config.modResults['AppGroupName'] = `group.${bundleIdentifier}`;
102
- config.modResults['ScreencastExtensionBundleId'] =
102
+ config.modResults['ScreenShareExtensionBundleId'] =
103
103
  `${bundleIdentifier}.${SBE_TARGET_NAME}`;
104
104
  return config;
105
105
  });
@@ -1,57 +0,0 @@
1
- import { BandwidthLimit, SimulcastConfig, TrackBandwidthLimit, TrackEncoding, TrackMetadata } from '../types';
2
- export type ScreencastQuality = 'VGA' | 'HD5' | 'HD15' | 'FHD15' | 'FHD30';
3
- export type ScreencastOptions = {
4
- /**
5
- * Resolution + fps of screencast 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: ScreencastQuality;
11
- /**
12
- * bandwidth limit of a screencast track. By default there is no bandwidth limit.
13
- */
14
- maxBandwidth: TrackBandwidthLimit;
15
- };
16
- export type ScreencastOptionsInternal = {
17
- screencastMetadata: TrackMetadata & {
18
- displayName?: string;
19
- };
20
- /**
21
- * SimulcastConfig of a screencast track. By default simulcast is disabled.
22
- */
23
- simulcastConfig: SimulcastConfig;
24
- };
25
- /**
26
- * This hook can toggle screen sharing on/off and provides current screencast state.
27
- * @returns An object with functions to manage screencast.
28
- * @category Screenshare
29
- * @group Hooks
30
- */
31
- export declare function useScreencast(): {
32
- isScreencastOn: boolean;
33
- simulcastConfig: SimulcastConfig;
34
- /**
35
- * Toggles the screencast on/off
36
- */
37
- toggleScreencast: (screencastOptions?: Partial<ScreencastOptions>) => Promise<void>;
38
- handleScreencastPermission: () => Promise<"granted" | "denied">;
39
- /**
40
- * @deprecated
41
- */
42
- setScreencastTrackBandwidth: (bandwidth: BandwidthLimit) => Promise<void>;
43
- /**
44
- * Toggles simulcast encoding of a screencast track on/off
45
- * @param encoding encoding to toggle
46
- * @deprecated
47
- */
48
- toggleScreencastTrackEncoding: (encoding: TrackEncoding) => Promise<void>;
49
- /**
50
- * updates maximum bandwidth for the given simulcast encoding of the screencast track
51
- * @param encoding encoding to update
52
- * @param bandwidth BandwidthLimit to set
53
- * @deprecated
54
- */
55
- setScreencastTrackEncodingBandwidth: (encoding: TrackEncoding, bandwidth: BandwidthLimit) => Promise<void>;
56
- };
57
- //# sourceMappingURL=useScreencast.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"useScreencast.d.ts","sourceRoot":"","sources":["../../src/hooks/useScreencast.ts"],"names":[],"mappings":"AAEA,OAAO,EACL,cAAc,EACd,eAAe,EACf,mBAAmB,EACnB,aAAa,EACb,aAAa,EACd,MAAM,UAAU,CAAC;AAKlB,MAAM,MAAM,iBAAiB,GAAG,KAAK,GAAG,KAAK,GAAG,MAAM,GAAG,OAAO,GAAG,OAAO,CAAC;AAE3E,MAAM,MAAM,iBAAiB,GAAG;IAC9B;;;;;OAKG;IACH,OAAO,EAAE,iBAAiB,CAAC;IAC3B;;OAEG;IACH,YAAY,EAAE,mBAAmB,CAAC;CACnC,CAAC;AACF,MAAM,MAAM,yBAAyB,GAAG;IACtC,kBAAkB,EAAE,aAAa,GAAG;QAAE,WAAW,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IAC7D;;OAEG;IACH,eAAe,EAAE,eAAe,CAAC;CAClC,CAAC;AASF;;;;;GAKG;AACH,wBAAgB,aAAa;;;IAiEzB;;OAEG;2CAvDuB,OAAO,CAAC,iBAAiB,CAAC;;IA2DpD;;OAEG;6CAzBe,cAAc;IA2BhC;;;;OAIG;8CAlDc,aAAa;IAoD9B;;;;;OAKG;oDAhDc,aAAa,aAAa,cAAc;EA2D5D"}
@@ -1,85 +0,0 @@
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 screencastSimulcastConfig = defaultSimulcastConfig();
10
- /**
11
- * This hook can toggle screen sharing on/off and provides current screencast state.
12
- * @returns An object with functions to manage screencast.
13
- * @category Screenshare
14
- * @group Hooks
15
- */
16
- export function useScreencast() {
17
- const [isScreencastOn, setIsScreencastOn] = useState(RNFishjamClientModule.isScreencastOn);
18
- const [simulcastConfig, setSimulcastConfig] = useState(screencastSimulcastConfig);
19
- useFishjamEvent(ReceivableEvents.IsScreencastOn, setIsScreencastOn);
20
- const toggleScreencast = useCallback(async (screencastOptions = {}) => {
21
- const options = {
22
- ...screencastOptions,
23
- screencastMetadata: {
24
- displayName: 'presenting',
25
- type: 'screensharing',
26
- active: !isScreencastOn,
27
- },
28
- };
29
- await RNFishjamClientModule.toggleScreencast(options);
30
- screencastSimulcastConfig = defaultSimulcastConfig(); //to do: sync with camera settings
31
- setSimulcastConfig(screencastSimulcastConfig);
32
- }, [isScreencastOn]);
33
- const toggleScreencastTrackEncoding = useCallback(async (encoding) => {
34
- screencastSimulcastConfig =
35
- await RNFishjamClientModule.toggleScreencastTrackEncoding(encoding);
36
- setSimulcastConfig(screencastSimulcastConfig);
37
- }, []);
38
- const setScreencastTrackEncodingBandwidth = useCallback(async (encoding, bandwidth) => {
39
- await RNFishjamClientModule.setScreencastTrackEncodingBandwidth(encoding, bandwidth);
40
- }, []);
41
- const setScreencastTrackBandwidth = useCallback(async (bandwidth) => {
42
- await RNFishjamClientModule.setScreencastTrackBandwidth(bandwidth);
43
- }, []);
44
- const handleScreencastPermission = useCallback(async () => {
45
- if (Platform.OS == 'android') {
46
- return await RNFishjamClientModule.handleScreencastPermission();
47
- }
48
- return 'denied';
49
- }, []);
50
- return {
51
- isScreencastOn,
52
- simulcastConfig,
53
- /**
54
- * Toggles the screencast on/off
55
- */
56
- toggleScreencast,
57
- handleScreencastPermission,
58
- /**
59
- * @deprecated
60
- */
61
- setScreencastTrackBandwidth,
62
- /**
63
- * Toggles simulcast encoding of a screencast track on/off
64
- * @param encoding encoding to toggle
65
- * @deprecated
66
- */
67
- toggleScreencastTrackEncoding,
68
- /**
69
- * updates maximum bandwidth for the given simulcast encoding of the screencast track
70
- * @param encoding encoding to update
71
- * @param bandwidth BandwidthLimit to set
72
- * @deprecated
73
- */
74
- setScreencastTrackEncodingBandwidth,
75
- /**
76
- * updates maximum bandwidth for the screencast 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=useScreencast.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"useScreencast.js","sourceRoot":"","sources":["../../src/hooks/useScreencast.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,yBAAyB,GAAoB,sBAAsB,EAAE,CAAC;AAE1E;;;;;GAKG;AACH,MAAM,UAAU,aAAa;IAC3B,MAAM,CAAC,cAAc,EAAE,iBAAiB,CAAC,GAAG,QAAQ,CAClD,qBAAqB,CAAC,cAAc,CACrC,CAAC;IAEF,MAAM,CAAC,eAAe,EAAE,kBAAkB,CAAC,GAAG,QAAQ,CACpD,yBAAyB,CAC1B,CAAC;IAEF,eAAe,CAAC,gBAAgB,CAAC,cAAc,EAAE,iBAAiB,CAAC,CAAC;IAEpE,MAAM,gBAAgB,GAAG,WAAW,CAClC,KAAK,EAAE,oBAAgD,EAAE,EAAE,EAAE;QAC3D,MAAM,OAAO,GAAG;YACd,GAAG,iBAAiB;YACpB,kBAAkB,EAAE;gBAClB,WAAW,EAAE,YAAY;gBACzB,IAAI,EAAE,eAAwB;gBAC9B,MAAM,EAAE,CAAC,cAAc;aACxB;SACF,CAAC;QACF,MAAM,qBAAqB,CAAC,gBAAgB,CAAC,OAAO,CAAC,CAAC;QACtD,yBAAyB,GAAG,sBAAsB,EAAE,CAAC,CAAC,kCAAkC;QACxF,kBAAkB,CAAC,yBAAyB,CAAC,CAAC;IAChD,CAAC,EACD,CAAC,cAAc,CAAC,CACjB,CAAC;IAEF,MAAM,6BAA6B,GAAG,WAAW,CAC/C,KAAK,EAAE,QAAuB,EAAE,EAAE;QAChC,yBAAyB;YACvB,MAAM,qBAAqB,CAAC,6BAA6B,CAAC,QAAQ,CAAC,CAAC;QACtE,kBAAkB,CAAC,yBAAyB,CAAC,CAAC;IAChD,CAAC,EACD,EAAE,CACH,CAAC;IAEF,MAAM,mCAAmC,GAAG,WAAW,CACrD,KAAK,EAAE,QAAuB,EAAE,SAAyB,EAAE,EAAE;QAC3D,MAAM,qBAAqB,CAAC,mCAAmC,CAC7D,QAAQ,EACR,SAAS,CACV,CAAC;IACJ,CAAC,EACD,EAAE,CACH,CAAC;IAEF,MAAM,2BAA2B,GAAG,WAAW,CAC7C,KAAK,EAAE,SAAyB,EAAE,EAAE;QAClC,MAAM,qBAAqB,CAAC,2BAA2B,CAAC,SAAS,CAAC,CAAC;IACrE,CAAC,EACD,EAAE,CACH,CAAC;IAEF,MAAM,0BAA0B,GAAG,WAAW,CAAC,KAAK,IAAI,EAAE;QACxD,IAAI,QAAQ,CAAC,EAAE,IAAI,SAAS,EAAE,CAAC;YAC7B,OAAO,MAAM,qBAAqB,CAAC,0BAA0B,EAAE,CAAC;QAClE,CAAC;QACD,OAAO,QAAQ,CAAC;IAClB,CAAC,EAAE,EAAE,CAAC,CAAC;IAEP,OAAO;QACL,cAAc;QACd,eAAe;QAEf;;WAEG;QACH,gBAAgB;QAChB,0BAA0B;QAE1B;;WAEG;QACH,2BAA2B;QAC3B;;;;WAIG;QACH,6BAA6B;QAC7B;;;;;WAKG;QACH,mCAAmC;QACnC;;;;;;;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 ScreencastQuality = 'VGA' | 'HD5' | 'HD15' | 'FHD15' | 'FHD30';\n\nexport type ScreencastOptions = {\n /**\n * Resolution + fps of screencast 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: ScreencastQuality;\n /**\n * bandwidth limit of a screencast track. By default there is no bandwidth limit.\n */\n maxBandwidth: TrackBandwidthLimit;\n};\nexport type ScreencastOptionsInternal = {\n screencastMetadata: TrackMetadata & { displayName?: string };\n /**\n * SimulcastConfig of a screencast track. By default simulcast is disabled.\n */\n simulcastConfig: SimulcastConfig;\n};\n\nconst defaultSimulcastConfig = () => ({\n enabled: false,\n activeEncodings: [],\n});\n\nlet screencastSimulcastConfig: SimulcastConfig = defaultSimulcastConfig();\n\n/**\n * This hook can toggle screen sharing on/off and provides current screencast state.\n * @returns An object with functions to manage screencast.\n * @category Screenshare\n * @group Hooks\n */\nexport function useScreencast() {\n const [isScreencastOn, setIsScreencastOn] = useState(\n RNFishjamClientModule.isScreencastOn,\n );\n\n const [simulcastConfig, setSimulcastConfig] = useState<SimulcastConfig>(\n screencastSimulcastConfig,\n );\n\n useFishjamEvent(ReceivableEvents.IsScreencastOn, setIsScreencastOn);\n\n const toggleScreencast = useCallback(\n async (screencastOptions: Partial<ScreencastOptions> = {}) => {\n const options = {\n ...screencastOptions,\n screencastMetadata: {\n displayName: 'presenting',\n type: 'screensharing' as const,\n active: !isScreencastOn,\n },\n };\n await RNFishjamClientModule.toggleScreencast(options);\n screencastSimulcastConfig = defaultSimulcastConfig(); //to do: sync with camera settings\n setSimulcastConfig(screencastSimulcastConfig);\n },\n [isScreencastOn],\n );\n\n const toggleScreencastTrackEncoding = useCallback(\n async (encoding: TrackEncoding) => {\n screencastSimulcastConfig =\n await RNFishjamClientModule.toggleScreencastTrackEncoding(encoding);\n setSimulcastConfig(screencastSimulcastConfig);\n },\n [],\n );\n\n const setScreencastTrackEncodingBandwidth = useCallback(\n async (encoding: TrackEncoding, bandwidth: BandwidthLimit) => {\n await RNFishjamClientModule.setScreencastTrackEncodingBandwidth(\n encoding,\n bandwidth,\n );\n },\n [],\n );\n\n const setScreencastTrackBandwidth = useCallback(\n async (bandwidth: BandwidthLimit) => {\n await RNFishjamClientModule.setScreencastTrackBandwidth(bandwidth);\n },\n [],\n );\n\n const handleScreencastPermission = useCallback(async () => {\n if (Platform.OS == 'android') {\n return await RNFishjamClientModule.handleScreencastPermission();\n }\n return 'denied';\n }, []);\n\n return {\n isScreencastOn,\n simulcastConfig,\n\n /**\n * Toggles the screencast on/off\n */\n toggleScreencast,\n handleScreencastPermission,\n\n /**\n * @deprecated\n */\n setScreencastTrackBandwidth,\n /**\n * Toggles simulcast encoding of a screencast track on/off\n * @param encoding encoding to toggle\n * @deprecated\n */\n toggleScreencastTrackEncoding,\n /**\n * updates maximum bandwidth for the given simulcast encoding of the screencast track\n * @param encoding encoding to update\n * @param bandwidth BandwidthLimit to set\n * @deprecated\n */\n setScreencastTrackEncodingBandwidth,\n /**\n * updates maximum bandwidth for the screencast 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"]}