@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.
- package/README.md +9 -397
- package/android/build.gradle +1 -1
- package/android/src/main/java/io/fishjam/reactnative/EmitableEvents.kt +1 -1
- package/android/src/main/java/io/fishjam/reactnative/Errors.kt +3 -2
- package/android/src/main/java/io/fishjam/reactnative/RNFishjamClient.kt +73 -73
- package/android/src/main/java/io/fishjam/reactnative/RNFishjamClientModule.kt +18 -18
- package/build/RNFishjamClientModule.d.ts +8 -8
- 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/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 +1 -1
- package/build/hooks/useFishjamEvent.js +1 -1
- package/build/hooks/useFishjamEvent.js.map +1 -1
- 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 +3 -2
- package/build/index.d.ts.map +1 -1
- package/build/index.js +1 -1
- package/build/index.js.map +1 -1
- package/ios/Events.swift +1 -1
- package/ios/RNFishjamClient.podspec +1 -1
- package/ios/RNFishjamClient.swift +62 -62
- package/ios/RNFishjamClientModule.swift +18 -17
- package/package.json +11 -9
- package/plugin/broadcastExtensionFiles/FishjamBroadcastSampleHandler.swift +1 -1
- package/plugin/build/withFishjamIos.js +1 -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
|
@@ -13,7 +13,7 @@ struct CameraConfig: Record {
|
|
|
13
13
|
var quality: String = "VGA169"
|
|
14
14
|
|
|
15
15
|
@Field
|
|
16
|
-
var
|
|
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
|
|
42
|
+
struct ScreenShareOptions: Record {
|
|
43
43
|
@Field
|
|
44
44
|
var quality: String = "HD15"
|
|
45
45
|
|
|
46
46
|
@Field
|
|
47
|
-
var
|
|
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
|
-
"
|
|
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("
|
|
147
|
-
try rnFishjamClient.
|
|
147
|
+
AsyncFunction("toggleScreenShare") { (screenShareOptions: ScreenShareOptions) in
|
|
148
|
+
try rnFishjamClient.toggleScreenShare(screenShareOptions: screenShareOptions)
|
|
148
149
|
}
|
|
149
150
|
|
|
150
|
-
Property("
|
|
151
|
-
return rnFishjamClient.
|
|
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("
|
|
171
|
-
try rnFishjamClient.
|
|
171
|
+
AsyncFunction("updateScreenShareTrackMetadata") { (metadata: [String: Any]) in
|
|
172
|
+
try rnFishjamClient.updateLocalScreenShareTrackMetadata(metadata: metadata)
|
|
172
173
|
}
|
|
173
174
|
|
|
174
|
-
AsyncFunction("
|
|
175
|
-
try rnFishjamClient.
|
|
175
|
+
AsyncFunction("toggleScreenShareTrackEncoding") { (encoding: String) in
|
|
176
|
+
try rnFishjamClient.toggleScreenShareTrackEncoding(encoding: encoding)
|
|
176
177
|
}
|
|
177
178
|
|
|
178
|
-
AsyncFunction("
|
|
179
|
-
try rnFishjamClient.
|
|
179
|
+
AsyncFunction("setScreenShareTrackBandwidth") { (bandwidth: Int) in
|
|
180
|
+
try rnFishjamClient.setScreenShareTrackBandwidth(bandwidth: bandwidth)
|
|
180
181
|
}
|
|
181
182
|
|
|
182
|
-
AsyncFunction("
|
|
183
|
-
try rnFishjamClient.
|
|
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
|
+
"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
|
-
"
|
|
26
|
-
"fishjam-cloud",
|
|
25
|
+
"FishjamCloud",
|
|
27
26
|
"MembraneWebRTC",
|
|
28
|
-
"
|
|
27
|
+
"webRTC",
|
|
28
|
+
"streaming",
|
|
29
|
+
"video",
|
|
30
|
+
"audio"
|
|
29
31
|
],
|
|
30
|
-
"repository":
|
|
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
|
|
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['
|
|
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"]}
|