Skip to content
This repository was archived by the owner on Jul 17, 2024. It is now read-only.

Commit b8c037f

Browse files
committed
Fix simulcast
1 parent d64ffdd commit b8c037f

File tree

8 files changed

+24
-86
lines changed

8 files changed

+24
-86
lines changed

assets/src/features/devices/LocalPeerMediaContext.tsx

+16-28
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ import { BlurProcessor } from "./BlurProcessor";
1010
import { selectBandwidthLimit } from "../../pages/room/bandwidth.tsx";
1111
import { useDeveloperInfo } from "../../contexts/DeveloperInfoContext.tsx";
1212
import EmptyVideoWorker from "./emptyVideoWorker.ts?worker";
13+
import { SimulcastConfig } from "@jellyfish-dev/ts-client-sdk";
1314

1415
export type LocalPeerContext = {
1516
video: UseCameraResult<TrackMetadata>;
@@ -73,6 +74,10 @@ export const LocalPeerMediaProvider = ({ children }: Props) => {
7374
const { simulcast } = useDeveloperInfo();
7475
const simulcastEnabled = simulcast.status;
7576

77+
useEffect(() => {
78+
console.log({ simulcastEnabled });
79+
}, []);
80+
7681
const blurRef = useRef<boolean>(false);
7782

7883
const [stream, setStream] = useState<MediaStream | null>(null);
@@ -129,20 +134,25 @@ export const LocalPeerMediaProvider = ({ children }: Props) => {
129134

130135
broadcastedStreamRef.current = mediaStream;
131136

137+
const simulcastConfig: SimulcastConfig | undefined =
138+
simulcastEnabled
139+
? { enabled: true, activeEncodings: ["l", "m", "h"], disabledEncodings: [] }
140+
: undefined;
141+
132142
remoteTrackIdRef.current = await client.addTrack(
133143
trackRef.current,
134144
mediaStream,
135-
// todo think about track.enabled
136145
{ active: metadataActive, type: "camera" },
137-
simulcastEnabled ? { enabled: true, activeEncodings: ["l", "m", "h"], disabledEncodings: [] } : undefined,
146+
simulcastConfig,
138147
selectBandwidthLimit("camera", simulcastEnabled)
139148
);
140149
} else if (remoteTrackIdRef.current && trackRef.current) {
141-
// todo add setter as an alternative to setting whole object
142150
broadcastedStreamRef.current?.removeTrack(broadcastedStreamRef.current?.getVideoTracks()[0]);
143151
broadcastedStreamRef.current?.addTrack(trackRef.current);
144152

145-
// todo when you replaceTrack this not affects stream so local peer don't know that something changes
153+
// todo
154+
// When you replaceTrack, this does not affect the stream, so the local peer doesn't know that something has changed.
155+
// add localTrackReplaced event
146156
const newMetadata: TrackMetadata = { active: metadataActive, type: "camera" };
147157

148158
await client.replaceTrack(remoteTrackIdRef.current, trackRef.current, newMetadata);
@@ -151,7 +161,7 @@ export const LocalPeerMediaProvider = ({ children }: Props) => {
151161
remoteTrackIdRef.current = null;
152162
}
153163
}
154-
}, [setStream, setTrack]);
164+
}, [setStream, setTrack, simulcastEnabled]);
155165

156166
useEffect(() => {
157167
const managerInitialized: ClientEvents<PeerMetadata, TrackMetadata>["managerInitialized"] = (event) => {
@@ -163,35 +173,13 @@ export const LocalPeerMediaProvider = ({ children }: Props) => {
163173
trackRef.current = event.video?.media?.track || null;
164174
streamRef.current = event.video?.media?.stream || null;
165175

166-
const snapshot = client;
167-
168-
const cameraId = snapshot?.media?.video?.media?.deviceInfo?.deviceId || null;
176+
const cameraId = client?.media?.video?.media?.deviceInfo?.deviceId || null;
169177

170178
if (cameraId) {
171179
lastCameraIdRef.current = cameraId;
172180
}
173181
};
174182

175-
176-
/*
177-
* Przypadki:
178-
* 1) uruchamiam kamerę i następnie wchodze do pokoju
179-
* - intencja: true, ma być włączona
180-
* - leci event
181-
* - disconnect (czyli wyłączam)
182-
* - i następnie joined (czyli uruchamiam bo intencja true)
183-
* - sprawdzam intencje i wiem, że muszę uruchomić ponownie
184-
* 2) Wychodzę z pokoju i wracam
185-
* - leci event disconnect -> czyli wyłączam
186-
* - intencja jest true
187-
* - wracam do pokoju czyli leci
188-
* - connect (uruchamiam bo intencja jest true)
189-
* - disconnect (wyłączam)
190-
* - connect uruchamiam (bo inencja jest true)
191-
*
192-
* Czy z tego powodu wynika, że za każdym razem jak uruchamiam urządzenie, to sprawdzam czy jestem joined
193-
* i jak tak to dodaję
194-
*/
195183
const joinedHandler: ClientEvents<PeerMetadata, TrackMetadata>["joined"] = async () => {
196184
const stream = client.devices.camera.stream;
197185
const track = client.devices.camera.track;

assets/src/features/room-page/components/Navbar.tsx

+1-4
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,6 @@ import Settings from "../icons/Settings";
1010
import MediaControlButton from "../../../pages/room/components/MediaControlButton";
1111
import { useModal } from "../../../contexts/ModalContext";
1212
import useSmartphoneViewport from "../../shared/hooks/useSmartphoneViewport";
13-
import { useStatus } from "../../../jellyfish.types";
1413

1514
const Navbar: FC = () => {
1615
const match = useParams();
@@ -26,8 +25,6 @@ const Navbar: FC = () => {
2625

2726
const isSmartphone = useSmartphoneViewport().isSmartphone;
2827

29-
const status = useStatus();
30-
3128
return (
3229
<div className="flex w-full max-w-full flex-row justify-between gap-y-4">
3330
{!isSmartphone ? (
@@ -40,7 +37,7 @@ const Navbar: FC = () => {
4037
<div className={clsx("flex flex-row items-center gap-x-3 font-aktivGrotesk")}>
4138
{!isSmartphone && (
4239
<>
43-
<span>({status})Invite link</span>
40+
<span>Invite link</span>
4441
<Button
4542
onClick={onLinkCopy}
4643
variant="light"

assets/src/features/streaming/StreamingContext.tsx

-41
This file was deleted.

assets/src/jellyfish.types.ts

+2-2
Original file line numberDiff line numberDiff line change
@@ -36,9 +36,9 @@ export const {
3636
peerMetadataParser: (obj) => peerMetadataSchema.parse(obj),
3737
trackMetadataParser: (obj) => trackMetadataSchema.parse(obj),
3838
reconnect: {
39-
initialDelay: 5,
39+
initialDelay: 10, // ms
40+
delay: 200, // ms
4041
maxAttempts: 1,
41-
delay: 5
4242
}
4343
}, { storage: true });
4444

assets/src/main.tsx

+3-3
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,10 @@
1-
// import React from "react";
1+
import React from "react";
22
import ReactDOM from "react-dom/client";
33
import App from "./App.tsx";
44
import "./index.css";
55

66
ReactDOM.createRoot(document.getElementById("root") as HTMLElement).render(
7-
// <React.StrictMode>
7+
<React.StrictMode>
88
<App />
9-
// </React.StrictMode>
9+
</React.StrictMode>
1010
);

assets/src/pages/room/RoomPage.tsx

-7
Original file line numberDiff line numberDiff line change
@@ -129,10 +129,6 @@ const ConnectComponent: FC<ConnectComponentProps> = (
129129

130130
client?.on("joined", callback);
131131

132-
window["ws-close"] = () => {
133-
client["client"]["websocket"].close();
134-
};
135-
136132
return () => {
137133
client?.removeListener("joined", callback);
138134
intervalId && clearInterval(intervalId);
@@ -144,9 +140,6 @@ const ConnectComponent: FC<ConnectComponentProps> = (
144140
useEffect(() => {
145141
getTokenAndAddress(roomId)
146142
.then((tokenAndAddress) => {
147-
148-
// todo make connect in membrane js idempotent
149-
// because i get two connect event from this hook
150143
return connect({
151144
peerMetadata: { name: username },
152145
token: tokenAndAddress.token,

assets/src/pages/room/components/MediaControlButtons.tsx

+1
Original file line numberDiff line numberDiff line change
@@ -127,6 +127,7 @@ const getAutomaticControls = (
127127
];
128128

129129
//dev helpers
130+
// todo fix manual mode
130131
const getManualControls = (
131132
navigate: NavigateFunction,
132133
microphone: UseMicrophoneResult<TrackMetadata>,

assets/src/pages/room/hooks/useSimulcastRemoteEncoding.tsx

+1-1
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ export const useSimulcastRemoteEncoding = (
2323
setTargetEncodingState(encoding);
2424

2525
if (!trackId || !peerId || !client) return;
26-
// client.setTargetTrackEncoding(trackId, encoding);
26+
client.setTargetTrackEncoding(trackId, encoding);
2727
},
2828
[peerId, trackId, client]
2929
);

0 commit comments

Comments
 (0)