web: use video element and force live audio on

This commit is contained in:
every.channel 2026-02-24 23:05:35 -08:00
parent 66ce78e82d
commit 696e1aafb9
No known key found for this signature in database
2 changed files with 20 additions and 5 deletions

View file

@ -169,12 +169,27 @@ function mountPlayer(relayUrl, name) {
watch.connection.websocket = { enabled: false }; watch.connection.websocket = { enabled: false };
} }
// A canvas enables video rendering. Without it, only audio is played. // Use a media element for live playback so browser audio controls/policies apply naturally.
const canvas = document.createElement("canvas"); const video = document.createElement("video");
canvas.className = "canvas"; video.className = "archiveVideo";
watch.appendChild(canvas); video.controls = true;
video.autoplay = true;
video.muted = false;
video.playsInline = true;
watch.appendChild(video);
mount.appendChild(watch); mount.appendChild(watch);
const forceAudioOn = () => {
try {
watch.backend?.audio?.muted?.set?.(false);
watch.backend?.audio?.volume?.set?.(1);
} catch (_) {
// Best effort only.
}
};
forceAudioOn();
window.setTimeout(forceAudioOn, 1000);
window.setTimeout(forceAudioOn, 4000);
bindPlayerSignals(watch, name); bindPlayerSignals(watch, name);
} }

View file

@ -10,7 +10,7 @@ In `apps/web/app.js`, configure each `<moq-watch>` instance to disable WebSocket
- `watch.connection.websocket = { enabled: false }` - `watch.connection.websocket = { enabled: false }`
Also set default watcher volume to full (`volume="1"`) to avoid low-volume false negatives during validation. Also set default watcher volume to full (`volume="1"`) and mount live playback on a `<video>` element (with controls) inside `<moq-watch>` so browser audio policies and controls apply predictably. On mount, force audio signals to `muted=false` and `volume=1`.
## Rationale ## Rationale