This commit is contained in:
KingKDot
2026-07-17 13:23:12 -05:00
parent 0219081682
commit 9a274811e8
16 changed files with 594 additions and 29 deletions
@@ -145,6 +145,7 @@ describe("remote desktop viewer control", () => {
maxHeight: 1080,
maxFps: 120,
bitrateMbps: 0,
bitrateAdaptive: false,
lastFps: 1,
lastFrameAt: 0,
startedAt: Date.now() - 5000,
@@ -175,6 +176,23 @@ describe("remote desktop viewer control", () => {
expect(rdStreamingState.get(clientId)?.bitrateMbps).toBe(50);
});
test("forwards adaptive bitrate mode to the agent", () => {
const clientId = `rd-adaptive-bitrate-${Date.now().toString(36)}`;
const { agentWs } = createClient(clientId);
const viewer = createMockWs({ clientId });
handleRemoteDesktopViewerOpen(viewer as any);
handleRemoteDesktopViewerMessage(viewer as any, JSON.stringify({
type: "desktop_set_bitrate",
bitrateMbps: 18,
adaptive: true,
}));
const command = agentCommands(agentWs).find((msg) => msg.commandType === "desktop_set_bitrate");
expect(command?.payload).toMatchObject({ bitrateMbps: 18, adaptive: true });
expect(rdStreamingState.get(clientId)?.bitrateAdaptive).toBe(true);
});
test("forwards agent pipeline telemetry to every remote desktop viewer", () => {
const clientId = `rd-stats-${Date.now().toString(36)}`;
createClient(clientId);
@@ -186,6 +186,7 @@ export const rdStreamingState = new Map<string, {
maxHeight: number;
maxFps: number;
bitrateMbps: number;
bitrateAdaptive: boolean;
lastFps: number;
lastFrameAt: number;
startedAt: number;
@@ -212,6 +213,7 @@ function defaultRdStreamingState() {
maxHeight: 0,
maxFps: 120,
bitrateMbps: 0,
bitrateAdaptive: false,
lastFps: 0,
lastFrameAt: 0,
startedAt: 0,
@@ -420,7 +422,7 @@ export function handleRemoteDesktopViewerMessage(ws: ServerWebSocket<SocketData>
}
safeSendViewer(ws, { type: "status", status: "starting" });
sendDesktopCommand(target, "desktop_set_fps", { fps: clampDesktopFps(state.maxFps) });
sendDesktopCommand(target, "desktop_set_bitrate", { bitrateMbps: state.bitrateMbps || 0 });
sendDesktopCommand(target, "desktop_set_bitrate", { bitrateMbps: state.bitrateMbps || 0, adaptive: state.bitrateAdaptive });
sendDesktopCommand(target, "desktop_start", {});
state.isStreaming = true;
state.startedAt = Date.now();
@@ -432,7 +434,7 @@ export function handleRemoteDesktopViewerMessage(ws: ServerWebSocket<SocketData>
if (lastFrameAgeMs > 3000 && startAgeMs > 3000) {
logger.info(`[rd-debug] desktop_start reasserting stale stream client=${clientId} lastFrameAgeMs=${Number.isFinite(lastFrameAgeMs) ? lastFrameAgeMs : -1} state=${JSON.stringify(state)} viewers=${sessionManager.getRdSessionsForClient(clientId).length}`);
sendDesktopCommand(target, "desktop_set_fps", { fps: clampDesktopFps(state.maxFps) });
sendDesktopCommand(target, "desktop_set_bitrate", { bitrateMbps: state.bitrateMbps || 0 });
sendDesktopCommand(target, "desktop_set_bitrate", { bitrateMbps: state.bitrateMbps || 0, adaptive: state.bitrateAdaptive });
sendDesktopCommand(target, "desktop_start", {});
safeSendViewer(ws, { type: "status", status: "starting" });
state.isStreaming = true;
@@ -603,11 +605,13 @@ export function handleRemoteDesktopViewerMessage(ws: ServerWebSocket<SocketData>
}
case "desktop_set_bitrate": {
const newBitrateMbps = Math.max(0, Math.min(50, Math.floor(Number((payload as any).bitrateMbps) || 0)));
if (state.bitrateMbps !== newBitrateMbps) {
sendDesktopCommand(target, "desktop_set_bitrate", { bitrateMbps: newBitrateMbps });
const adaptive = (payload as any).adaptive === true;
if (state.bitrateMbps !== newBitrateMbps || state.bitrateAdaptive !== adaptive) {
sendDesktopCommand(target, "desktop_set_bitrate", { bitrateMbps: newBitrateMbps, adaptive });
state.bitrateMbps = newBitrateMbps;
state.bitrateAdaptive = adaptive;
rdStreamingState.set(clientId, state);
logger.debug(`[rd] set target bitrate=${newBitrateMbps || "auto"} Mbps`);
logger.debug(`[rd] set target bitrate=${newBitrateMbps || "auto"} Mbps adaptive=${adaptive}`);
}
break;
}