@fishjam-cloud/react-client 0.6.0 → 0.7.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 +3 -4
- package/dist/DeviceManager.d.ts.map +1 -1
- package/dist/DeviceManager.js +25 -20
- package/dist/constraints.d.ts +2 -21
- package/dist/constraints.d.ts.map +1 -1
- package/dist/constraints.js +3 -7
- package/dist/fishjamProvider.d.ts +2 -2
- package/dist/fishjamProvider.d.ts.map +1 -1
- package/dist/fishjamProvider.js +32 -23
- package/dist/hooks/deviceManagers/useAudioDeviceManager.d.ts +2 -0
- package/dist/hooks/deviceManagers/useAudioDeviceManager.d.ts.map +1 -0
- package/dist/hooks/deviceManagers/useAudioDeviceManager.js +7 -0
- package/dist/hooks/deviceManagers/useDeviceManager.d.ts +4 -0
- package/dist/hooks/deviceManagers/useDeviceManager.d.ts.map +1 -0
- package/dist/hooks/deviceManagers/useDeviceManager.js +39 -0
- package/dist/hooks/deviceManagers/useVideoDeviceManager.d.ts +2 -0
- package/dist/hooks/deviceManagers/useVideoDeviceManager.d.ts.map +1 -0
- package/dist/hooks/deviceManagers/useVideoDeviceManager.js +7 -0
- package/dist/hooks/internal.d.ts +2 -0
- package/dist/hooks/internal.d.ts.map +1 -0
- package/dist/hooks/internal.js +1 -0
- package/dist/hooks/public.d.ts +8 -6
- package/dist/hooks/public.d.ts.map +1 -1
- package/dist/hooks/public.js +8 -6
- package/dist/hooks/useConnection.d.ts +4 -0
- package/dist/hooks/useConnection.d.ts.map +1 -0
- package/dist/hooks/useConnection.js +12 -0
- package/dist/hooks/useDevices.d.ts +7 -0
- package/dist/hooks/useDevices.d.ts.map +1 -0
- package/dist/hooks/useDevices.js +84 -0
- package/dist/hooks/useFishjamClientState.d.ts +11 -0
- package/dist/hooks/useFishjamClientState.d.ts.map +1 -0
- package/dist/hooks/{clientState.js → useFishjamClientState.js} +53 -34
- package/dist/hooks/useFishjamClient_DO_NOT_USE.d.ts +2 -0
- package/dist/hooks/useFishjamClient_DO_NOT_USE.d.ts.map +1 -0
- package/dist/hooks/useFishjamClient_DO_NOT_USE.js +6 -0
- package/dist/hooks/useFishjamContext.d.ts +20 -0
- package/dist/hooks/useFishjamContext.d.ts.map +1 -0
- package/dist/hooks/useParticipantStatus.d.ts +8 -0
- package/dist/hooks/useParticipantStatus.d.ts.map +1 -0
- package/dist/hooks/useParticipantStatus.js +39 -0
- package/dist/hooks/{participants.d.ts → useParticipants.d.ts} +1 -1
- package/dist/hooks/useParticipants.d.ts.map +1 -0
- package/dist/hooks/useParticipants.js +16 -0
- package/dist/hooks/useProcessedPreviewStream.d.ts +3 -0
- package/dist/hooks/useProcessedPreviewStream.d.ts.map +1 -0
- package/dist/hooks/useProcessedPreviewStream.js +17 -0
- package/dist/hooks/useReconnection.d.ts +3 -0
- package/dist/hooks/useReconnection.d.ts.map +1 -0
- package/dist/hooks/useReconnection.js +27 -0
- package/dist/hooks/{screenShare.d.ts → useScreenShare.d.ts} +1 -1
- package/dist/hooks/useScreenShare.d.ts.map +1 -0
- package/dist/hooks/{screenShare.js → useScreenShare.js} +49 -24
- package/dist/hooks/useStatus.d.ts +2 -0
- package/dist/hooks/useStatus.d.ts.map +1 -0
- package/dist/hooks/useStatus.js +4 -0
- package/dist/hooks/useTrackManager.d.ts +11 -0
- package/dist/hooks/useTrackManager.d.ts.map +1 -0
- package/dist/hooks/useTrackManager.js +176 -0
- package/dist/index.d.ts +2 -4
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +0 -1
- package/dist/state.types.d.ts +11 -24
- package/dist/state.types.d.ts.map +1 -1
- package/dist/types.d.ts +56 -36
- package/dist/types.d.ts.map +1 -1
- package/package.json +12 -15
- package/dist/Client.d.ts +0 -198
- package/dist/Client.d.ts.map +0 -1
- package/dist/Client.js +0 -461
- package/dist/hooks/clientState.d.ts +0 -4
- package/dist/hooks/clientState.d.ts.map +0 -1
- package/dist/hooks/connection.d.ts +0 -6
- package/dist/hooks/connection.d.ts.map +0 -1
- package/dist/hooks/connection.js +0 -28
- package/dist/hooks/devices.d.ts +0 -4
- package/dist/hooks/devices.d.ts.map +0 -1
- package/dist/hooks/devices.js +0 -9
- package/dist/hooks/fishjamContext.d.ts +0 -4
- package/dist/hooks/fishjamContext.d.ts.map +0 -1
- package/dist/hooks/participants.d.ts.map +0 -1
- package/dist/hooks/participants.js +0 -13
- package/dist/hooks/screenShare.d.ts.map +0 -1
- package/dist/hooks/setupMedia.d.ts +0 -3
- package/dist/hooks/setupMedia.d.ts.map +0 -1
- package/dist/hooks/setupMedia.js +0 -200
- package/dist/hooks/state.d.ts +0 -6
- package/dist/hooks/state.d.ts.map +0 -1
- package/dist/hooks/state.js +0 -15
- package/dist/trackManager.d.ts +0 -9
- package/dist/trackManager.d.ts.map +0 -1
- package/dist/trackManager.js +0 -116
- /package/dist/hooks/{fishjamContext.js → useFishjamContext.js} +0 -0
package/dist/hooks/setupMedia.js
DELETED
|
@@ -1,200 +0,0 @@
|
|
|
1
|
-
import { useEffect, useMemo, useRef } from "react";
|
|
2
|
-
import { useFishjamContext } from "./fishjamContext";
|
|
3
|
-
const isBroadcastedTrackChanged = (client, pending) => client.status === "joined" && !pending && !client.isReconnecting();
|
|
4
|
-
const isBroadcastedTrackStopped = (status, stream) => status === "joined" && stream;
|
|
5
|
-
export const useSetupMedia = (config) => {
|
|
6
|
-
const { state, videoTrackManager, audioTrackManager } = useFishjamContext();
|
|
7
|
-
const configRef = useRef(config);
|
|
8
|
-
useEffect(() => {
|
|
9
|
-
configRef.current = config;
|
|
10
|
-
state.client.setDeviceManagerConfig({
|
|
11
|
-
storage: config.storage,
|
|
12
|
-
});
|
|
13
|
-
}, [config, state.client]);
|
|
14
|
-
useEffect(() => {
|
|
15
|
-
if (!configRef.current.startOnMount)
|
|
16
|
-
return;
|
|
17
|
-
state.client.initializeDevices({
|
|
18
|
-
audioTrackConstraints: configRef?.current.microphone.trackConstraints,
|
|
19
|
-
videoTrackConstraints: configRef?.current.camera.trackConstraints,
|
|
20
|
-
});
|
|
21
|
-
// eslint-disable-next-line
|
|
22
|
-
}, []);
|
|
23
|
-
useEffect(() => {
|
|
24
|
-
let pending = false;
|
|
25
|
-
const broadcastOnCameraStart = async (client) => {
|
|
26
|
-
const config = configRef.current.camera;
|
|
27
|
-
const onDeviceChange = config.onDeviceChange ?? "replace";
|
|
28
|
-
const stream = videoTrackManager.getCurrentTrack()?.stream;
|
|
29
|
-
if (isBroadcastedTrackChanged(client, pending)) {
|
|
30
|
-
if (!stream && config.broadcastOnDeviceStart) {
|
|
31
|
-
pending = true;
|
|
32
|
-
await videoTrackManager
|
|
33
|
-
.startStreaming(config.defaultSimulcastConfig, config.defaultMaxBandwidth)
|
|
34
|
-
.finally(() => {
|
|
35
|
-
pending = false;
|
|
36
|
-
});
|
|
37
|
-
}
|
|
38
|
-
else if (stream && onDeviceChange === "replace") {
|
|
39
|
-
pending = true;
|
|
40
|
-
await videoTrackManager.refreshStreamedTrack().finally(() => {
|
|
41
|
-
pending = false;
|
|
42
|
-
});
|
|
43
|
-
}
|
|
44
|
-
else if (stream && onDeviceChange === "remove") {
|
|
45
|
-
pending = true;
|
|
46
|
-
await videoTrackManager.stopStreaming().finally(() => {
|
|
47
|
-
pending = false;
|
|
48
|
-
});
|
|
49
|
-
}
|
|
50
|
-
}
|
|
51
|
-
};
|
|
52
|
-
const managerInitialized = async (event, client) => {
|
|
53
|
-
if (event.video?.media?.stream) {
|
|
54
|
-
await broadcastOnCameraStart(client);
|
|
55
|
-
}
|
|
56
|
-
};
|
|
57
|
-
const devicesReady = async (event, client) => {
|
|
58
|
-
if (event.trackType === "video" && event.restarted && event?.media?.stream) {
|
|
59
|
-
await broadcastOnCameraStart(client);
|
|
60
|
-
}
|
|
61
|
-
};
|
|
62
|
-
const deviceReady = async (event, client) => {
|
|
63
|
-
if (event.trackType === "video") {
|
|
64
|
-
await broadcastOnCameraStart(client);
|
|
65
|
-
}
|
|
66
|
-
};
|
|
67
|
-
state.client.on("managerInitialized", managerInitialized);
|
|
68
|
-
state.client.on("devicesReady", devicesReady);
|
|
69
|
-
state.client.on("deviceReady", deviceReady);
|
|
70
|
-
return () => {
|
|
71
|
-
state.client.removeListener("managerInitialized", managerInitialized);
|
|
72
|
-
state.client.removeListener("devicesReady", devicesReady);
|
|
73
|
-
state.client.removeListener("deviceReady", deviceReady);
|
|
74
|
-
};
|
|
75
|
-
}, [state.client, videoTrackManager]);
|
|
76
|
-
useEffect(() => {
|
|
77
|
-
const removeOnCameraStopped = async (event, client) => {
|
|
78
|
-
const stream = videoTrackManager.getCurrentTrack()?.stream;
|
|
79
|
-
const onDeviceStop = configRef.current.camera.onDeviceStop ?? "mute";
|
|
80
|
-
if (event.mediaDeviceType === "userMedia" &&
|
|
81
|
-
event.trackType === "video" &&
|
|
82
|
-
isBroadcastedTrackStopped(client.status, stream)) {
|
|
83
|
-
if (onDeviceStop === "mute") {
|
|
84
|
-
await videoTrackManager.pauseStreaming();
|
|
85
|
-
}
|
|
86
|
-
else {
|
|
87
|
-
await videoTrackManager.stopStreaming();
|
|
88
|
-
}
|
|
89
|
-
}
|
|
90
|
-
};
|
|
91
|
-
state.client.on("deviceStopped", removeOnCameraStopped);
|
|
92
|
-
return () => {
|
|
93
|
-
state.client.removeListener("deviceStopped", removeOnCameraStopped);
|
|
94
|
-
};
|
|
95
|
-
}, [state.client, videoTrackManager]);
|
|
96
|
-
useEffect(() => {
|
|
97
|
-
const broadcastCameraOnConnect = async (_, client) => {
|
|
98
|
-
const camera = client.devices.camera;
|
|
99
|
-
const stream = camera.stream;
|
|
100
|
-
const config = configRef.current.camera;
|
|
101
|
-
if (stream && config.broadcastOnConnect) {
|
|
102
|
-
await videoTrackManager.startStreaming(config.defaultSimulcastConfig, config.defaultMaxBandwidth);
|
|
103
|
-
}
|
|
104
|
-
};
|
|
105
|
-
state.client.on("joined", broadcastCameraOnConnect);
|
|
106
|
-
return () => {
|
|
107
|
-
state.client.removeListener("joined", broadcastCameraOnConnect);
|
|
108
|
-
};
|
|
109
|
-
}, [state.client, videoTrackManager]);
|
|
110
|
-
useEffect(() => {
|
|
111
|
-
let pending = false;
|
|
112
|
-
const broadcastOnMicrophoneStart = async (client) => {
|
|
113
|
-
const stream = audioTrackManager.getCurrentTrack()?.stream;
|
|
114
|
-
const config = configRef.current.microphone;
|
|
115
|
-
const onDeviceChange = config.onDeviceChange ?? "replace";
|
|
116
|
-
if (isBroadcastedTrackChanged(client, pending)) {
|
|
117
|
-
if (!stream && config.broadcastOnDeviceStart) {
|
|
118
|
-
pending = true;
|
|
119
|
-
await audioTrackManager.startStreaming(undefined, config.defaultMaxBandwidth).finally(() => {
|
|
120
|
-
pending = false;
|
|
121
|
-
});
|
|
122
|
-
}
|
|
123
|
-
else if (stream && onDeviceChange === "replace") {
|
|
124
|
-
pending = true;
|
|
125
|
-
await audioTrackManager.refreshStreamedTrack().finally(() => {
|
|
126
|
-
pending = false;
|
|
127
|
-
});
|
|
128
|
-
}
|
|
129
|
-
else if (stream && onDeviceChange === "remove") {
|
|
130
|
-
pending = true;
|
|
131
|
-
await audioTrackManager.stopStreaming().finally(() => {
|
|
132
|
-
pending = false;
|
|
133
|
-
});
|
|
134
|
-
}
|
|
135
|
-
}
|
|
136
|
-
};
|
|
137
|
-
const managerInitialized = async (event, client) => {
|
|
138
|
-
if (event.audio?.media?.stream) {
|
|
139
|
-
await broadcastOnMicrophoneStart(client);
|
|
140
|
-
}
|
|
141
|
-
};
|
|
142
|
-
const devicesReady = async (event, client) => {
|
|
143
|
-
if (event.trackType === "audio" && event.restarted && event?.media?.stream) {
|
|
144
|
-
await broadcastOnMicrophoneStart(client);
|
|
145
|
-
}
|
|
146
|
-
};
|
|
147
|
-
const deviceReady = async (event, client) => {
|
|
148
|
-
if (event.trackType === "audio") {
|
|
149
|
-
await broadcastOnMicrophoneStart(client);
|
|
150
|
-
}
|
|
151
|
-
};
|
|
152
|
-
state.client.on("managerInitialized", managerInitialized);
|
|
153
|
-
state.client.on("deviceReady", deviceReady);
|
|
154
|
-
state.client.on("devicesReady", devicesReady);
|
|
155
|
-
return () => {
|
|
156
|
-
state.client.removeListener("managerInitialized", managerInitialized);
|
|
157
|
-
state.client.removeListener("deviceReady", deviceReady);
|
|
158
|
-
state.client.removeListener("devicesReady", devicesReady);
|
|
159
|
-
};
|
|
160
|
-
}, [state.client, audioTrackManager]);
|
|
161
|
-
useEffect(() => {
|
|
162
|
-
const onMicrophoneStopped = async (event, client) => {
|
|
163
|
-
const stream = audioTrackManager.getCurrentTrack()?.stream;
|
|
164
|
-
const onDeviceStop = configRef.current.microphone.onDeviceStop ?? "mute";
|
|
165
|
-
const isRightDeviceType = event.mediaDeviceType === "userMedia";
|
|
166
|
-
const isRightTrackType = event.trackType === "audio";
|
|
167
|
-
if (isRightDeviceType && isRightTrackType && isBroadcastedTrackStopped(client.status, stream)) {
|
|
168
|
-
if (onDeviceStop === "mute") {
|
|
169
|
-
await audioTrackManager.pauseStreaming();
|
|
170
|
-
}
|
|
171
|
-
else {
|
|
172
|
-
await audioTrackManager.stopStreaming();
|
|
173
|
-
}
|
|
174
|
-
}
|
|
175
|
-
};
|
|
176
|
-
state.client.on("deviceStopped", onMicrophoneStopped);
|
|
177
|
-
return () => {
|
|
178
|
-
state.client.removeListener("deviceStopped", onMicrophoneStopped);
|
|
179
|
-
};
|
|
180
|
-
}, [state.client, audioTrackManager]);
|
|
181
|
-
useEffect(() => {
|
|
182
|
-
const broadcastMicrophoneOnConnect = async (_, client) => {
|
|
183
|
-
const config = configRef.current.microphone;
|
|
184
|
-
const microphone = client.devices.microphone;
|
|
185
|
-
if (microphone.stream && config.broadcastOnConnect) {
|
|
186
|
-
await audioTrackManager.startStreaming(undefined, config.defaultMaxBandwidth);
|
|
187
|
-
}
|
|
188
|
-
};
|
|
189
|
-
state.client.on("joined", broadcastMicrophoneOnConnect);
|
|
190
|
-
return () => {
|
|
191
|
-
state.client.removeListener("joined", broadcastMicrophoneOnConnect);
|
|
192
|
-
};
|
|
193
|
-
}, [state.client, audioTrackManager]);
|
|
194
|
-
return useMemo(() => ({
|
|
195
|
-
init: () => state.client.initializeDevices({
|
|
196
|
-
audioTrackConstraints: configRef.current?.microphone?.trackConstraints,
|
|
197
|
-
videoTrackConstraints: configRef.current?.camera?.trackConstraints,
|
|
198
|
-
}),
|
|
199
|
-
}), [state.client]);
|
|
200
|
-
};
|
package/dist/hooks/state.d.ts
DELETED
|
@@ -1,6 +0,0 @@
|
|
|
1
|
-
import type { Selector } from "../state.types";
|
|
2
|
-
export declare function useSelector<Result>(selector: Selector<Result>): Result;
|
|
3
|
-
export declare function useStatus(): import("../state.types").PeerStatus;
|
|
4
|
-
export declare function useTracks(): Record<string, import("../state.types").TrackWithOrigin>;
|
|
5
|
-
export declare function useClient(): import("..").Client;
|
|
6
|
-
//# sourceMappingURL=state.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"state.d.ts","sourceRoot":"","sources":["../../src/hooks/state.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAE/C,wBAAgB,WAAW,CAAC,MAAM,EAAE,QAAQ,EAAE,QAAQ,CAAC,MAAM,CAAC,GAAG,MAAM,CAItE;AAED,wBAAgB,SAAS,wCAExB;AAED,wBAAgB,SAAS,6DAExB;AAED,wBAAgB,SAAS,wBAExB"}
|
package/dist/hooks/state.js
DELETED
|
@@ -1,15 +0,0 @@
|
|
|
1
|
-
import { useMemo } from "react";
|
|
2
|
-
import { useFishjamContext } from "./fishjamContext";
|
|
3
|
-
export function useSelector(selector) {
|
|
4
|
-
const { state } = useFishjamContext();
|
|
5
|
-
return useMemo(() => selector(state), [selector, state]);
|
|
6
|
-
}
|
|
7
|
-
export function useStatus() {
|
|
8
|
-
return useSelector((s) => s.status);
|
|
9
|
-
}
|
|
10
|
-
export function useTracks() {
|
|
11
|
-
return useSelector((s) => s.tracks);
|
|
12
|
-
}
|
|
13
|
-
export function useClient() {
|
|
14
|
-
return useSelector((s) => s.client);
|
|
15
|
-
}
|
package/dist/trackManager.d.ts
DELETED
|
@@ -1,9 +0,0 @@
|
|
|
1
|
-
import type { FishjamClient } from "@fishjam-cloud/ts-client";
|
|
2
|
-
import type { MediaManager, PeerMetadata, TrackManager, TrackMetadata } from "./types";
|
|
3
|
-
interface TrackManagerConfig {
|
|
4
|
-
mediaManager: MediaManager;
|
|
5
|
-
tsClient: FishjamClient<PeerMetadata, TrackMetadata>;
|
|
6
|
-
}
|
|
7
|
-
export declare const useTrackManager: ({ mediaManager, tsClient }: TrackManagerConfig) => TrackManager;
|
|
8
|
-
export {};
|
|
9
|
-
//# sourceMappingURL=trackManager.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"trackManager.d.ts","sourceRoot":"","sources":["../src/trackManager.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAwC,MAAM,0BAA0B,CAAC;AACpG,OAAO,KAAK,EAAE,YAAY,EAAE,YAAY,EAAE,YAAY,EAAE,aAAa,EAAmB,MAAM,SAAS,CAAC;AAKxG,UAAU,kBAAkB;IAC1B,YAAY,EAAE,YAAY,CAAC;IAC3B,QAAQ,EAAE,aAAa,CAAC,YAAY,EAAE,aAAa,CAAC,CAAC;CACtD;AAOD,eAAO,MAAM,eAAe,+BAAgC,kBAAkB,KAAG,YA6IhF,CAAC"}
|
package/dist/trackManager.js
DELETED
|
@@ -1,116 +0,0 @@
|
|
|
1
|
-
import { getRemoteOrLocalTrack } from "./utils/track";
|
|
2
|
-
import { useEffect, useState } from "react";
|
|
3
|
-
const TRACK_TYPE_TO_DEVICE = {
|
|
4
|
-
video: "camera",
|
|
5
|
-
audio: "microphone",
|
|
6
|
-
};
|
|
7
|
-
export const useTrackManager = ({ mediaManager, tsClient }) => {
|
|
8
|
-
const [currentTrackId, setCurrentTrackId] = useState(null);
|
|
9
|
-
const [paused, setPaused] = useState(false);
|
|
10
|
-
const [currentTrackMiddleware, setCurrentTrackMiddleware] = useState(null);
|
|
11
|
-
const type = TRACK_TYPE_TO_DEVICE[mediaManager.getDeviceType()];
|
|
12
|
-
const metadata = { type, paused };
|
|
13
|
-
useEffect(() => {
|
|
14
|
-
const disconnectedHandler = () => {
|
|
15
|
-
setCurrentTrackId(null);
|
|
16
|
-
};
|
|
17
|
-
tsClient.on("disconnected", disconnectedHandler);
|
|
18
|
-
return () => {
|
|
19
|
-
tsClient.off("disconnected", disconnectedHandler);
|
|
20
|
-
};
|
|
21
|
-
}, [tsClient]);
|
|
22
|
-
function getPreviousTrack() {
|
|
23
|
-
if (!currentTrackId)
|
|
24
|
-
throw Error("There is no current track id");
|
|
25
|
-
const prevTrack = getRemoteOrLocalTrack(tsClient, currentTrackId);
|
|
26
|
-
if (!prevTrack)
|
|
27
|
-
throw Error("There is no previous track");
|
|
28
|
-
return prevTrack;
|
|
29
|
-
}
|
|
30
|
-
async function setTrackMiddleware(middleware) {
|
|
31
|
-
const currentTrack = getCurrentTrack();
|
|
32
|
-
const mediaTrack = mediaManager.getTracks()[0];
|
|
33
|
-
if (!currentTrack || !mediaTrack)
|
|
34
|
-
return;
|
|
35
|
-
const trackToSet = middleware ? middleware(mediaTrack) : mediaTrack;
|
|
36
|
-
await tsClient.replaceTrack(currentTrack.trackId, trackToSet);
|
|
37
|
-
setCurrentTrackMiddleware(() => middleware);
|
|
38
|
-
}
|
|
39
|
-
function getCurrentTrack() {
|
|
40
|
-
return getRemoteOrLocalTrack(tsClient, currentTrackId);
|
|
41
|
-
}
|
|
42
|
-
function initialize(deviceId) {
|
|
43
|
-
return mediaManager?.start(deviceId ?? true);
|
|
44
|
-
}
|
|
45
|
-
function stop() {
|
|
46
|
-
return mediaManager?.stop();
|
|
47
|
-
}
|
|
48
|
-
async function startStreaming(simulcastConfig, maxBandwidth) {
|
|
49
|
-
if (currentTrackId)
|
|
50
|
-
throw Error("Track already added");
|
|
51
|
-
const media = mediaManager.getMedia();
|
|
52
|
-
if (!media || !media.stream || !media.track)
|
|
53
|
-
throw Error("Device is unavailable");
|
|
54
|
-
const track = getRemoteOrLocalTrack(tsClient, currentTrackId);
|
|
55
|
-
if (track)
|
|
56
|
-
return track.trackId;
|
|
57
|
-
// see `getRemoteOrLocalTrackContext()` explanation
|
|
58
|
-
setCurrentTrackId(media.track.id);
|
|
59
|
-
const trackMetadata = { ...metadata, paused: false };
|
|
60
|
-
const remoteTrackId = await tsClient.addTrack(media.track, trackMetadata, simulcastConfig, maxBandwidth);
|
|
61
|
-
setCurrentTrackId(remoteTrackId);
|
|
62
|
-
setPaused(false);
|
|
63
|
-
return remoteTrackId;
|
|
64
|
-
}
|
|
65
|
-
function refreshStreamedTrack() {
|
|
66
|
-
const prevTrack = getPreviousTrack();
|
|
67
|
-
const newTrack = mediaManager.getTracks()[0];
|
|
68
|
-
if (!newTrack)
|
|
69
|
-
throw Error("New track is empty");
|
|
70
|
-
return tsClient.replaceTrack(prevTrack.trackId, newTrack);
|
|
71
|
-
}
|
|
72
|
-
function stopStreaming() {
|
|
73
|
-
const prevTrack = getPreviousTrack();
|
|
74
|
-
setCurrentTrackId(null);
|
|
75
|
-
setPaused(true);
|
|
76
|
-
return tsClient.removeTrack(prevTrack.trackId);
|
|
77
|
-
}
|
|
78
|
-
async function pauseStreaming() {
|
|
79
|
-
const prevTrack = getPreviousTrack();
|
|
80
|
-
setPaused(true);
|
|
81
|
-
await tsClient.replaceTrack(prevTrack.trackId, null);
|
|
82
|
-
const trackMetadata = { ...metadata, paused: true };
|
|
83
|
-
return tsClient.updateTrackMetadata(prevTrack.trackId, trackMetadata);
|
|
84
|
-
}
|
|
85
|
-
async function resumeStreaming() {
|
|
86
|
-
const prevTrack = getPreviousTrack();
|
|
87
|
-
const media = mediaManager.getMedia();
|
|
88
|
-
if (!media)
|
|
89
|
-
throw Error("Device is unavailable");
|
|
90
|
-
setPaused(false);
|
|
91
|
-
await tsClient.replaceTrack(prevTrack.trackId, media.track);
|
|
92
|
-
const trackMetadata = { ...metadata, paused: false };
|
|
93
|
-
return tsClient.updateTrackMetadata(prevTrack.trackId, trackMetadata);
|
|
94
|
-
}
|
|
95
|
-
function disableTrack() {
|
|
96
|
-
mediaManager.disable();
|
|
97
|
-
}
|
|
98
|
-
function enableTrack() {
|
|
99
|
-
mediaManager.enable();
|
|
100
|
-
}
|
|
101
|
-
return {
|
|
102
|
-
getCurrentTrack,
|
|
103
|
-
setTrackMiddleware,
|
|
104
|
-
initialize,
|
|
105
|
-
stop,
|
|
106
|
-
startStreaming,
|
|
107
|
-
stopStreaming,
|
|
108
|
-
pauseStreaming,
|
|
109
|
-
resumeStreaming,
|
|
110
|
-
disableTrack,
|
|
111
|
-
enableTrack,
|
|
112
|
-
currentTrackMiddleware,
|
|
113
|
-
refreshStreamedTrack,
|
|
114
|
-
paused,
|
|
115
|
-
};
|
|
116
|
-
};
|
|
File without changes
|