WCAG 1.2.2 · Level A · EN 301 549 9.1.2.2

Captions (Prerecorded)

Requires captions for the audio of prerecorded video with sound, so that deaf and hard of hearing users get the speech and meaningful sounds as synchronized text.

In brief

A person who cannot hear a video gets nothing from its soundtrack unless it is also available as text. Captions turn the audio into synchronized text shown with the picture: who is speaking, what is said and which sounds matter.

This criterion requires captions for all prerecorded audio in synchronized media, that is, video that has a soundtrack. Captions are more than a transcript of the words. They include speaker identification and meaningful non-speech sounds such as music cues, laughter, a door closing or an alarm.

What does it cover?

  • Prerecorded video with sound: Product videos, tutorials, webinar recordings, training courses, interviews and promotional clips, wherever they are embedded.
  • Speech: All dialogue and narration, with the speaker identified whenever it is not obvious from the picture.
  • Meaningful sounds: Music or sound effects that carry information or mood, such as "[phone rings]", "[tense music]" or "[applause]".
  • Captions versus subtitles: Subtitles usually translate or repeat the dialogue for people who can hear. Captions also describe the non-speech audio. A caption track that only repeats the words may not meet the criterion.
  • Open and closed captions: Captions burned into the picture (open) and captions that can be turned on and off (closed) both satisfy the criterion. Closed captions are usually better because users can style them and choose a language.
  • Exception: If the media is an alternative for text on the same page and is clearly labelled as such, captions are not required.
  • Out of scope: Audio-only and video-only content is covered by 1.2.1, live captions by 1.2.4, and audio description for the video track by 1.2.3 and 1.2.5.

Who does it affect?

Deaf and hard of hearing users rely on captions to follow what is said and what is heard. Captions also help people who watch without sound (in a public place, at work, on a noisy train), people who are not native speakers of the language, people with auditory processing or attention differences, and anyone watching a video with poor audio quality or strong accents. Captions make video content searchable and quotable as well.

In the EAA and EN 301 549

The European Accessibility Act (Directive (EU) 2019/882) applies to in-scope products and services placed on the market after 28 June 2025. Recital 47 names four principles for websites and mobile applications: perceivable, operable, understandable and robust. Captions are a core part of "perceivable".

The technical counterpart is the standard EN 301 549, which incorporates WCAG 1.2.2 by reference and turns it into separate clauses for each kind of ICT. In addition, clause 7 of the standard sets requirements for the video players and technologies themselves.

Where WCAG 1.2.2 appears in EN 301 549
ClauseType of ICTWhat it requires
9.1.2.2Web pagesWeb content must satisfy WCAG success criterion 1.2.2.
10.1.2.2Non-web documents (PDF, Office files)The same criterion applies to video embedded in documents.
11.1.2.2Non-web software (native mobile apps)Software that supports screen readers must satisfy the criterion.
7.1Video technologies (players and software that show video with sound)The player must be able to display captions, keep them synchronized, preserve them when the video is passed on, and let users adjust how they look.

Clause numbers follow the "9. + WCAG number" pattern of EN 301 549. In V3.2.1 the software clause is divided into further subclauses for open and closed functionality, and clause 7.1 is divided into sub-requirements for caption playback, synchronization, preservation and characteristics. Check the exact numbers in the standard when you cite them.

Standard version: EN 301 549 V4.1.1 (September 2026) is based on WCAG 2.2 and is the first version prepared specifically for the EAA. It has not yet been cited in the Official Journal of the European Union, so for now it is best treated as a voluntary technical route to the EAA's requirements. Once cited, it will give a presumption of conformity. The text of criterion 1.2.2 is the same in WCAG 2.1 and 2.2.

A note on EAA scope: Article 2(4) excludes pre-recorded time-based media published before 28 June 2025, and third-party content that the business neither funds, develops nor controls. Videos you publish after that date, and older videos you republish or substantially change, are not covered by the exclusion. Even where an exclusion may apply, captions are good practice and widely used.

Directive (EU) 2019/882, EUR-Lex, opens in a new tab

Code examples for the web

1. Captions in an HTML5 video

Add a track element with a caption file in the WebVTT format.

Incorrect
<video controls src="intro.mp4"></video>
Correct
<video controls src="intro.mp4">
  <track kind="captions" src="intro.en.vtt"
         srclang="en" label="English" default>
</video>

2. The content of the caption file

Captions identify who speaks and describe sounds that matter. They are split into short, readable lines that match the timing of the audio.

Incorrect
WEBVTT

00:00:01.000 --> 00:00:09.000
welcome to the demo first open the settings menu
and then choose security
Correct
WEBVTT

00:00:01.000 --> 00:00:04.000
<v Anna>Welcome to the demo.

00:00:04.500 --> 00:00:06.000
[Door closes]

00:00:06.500 --> 00:00:09.000
<v Anna>First, open the settings menu
and then choose Security.

3. A video from a third-party platform

An embedded video is still your content. Upload a reviewed caption file to the platform, and where the platform allows it, turn captions on by default.

Incorrect
<!-- No reviewed captions uploaded, relying on
     unchecked automatic captions -->
<iframe src="https://www.youtube.com/embed/VIDEO_ID"
        title="Product tour"></iframe>
Correct
<!-- A reviewed caption file is uploaded to the platform -->
<iframe src="https://www.youtube.com/embed/VIDEO_ID?cc_load_policy=1"
        title="Product tour"></iframe>

4. A captions button in a custom player

If you build your own player, the captions control must be a real button with a name and a state. It must work with the keyboard and with screen readers.

Incorrect
<div class="cc-icon" onclick="toggleCaptions()"></div>
Correct
<button type="button" id="cc" aria-pressed="false">
  Captions
</button>

<script>
const video = document.querySelector("video");
const track = video.textTracks[0];
const btn = document.getElementById("cc");

btn.addEventListener("click", () => {
  const on = track.mode !== "showing";
  track.mode = on ? "showing" : "hidden";
  btn.setAttribute("aria-pressed", String(on));
});
</script>

5. Captions in more than one language

Give every track its own language and a label users can read, so the player can offer the right choice.

Incorrect
<video controls src="intro.mp4">
  <track kind="captions" src="intro.en.vtt">
  <track kind="captions" src="intro.tr.vtt">
</video>
Correct
<video controls src="intro.mp4">
  <track kind="captions" src="intro.en.vtt"
         srclang="en" label="English" default>
  <track kind="captions" src="intro.tr.vtt"
         srclang="tr" label="Türkçe">
</video>

Code examples for mobile

The same rule applies in native mobile apps. Use the platform's own video player, which provides a captions menu and honours the user's system settings, and make sure the stream or file you play actually contains a captions track.

iOS (SwiftUI)

import SwiftUI
import AVKit

struct LessonVideoView: View {
    // The HLS stream must contain a captions track (WebVTT or
    // CEA-608), marked with the characteristics for spoken
    // dialogue and non-speech sound.
    @State private var player = AVPlayer(
        url: URL(string: "https://example.com/lesson.m3u8")!
    )

    var body: some View {
        // AVKit shows the captions menu and follows the
        // "Closed Captions + SDH" system setting. Do not set
        // appliesMediaSelectionCriteriaAutomatically to false.
        VideoPlayer(player: player)
            .frame(height: 220)
            .accessibilityLabel("Lesson 1: Getting started")
    }
}

Android (Jetpack Compose, Media3)

import android.net.Uri
import androidx.compose.runtime.Composable
import androidx.compose.ui.viewinterop.AndroidView
import androidx.media3.common.C
import androidx.media3.common.MediaItem
import androidx.media3.common.MimeTypes
import androidx.media3.exoplayer.ExoPlayer
import androidx.media3.ui.PlayerView

fun lessonMediaItem(): MediaItem {
    val captions = MediaItem.SubtitleConfiguration.Builder(
        Uri.parse("https://example.com/lesson.en.vtt") // Your file
    )
        .setMimeType(MimeTypes.TEXT_VTT)
        .setLanguage("en")
        .setLabel("English captions")
        .setRoleFlags(C.ROLE_FLAG_CAPTION)
        .build()

    return MediaItem.Builder()
        .setUri("https://example.com/lesson.mp4") // Your video
        .setSubtitleConfigurations(listOf(captions))
        .build()
}

@Composable
fun LessonVideo(player: ExoPlayer) {
    AndroidView(factory = { context ->
        PlayerView(context).apply {
            this.player = player
            // Shows the captions button in the controls
            setShowSubtitleButton(true)
        }
    })
}

How to test

  • Turn the captions on: Play each video and turn captions on. Are there captions at all, and can you find the control easily?
  • Watch with the sound off: Can you follow the whole video using only the picture and the captions? Is any information missing?
  • Check completeness: Are all speech, speaker names and meaningful sounds included? Is anything that matters, like an alarm or a warning tone, missing?
  • Check synchronization: Do the captions appear at the right time and stay long enough to be read? Do they cover important on-screen text?
  • Check accuracy: Compare the captions with the audio. Automatic captions often misspell names and technical terms.
  • Test the control: Can you turn captions on and off with the keyboard and with a screen reader? Does the control announce its name and its state?
  • Test each platform: Check embedded players, custom players and the native mobile player. Does the system caption setting carry over?
  • Limits of automated tools: Automated tools can detect a video element without a track, but they cannot judge whether captions are complete, accurate and in sync. Only a person can decide that.

Common mistakes

  • Publishing video with sound and no captions: The most common failure of this criterion.
  • Relying on unreviewed automatic captions: Machine captions misspell names and terms, miss speaker changes and skip sounds.
  • Captioning only the words: Speaker identification and meaningful sounds are part of captions.
  • Captions that are out of sync: Late, early or too fast to read.
  • Captions that hide important on-screen text: Position them so they do not cover names, numbers or buttons shown in the video.
  • Providing only a separate transcript: A transcript is not a substitute for synchronized captions in a video that has sound. It satisfies different criteria.
  • A captions control that only works with the mouse: The button must be reachable and operable with the keyboard and named for screen readers.
  • Forgetting to caption embedded and mobile videos: Videos on a platform you embed, and videos inside your app, need captions too.

Sources

Standard version: EN 301 549 V4.1.1 (2026-09), WCAG 2.2. This page is for informational purposes only and is not legal advice. For binding requirements, refer to the official texts of the European Accessibility Act (Directive (EU) 2019/882) and EN 301 549.

Corpowid is recognized by Gartner

Corpowid has been recognized by Gartner, a leading global research and advisory firm, for our innovation and performance in digital accessibility. These badges reflect our commitment to creating inclusive, AI-powered web experiences.

Have questions about Corpowid?

Let’s connect.

We will get back to you as soon as possible.