EN 301 549 Rules That Hit Brand Players
Beyond the EAA overview: EN 301 549 clauses that actually fail brand video players. A clause-to-control map and a retest after a player redesign.
The European Accessibility Act is the law. EN 301 549 is the technical standard reviewers actually fail you against. The Act's dates and the 2030 "no substantial change" tail are covered in the European Accessibility Act and your video library. This is the player. Chapter 7 of EN 301 549 is written for ICT that displays video, not for the caption file sitting next to it. Brand sites fail it with a custom JavaScript player that has a beautiful volume slider and a CC option three menus deep, or with a burned-in-only master that leaves 7.1.4 with nothing to restyle.
The version cited throughout is EN 301 549 V3.2.1 (2021-03), adopted as CAN/ASC-EN 301 549:2024. It references WCAG 2.1 in Clause 9. It is not WCAG 2.2, and it is not "the EAA." If a vendor report says "WCAG 2.2 AA, therefore EN 301 549," ask them to map Clause 7.
Chapter 7 is the player, not the file
Clause 9 is the web-content map (WCAG 2.1 success criteria applied to web pages). Clause 7 is extra, and it is where brand players die.
The self-scoping phrase at the start of each requirement matters. "Where ICT displays video with synchronized audio" is true of a marketing-site player, a product-page embed, a campaign microsite, and an in-app brand theatre. It is not true of a still image. It is not satisfied by shipping a .vtt in the CMS that the player never exposes.
Clause 7.1 is caption processing in the player. Clauses 9.1.2.2 / 10.1.2.2 / 11.1.2.2 are the content having captions. You can pass the content clauses with a perfect caption file and still fail 7.1.1 because the player has no mode that displays them. You can fail the content clauses with a player that would have been fine. Test both.
Spoken subtitles (7.1.5) and caption restyling (7.1.4) are the clauses social-native teams skip, because a TikTok burn-in is a bitmap. On an EU brand site that burn-in is a problem.
A clause-to-control map
Use this as the test script. Each row is one control or one behaviour. If the control is missing, the clause fails. If the control is present but takes more steps than play/pause/volume, 7.3 fails even when 7.1.1 would pass.
| Clause | What it requires | The control that satisfies it |
|---|---|---|
| 7.1.1 Captioning playback | A mode that displays available captions; user can choose to show closed captions | A CC toggle wired to the in-band or sidecar track |
| 7.1.2 Captioning synchronization | Recorded captions within 100 ms of the time stamp; live captions within 100 ms of availability | Player clock vs. cue times, measured |
| 7.1.3 Preservation of captioning | Transmitting, converting, or recording the video preserves caption data so 7.1.1 and 7.1.2 still hold | Ingest keeps the caption channel or sidecar, including position and colour that carry meaning |
| 7.1.4 Caption characteristics | User can adapt displayed caption characteristics, except unmodifiable characters | Font, size, colours, box opacity, outline |
| 7.1.5 Spoken subtitles | A mode that speaks available captions, except where text is not programmatically determinable | Spoken-subtitles toggle, ideally a separate mixable track |
| 7.2.1 Audio description playback | A mechanism to select and play available AD on the default audio channel | AD toggle, or an audio-track picker that includes the described mix |
| 7.2.2 Audio description synchronization | Preserve sync between the programme and the description | AD authored to the same timeline; player does not drift it on seek |
| 7.2.3 Preservation of audio description | Same preservation duty as 7.1.3, for AD data | Pipeline keeps the AD channel or the described mix |
| 7.3 User controls for captions and AD | Where ICT primarily displays video with audio, CC and AD at the same level of interaction as primary media controls | CC and AD on the bar next to play and volume, same step count |
| 9.1.2.2 (content) | Captions for prerecorded synchronized media | The file actually has captions |
| 9.1.2.5 (content) | Audio description for prerecorded video | A described soundtrack or equivalent |
| 9.1.4.2 Audio control | If audio autoplays more than three seconds, independent pause/stop/volume | Mute or pause on the player itself |
| 9.2.1.1 Keyboard | All functionality available from a keyboard | Play, pause, seek, volume, CC, AD, fullscreen |
| 9.4.1.2 Name, Role, Value | Name and role programmatically determined; states can be set | Accessible name on every control; CC state exposed |
7.3's note is the one designers argue with: "Primary media controls are the set of controls that the user most commonly uses to control media." On a brand player that is play, pause, and volume. If volume is on the bar, CC and AD belong on the bar. A laptop that can show video but is not primarily a video product does not need extra hardware keys; it still needs software controls at the same interaction depth.
7.1.2's 100 ms budget is tighter than "looks in sync." A caption that is one frame late at 25 fps is 40 ms and passes. A caption that is four frames late is 160 ms and fails. Measure from the time stamp in the file, not from lip flare.
Where brand players actually fail
The cog-menu CC. Volume is one click. Captions are: settings, subtitles, language, confirm. That is 7.3 even if 7.1.1 would pass once you arrive. EN 301 549 7.3 is the European twin of US 508 503.4: put CC and AD on the bar.
Burn-in as the only captions. Visible text is not enough. Bitmap captions fail 7.1.4 (unmodifiable; the note names bitmap images), 7.1.5 (not programmatically determinable), and usually 7.1.1 if they cannot be turned off. Burned-in versus sidecar: burn for the muted feed, sidecar for the EU site player.
Transcode that eats the track. A master with captions goes through a web encode that emits video and audio only. 7.1.3 fails at ingest; every player is then blamed for 7.1.1. Converting VTT to SRT also drops positioning. The browser-side SRT to VTT converter writes a valid WebVTT header. It will not invent regions you already lost.
AD as a separate page. 7.2.1 wants a mechanism in the ICT that displays the video to play AD on the default audio channel. A second URL three paragraphs down is not that mechanism. An audio-track picker with a described mix on track 2 is.
Spoken subtitles left off the spec. 7.1.5 is a player mode that speaks caption text. Bitmap burns are exempt because the text is not programmatically determinable. That exemption is why a burn-only player fails two other clauses, not a reason to ship only burns.
Autoplay hero. 9.1.4.2 still sits in the EN 301 549 web map. A looping product film with sound and no independent mute fails it regardless of the CC button.
Versely captions, transcribes, and mixes; it does not replace the site player on a European brand page. Content side: automatic subtitles, a transcript, an audio-description mix. Player side: your control bar.
Retest after a redesign
A new skin is the most common way to un-pass 7.3. The bar gets cleaner, CC moves into an overflow menu, AD disappears because analytics never counted keyboard users. Treat a player redesign as a Clause 7 regression, on the production embed, not a Storybook stub.
- Scope. If the page primarily displays video with audio, 7.3 applies. A campaign watch page is not a judgement call.
- Keyboard. Tab to every primary control. Confirm name, role, and state (9.2.1.1, 9.4.1.2). Open CC and AD without a mouse.
- Step count. Steps from focus to "captions on" must match steps to "volume changed." Same for AD.
- 100 ms sync. Seek to a known cue. Compare the file time stamp to the paint time.
- Restyle. Change caption size and colours. If you cannot, you are showing bitmaps (7.1.4 exception) and should know that.
- Spoken subtitles. If the mode exists, confirm it reads the caption text.
- AD select. Switch the described track, seek, confirm 7.2.2.
- Round-trip. Upload, transcode, play. Caption and AD data must survive (7.1.3, 7.2.3).
- Content. Spot-check 9.1.2.2 and 9.1.2.5 on the campaign files. A perfect player with empty tracks still fails.
- Autoplay. If the redesign added a sound-on hero, 9.1.4.2 is back.
Log clause IDs. "7.3 CC three steps deeper than volume" survives a review. "Move the CC icon" does not. If you changed only CSS, still run steps 2–5.
FAQ
Does passing WCAG 2.1 AA mean we pass EN 301 549 for a video player?
No. WCAG 2.1 AA covers the Clause 9 content and some player behaviour (keyboard, audio control, name/role/value). It does not contain 7.1.4, 7.1.5, 7.2.*, or 7.3. Those are EN 301 549 clauses. A WCAG-only audit will miss them.
Can burned-in captions satisfy Clause 7?
They can make speech visible, which helps some viewers and some muted autoplay contexts. They fail 7.1.4 as unmodifiable characters, they typically fail 7.1.1's "choose to display," and they fail 7.1.5 because the text is not programmatically determinable. Use them on social. Do not use them as the only caption mode on an EU brand player.
Is 7.1.5 (spoken subtitles) required if we already have audio description?
They are different. Audio description narrates the picture. Spoken subtitles speak the caption text, which is mostly dialogue. A viewer who cannot read the captions and cannot hear the programme needs 7.1.5 even if AD is present. The notes prefer a separate mixable track.
After we restyle the player, what is the minimum retest?
Keyboard path, step count to CC and AD versus volume, 100 ms caption sync on a seek, restyle controls, transcode round-trip, and a spot-check that the campaign files still have tracks. If any of those moved in the redesign, the previous EN 301 549 report is historical.