@fishjam-cloud/react-client 0.7.2 → 0.8.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/DeviceManager.d.ts.map +1 -1
- package/dist/DeviceManager.js +6 -0
- package/dist/fishjamProvider.d.ts +5 -2
- package/dist/fishjamProvider.d.ts.map +1 -1
- package/dist/fishjamProvider.js +9 -2
- package/dist/hooks/devices/useCamera.d.ts +7 -0
- package/dist/hooks/devices/useCamera.d.ts.map +1 -0
- package/dist/hooks/devices/useCamera.js +35 -0
- package/dist/hooks/devices/useInitializeDevices.d.ts +8 -0
- package/dist/hooks/devices/useInitializeDevices.d.ts.map +1 -0
- package/dist/hooks/devices/useInitializeDevices.js +41 -0
- package/dist/hooks/devices/useMicrophone.d.ts +7 -0
- package/dist/hooks/devices/useMicrophone.d.ts.map +1 -0
- package/dist/hooks/devices/useMicrophone.js +37 -0
- package/dist/hooks/public.d.ts +3 -1
- package/dist/hooks/public.d.ts.map +1 -1
- package/dist/hooks/public.js +3 -1
- package/dist/hooks/useFishjamContext.d.ts +2 -1
- package/dist/hooks/useFishjamContext.d.ts.map +1 -1
- package/dist/hooks/useScreenShare.d.ts +3 -2
- package/dist/hooks/useScreenShare.d.ts.map +1 -1
- package/dist/hooks/useScreenShare.js +8 -6
- package/dist/hooks/useTrackManager.d.ts +4 -2
- package/dist/hooks/useTrackManager.d.ts.map +1 -1
- package/dist/hooks/useTrackManager.js +35 -36
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/types/internal.d.ts +2 -3
- package/dist/types/internal.d.ts.map +1 -1
- package/dist/types/public.d.ts +12 -1
- package/dist/types/public.d.ts.map +1 -1
- package/dist/utils/bandwidth.d.ts +3 -0
- package/dist/utils/bandwidth.d.ts.map +1 -0
- package/dist/utils/bandwidth.js +4 -0
- package/dist/utils/track.d.ts +7 -2
- package/dist/utils/track.d.ts.map +1 -1
- package/dist/utils/track.js +15 -0
- package/package.json +2 -2
- package/dist/hooks/devices.d.ts +0 -19
- package/dist/hooks/devices.d.ts.map +0 -1
- package/dist/hooks/devices.js +0 -98
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"DeviceManager.d.ts","sourceRoot":"","sources":["../src/DeviceManager.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"DeviceManager.d.ts","sourceRoot":"","sources":["../src/DeviceManager.ts"],"names":[],"mappings":"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"}
|
package/dist/DeviceManager.js
CHANGED
|
@@ -150,11 +150,17 @@ export class DeviceManager extends EventEmitter {
|
|
|
150
150
|
disable() {
|
|
151
151
|
this.setEnable(this.rawMedia?.track ?? null, false);
|
|
152
152
|
this.setEnable(this.processedMediaTrack, false);
|
|
153
|
+
if (this.media) {
|
|
154
|
+
this.media.enabled = false;
|
|
155
|
+
}
|
|
153
156
|
this.emit("deviceDisabled", this.getState());
|
|
154
157
|
}
|
|
155
158
|
enable() {
|
|
156
159
|
this.setEnable(this.rawMedia?.track ?? null, true);
|
|
157
160
|
this.setEnable(this.processedMediaTrack, true);
|
|
161
|
+
if (this.media) {
|
|
162
|
+
this.media.enabled = true;
|
|
163
|
+
}
|
|
158
164
|
this.emit("deviceEnabled", this.getState());
|
|
159
165
|
}
|
|
160
166
|
setEnable = (track, value) => {
|
|
@@ -1,14 +1,17 @@
|
|
|
1
1
|
import { type PropsWithChildren } from "react";
|
|
2
2
|
import { type ReconnectConfig } from "@fishjam-cloud/ts-client";
|
|
3
|
-
import type { PersistLastDeviceHandlers } from "./types/public";
|
|
3
|
+
import type { BandwidthLimits, PersistLastDeviceHandlers, StartStreamingProps } from "./types/public";
|
|
4
4
|
interface FishjamProviderProps extends PropsWithChildren {
|
|
5
5
|
reconnect?: ReconnectConfig | boolean;
|
|
6
6
|
constraints?: Pick<MediaStreamConstraints, "audio" | "video">;
|
|
7
7
|
persistLastDevice?: boolean | PersistLastDeviceHandlers;
|
|
8
|
+
bandwidthLimits?: Partial<BandwidthLimits>;
|
|
9
|
+
autoStreamCamera?: StartStreamingProps | false;
|
|
10
|
+
autoStreamMicrophone?: StartStreamingProps | false;
|
|
8
11
|
}
|
|
9
12
|
/**
|
|
10
13
|
* @category Components
|
|
11
14
|
*/
|
|
12
|
-
export declare function FishjamProvider({ children, reconnect, constraints, persistLastDevice }: FishjamProviderProps): import("react/jsx-runtime").JSX.Element;
|
|
15
|
+
export declare function FishjamProvider({ children, reconnect, constraints, persistLastDevice, bandwidthLimits, autoStreamCamera, autoStreamMicrophone, }: FishjamProviderProps): import("react/jsx-runtime").JSX.Element;
|
|
13
16
|
export {};
|
|
14
17
|
//# sourceMappingURL=fishjamProvider.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fishjamProvider.d.ts","sourceRoot":"","sources":["../src/fishjamProvider.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAU,KAAK,iBAAiB,EAAE,MAAM,OAAO,CAAC;AAGvD,OAAO,EAAiB,KAAK,eAAe,EAAE,MAAM,0BAA0B,CAAC;AAO/E,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,gBAAgB,CAAC;
|
|
1
|
+
{"version":3,"file":"fishjamProvider.d.ts","sourceRoot":"","sources":["../src/fishjamProvider.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAU,KAAK,iBAAiB,EAAE,MAAM,OAAO,CAAC;AAGvD,OAAO,EAAiB,KAAK,eAAe,EAAE,MAAM,0BAA0B,CAAC;AAO/E,OAAO,KAAK,EAAE,eAAe,EAAE,yBAAyB,EAAE,mBAAmB,EAAE,MAAM,gBAAgB,CAAC;AAItG,UAAU,oBAAqB,SAAQ,iBAAiB;IACtD,SAAS,CAAC,EAAE,eAAe,GAAG,OAAO,CAAC;IACtC,WAAW,CAAC,EAAE,IAAI,CAAC,sBAAsB,EAAE,OAAO,GAAG,OAAO,CAAC,CAAC;IAC9D,iBAAiB,CAAC,EAAE,OAAO,GAAG,yBAAyB,CAAC;IACxD,eAAe,CAAC,EAAE,OAAO,CAAC,eAAe,CAAC,CAAC;IAC3C,gBAAgB,CAAC,EAAE,mBAAmB,GAAG,KAAK,CAAC;IAC/C,oBAAoB,CAAC,EAAE,mBAAmB,GAAG,KAAK,CAAC;CACpD;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,EAC9B,QAAQ,EACR,SAAS,EACT,WAAW,EACX,iBAAiB,EACjB,eAAe,EACf,gBAAgB,EAChB,oBAAoB,GACrB,EAAE,oBAAoB,2CA8DtB"}
|
package/dist/fishjamProvider.js
CHANGED
|
@@ -8,10 +8,11 @@ import { usePeerStatus } from "./hooks/usePeerStatus";
|
|
|
8
8
|
import { useFishjamClientState } from "./hooks/useFishjamClientState";
|
|
9
9
|
import { AUDIO_TRACK_CONSTRAINTS, VIDEO_TRACK_CONSTRAINTS } from "./constraints";
|
|
10
10
|
import { useScreenShareManager } from "./hooks/useScreenShare";
|
|
11
|
+
import { mergeWithDefaultBandwitdthLimits } from "./utils/bandwidth";
|
|
11
12
|
/**
|
|
12
13
|
* @category Components
|
|
13
14
|
*/
|
|
14
|
-
export function FishjamProvider({ children, reconnect, constraints, persistLastDevice }) {
|
|
15
|
+
export function FishjamProvider({ children, reconnect, constraints, persistLastDevice, bandwidthLimits, autoStreamCamera, autoStreamMicrophone, }) {
|
|
15
16
|
const fishjamClientRef = useRef(new FishjamClient({ reconnect }));
|
|
16
17
|
const hasDevicesBeenInitializedRef = useRef(false);
|
|
17
18
|
const storage = persistLastDevice;
|
|
@@ -28,17 +29,22 @@ export function FishjamProvider({ children, reconnect, constraints, persistLastD
|
|
|
28
29
|
storage,
|
|
29
30
|
}));
|
|
30
31
|
const { peerStatus, getCurrentPeerStatus } = usePeerStatus(fishjamClientRef.current);
|
|
32
|
+
const mergedBandwidthLimits = mergeWithDefaultBandwitdthLimits(bandwidthLimits);
|
|
31
33
|
const videoTrackManager = useTrackManager({
|
|
32
34
|
mediaManager: videoDeviceManagerRef.current,
|
|
33
35
|
tsClient: fishjamClientRef.current,
|
|
34
36
|
getCurrentPeerStatus,
|
|
37
|
+
bandwidthLimits: mergedBandwidthLimits,
|
|
38
|
+
autoStreamProps: autoStreamCamera,
|
|
35
39
|
});
|
|
36
40
|
const audioTrackManager = useTrackManager({
|
|
37
41
|
mediaManager: audioDeviceManagerRef.current,
|
|
38
42
|
tsClient: fishjamClientRef.current,
|
|
39
43
|
getCurrentPeerStatus,
|
|
44
|
+
bandwidthLimits: mergedBandwidthLimits,
|
|
45
|
+
autoStreamProps: autoStreamMicrophone,
|
|
40
46
|
});
|
|
41
|
-
const screenShareManager = useScreenShareManager({ fishjamClient: fishjamClientRef.current });
|
|
47
|
+
const screenShareManager = useScreenShareManager({ fishjamClient: fishjamClientRef.current, getCurrentPeerStatus });
|
|
42
48
|
const clientState = useFishjamClientState(fishjamClientRef.current);
|
|
43
49
|
const context = {
|
|
44
50
|
fishjamClientRef,
|
|
@@ -50,6 +56,7 @@ export function FishjamProvider({ children, reconnect, constraints, persistLastD
|
|
|
50
56
|
audioDeviceManagerRef,
|
|
51
57
|
hasDevicesBeenInitializedRef,
|
|
52
58
|
clientState,
|
|
59
|
+
bandwidthLimits: mergedBandwidthLimits,
|
|
53
60
|
};
|
|
54
61
|
return _jsx(FishjamContext.Provider, { value: context, children: children });
|
|
55
62
|
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useCamera.d.ts","sourceRoot":"","sources":["../../../src/hooks/devices/useCamera.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAIjD;;;GAGG;AACH,wBAAgB,SAAS,IAAI,MAAM,CA+BlC"}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import { useDeviceManager } from "../deviceManagers/useDeviceManager";
|
|
2
|
+
import { useFishjamContext } from "../useFishjamContext";
|
|
3
|
+
/**
|
|
4
|
+
*
|
|
5
|
+
* @category Devices
|
|
6
|
+
*/
|
|
7
|
+
export function useCamera() {
|
|
8
|
+
const { videoTrackManager, videoDeviceManagerRef } = useFishjamContext();
|
|
9
|
+
const { deviceState, status } = useDeviceManager(videoDeviceManagerRef.current);
|
|
10
|
+
const { currentTrack, ...trackManager } = videoTrackManager;
|
|
11
|
+
const stream = deviceState.media?.stream ?? null;
|
|
12
|
+
const currentMiddleware = deviceState.currentMiddleware ?? null;
|
|
13
|
+
const isStreaming = Boolean(currentTrack?.stream);
|
|
14
|
+
const track = stream?.getAudioTracks()[0] ?? null;
|
|
15
|
+
const trackId = currentTrack?.trackId ?? null;
|
|
16
|
+
const devices = deviceState.devices ?? [];
|
|
17
|
+
const activeDevice = deviceState.media?.deviceInfo ?? null;
|
|
18
|
+
const isMuted = !deviceState.media?.enabled;
|
|
19
|
+
const deviceError = deviceState.error ?? null;
|
|
20
|
+
const isDeviceEnabled = Boolean(deviceState.media);
|
|
21
|
+
return {
|
|
22
|
+
...trackManager,
|
|
23
|
+
currentMiddleware,
|
|
24
|
+
status,
|
|
25
|
+
stream,
|
|
26
|
+
track,
|
|
27
|
+
devices,
|
|
28
|
+
activeDevice,
|
|
29
|
+
deviceError,
|
|
30
|
+
isMuted,
|
|
31
|
+
isStreaming,
|
|
32
|
+
trackId,
|
|
33
|
+
isDeviceEnabled,
|
|
34
|
+
};
|
|
35
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useInitializeDevices.d.ts","sourceRoot":"","sources":["../../../src/hooks/devices/useInitializeDevices.ts"],"names":[],"mappings":"AAKA;;;GAGG;AACH,eAAO,MAAM,oBAAoB;;CAqDhC,CAAC"}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
import { useCallback } from "react";
|
|
2
|
+
import { prepareConstraints } from "../../constraints";
|
|
3
|
+
import { getAvailableMedia, getCorrectedResult } from "../../mediaInitializer";
|
|
4
|
+
import { useFishjamContext } from "../useFishjamContext";
|
|
5
|
+
/**
|
|
6
|
+
*
|
|
7
|
+
* @category Devices
|
|
8
|
+
*/
|
|
9
|
+
export const useInitializeDevices = () => {
|
|
10
|
+
const { videoDeviceManagerRef, audioDeviceManagerRef, hasDevicesBeenInitializedRef } = useFishjamContext();
|
|
11
|
+
const initializeDevices = useCallback(async () => {
|
|
12
|
+
if (hasDevicesBeenInitializedRef.current)
|
|
13
|
+
return;
|
|
14
|
+
hasDevicesBeenInitializedRef.current = true;
|
|
15
|
+
const videoManager = videoDeviceManagerRef.current;
|
|
16
|
+
const audioManager = audioDeviceManagerRef.current;
|
|
17
|
+
const constraints = {
|
|
18
|
+
video: videoManager.getConstraints(),
|
|
19
|
+
audio: audioManager.getConstraints(),
|
|
20
|
+
};
|
|
21
|
+
const previousDevices = {
|
|
22
|
+
video: videoManager.getLastDevice(),
|
|
23
|
+
audio: audioManager.getLastDevice(),
|
|
24
|
+
};
|
|
25
|
+
// Attempt to start the last selected device to avoid an unnecessary restart.
|
|
26
|
+
// Without this, the first device will start, and `getCorrectedResult` will attempt to fix it.
|
|
27
|
+
let [stream, deviceErrors] = await getAvailableMedia({
|
|
28
|
+
video: prepareConstraints(previousDevices.video?.deviceId, constraints.video),
|
|
29
|
+
audio: prepareConstraints(previousDevices.audio?.deviceId, constraints.audio),
|
|
30
|
+
});
|
|
31
|
+
const devices = await navigator.mediaDevices.enumerateDevices();
|
|
32
|
+
const videoDevices = devices.filter(({ kind }) => kind === "videoinput");
|
|
33
|
+
const audioDevices = devices.filter(({ kind }) => kind === "audioinput");
|
|
34
|
+
if (stream) {
|
|
35
|
+
[stream, deviceErrors] = await getCorrectedResult(stream, deviceErrors, devices, constraints, previousDevices);
|
|
36
|
+
}
|
|
37
|
+
videoManager.initialize(stream, stream?.getVideoTracks()?.[0] ?? null, videoDevices, !!constraints.video, deviceErrors.video);
|
|
38
|
+
audioManager.initialize(stream, stream?.getAudioTracks()?.[0] ?? null, audioDevices, !!constraints.audio, deviceErrors.audio);
|
|
39
|
+
}, [videoDeviceManagerRef, audioDeviceManagerRef, hasDevicesBeenInitializedRef]);
|
|
40
|
+
return { initializeDevices };
|
|
41
|
+
};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useMicrophone.d.ts","sourceRoot":"","sources":["../../../src/hooks/devices/useMicrophone.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAItD;;;GAGG;AACH,wBAAgB,aAAa,IAAI,WAAW,CAiC3C"}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import { useDeviceManager } from "../deviceManagers/useDeviceManager";
|
|
2
|
+
import { useFishjamContext } from "../useFishjamContext";
|
|
3
|
+
/**
|
|
4
|
+
*
|
|
5
|
+
* @category Devices
|
|
6
|
+
*/
|
|
7
|
+
export function useMicrophone() {
|
|
8
|
+
const { audioTrackManager, audioDeviceManagerRef } = useFishjamContext();
|
|
9
|
+
const { deviceState, status } = useDeviceManager(audioDeviceManagerRef.current);
|
|
10
|
+
const { currentTrack, ...trackManager } = audioTrackManager;
|
|
11
|
+
const stream = deviceState.media?.stream ?? null;
|
|
12
|
+
const currentMiddleware = deviceState.currentMiddleware ?? null;
|
|
13
|
+
const isStreaming = Boolean(currentTrack?.stream);
|
|
14
|
+
const track = stream?.getAudioTracks()[0] ?? null;
|
|
15
|
+
const trackId = currentTrack?.trackId ?? null;
|
|
16
|
+
const devices = deviceState.devices ?? [];
|
|
17
|
+
const activeDevice = deviceState.media?.deviceInfo ?? null;
|
|
18
|
+
const isAudioPlaying = currentTrack?.vadStatus === "speech";
|
|
19
|
+
const isMuted = !deviceState.media?.enabled;
|
|
20
|
+
const deviceError = deviceState.error ?? null;
|
|
21
|
+
const isDeviceEnabled = Boolean(deviceState.media);
|
|
22
|
+
return {
|
|
23
|
+
...trackManager,
|
|
24
|
+
currentMiddleware,
|
|
25
|
+
isDeviceEnabled,
|
|
26
|
+
status,
|
|
27
|
+
stream,
|
|
28
|
+
track,
|
|
29
|
+
isStreaming,
|
|
30
|
+
trackId,
|
|
31
|
+
devices,
|
|
32
|
+
activeDevice,
|
|
33
|
+
isMuted,
|
|
34
|
+
deviceError,
|
|
35
|
+
isAudioPlaying,
|
|
36
|
+
};
|
|
37
|
+
}
|
package/dist/hooks/public.d.ts
CHANGED
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
export { useConnect, useDisconnect } from "./useConnection";
|
|
2
2
|
export { useReconnection } from "./useReconnection";
|
|
3
|
-
export { useCamera
|
|
3
|
+
export { useCamera } from "./devices/useCamera";
|
|
4
|
+
export { useMicrophone } from "./devices/useMicrophone";
|
|
5
|
+
export { useInitializeDevices } from "./devices/useInitializeDevices";
|
|
4
6
|
export { usePeers } from "./usePeers";
|
|
5
7
|
export { useScreenShare } from "./useScreenShare";
|
|
6
8
|
export { useStatus } from "./useStatus";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"public.d.ts","sourceRoot":"","sources":["../../src/hooks/public.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAC5D,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,EAAE,SAAS,EAAE,aAAa,EAAE,oBAAoB,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"public.d.ts","sourceRoot":"","sources":["../../src/hooks/public.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAC5D,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AAChD,OAAO,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AACxD,OAAO,EAAE,oBAAoB,EAAE,MAAM,gCAAgC,CAAC;AACtE,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AACtC,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAC;AAClD,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC"}
|
package/dist/hooks/public.js
CHANGED
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
export { useConnect, useDisconnect } from "./useConnection";
|
|
2
2
|
export { useReconnection } from "./useReconnection";
|
|
3
|
-
export { useCamera
|
|
3
|
+
export { useCamera } from "./devices/useCamera";
|
|
4
|
+
export { useMicrophone } from "./devices/useMicrophone";
|
|
5
|
+
export { useInitializeDevices } from "./devices/useInitializeDevices";
|
|
4
6
|
export { usePeers } from "./usePeers";
|
|
5
7
|
export { useScreenShare } from "./useScreenShare";
|
|
6
8
|
export { useStatus } from "./useStatus";
|
|
@@ -3,7 +3,7 @@ import { type MutableRefObject } from "react";
|
|
|
3
3
|
import type { PeerMetadata, TrackMetadata, TrackManager } from "../types/internal";
|
|
4
4
|
import type { DeviceManager } from "../DeviceManager";
|
|
5
5
|
import type { FishjamClientState } from "./useFishjamClientState";
|
|
6
|
-
import type { PeerStatus, ScreenshareApi } from "../types/public";
|
|
6
|
+
import type { BandwidthLimits, PeerStatus, ScreenshareApi } from "../types/public";
|
|
7
7
|
export type FishjamContextType = {
|
|
8
8
|
fishjamClientRef: MutableRefObject<FishjamClient<PeerMetadata, TrackMetadata>>;
|
|
9
9
|
videoDeviceManagerRef: MutableRefObject<DeviceManager>;
|
|
@@ -14,6 +14,7 @@ export type FishjamContextType = {
|
|
|
14
14
|
videoTrackManager: TrackManager;
|
|
15
15
|
audioTrackManager: TrackManager;
|
|
16
16
|
clientState: FishjamClientState;
|
|
17
|
+
bandwidthLimits: BandwidthLimits;
|
|
17
18
|
};
|
|
18
19
|
export declare const FishjamContext: import("react").Context<FishjamContextType | null>;
|
|
19
20
|
export declare function useFishjamContext(): FishjamContextType;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useFishjamContext.d.ts","sourceRoot":"","sources":["../../src/hooks/useFishjamContext.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AAC9D,OAAO,EAAiB,KAAK,gBAAgB,EAAc,MAAM,OAAO,CAAC;AACzE,OAAO,KAAK,EAAE,YAAY,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACnF,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AACtD,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAClE,OAAO,KAAK,EAAE,UAAU,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;
|
|
1
|
+
{"version":3,"file":"useFishjamContext.d.ts","sourceRoot":"","sources":["../../src/hooks/useFishjamContext.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AAC9D,OAAO,EAAiB,KAAK,gBAAgB,EAAc,MAAM,OAAO,CAAC;AACzE,OAAO,KAAK,EAAE,YAAY,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACnF,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AACtD,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AAClE,OAAO,KAAK,EAAE,eAAe,EAAE,UAAU,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AAEnF,MAAM,MAAM,kBAAkB,GAAG;IAC/B,gBAAgB,EAAE,gBAAgB,CAAC,aAAa,CAAC,YAAY,EAAE,aAAa,CAAC,CAAC,CAAC;IAC/E,qBAAqB,EAAE,gBAAgB,CAAC,aAAa,CAAC,CAAC;IACvD,qBAAqB,EAAE,gBAAgB,CAAC,aAAa,CAAC,CAAC;IACvD,4BAA4B,EAAE,gBAAgB,CAAC,OAAO,CAAC,CAAC;IACxD,kBAAkB,EAAE,cAAc,CAAC;IACnC,UAAU,EAAE,UAAU,CAAC;IACvB,iBAAiB,EAAE,YAAY,CAAC;IAChC,iBAAiB,EAAE,YAAY,CAAC;IAChC,WAAW,EAAE,kBAAkB,CAAC;IAChC,eAAe,EAAE,eAAe,CAAC;CAClC,CAAC;AAEF,eAAO,MAAM,cAAc,oDAAiD,CAAC;AAE7E,wBAAgB,iBAAiB,IAGb,kBAAkB,CACrC"}
|
|
@@ -1,14 +1,15 @@
|
|
|
1
1
|
import type { FishjamClient } from "@fishjam-cloud/ts-client";
|
|
2
|
-
import type { ScreenshareApi } from "../types/public";
|
|
2
|
+
import type { ScreenshareApi, PeerStatus } from "../types/public";
|
|
3
3
|
import type { PeerMetadata, TrackMetadata } from "../types/internal";
|
|
4
4
|
interface ScreenShareManagerProps {
|
|
5
5
|
fishjamClient: FishjamClient<PeerMetadata, TrackMetadata>;
|
|
6
|
+
getCurrentPeerStatus: () => PeerStatus;
|
|
6
7
|
}
|
|
7
8
|
/**
|
|
8
9
|
*
|
|
9
10
|
* @category Screenshare
|
|
10
11
|
*/
|
|
11
|
-
export declare const useScreenShareManager: ({ fishjamClient }: ScreenShareManagerProps) => ScreenshareApi;
|
|
12
|
+
export declare const useScreenShareManager: ({ fishjamClient, getCurrentPeerStatus, }: ScreenShareManagerProps) => ScreenshareApi;
|
|
12
13
|
export declare const useScreenShare: () => ScreenshareApi;
|
|
13
14
|
export declare const getTracksFromStream: (stream: MediaStream) => [MediaStreamTrack, MediaStreamTrack | null];
|
|
14
15
|
export {};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useScreenShare.d.ts","sourceRoot":"","sources":["../../src/hooks/useScreenShare.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AAE9D,OAAO,KAAK,EAAoB,cAAc,EAAE,MAAM,iBAAiB,CAAC;
|
|
1
|
+
{"version":3,"file":"useScreenShare.d.ts","sourceRoot":"","sources":["../../src/hooks/useScreenShare.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AAE9D,OAAO,KAAK,EAAoB,cAAc,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AACpF,OAAO,KAAK,EAAE,YAAY,EAAoB,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAGvF,UAAU,uBAAuB;IAC/B,aAAa,EAAE,aAAa,CAAC,YAAY,EAAE,aAAa,CAAC,CAAC;IAC1D,oBAAoB,EAAE,MAAM,UAAU,CAAC;CACxC;AAED;;;GAGG;AACH,eAAO,MAAM,qBAAqB,6CAG/B,uBAAuB,KAAG,cAqI5B,CAAC;AAEF,eAAO,MAAM,cAAc,sBAI1B,CAAC;AAEF,eAAO,MAAM,mBAAmB,WAAY,WAAW,KAAG,CAAC,gBAAgB,EAAE,gBAAgB,GAAG,IAAI,CAKnG,CAAC"}
|
|
@@ -5,7 +5,7 @@ import { useFishjamContext } from "./useFishjamContext";
|
|
|
5
5
|
*
|
|
6
6
|
* @category Screenshare
|
|
7
7
|
*/
|
|
8
|
-
export const useScreenShareManager = ({ fishjamClient }) => {
|
|
8
|
+
export const useScreenShareManager = ({ fishjamClient, getCurrentPeerStatus, }) => {
|
|
9
9
|
const [state, setState] = useState({ stream: null, trackIds: null });
|
|
10
10
|
const cleanMiddlewareFnRef = useRef(null);
|
|
11
11
|
const stream = state.stream ?? null;
|
|
@@ -65,13 +65,15 @@ export const useScreenShareManager = ({ fishjamClient }) => {
|
|
|
65
65
|
video.stop();
|
|
66
66
|
if (audio)
|
|
67
67
|
audio.stop();
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
68
|
+
if (getCurrentPeerStatus() === "connected") {
|
|
69
|
+
const removeTrackPromises = [fishjamClient.removeTrack(state.trackIds.videoId)];
|
|
70
|
+
if (state.trackIds.audioId)
|
|
71
|
+
removeTrackPromises.push(fishjamClient.removeTrack(state.trackIds.audioId));
|
|
72
|
+
await Promise.all(removeTrackPromises);
|
|
73
|
+
}
|
|
72
74
|
cleanMiddleware();
|
|
73
75
|
setState(({ tracksMiddleware }) => ({ stream: null, trackIds: null, tracksMiddleware }));
|
|
74
|
-
}, [state, fishjamClient, setState, cleanMiddleware]);
|
|
76
|
+
}, [state, fishjamClient, setState, cleanMiddleware, getCurrentPeerStatus]);
|
|
75
77
|
useEffect(() => {
|
|
76
78
|
if (!state.stream)
|
|
77
79
|
return;
|
|
@@ -1,11 +1,13 @@
|
|
|
1
1
|
import type { FishjamClient } from "@fishjam-cloud/ts-client";
|
|
2
2
|
import type { MediaManager, PeerMetadata, TrackManager, TrackMetadata } from "../types/internal";
|
|
3
|
-
import type { PeerStatus } from "../types/public";
|
|
3
|
+
import type { BandwidthLimits, PeerStatus, StartStreamingProps } from "../types/public";
|
|
4
4
|
interface TrackManagerConfig {
|
|
5
5
|
mediaManager: MediaManager;
|
|
6
6
|
tsClient: FishjamClient<PeerMetadata, TrackMetadata>;
|
|
7
7
|
getCurrentPeerStatus: () => PeerStatus;
|
|
8
|
+
bandwidthLimits: BandwidthLimits;
|
|
9
|
+
autoStreamProps?: StartStreamingProps | false;
|
|
8
10
|
}
|
|
9
|
-
export declare const useTrackManager: ({ mediaManager, tsClient, getCurrentPeerStatus }: TrackManagerConfig) => TrackManager;
|
|
11
|
+
export declare const useTrackManager: ({ mediaManager, tsClient, getCurrentPeerStatus, bandwidthLimits, autoStreamProps, }: TrackManagerConfig) => TrackManager;
|
|
10
12
|
export {};
|
|
11
13
|
//# sourceMappingURL=useTrackManager.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"useTrackManager.d.ts","sourceRoot":"","sources":["../../src/hooks/useTrackManager.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,
|
|
1
|
+
{"version":3,"file":"useTrackManager.d.ts","sourceRoot":"","sources":["../../src/hooks/useTrackManager.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AAC9D,OAAO,KAAK,EAAE,YAAY,EAAE,YAAY,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAGjG,OAAO,KAAK,EAAE,eAAe,EAAE,UAAU,EAAE,mBAAmB,EAAmB,MAAM,iBAAiB,CAAC;AAEzG,UAAU,kBAAkB;IAC1B,YAAY,EAAE,YAAY,CAAC;IAC3B,QAAQ,EAAE,aAAa,CAAC,YAAY,EAAE,aAAa,CAAC,CAAC;IACrD,oBAAoB,EAAE,MAAM,UAAU,CAAC;IACvC,eAAe,EAAE,eAAe,CAAC;IACjC,eAAe,CAAC,EAAE,mBAAmB,GAAG,KAAK,CAAC;CAC/C;AAWD,eAAO,MAAM,eAAe,wFAMzB,kBAAkB,KAAG,YA0LvB,CAAC"}
|
|
@@ -1,14 +1,13 @@
|
|
|
1
|
-
import { getRemoteOrLocalTrack } from "../utils/track";
|
|
1
|
+
import { getConfigAndBandwidthFromProps, getRemoteOrLocalTrack } from "../utils/track";
|
|
2
2
|
import { useCallback, useEffect, useMemo, useState } from "react";
|
|
3
3
|
const TRACK_TYPE_TO_DEVICE = {
|
|
4
4
|
video: "camera",
|
|
5
5
|
audio: "microphone",
|
|
6
6
|
};
|
|
7
|
-
|
|
7
|
+
const getDeviceType = (mediaManager) => TRACK_TYPE_TO_DEVICE[mediaManager.getDeviceType()];
|
|
8
|
+
export const useTrackManager = ({ mediaManager, tsClient, getCurrentPeerStatus, bandwidthLimits, autoStreamProps, }) => {
|
|
8
9
|
const [currentTrackId, setCurrentTrackId] = useState(null);
|
|
9
10
|
const [paused, setPaused] = useState(false);
|
|
10
|
-
const type = TRACK_TYPE_TO_DEVICE[mediaManager.getDeviceType()];
|
|
11
|
-
const metadata = useMemo(() => ({ type, paused }), [type, paused]);
|
|
12
11
|
const currentTrack = useMemo(() => getRemoteOrLocalTrack(tsClient, currentTrackId), [tsClient, currentTrackId]);
|
|
13
12
|
async function setTrackMiddleware(middleware) {
|
|
14
13
|
mediaManager.setTrackMiddleware(middleware);
|
|
@@ -21,10 +20,8 @@ export const useTrackManager = ({ mediaManager, tsClient, getCurrentPeerStatus }
|
|
|
21
20
|
const newTrack = mediaManager.getMedia()?.track ?? null;
|
|
22
21
|
await tsClient.replaceTrack(currentTrackId, newTrack);
|
|
23
22
|
}
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
}
|
|
27
|
-
const startStreaming = useCallback(async (simulcastConfig, maxBandwidth) => {
|
|
23
|
+
const stop = useCallback(() => mediaManager.stop(), [mediaManager]);
|
|
24
|
+
const startStreaming = useCallback(async (props = { simulcast: ["l", "m", "h"] }) => {
|
|
28
25
|
if (currentTrackId)
|
|
29
26
|
throw Error("Track already added");
|
|
30
27
|
const media = mediaManager.getMedia();
|
|
@@ -36,53 +33,57 @@ export const useTrackManager = ({ mediaManager, tsClient, getCurrentPeerStatus }
|
|
|
36
33
|
// see `getRemoteOrLocalTrackContext()` explanation
|
|
37
34
|
setCurrentTrackId(media.track.id);
|
|
38
35
|
const displayName = tsClient.getLocalPeer()?.metadata?.peer?.displayName;
|
|
39
|
-
const
|
|
36
|
+
const deviceType = getDeviceType(mediaManager);
|
|
37
|
+
const trackMetadata = { type: deviceType, displayName, paused: false };
|
|
38
|
+
const [maxBandwidth, simulcastConfig] = getConfigAndBandwidthFromProps(props.simulcast, bandwidthLimits);
|
|
40
39
|
const remoteTrackId = await tsClient.addTrack(media.track, trackMetadata, simulcastConfig, maxBandwidth);
|
|
41
40
|
setCurrentTrackId(remoteTrackId);
|
|
42
41
|
setPaused(false);
|
|
43
42
|
return remoteTrackId;
|
|
44
|
-
}, [currentTrackId, mediaManager,
|
|
45
|
-
|
|
43
|
+
}, [currentTrackId, mediaManager, tsClient, bandwidthLimits]);
|
|
44
|
+
const refreshStreamedTrack = useCallback(async () => {
|
|
46
45
|
if (!currentTrack)
|
|
47
46
|
return;
|
|
48
47
|
const newTrack = mediaManager.getMedia()?.track ?? null;
|
|
49
48
|
if (!newTrack)
|
|
50
49
|
throw Error("New track is empty");
|
|
51
50
|
return tsClient.replaceTrack(currentTrack.trackId, newTrack);
|
|
52
|
-
}
|
|
53
|
-
|
|
51
|
+
}, [currentTrack, mediaManager, tsClient]);
|
|
52
|
+
const stopStreaming = useCallback(async () => {
|
|
54
53
|
if (!currentTrack)
|
|
55
54
|
return;
|
|
56
55
|
setCurrentTrackId(null);
|
|
57
56
|
setPaused(true);
|
|
58
57
|
return tsClient.removeTrack(currentTrack.trackId);
|
|
59
|
-
}
|
|
60
|
-
|
|
58
|
+
}, [currentTrack, tsClient]);
|
|
59
|
+
const pauseStreaming = useCallback(async () => {
|
|
61
60
|
if (!currentTrack)
|
|
62
61
|
return;
|
|
63
62
|
setPaused(true);
|
|
64
63
|
await tsClient.replaceTrack(currentTrack.trackId, null);
|
|
65
|
-
const
|
|
64
|
+
const deviceType = getDeviceType(mediaManager);
|
|
65
|
+
const trackMetadata = { type: deviceType, paused: true };
|
|
66
66
|
return tsClient.updateTrackMetadata(currentTrack.trackId, trackMetadata);
|
|
67
|
-
}
|
|
68
|
-
|
|
67
|
+
}, [currentTrack, mediaManager, tsClient]);
|
|
68
|
+
const resumeStreaming = useCallback(async () => {
|
|
69
69
|
if (!currentTrack)
|
|
70
70
|
return;
|
|
71
71
|
const media = mediaManager.getMedia();
|
|
72
|
+
const deviceType = getDeviceType(mediaManager);
|
|
72
73
|
if (!media)
|
|
73
74
|
throw Error("Device is unavailable");
|
|
74
75
|
setPaused(false);
|
|
75
76
|
await tsClient.replaceTrack(currentTrack.trackId, media.track);
|
|
76
|
-
const trackMetadata = {
|
|
77
|
+
const trackMetadata = { type: deviceType, paused: false };
|
|
77
78
|
return tsClient.updateTrackMetadata(currentTrack.trackId, trackMetadata);
|
|
78
|
-
}
|
|
79
|
-
|
|
79
|
+
}, [currentTrack, mediaManager, tsClient]);
|
|
80
|
+
const disableTrack = useCallback(() => {
|
|
80
81
|
mediaManager.disable();
|
|
81
|
-
}
|
|
82
|
-
|
|
82
|
+
}, [mediaManager]);
|
|
83
|
+
const enableTrack = useCallback(() => {
|
|
83
84
|
mediaManager.enable();
|
|
84
|
-
}
|
|
85
|
-
const stream = async () => {
|
|
85
|
+
}, [mediaManager]);
|
|
86
|
+
const stream = useCallback(async () => {
|
|
86
87
|
if (getCurrentPeerStatus() !== "connected")
|
|
87
88
|
return;
|
|
88
89
|
if (currentTrack?.trackId) {
|
|
@@ -91,8 +92,8 @@ export const useTrackManager = ({ mediaManager, tsClient, getCurrentPeerStatus }
|
|
|
91
92
|
else {
|
|
92
93
|
await startStreaming();
|
|
93
94
|
}
|
|
94
|
-
};
|
|
95
|
-
|
|
95
|
+
}, [currentTrack?.trackId, getCurrentPeerStatus, resumeStreaming, startStreaming]);
|
|
96
|
+
const toggle = useCallback(async (mode) => {
|
|
96
97
|
const mediaStream = mediaManager.getMedia()?.stream;
|
|
97
98
|
const track = mediaManager.getMedia()?.track ?? null;
|
|
98
99
|
const enabled = Boolean(track?.enabled);
|
|
@@ -113,23 +114,21 @@ export const useTrackManager = ({ mediaManager, tsClient, getCurrentPeerStatus }
|
|
|
113
114
|
await mediaManager.start();
|
|
114
115
|
await stream();
|
|
115
116
|
}
|
|
116
|
-
}
|
|
117
|
+
}, [currentTrack, mediaManager, pauseStreaming, stream]);
|
|
117
118
|
/**
|
|
118
119
|
* @see {@link TrackManager#toggleMute} for more details.
|
|
119
120
|
*/
|
|
120
|
-
|
|
121
|
-
await toggle("soft");
|
|
122
|
-
}
|
|
121
|
+
const toggleMute = useCallback(() => toggle("soft"), [toggle]);
|
|
123
122
|
/**
|
|
124
123
|
* @see {@link TrackManager#toggleDevice} for more details.
|
|
125
124
|
*/
|
|
126
|
-
|
|
127
|
-
await toggle("hard");
|
|
128
|
-
}
|
|
125
|
+
const toggleDevice = useCallback(() => toggle("hard"), [toggle]);
|
|
129
126
|
useEffect(() => {
|
|
127
|
+
if (autoStreamProps === false)
|
|
128
|
+
return;
|
|
130
129
|
const joinedHandler = () => {
|
|
131
130
|
if (mediaManager.getMedia()?.track) {
|
|
132
|
-
startStreaming();
|
|
131
|
+
startStreaming(autoStreamProps);
|
|
133
132
|
}
|
|
134
133
|
};
|
|
135
134
|
const disconnectedHandler = () => {
|
|
@@ -141,7 +140,7 @@ export const useTrackManager = ({ mediaManager, tsClient, getCurrentPeerStatus }
|
|
|
141
140
|
tsClient.off("joined", joinedHandler);
|
|
142
141
|
tsClient.off("disconnected", disconnectedHandler);
|
|
143
142
|
};
|
|
144
|
-
}, [mediaManager, startStreaming, tsClient]);
|
|
143
|
+
}, [mediaManager, startStreaming, tsClient, autoStreamProps]);
|
|
145
144
|
return {
|
|
146
145
|
currentTrack,
|
|
147
146
|
setTrackMiddleware,
|
package/dist/index.d.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
export { useConnect, useDisconnect, useReconnection, useCamera, useMicrophone, useInitializeDevices, usePeers, useScreenShare, useStatus, } from "./hooks/public";
|
|
2
2
|
export { FishjamProvider } from "./fishjamProvider";
|
|
3
|
-
export { Track, TrackMiddleware, TracksMiddleware, PeerStatus, Device, AudioDevice, PeerWithTracks, ConnectConfig, PersistLastDeviceHandlers, ScreenshareApi, } from "./types/public";
|
|
3
|
+
export { Track, TrackMiddleware, TracksMiddleware, PeerStatus, Device, AudioDevice, PeerWithTracks, ConnectConfig, PersistLastDeviceHandlers, ScreenshareApi, StartStreamingProps, } from "./types/public";
|
|
4
4
|
export { AUDIO_TRACK_CONSTRAINTS, VIDEO_TRACK_CONSTRAINTS, SCREEN_SHARING_MEDIA_CONSTRAINTS } from "./constraints";
|
|
5
5
|
export type { Peer, MessageEvents, CreateConfig, TrackBandwidthLimit, SimulcastBandwidthLimit, BandwidthLimit, WebRTCEndpointEvents, TrackContextEvents, Endpoint, SimulcastConfig, TrackContext, VadStatus, EncodingReason, MetadataParser, AuthErrorReason, Encoding, } from "@fishjam-cloud/ts-client";
|
|
6
6
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,UAAU,EACV,aAAa,EACb,eAAe,EACf,SAAS,EACT,aAAa,EACb,oBAAoB,EACpB,QAAQ,EACR,cAAc,EACd,SAAS,GACV,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAEpD,OAAO,EACL,KAAK,EACL,eAAe,EACf,gBAAgB,EAChB,UAAU,EACV,MAAM,EACN,WAAW,EACX,cAAc,EACd,aAAa,EACb,yBAAyB,EACzB,cAAc,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,UAAU,EACV,aAAa,EACb,eAAe,EACf,SAAS,EACT,aAAa,EACb,oBAAoB,EACpB,QAAQ,EACR,cAAc,EACd,SAAS,GACV,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAEpD,OAAO,EACL,KAAK,EACL,eAAe,EACf,gBAAgB,EAChB,UAAU,EACV,MAAM,EACN,WAAW,EACX,cAAc,EACd,aAAa,EACb,yBAAyB,EACzB,cAAc,EACd,mBAAmB,GACpB,MAAM,gBAAgB,CAAC;AAExB,OAAO,EAAE,uBAAuB,EAAE,uBAAuB,EAAE,gCAAgC,EAAE,MAAM,eAAe,CAAC;AAEnH,YAAY,EACV,IAAI,EACJ,aAAa,EACb,YAAY,EACZ,mBAAmB,EACnB,uBAAuB,EACvB,cAAc,EACd,oBAAoB,EACpB,kBAAkB,EAClB,QAAQ,EACR,eAAe,EACf,YAAY,EACZ,SAAS,EACT,cAAc,EACd,cAAc,EACd,eAAe,EACf,QAAQ,GACT,MAAM,0BAA0B,CAAC"}
|
package/dist/types/internal.d.ts
CHANGED
|
@@ -1,6 +1,5 @@
|
|
|
1
|
-
import type { SimulcastConfig, TrackBandwidthLimit } from "@fishjam-cloud/ts-client";
|
|
2
|
-
import type { Track, TrackMiddleware, TracksMiddleware } from "./public";
|
|
3
1
|
import type { DeviceType } from "../DeviceManager";
|
|
2
|
+
import type { StartStreamingProps, Track, TrackMiddleware, TracksMiddleware } from "./public";
|
|
4
3
|
export type TrackId = string;
|
|
5
4
|
export type PeerId = string;
|
|
6
5
|
export type PeerState = {
|
|
@@ -82,7 +81,7 @@ export type ScreenShareState = ({
|
|
|
82
81
|
export interface TrackManager {
|
|
83
82
|
initialize: (deviceId?: string) => Promise<void>;
|
|
84
83
|
stop: () => void;
|
|
85
|
-
startStreaming: (
|
|
84
|
+
startStreaming: (startStreamingProps?: StartStreamingProps) => Promise<string>;
|
|
86
85
|
stopStreaming: () => Promise<void>;
|
|
87
86
|
pauseStreaming: () => Promise<void>;
|
|
88
87
|
resumeStreaming: () => Promise<void>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"internal.d.ts","sourceRoot":"","sources":["../../src/types/internal.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,
|
|
1
|
+
{"version":3,"file":"internal.d.ts","sourceRoot":"","sources":["../../src/types/internal.ts"],"names":[],"mappings":"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"}
|
package/dist/types/public.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import type { Encoding, SimulcastConfig, ConnectConfig as TSClientConnectConfig, VadStatus } from "@fishjam-cloud/ts-client";
|
|
2
|
-
import type { DeviceManagerStatus, DistinguishedTracks, PeerMetadata, PeerState, TrackId, TrackManager, TrackMetadata } from "./internal";
|
|
2
|
+
import type { DeviceError, DeviceManagerStatus, DistinguishedTracks, PeerMetadata, PeerState, TrackId, TrackManager, TrackMetadata } from "./internal";
|
|
3
3
|
export type Track = {
|
|
4
4
|
stream: MediaStream | null;
|
|
5
5
|
encoding: Encoding | null;
|
|
@@ -36,6 +36,9 @@ export type Device = {
|
|
|
36
36
|
devices: MediaDeviceInfo[];
|
|
37
37
|
activeDevice: MediaDeviceInfo | null;
|
|
38
38
|
currentMiddleware: TrackMiddleware;
|
|
39
|
+
deviceError: DeviceError | null;
|
|
40
|
+
isMuted: boolean;
|
|
41
|
+
isDeviceEnabled: boolean;
|
|
39
42
|
} & Omit<TrackManager, "currentTrack">;
|
|
40
43
|
export type AudioDevice = Device & {
|
|
41
44
|
isAudioPlaying: boolean;
|
|
@@ -62,4 +65,12 @@ export type ScreenshareApi = {
|
|
|
62
65
|
setTracksMiddleware: (middleware: TracksMiddleware | null) => Promise<void>;
|
|
63
66
|
currentTracksMiddleware: TracksMiddleware | null;
|
|
64
67
|
};
|
|
68
|
+
export type SimulcastBandwidthLimits = Record<Encoding, number>;
|
|
69
|
+
export type StartStreamingProps = {
|
|
70
|
+
simulcast?: Encoding[] | false;
|
|
71
|
+
};
|
|
72
|
+
export type BandwidthLimits = {
|
|
73
|
+
singleStream: number;
|
|
74
|
+
simulcast: SimulcastBandwidthLimits;
|
|
75
|
+
};
|
|
65
76
|
//# sourceMappingURL=public.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"public.d.ts","sourceRoot":"","sources":["../../src/types/public.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,QAAQ,EACR,eAAe,EACf,aAAa,IAAI,qBAAqB,EACtC,SAAS,EACV,MAAM,0BAA0B,CAAC;AAClC,OAAO,KAAK,EACV,mBAAmB,EACnB,mBAAmB,EACnB,YAAY,EACZ,SAAS,EACT,OAAO,EACP,YAAY,EACZ,aAAa,EACd,MAAM,YAAY,CAAC;AAEpB,MAAM,MAAM,KAAK,GAAG;IAClB,MAAM,EAAE,WAAW,GAAG,IAAI,CAAC;IAC3B,QAAQ,EAAE,QAAQ,GAAG,IAAI,CAAC;IAC1B,OAAO,EAAE,OAAO,CAAC;IACjB,QAAQ,CAAC,EAAE,aAAa,CAAC;IACzB,eAAe,EAAE,eAAe,GAAG,IAAI,CAAC;IACxC,SAAS,EAAE,SAAS,CAAC;IACrB,KAAK,EAAE,gBAAgB,GAAG,IAAI,CAAC;CAChC,CAAC;AAEF,MAAM,MAAM,eAAe,GAAG,CAAC,CAAC,KAAK,EAAE,gBAAgB,KAAK;IAAE,KAAK,EAAE,gBAAgB,CAAC;IAAC,OAAO,CAAC,EAAE,MAAM,IAAI,CAAA;CAAE,CAAC,GAAG,IAAI,CAAC;AAEtH,MAAM,MAAM,gBAAgB,GAAG,CAC7B,UAAU,EAAE,gBAAgB,EAC5B,UAAU,EAAE,gBAAgB,GAAG,IAAI,KAChC;IAAE,UAAU,EAAE,gBAAgB,CAAC;IAAC,UAAU,EAAE,gBAAgB,GAAG,IAAI,CAAC;IAAC,OAAO,EAAE,MAAM,IAAI,CAAA;CAAE,CAAC;AAEhG;;;;;;;GAOG;AACH,MAAM,MAAM,UAAU,GAAG,YAAY,GAAG,WAAW,GAAG,OAAO,GAAG,MAAM,CAAC;AAEvE,MAAM,MAAM,MAAM,GAAG;IACnB,WAAW,EAAE,OAAO,CAAC;IACrB,MAAM,EAAE,mBAAmB,CAAC;IAC5B,OAAO,EAAE,OAAO,GAAG,IAAI,CAAC;IACxB,KAAK,EAAE,gBAAgB,GAAG,IAAI,CAAC;IAC/B,MAAM,EAAE,WAAW,GAAG,IAAI,CAAC;IAC3B,OAAO,EAAE,eAAe,EAAE,CAAC;IAC3B,YAAY,EAAE,eAAe,GAAG,IAAI,CAAC;IACrC,iBAAiB,EAAE,eAAe,CAAC;
|
|
1
|
+
{"version":3,"file":"public.d.ts","sourceRoot":"","sources":["../../src/types/public.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bandwidth.d.ts","sourceRoot":"","sources":["../../src/utils/bandwidth.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAEvD,eAAO,MAAM,gCAAgC,YAAa,OAAO,CAAC,eAAe,CAAC,KAAG,eAGnF,CAAC"}
|
package/dist/utils/track.d.ts
CHANGED
|
@@ -1,6 +1,11 @@
|
|
|
1
|
-
import type { FishjamClient } from "@fishjam-cloud/ts-client";
|
|
1
|
+
import type { Encoding, FishjamClient } from "@fishjam-cloud/ts-client";
|
|
2
2
|
import type { PeerMetadata, TrackMetadata } from "../types/internal";
|
|
3
|
-
import type { Track } from "../types/public";
|
|
3
|
+
import type { BandwidthLimits, Track } from "../types/public";
|
|
4
4
|
export declare const getRemoteOrLocalTrack: (tsClient: FishjamClient<PeerMetadata, TrackMetadata>, remoteOrLocalTrackId: string | null) => Track | null;
|
|
5
5
|
export declare function setupOnEndedCallback(track: MediaStreamTrack, getCurrentTrackId: () => string | undefined, callback: () => Promise<void>): void;
|
|
6
|
+
export declare const getConfigAndBandwidthFromProps: (encodings: Encoding[] | false | undefined, bandwidthLimits: BandwidthLimits) => readonly [number, undefined] | readonly [Map<Encoding, number>, {
|
|
7
|
+
enabled: boolean;
|
|
8
|
+
activeEncodings: Encoding[];
|
|
9
|
+
disabledEncodings: Encoding[];
|
|
10
|
+
}];
|
|
6
11
|
//# sourceMappingURL=track.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"track.d.ts","sourceRoot":"","sources":["../../src/utils/track.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAgB,MAAM,0BAA0B,CAAC;
|
|
1
|
+
{"version":3,"file":"track.d.ts","sourceRoot":"","sources":["../../src/utils/track.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,aAAa,EAAgB,MAAM,0BAA0B,CAAC;AACtF,OAAO,KAAK,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AACrE,OAAO,KAAK,EAAE,eAAe,EAAE,KAAK,EAAE,MAAM,iBAAiB,CAAC;AAoC9D,eAAO,MAAM,qBAAqB,aACtB,aAAa,CAAC,YAAY,EAAE,aAAa,CAAC,wBAC9B,MAAM,GAAG,IAAI,iBAKpC,CAAC;AAEF,wBAAgB,oBAAoB,CAClC,KAAK,EAAE,gBAAgB,EACvB,iBAAiB,EAAE,MAAM,MAAM,GAAG,SAAS,EAC3C,QAAQ,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,QAQ9B;AAOD,eAAO,MAAM,8BAA8B,cAC9B,QAAQ,EAAE,GAAG,KAAK,GAAG,SAAS,mBACxB,eAAe;;;;EAWjC,CAAC"}
|
package/dist/utils/track.js
CHANGED
|
@@ -41,3 +41,18 @@ export function setupOnEndedCallback(track, getCurrentTrackId, callback) {
|
|
|
41
41
|
}
|
|
42
42
|
});
|
|
43
43
|
}
|
|
44
|
+
const getDisabledEncodings = (activeEncodings = []) => {
|
|
45
|
+
const allEncodings = ["l", "m", "h"];
|
|
46
|
+
return allEncodings.filter((encoding) => !activeEncodings.includes(encoding));
|
|
47
|
+
};
|
|
48
|
+
export const getConfigAndBandwidthFromProps = (encodings, bandwidthLimits) => {
|
|
49
|
+
if (!encodings)
|
|
50
|
+
return [bandwidthLimits.singleStream, undefined];
|
|
51
|
+
const config = {
|
|
52
|
+
enabled: true,
|
|
53
|
+
activeEncodings: encodings,
|
|
54
|
+
disabledEncodings: getDisabledEncodings(encodings),
|
|
55
|
+
};
|
|
56
|
+
const bandwidth = new Map(Object.entries(bandwidthLimits.simulcast));
|
|
57
|
+
return [bandwidth, config];
|
|
58
|
+
};
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@fishjam-cloud/react-client",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.8.0",
|
|
4
4
|
"description": "React client library for Fishjam Cloud",
|
|
5
5
|
"license": "Apache-2.0",
|
|
6
6
|
"author": "Fishjam Cloud Team",
|
|
@@ -50,7 +50,7 @@
|
|
|
50
50
|
"typescript": "^5.6.2"
|
|
51
51
|
},
|
|
52
52
|
"dependencies": {
|
|
53
|
-
"@fishjam-cloud/ts-client": "0.
|
|
53
|
+
"@fishjam-cloud/ts-client": "0.8.0",
|
|
54
54
|
"events": "3.3.0",
|
|
55
55
|
"lodash.isequal": "4.5.0"
|
|
56
56
|
},
|
package/dist/hooks/devices.d.ts
DELETED
|
@@ -1,19 +0,0 @@
|
|
|
1
|
-
import type { AudioDevice, Device } from "../types/public";
|
|
2
|
-
/**
|
|
3
|
-
*
|
|
4
|
-
* @category Devices
|
|
5
|
-
*/
|
|
6
|
-
export declare function useCamera(): Device;
|
|
7
|
-
/**
|
|
8
|
-
*
|
|
9
|
-
* @category Devices
|
|
10
|
-
*/
|
|
11
|
-
export declare function useMicrophone(): AudioDevice;
|
|
12
|
-
/**
|
|
13
|
-
*
|
|
14
|
-
* @category Devices
|
|
15
|
-
*/
|
|
16
|
-
export declare const useInitializeDevices: () => {
|
|
17
|
-
initializeDevices: () => Promise<void>;
|
|
18
|
-
};
|
|
19
|
-
//# sourceMappingURL=devices.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"devices.d.ts","sourceRoot":"","sources":["../../src/hooks/devices.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAC;AAK3D;;;GAGG;AACH,wBAAgB,SAAS,IAAI,MAAM,CAyBlC;AAED;;;GAGG;AACH,wBAAgB,aAAa,IAAI,WAAW,CA2B3C;AAED;;;GAGG;AACH,eAAO,MAAM,oBAAoB;;CAqDhC,CAAC"}
|
package/dist/hooks/devices.js
DELETED
|
@@ -1,98 +0,0 @@
|
|
|
1
|
-
import { useFishjamContext } from "./useFishjamContext";
|
|
2
|
-
import { useCallback } from "react";
|
|
3
|
-
import { useDeviceManager } from "./deviceManagers/useDeviceManager";
|
|
4
|
-
import { getAvailableMedia, getCorrectedResult } from "../mediaInitializer";
|
|
5
|
-
import { prepareConstraints } from "../constraints";
|
|
6
|
-
/**
|
|
7
|
-
*
|
|
8
|
-
* @category Devices
|
|
9
|
-
*/
|
|
10
|
-
export function useCamera() {
|
|
11
|
-
const { videoTrackManager, videoDeviceManagerRef } = useFishjamContext();
|
|
12
|
-
const { deviceState, status } = useDeviceManager(videoDeviceManagerRef.current);
|
|
13
|
-
const { currentTrack, ...trackManager } = videoTrackManager;
|
|
14
|
-
const stream = deviceState.media?.stream ?? null;
|
|
15
|
-
const currentMiddleware = deviceState.currentMiddleware ?? null;
|
|
16
|
-
const isStreaming = Boolean(currentTrack?.stream);
|
|
17
|
-
const track = stream?.getAudioTracks()[0] ?? null;
|
|
18
|
-
const trackId = currentTrack?.trackId ?? null;
|
|
19
|
-
const devices = deviceState.devices ?? [];
|
|
20
|
-
const activeDevice = deviceState.media?.deviceInfo ?? null;
|
|
21
|
-
return {
|
|
22
|
-
...trackManager,
|
|
23
|
-
currentMiddleware,
|
|
24
|
-
status,
|
|
25
|
-
stream,
|
|
26
|
-
track,
|
|
27
|
-
devices,
|
|
28
|
-
activeDevice,
|
|
29
|
-
isStreaming,
|
|
30
|
-
trackId,
|
|
31
|
-
};
|
|
32
|
-
}
|
|
33
|
-
/**
|
|
34
|
-
*
|
|
35
|
-
* @category Devices
|
|
36
|
-
*/
|
|
37
|
-
export function useMicrophone() {
|
|
38
|
-
const { audioTrackManager, audioDeviceManagerRef } = useFishjamContext();
|
|
39
|
-
const { deviceState, status } = useDeviceManager(audioDeviceManagerRef.current);
|
|
40
|
-
const { currentTrack, ...trackManager } = audioTrackManager;
|
|
41
|
-
const stream = deviceState.media?.stream ?? null;
|
|
42
|
-
const currentMiddleware = deviceState.currentMiddleware ?? null;
|
|
43
|
-
const isStreaming = Boolean(currentTrack?.stream);
|
|
44
|
-
const track = stream?.getAudioTracks()[0] ?? null;
|
|
45
|
-
const trackId = currentTrack?.trackId ?? null;
|
|
46
|
-
const devices = deviceState.devices ?? [];
|
|
47
|
-
const activeDevice = deviceState.media?.deviceInfo ?? null;
|
|
48
|
-
const isAudioPlaying = currentTrack?.vadStatus === "speech";
|
|
49
|
-
return {
|
|
50
|
-
...trackManager,
|
|
51
|
-
currentMiddleware,
|
|
52
|
-
status,
|
|
53
|
-
stream,
|
|
54
|
-
track,
|
|
55
|
-
isStreaming,
|
|
56
|
-
trackId,
|
|
57
|
-
devices,
|
|
58
|
-
activeDevice,
|
|
59
|
-
isAudioPlaying,
|
|
60
|
-
};
|
|
61
|
-
}
|
|
62
|
-
/**
|
|
63
|
-
*
|
|
64
|
-
* @category Devices
|
|
65
|
-
*/
|
|
66
|
-
export const useInitializeDevices = () => {
|
|
67
|
-
const { videoDeviceManagerRef, audioDeviceManagerRef, hasDevicesBeenInitializedRef } = useFishjamContext();
|
|
68
|
-
const initializeDevices = useCallback(async () => {
|
|
69
|
-
if (hasDevicesBeenInitializedRef.current)
|
|
70
|
-
return;
|
|
71
|
-
hasDevicesBeenInitializedRef.current = true;
|
|
72
|
-
const videoManager = videoDeviceManagerRef.current;
|
|
73
|
-
const audioManager = audioDeviceManagerRef.current;
|
|
74
|
-
const constraints = {
|
|
75
|
-
video: videoManager.getConstraints(),
|
|
76
|
-
audio: audioManager.getConstraints(),
|
|
77
|
-
};
|
|
78
|
-
const previousDevices = {
|
|
79
|
-
video: videoManager.getLastDevice(),
|
|
80
|
-
audio: audioManager.getLastDevice(),
|
|
81
|
-
};
|
|
82
|
-
// Attempt to start the last selected device to avoid an unnecessary restart.
|
|
83
|
-
// Without this, the first device will start, and `getCorrectedResult` will attempt to fix it.
|
|
84
|
-
let [stream, deviceErrors] = await getAvailableMedia({
|
|
85
|
-
video: prepareConstraints(previousDevices.video?.deviceId, constraints.video),
|
|
86
|
-
audio: prepareConstraints(previousDevices.audio?.deviceId, constraints.audio),
|
|
87
|
-
});
|
|
88
|
-
const devices = await navigator.mediaDevices.enumerateDevices();
|
|
89
|
-
const videoDevices = devices.filter(({ kind }) => kind === "videoinput");
|
|
90
|
-
const audioDevices = devices.filter(({ kind }) => kind === "audioinput");
|
|
91
|
-
if (stream) {
|
|
92
|
-
[stream, deviceErrors] = await getCorrectedResult(stream, deviceErrors, devices, constraints, previousDevices);
|
|
93
|
-
}
|
|
94
|
-
videoManager.initialize(stream, stream?.getVideoTracks()?.[0] ?? null, videoDevices, !!constraints.video, deviceErrors.video);
|
|
95
|
-
audioManager.initialize(stream, stream?.getAudioTracks()?.[0] ?? null, audioDevices, !!constraints.audio, deviceErrors.audio);
|
|
96
|
-
}, [videoDeviceManagerRef, audioDeviceManagerRef, hasDevicesBeenInitializedRef]);
|
|
97
|
-
return { initializeDevices };
|
|
98
|
-
};
|