20 lines
1.3 KiB
HTML
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>
|