WCAG 1.2.4 · Level AA · EN 301 549 9.1.2.4

Captions (Live)

Requires captions for all live audio in synchronized media, such as webinars and streamed events, so deaf and hard of hearing users can follow in real time.

In brief

Live events leave no time to prepare a caption file in advance. A deaf or hard of hearing person who joins a webinar, a streamed conference or a live Q&A hears nothing unless the speech is turned into text while it is being spoken.

This criterion requires captions for all live audio in synchronized media, that is, live video with a soundtrack. Live captions are usually produced by a trained human captioner (often called CART, communication access real-time translation), by speech recognition, or by a combination of both. What matters is that the captions are available during the event, accurate enough to follow and close enough in time to the speech.

What does it cover?

  • Live video with sound: Webinars, online classes, streamed conferences, live product launches, town halls and live Q&A sessions.
  • Video meetings that you host for the public: A public meeting or a customer session on a conferencing platform counts when it is part of your service.
  • What the captions contain: The speech, who is speaking when it is not obvious, and sounds that matter. Perfect accuracy is hard in real time, but important names, numbers and terms should be right.
  • Delay: A short delay is expected in live captioning. The captions should not lag so far behind that they become useless.
  • Exception: There is no exception for media that is an alternative for text. The criterion applies to live synchronized media.
  • Out of scope: Prerecorded video is covered by 1.2.2. If you publish a recording of a live event later, the recording needs reviewed captions under 1.2.2. Audio-only live content (such as a live radio stream) is not covered by this criterion.

Who does it affect?

Deaf and hard of hearing users follow live events through captions. Live captions also help people in noisy places, people who are not native speakers of the language, people who find it easier to read than to listen, and anyone who joins late and wants to catch up on what was said.

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. Live captions are part of "perceivable".

The technical counterpart is the standard EN 301 549, which incorporates WCAG 1.2.4 by reference and turns it into separate clauses for each kind of ICT. Clause 7.1 also sets requirements for players that display captions, and clause 6 covers real-time communication such as video calls.

Where WCAG 1.2.4 appears in EN 301 549
ClauseType of ICTWhat it requires
9.1.2.4Web pagesWeb content must satisfy WCAG success criterion 1.2.4.
11.1.2.4Non-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 and let users adjust how they look.

Documents are not live, so the criterion does not apply to them. 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, so 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.4 is the same in WCAG 2.1 and 2.2. It is a Level AA criterion.

A note on EAA scope: The exclusion in Article 2(4) covers pre-recorded time-based media published before 28 June 2025. It does not cover live content, so live events you stream as part of an in-scope service are not excluded by it.

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

Code examples for the web

1. Tell users how to reach the live captions

Say on the event page that captions are provided and where to find them. If a captioner works on a separate service, link to the caption feed.

Incorrect
<h1>Product launch, live</h1>
<iframe src="https://stream.example.com/launch"
        title="Live stream"></iframe>
Correct
<h1>Product launch, live</h1>
<iframe src="https://stream.example.com/launch"
        title="Live stream of the product launch"></iframe>
<p>Live captions in English are provided by a captioner.
   <a href="https://captions.example.com/launch"
      target="_blank" rel="noopener noreferrer">Open the live
   captions in a new window<span class="sr-only">, opens
   in a new tab</span></a></p>
<p>A recording with reviewed captions will be published
   within 48 hours.</p>

2. Live captions in an HLS stream

If you stream with HLS, publish the captions as a subtitle rendition in the master playlist and mark it as a transcription of speech. Players can then show a captions menu.

Incorrect
#EXTM3U
#EXT-X-STREAM-INF:BANDWIDTH=2500000,RESOLUTION=1280x720
video/720p.m3u8
Correct
#EXTM3U
#EXT-X-MEDIA:TYPE=SUBTITLES,GROUP-ID="subs",NAME="English",
  LANGUAGE="en",DEFAULT=YES,AUTOSELECT=YES,
  CHARACTERISTICS="public.accessibility.transcribes-spoken-dialog",
  URI="captions-en/live.m3u8"
#EXT-X-STREAM-INF:BANDWIDTH=2500000,RESOLUTION=1280x720,
  SUBTITLES="subs"
video/720p.m3u8

3. A caption panel in a custom live player

If you receive caption text from a captioning service, show it as visible text next to or over the video. Do not make it a live region that screen readers announce: screen reader users already hear the audio, and a second announcement would talk over it.

Incorrect
<div id="captions" aria-live="assertive"></div>
Correct
<section aria-label="Live captions" lang="en">
  <div id="captions" class="live-captions"></div>
</section>

<script>
const box = document.getElementById("captions");
const socket = new WebSocket("wss://captions.example.com/launch");

socket.addEventListener("message", (event) => {
  const line = document.createElement("p");
  line.textContent = event.data;
  box.appendChild(line);
  // Keep only the latest lines
  while (box.children.length > 3) box.firstChild.remove();
});
</script>

4. Plan the captioning before the event

Live captions need preparation. Brief the captioner, share names and terms ahead of time, and check the feed before going live.

Incorrect
Event checklist:
- Test camera
- Test microphone
- Go live
Correct
Event checklist:
- Book a captioner and send them the agenda, speaker
  names, product names and terms
- Test camera and microphone
- Test the caption feed with a rehearsal
- Announce the captions on the event page
- Plan the reviewed captions for the recording

Code examples for mobile

The same rule applies in native mobile apps. Use the platform's video player, which can show the captions that your live stream carries and follows the user's system settings.

iOS (SwiftUI)

import SwiftUI
import AVKit

struct LiveEventView: View {
    // The live HLS stream must carry a captions rendition
    // (WebVTT or CEA-608/708), as in the playlist above.
    @State private var player = AVPlayer(
        url: URL(string: "https://example.com/live/launch.m3u8")!
    )

    var body: some View {
        VStack(alignment: .leading, spacing: 8) {
            // AVKit shows the captions menu and follows the
            // "Closed Captions + SDH" system setting.
            VideoPlayer(player: player)
                .frame(height: 220)
                .accessibilityLabel("Live stream of the product launch")

            Text("Live captions are available in the player's captions menu.")
                .font(.footnote)
        }
    }
}

Android (Jetpack Compose, Media3)

import androidx.compose.runtime.Composable
import androidx.compose.runtime.LaunchedEffect
import androidx.compose.ui.viewinterop.AndroidView
import androidx.media3.common.C
import androidx.media3.exoplayer.ExoPlayer
import androidx.media3.ui.PlayerView

@Composable
fun LiveEvent(player: ExoPlayer) {
    // Prefer a captions track, in English if available
    LaunchedEffect(Unit) {
        player.trackSelectionParameters = player
            .trackSelectionParameters
            .buildUpon()
            .setPreferredTextLanguage("en")
            .setPreferredTextRoleFlags(C.ROLE_FLAG_CAPTION)
            .build()
    }

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

How to test

  • Join as a participant: Open the live event the way a user would, on desktop and on mobile. Can you find the captions without help?
  • Watch with the sound off: Can you follow the event using only the picture and the captions?
  • Check delay and accuracy: Compare the captions with the speech during a rehearsal. Are names, numbers and technical terms right? Is the delay short enough to follow?
  • Check readability: Is the text large enough, with enough contrast, and does it stay on screen long enough? Does it cover important parts of the picture?
  • Test the controls: Can you turn captions on and off with the keyboard and a screen reader? Does the control announce its name and its state?
  • Check the announcement: Does the event page say that captions are provided and how to reach them?
  • Plan the recording: After the event, are reviewed captions added to the recording within a promised time?
  • Limits of automated tools: Automated tools cannot test live captions. Only a rehearsal with a real person can show whether they are accurate and in time.

Common mistakes

  • Running a live event with no captions: The most common failure of this criterion.
  • Not telling anyone that captions exist: If the feature is hidden, users cannot use it.
  • Not testing the caption feed before going live: A feed that shows nothing, or the wrong language, is found out too late.
  • Not briefing the captioner or the speech engine: Names, product terms and abbreviations are often wrong without preparation.
  • Captions that lag far behind the speech: A delay of many seconds makes the captions hard to follow.
  • Making the caption panel a screen reader live region: Screen reader users already hear the audio.
  • Captions that cover the picture: Position them so they do not hide faces, slides or on-screen text.
  • Publishing the recording with the raw live captions: Recordings need reviewed captions under criterion 1.2.2.

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.