# Live streams with no captions, or only automatic ones

Source: https://easeweb.dev/learn/live-captions
Topics: Images and media > Live video and webinars have live captions (WCAG 1.2.4)
The fix: Book a live captioner (CART) for the whole event. Either send their captions into the streaming platform's captions input, so they show in the player and travel with the stream, or, where the platform has none, show the captioner's own page beside the player.
Test with: sound off, keyboard
References: https://www.w3.org/WAI/WCAG22/Understanding/captions-live.html https://www.w3.org/WAI/WCAG22/Techniques/general/G9 https://www.w3.org/WAI/WCAG22/Techniques/general/G87 https://www.w3.org/WAI/WCAG22/Techniques/general/G93 https://www.w3.org/WAI/media/av/captions/ https://support.google.com/youtube/answer/3068031

This is a recreated teaching example, not a finding about a named client. The code is a starting pattern: test it in your own product. No completed assistive-technology test is claimed here.

## What happens

A software company announces its spring release in a live webinar, streamed on its events page in an embedded player. The slides say only "Guest seats" and "Background exports"; everything else is said out loud. Alex announces that every plan now includes 15 guest seats, and that exports run in the background. Then Priya reads a question from the chat: does this include the free plan? It doesn't. The player has no captions, so a deaf customer watching sees the slides change and nothing more. On a second version of the page, the company has turned on the platform's automatic captions. They appear, a few words at a time, and say "every plan includes fifty guess seats", then run the question and the answer together as "does this include the free plan it does".

## Why it fails

Success criterion 1.2.4 asks for captions for all live audio content in synchronised media: a live stream with speech needs them while it is live. Captions carry every word said, who is speaking, and the sounds that matter. A live stream with no captions fails outright. Automatic captions are on screen, but W3C's guidance is that automatically generated captions don't meet accessibility requirements unless they are confirmed to be fully accurate, and live, nobody can confirm them before they are shown. Here they change the number, drop the question mark, give no sign that a second person is speaking, and lose the "n't" that made the answer no.

## Who is affected

A live stream runs at the speakers' pace, and in a webinar the moment to ask a follow-up question passes with it, so whatever the captions miss is lost for the event. Viewers watching at work or in a shared space with the sound off meet the same silence, and may leave rather than turn it up.

## What automation and AI miss

No scan can watch a stream before it is live, and axe has no rule for 1.2.4: its captions rule for video, written for 1.2.2, only looks for a `<track kind="captions">` inside a `<video>`. EaseWeb's audit sends players that are recognisably live for review: YouTube's embed for a channel's live stream, Vimeo's live event embeds, Twitch channel players, and a page's own video with no end. A live stream embedded by its video id looks like any other video, and gets the general video lead, which asks for live captions too. Whether captions will be there on the day, and whether they are right, only a person can check, at a rehearsal and during the event. Automatic captions are speech recognition, the same kind of AI that drafts captions for recordings; live, there is no time to correct them.

## Before: a live stream with no captions

```html event.html
<h2>Spring release, live</h2>
<p>Thursday at 16:00 UTC. About 20 minutes, with questions at the end.</p>
<!-- Captions: none -->
<iframe src="https://www.youtube.com/embed/live_stream?channel=UC…"
  title="Spring release, live stream" allow="fullscreen"></iframe>
```

Nothing sends captions to the platform, so the player has no captions button, and someone who can't hear the stream gets the slides.

## Before: the platform's automatic captions

```html event.html
<h2>Spring release, live</h2>
<p>Thursday at 16:00 UTC. About 20 minutes, with questions at the end.</p>
<!-- Captions: the platform's automatic captions -->
<iframe src="https://www.youtube.com/embed/live_stream?channel=UC…"
  title="Spring release, live stream" allow="fullscreen"></iframe>
```

```text captions.txt
welcome to the spring release I'm Alex and I look after the product
from today every plan includes fifty guess seats
exports now run in the back round so you can close the tap
there's a question in the chat does this include the free plan
it does the free plan keeps three guest seats
```

The player has a captions button and the captions arrive in time, so the stream looks captioned. But speech recognition heard "15 guest seats" as "fifty guess seats" and "it doesn't" as "it does", and gave no sign that Priya was speaking or that she asked a question. Someone who follows these captions thinks the free plan gets the new seats. The demo video between the two announcements is left blank, with no sign that music played.

## After: a live captioner, in the player's own captions

```html event.html
<h2>Spring release, live</h2>
<p>Thursday at 16:00 UTC. About 20 minutes, with questions at the end.
  Live captions by a captioner: turn them on with CC in the player.</p>
<!-- Captions: a live captioner, sent to the platform's captions input -->
<iframe src="https://www.youtube.com/embed/live_stream?channel=UC…"
  title="Spring release, live stream" allow="fullscreen"></iframe>
```

```text captions.txt
>> ALEX: Welcome to the spring release.
I'm Alex, and I look after the product.
From today, every plan includes 15 guest seats.
[Demo video plays: music, no speech]
Exports now run in the background,
so you can close the tab.
>> PRIYA: There's a question in the chat:
does this include the free plan?
>> ALEX: It doesn't. The free plan
keeps three guest seats.
```

A captioner, booked for the event, listens to the speakers and writes what they say in real time, by stenography or by repeating it to speech software trained on their own voice. Their software sends the captions to the platform's captions input, which shows them in the player a few seconds behind the speech. The captions name each speaker when they change, keep the numbers and the "doesn't", and say what the audio is doing when nobody speaks. Because they are the player's own captions, viewers turn them on and off with its CC button, and they follow the stream into full screen and the platform's own app.

## After: the captioner's page beside the player

```html event.html
<h2>Spring release, live</h2>
<p>Thursday at 16:00 UTC. About 20 minutes, with questions at the end.
  Live captions by a captioner appear beside the player.</p>
<!-- Captions: a live captioner, on their own page beside the player -->
<div class="live">
  <iframe src="https://www.youtube.com/embed/live_stream?channel=UC…"
    title="Spring release, live stream" allow="fullscreen"></iframe>
  <iframe src="https://captions.example.com/live/spring-release"
    title="Live captions"></iframe>
</div>
```

```text captions.txt
>> ALEX: Welcome to the spring release.
I'm Alex, and I look after the product.
From today, every plan includes 15 guest seats.
[Demo video plays: music, no speech]
Exports now run in the background,
so you can close the tab.
>> PRIYA: There's a question in the chat:
does this include the free plan?
>> ALEX: It doesn't. The free plan
keeps three guest seats.
```

Captioning services give each event a page of its own where the captions scroll as they are written, which can sit in a frame beside the player. The captions are the same, written by the same person. This passes 1.2.4 only while the two stay together and in step. The player's full screen leaves the captions behind, and anyone who watches on the platform or in its app never sees them. The captioner writes from the audio they hear, and the stream reaches viewers some seconds later, so the captions can run ahead of the picture by the stream's delay. Have the captioner work from the stream as viewers see it, and the captions trail the picture by a few seconds instead, as they do in the player. Use it only when the platform has no captions input.

## Which option to use

Both pass 1.2.4 with a captioner writing the words. Send the captions into the player: the captions beside the player pass only while the page holds them together, while the player's own captions go wherever the stream goes, full screen included, and the platform shows them with the stream rather than on a clock of their own. Many streaming and webinar platforms have a captions input for this. Use the page beside the player only where the platform you have to use has no such input, and have the captioner caption from the stream as viewers see it, so the captions follow the picture rather than run ahead of it.

## Implementation decisions

Book the captioner when you book the speakers. Real-time captioners (CART providers) work remotely, from the audio over a phone line or the internet, and they need the event's material in advance: speakers' names, product names, slides and any script. Book them for the whole event, questions included, and agree what happens when it overruns.

Each platform takes a captioner's captions its own way:

- YouTube Live: captions embedded in the stream by the encoder, or sent by the captioner's software to a captions ingestion URL from the stream's settings.
- Zoom meetings and webinars: the host assigns a third-party captioning service with an API token from the meeting, or assigns a participant to type captions.
- Microsoft Teams meetings: the organiser turns on CART captions in the meeting options and sends the captioner the link it gives.

Where the platform also offers automatic captions, the captions menu may list both. Where the platform lets you, label the captioner's track so viewers can tell them apart, or turn the automatic ones off. Automatic captions can still help on an internal call nobody booked a captioner for; they are not how a public stream meets 1.2.4. W3C's guidance on 1.2.4 is aimed at broadcasts: a call between a few people in a meeting app is not what it asks the app to caption, but a webinar or launch streamed to an audience is.

Questions typed in the chat are already text; questions asked out loud need captioning like the rest. Anything a speaker plays, such as a demo video, needs its speech captioned, or its sound described in brackets.

When the stream ends and its recording stays on the page, it is prerecorded video, and [videos without captions, or with unchecked automatic ones](/learn/video-captions) applies: the captioner's text is a good start, corrected against the recording into a captions file. Sign language interpretation is a separate requirement at Level AAA, for prerecorded video only (1.2.6), and a live stream that is only sound, such as a radio show, is covered by 1.2.9.

## Verify the fix

1. Before the event, check that a captioner is booked for all of it, questions included, has the names and terms, and is connected to the platform's captions input, or to the page beside the player.
2. In a rehearsal on an unlisted test stream, open your own page, turn the captions on with the keyboard, and check they appear within a few seconds of the speech.
3. During the event, watch with the sound off for several minutes: each speaker is named when they change, numbers, names and negatives are right, and sounds that matter are in brackets.
4. Put the player in full screen and open the page at phone width, and check the captions still show. With the page beside the player, they don't in full screen: check the panel at phone width, and how far the captions run ahead of or behind the picture.
5. After the event, check that the recording left on the page has corrected captions before it is published, not the live ones as they came.

Record the OS, browser and assistive-technology versions, the build, the date, and the actual result of each step. Repeat for each event: a new platform, room or captioner changes the setup.

## Limits

This is a starting pattern, not a guarantee for every application. Live captions lag the speech by a few seconds and a captioner can mistype, so a recording still needs correcting. How captions reach the player depends on the platform, its plan and its settings, which change: check its current documentation and rehearse with the captioner. Test the whole event with people who rely on captions if you can.

---

Get this guide in your coding agent: MCP https://easeweb.dev/mcp (setup at https://easeweb.dev/services/developers)
