From 1284125ffff4f3a1030b0a62ab1febf18bb68c89 Mon Sep 17 00:00:00 2001 From: legop3 Date: Fri, 9 Oct 2026 14:19:06 -0400 Subject: [PATCH] turning into redoing all of the webrtc reading and publishing client side lol --- webui/package.json | 2 +- webui/src/components/PtzLiveVideo/index.jsx | 6 +- .../src/components/RoomAudioPlayer/index.jsx | 6 +- .../src/components/RoverMediaPlayer/index.jsx | 8 +- .../VipAudioUploadCardContent.jsx | 143 ++++++++---------- .../vip/VipAudioUploadCard/base64.js | 11 -- .../vip/VipAudioUploadCard/constants.js | 5 - .../vip/VipAudioUploadCard/whipTransport.js | 85 ----------- webui/src/hooks/useServerUrl.js | 8 + webui/src/mic/MicApp.jsx | 6 +- 10 files changed, 92 insertions(+), 188 deletions(-) create mode 100644 webui/src/hooks/useServerUrl.js diff --git a/webui/package.json b/webui/package.json index 4b209d0e..a8884dfe 100644 --- a/webui/package.json +++ b/webui/package.json @@ -4,7 +4,7 @@ "version": "0.0.0", "type": "module", "scripts": { - "dev": "VITE_ROVERD_URL=https://rover.otter.land vite", + "dev": "VITE_ROVERD_URL=https://rovertest.otter.land vite", "build": "vite build", "lint": "eslint .", "test": "node --test src/controls/inputs/*.test.js src/components/GamepadMappingSettings/*.test.js", diff --git a/webui/src/components/PtzLiveVideo/index.jsx b/webui/src/components/PtzLiveVideo/index.jsx index a14542fa..5391423e 100644 --- a/webui/src/components/PtzLiveVideo/index.jsx +++ b/webui/src/components/PtzLiveVideo/index.jsx @@ -5,6 +5,7 @@ import { useEffect, useRef, useState } from 'react'; import { useVideoRequests } from '../../hooks/useVideoRequests.js'; import { startWhepPlayback } from '../../lib/whepPlayback.js'; import useWhepRestart from '../../hooks/useWhepRestart.js'; +import useServerUrl from '../../hooks/useServerUrl.js'; export const PTZ_CAMERA_ID = 'ptz-camera'; @@ -23,6 +24,7 @@ export default function PtzLiveVideo({ statusClassName = 'pointer-events-none absolute left-1 top-1 z-20 font-medium text-slate-100 text-[0.65rem]', fallback = null, }) { + const serverUrl = useServerUrl(); const videoRef = useRef(null); const playTimerRef = useRef(null); const [status, setStatus] = useState('idle'); @@ -44,7 +46,7 @@ export default function PtzLiveVideo({ if (!enabled || shouldUseFallback || !source?.url || !videoRef.current) return undefined; const video = videoRef.current; const stop = startWhepPlayback({ - url: source.url, + url: serverUrl(source.url), token: source.token, video: videoRef.current, startMuted, @@ -76,7 +78,7 @@ export default function PtzLiveVideo({ video.removeEventListener('error', handleError); stop(); }; - }, [enabled, scheduleRestart, shouldUseFallback, source?.token, source?.url, startMuted]); + }, [enabled, scheduleRestart, shouldUseFallback, source?.token, source?.url, startMuted, serverUrl]); useEffect(() => { const video = videoRef.current; diff --git a/webui/src/components/RoomAudioPlayer/index.jsx b/webui/src/components/RoomAudioPlayer/index.jsx index c65a11e7..64f7c8b9 100644 --- a/webui/src/components/RoomAudioPlayer/index.jsx +++ b/webui/src/components/RoomAudioPlayer/index.jsx @@ -5,9 +5,11 @@ import { useSettingsNamespace } from '../../settings/index.js'; import { AUDIO_SETTINGS_DEFAULTS } from '../../settings/namespaces.js'; import { RESTART_DELAY_MS, startWhepPlayback } from '../../lib/whepPlayback.js'; import useWhepRestart from '../../hooks/useWhepRestart.js'; +import useServerUrl from '../../hooks/useServerUrl.js'; function StreamPlayer({ id, volume }) { const socket = useSocket(); + const serverUrl = useServerUrl(); const audio = useRef(null); const { restartToken, scheduleRestart } = useWhepRestart(); useEffect(() => { @@ -22,7 +24,7 @@ function StreamPlayer({ id, volume }) { token = response.token; if (error || response.error || !response.url) { scheduleRestart(); return; } stop = startWhepPlayback({ - ...response, video: audio.current, audioOnly: true, + ...response, url: serverUrl(response.url), video: audio.current, audioOnly: true, onStatus: () => {}, onError: () => {}, scheduleRestart, }); }); @@ -30,7 +32,7 @@ function StreamPlayer({ id, volume }) { active = false; stop?.(); if (token && socket.connected) socket.emit('roomAudio:release', { token }); }; - }, [id, socket, restartToken, scheduleRestart]); + }, [id, socket, restartToken, scheduleRestart, serverUrl]); useEffect(() => { if (audio.current) audio.current.volume = Math.max(0, Math.min(1, volume)); }, [volume]); return