20 lines
1.3 KiB
HTML

<!doctype html>
<html lang="en"><meta charset="utf-8"><meta name="viewport" content="width=device-width">
<meta http-equiv="Content-Security-Policy" content="default-src 'self'; connect-src 'self'; media-src 'self' blob:; style-src 'self'; object-src 'none'; base-uri 'none'">
<title>A/V Test</title>
<link rel="stylesheet" href="style.css">
<main><h1>A/V Test</h1>
<p>Select a camera and microphone. No recording or media uploads. Numeric timing/activity metrics and test status are reported automatically.</p>
<div><button id="devices">Choose devices…</button>
<label>Video <select id="video-device"></select></label>
<label>Microphone <select id="audio-device"></select></label></div>
<div><button id="start" disabled>Start 2-minute check</button><button id="stop" disabled>Stop</button><button id="export" disabled>Save metrics</button></div>
<p id="status" role="status">Stopped</p>
<p id="report-status" role="status">Reporting starts with the test.</p>
<video id="preview" autoplay muted playsinline></video>
<pre id="metrics">No observations.</pre>
<p>Audio/video sync and end-to-end delay: <strong>not measured by this check</strong>.
Video callback gaps can include browser scheduling. Silence is not proof of audio loss.
A separate paired-signal measurement is needed to verify synchronization.</p>
</main><script type="module" src="observer.js"></script></html>