video-caption
Prerecorded video should provide complete captions
Asks about each <video>: with no <track kind="captions"> child, whether it has an audio track that needs captions (a subtitles track alone may be a translation only); with one, whether its captions are complete and match the audio.
Applies to. Any <video> element in the composed DOM, inert ones included: an inert video is still shown and can still play.
Expectation. SC 1.2.2 requires captions for prerecorded synchronized media, but only when the video actually has an audio track that conveys information (a silent/decorative video needs none), which cannot be verified from static markup alone (jsdom does not decode media). This rule is therefore type: 'manual' (cantTell-capped, never fail), matching the precedent set by media-alternative-transcript-evidence for the same class of "normatively mapped but not statically verifiable" gap. Every <video> is asked about: one with a <track kind="captions"> whose src is non-empty, whether its captions are complete and match the audio, which a declared track says nothing of (F8); any other, whether it needs captions. A video whose only text tracks are subtitles (kind="subtitles", or no kind, which HTML treats as subtitles) gets its own question: subtitles may be a translation of the dialogue only, without the speaker and sound information captions carry.
Examples
<video src="x.mp4"></video>
No <track> element at all, so no evidence of captions. A video whose only track is kind="subtitles" is asked about too, since subtitles may translate the dialogue without the sound information captions carry.
<video src="x.mp4"><track kind="captions" src="cap.vtt"></video>
A kind="captions" track with a real src is present, which says captions exist, not that they carry all the dialogue and the sounds that matter (F8): a person checks them.
How to check
When this rule can’t decide, it reports cantTell and leaves the question to a person. Each question it can ask is listed here under its reason code, with the steps to answer it. A finding carries the same steps as howToCheck, in the scan’s language. See Output schema.
CAPTIONS_REVIEW
- Play the video the report names and turn on its captions.
- Watch with the sound on and compare the captions with what is said and heard.
- Check they carry all dialogue, say who is speaking when it is not clear, and describe sounds that matter (music, alarms, laughter), and that they stay in time.
Pass. The captions carry all dialogue and the important sounds, in time with the video.
Fail. Captions are missing parts of the dialogue or important sounds, or are out of sync, which fails WCAG 1.2.2 (F8).
CAPTIONS_TRACK_NOT_DETECTED
- Play the video the report names with the sound on and note whether it has speech or sounds that carry information.
- If it is silent or only background music with no meaning, it needs no captions.
- Otherwise look for captions: the player's CC button, captions burned into the picture, or a link next to the video to a captioned version of the same video. A transcript on its own does not replace captions.
Pass. The video has no meaningful audio, captions (in this video or in a captioned version linked next to it) cover the dialogue and sounds, or it is a labelled media alternative for text on the page.
Fail. The video has dialogue or important sounds and no captions, here or in a linked captioned version, even if a transcript is offered, which fails WCAG 1.2.2.
SUBTITLES_TRACK_ONLY
- Play the video the report names and turn on its subtitle track.
- Watch with the sound on and compare the text with what is heard.
- Check that besides the dialogue it says who is speaking when it is not clear and describes sounds that matter.
Pass. The track carries the dialogue plus the speaker and sound information, so it works as captions, or the video has no audio that needs captions.
Fail. The track gives the words only, with no speaker or sound information that matters, which fails WCAG 1.2.2.