2026-10-02 17:02:43 -05:00
<!doctype html>
< html lang = "en" > < meta charset = "utf-8" > < meta name = "viewport" content = "width=device-width" >
2026-10-02 21:47:13 -05:00
< 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 >
2026-10-02 17:02:43 -05:00
< link rel = "stylesheet" href = "style.css" >
2026-10-02 21:47:13 -05:00
< 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 >
2026-10-02 17:02:43 -05:00
< 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 >
2026-10-03 16:21:28 -05:00
< label title = "Recognize externally supplied coded colors and tones. Reports a diagnostic processing-time estimate, not calibrated lip sync or latency." > < input id = "paired-signal" type = "checkbox" > Paired test signal< / label >
2026-10-02 17:02:43 -05:00
< p id = "status" role = "status" > Stopped< / p >
2026-10-02 21:47:13 -05:00
< p id = "report-status" role = "status" > Reporting starts with the test.< / p >
2026-10-02 17:02:43 -05:00
< video id = "preview" autoplay muted playsinline > < / video >
< pre id = "metrics" > No observations.< / pre >
2026-10-02 21:47:13 -05:00
< p > Audio/video sync and end-to-end delay: < strong > not measured by this check< / strong > .
2026-10-02 17:02:43 -05:00
Video callback gaps can include browser scheduling. Silence is not proof of audio loss.
2026-10-02 21:47:13 -05:00
A separate paired-signal measurement is needed to verify synchronization.< / p >
2026-10-02 17:02:43 -05:00
< / main > < script type = "module" src = "observer.js" > < / script > < / html >