Screen Readers and Video Players: aria-live, State Announcements, and Describing Time-Based Controls

How screen readers experience a video player — what to announce, what to stay silent about, and the ARIA patterns for seek bars, volume sliders, and caption toggles.

A sighted user glances at a video player and instantly knows: is it playing, how far in, how loud, are captions on. A screen-reader user gets none of that unless you announce it deliberately. The craft is deciding what to announce, when, and how loud — too little and the player is unusable, too much and it’s a chatty nightmare.

What Must Be Announced (and What Must Not)

State ChangeAnnounce?Mechanism
Play / pauseYesaria-live="polite" region
Seek performedYes (brief)Polite live region — “15 seconds ahead”
Volume changedYes (brief)aria-valuetext on the slider
Captions on/offYesaria-pressed on the toggle + polite announcement
Playback position tickingNo — everTime is on-demand (aria-valuenow), never live
BufferingOnly if >2sPolite; brief stalls are noise

The Golden Rule

Announce events, not state. Playing is an event. The playhead’s existence is state — the user can query it by focusing the seek bar, where aria-valuenow reports the current position on demand. Announcing every tick floods the speech queue.

The Seek Bar Done Right

<input type="range"
       role="slider"
       aria-label="Seek"
       aria-valuemin="0"
       aria-valuemax="243"
       aria-valuenow="87"
       aria-valuetext="1 minute 27 seconds of 4 minutes 3 seconds">

aria-valuetext is doing real work here — “87” is meaningless to a screen reader; “1 minute 27 seconds” is not. Update it on every seek.

The aria-live Politeness Contract

  • polite for every player announcement — it waits for speech pauses and doesn’t interrupt a user mid-reading.
  • assertive never for playback events. A user navigating the catalog shouldn’t be interrupted by a trailer’s play announcement.
  • Give the region aria-atomic="false" so only the changed text is spoken, not the whole blob.

“Test with the screen reader on and your eyes closed. If you can’t tell what the player is doing in under ten seconds of listening, neither can your users.”

The Trap: Autoplay Announcements

A muted autoplaying preview still fires play/pause events. Screen readers announce all of them. Scope live regions to user-initiated state changes only — suppress announcements for programmatic autoplay.

Our NVDA, JAWS, and VoiceOver test matrix plus announcement-text templates are in the screen reader video player testing notes.