What Are WebVTT Captions?

Quick Answer

A VTT file is a plain-text WebVTT (Web Video Text Tracks) file that stores timed captions or subtitles for web video. Each cue pairs a timecode range with the text that appears on the screen. The W3C maintains the WebVTT specification, and HTML5 video players, HLS, and CMAF-based DASH delivery all support the WebVTT caption format. Wowza Streaming Engine generates and delivers WebVTT for live streams over HLS, CMAF HLS, and CMAF MPEG-DASH, and for on-demand streams over HLS.

New call-to-action

Captions have moved from a nice-to-have feature to a baseline requirement for streaming. Accessibility regulations, multilingual audiences, muted mobile playback, and AI-driven content indexing all depend on timed text that travels reliably with the video. WebVTT sits at the center of that requirement as the most widely-supported format for web-based caption delivery.

What Is A VTT File?

WebVTT, short for Web Video Text Tracks, is a text-based caption and subtitle format that the W3C Timed Text Working Group defines in the WebVTT specification and the HTML5 <track> element reads natively. The format originated as an evolution of SubRip Text (SRT), the long-standing subtitle file format, and added features the web needed, including:

  • UTF-8 character encoding
  • Cue settings for positioning and alignment
  • Styling hooks for CSS
  • Richer metadata

How To Open A VTT File

WebVTT files use the .vtt extension and the text/vtt MIME type, registered by the WebVTT specification. Web servers should deliver .vtt files as text/vtt so browsers can recognize the caption track. Any plain-text editor can open and edit a VTT file. Video players load VTT files as a caption track alongside the video.

Each VTT file contains a sequence of “cues,” each pairing a timecode range with a block of text that appears on screen during that interval. Modern browsers, mobile operating systems, and streaming players read WebVTT natively. That includes every major HTML5 player, Apple iOS (which adopted WebVTT for caption rendering starting with iOS 6), Android, and the players that consume HLS and DASH manifests.

The combination of broad compatibility and an open, human-readable structure has made WebVTT the default choice for captions on the web.

How Do WebVTT Captions Work?

Every WebVTT file follows the same basic structure. A required header identifies the file, one or more cues pair a timecode range with the text that appears during that span, optional cue settings control where the text renders on screen, and optional STYLE blocks apply CSS to caption text.

What Does A VTT File Look Like?

A minimal .vtt file contains the WEBVTT header, optional metadata, and a series of cues:

WEBVTT

00:00:01.000 –> 00:00:04.000
Welcome to the broadcast.

00:00:05.000 –> 00:00:08.500
Today we’re covering streaming captions.

Each cue can include an optional identifier, the timecode range in HH:MM:SS.mmm format, and the caption payload. Multiple lines per cue render as multiple lines of text. Comments use the NOTE keyword so they never appear in playback.

Cue Settings and Styling

WebVTT extends the basic cue model with settings that control caption placement and presentation. Cue settings appear on the timecode line after the arrow and modify where the text renders. The most common settings include:

  • Line sets the vertical position of the cue as a percentage or line number.
  • Position controls the horizontal alignment within the video frame.
  • Align determines text alignment within the cue box (start, center, or end).
  • Size defines the width of the cue box as a percentage of the video width.
  • Vertical enables vertical writing mode for languages like Japanese.

For styling, WebVTT supports inline tags such as <b>, <i>, <u>, and <c.classname> for custom CSS classes. STYLE blocks in the file header apply CSS rules to the cues. This level of control matters for broadcast workflows where captions need to align with on-screen graphics, lower thirds, or interactive overlays.

How Does WebVTT Compare To SRT, CEA-608/708, AND TTML?

Several caption and subtitle formats coexist in the streaming ecosystem, each with different strengths and target use cases. The table below compares WebVTT against the most common alternatives.

FormatFileUse CaseStyling SupportPlayer/Protocol CompatibilityBest For
WebVTT.vttWeb and OTT deliveryYes (CSS, positioning)HTML5 (web browser players), HLS, DASH, CMAFModern streaming, multilingual content
SRT.srtLegacy subtitles, file sharingLimitedMost players (often converted to WebVTT)Basic subtitles, VOD downloads
CEA-608/708Embedded in video streamBroadcast and OTTLimited (608), Rich (708)Set-top boxes, broadcast TVLinear TV, regulated broadcast
TTML / IMSC.ttml, .xmlBroadcast and IMF workflowsRich (XML-based)DASH, some HLS, broadcastProfessional broadcast, archival
SCC.sccLegacy CEA-608 source filesLimitedAuthoring workflowsSource files for 608 conversion
DVB TeletextEmbedded in MPEG-TSBroadcast subtitles (Europe primarily)LimitedBroadcast set-top boxesLegacy broadcast sources converted to WebVTT for web delivery

WebVTT and SRT share the closest lineage, but WebVTT adds full UTF-8 encoding for non-Latin scripts, positioning and styling controls, and a tighter fit with modern players. CEA-608/708 captions live inside the video stream itself rather than in a sidecar file, which makes them ideal for broadcast workflows but harder to manipulate after the fact. Web player support for CEA-708 varies more than support for CEA-608, so teams often convert embedded captions to WebVTT for web delivery. For a deeper comparison, read our blog on How To Choose Between WebVTT vs CEA-608/708 Captions. TTML and its IMSC profile dominate professional broadcast and archive workflows because of their rich XML structure, though most web players still prefer WebVTT for delivery.

Why WebVTT Captions Matter for Modern Streaming

WebVTT addresses several pressures that streaming workflows face at the same time.

Accessibility and Regulatory Compliance

Several accessibility rules cover video captions. The Americans with Disabilities Act (ADA), the FCC’s closed captioning rules, the European Accessibility Act (EAA), and the Web Content Accessibility Guidelines (WCAG) each have their own requirements for accurate, synchronized captions for video content. WCAG 2.2 Success Criterion 1.2.2 (Level A) covers captions for prerecorded video, and Success Criterion 1.2.4 (Level AA) covers captions for live video.

The U.S. Department of Justice ADA Title II rule adopts WCAG 2.1 Level AA for state and local government web content. Larger entities that serve 50,000 or more people have until April 26, 2027, to comply, and smaller entities have until April 26, 2028. FCC rules at 47 CFR 79.4 require captions on video that aired on U.S. television with captions, and the European Accessibility Act covers audiovisual media services. WebVTT gives these teams a standards-based caption format for compliance-sensitive delivery across web and mobile players.

Multilingual and Global Reach

Native UTF-8 support means WebVTT handles Cyrillic, Arabic, Chinese, Japanese, Hindi, Korean, and right-to-left scripts without character encoding workarounds. Streams can carry multiple WebVTT tracks, letting viewers select their preferred language at playback. Wowza Streaming Engine supports multiple WebVTT language tracks for live streams. Wowza Streaming Engine does not support multiple caption languages with SRT or SCC companion files for VOD, so multi-language VOD captions require WebVTT or TTML files.

Search, Indexing, and AI

Caption text gives search engines and AI systems a machine-readable record of spoken content. Captions can extend the discoverability of video assets, surface relevant moments in long-form content, and feed downstream tools like transcription archives, video chaptering, and content moderation.

Cross-Device and Cross-Player Compatibility

Every modern browser, mobile operating system, and HTML5 player reads WebVTT without third-party plugins. That consistency removes a class of integration headaches that older formats still create.

How Does WebVTT Work With HLS and DASH?

Both HLS and DASH protocols carry a WebVTT caption track alongside the video for playback in compatible players.

In HLS, captions follow the media playlist conventions that Apple’s HLS specification defines. The master playlist references a separate WebVTT media playlist for each caption language. The player downloads the .vtt segments alongside the video segments and renders them in sync. Wowza Streaming Engine generates these caption playlists automatically when WebVTT delivery is part of the application configuration.

For DASH, WebVTT files travel as part of the manifest’s caption AdaptationSet. Wowza Streaming Engine serves WebVTT captions as sidecar files, the same way it does for HLS (MPEG-TS), and uses the same caption playlist format for both HLS variants (though WebVTT captions are not currently available for LL-HLS streams). In CMAF MPEG-DASH, the captions are listed in a separate AdaptationSet in the manifest. Wowza Streaming Engine 4.9.7 added CEA-608/708 and WebVTT caption support for live CMAF HLS and CMAF MPEG-DASH streams, so one caption source can serve both protocols from a single CMAF packaging workflow.

How Does Wowza Streaming Engine Generate and Deliver WebVTT Captions?

For live streams that already carry CEA-608/708 captions in the video track, Wowza Streaming Engine passes the captions through and converts them to WebVTT for HLS and CMAF output (excluding LL-HLS). For streams that carry onTextData events, the engine reads those events and generates WebVTT tracks. If the stream has no embedded captions, the Wowza Caption Handlers plugin integrates with automatic speech recognition (ASR) engines, including Azure AI Speech Services and OpenAI Whisper, to transcribe the audio in real time and add captions that Wowza Streaming Engine delivers as WebVTT. The Caption Handlers plugin requires Wowza Streaming Engine 4.9.4 or later, Java 21, and the Transcoder. The Whisper option also requires a self-hosted Whisper server.

VOD workflows follow a similar pattern. Wowza Streaming Engine can read companion caption files in WebVTT, SRT, SCC, or TTML formats. When the application has the cupertinoVODCaptionsUseWebVTT property enabled, a WebVTT companion file is delivered as WebVTT tracks in HLS VOD streams. SRT, SCC, and TTML companion files are delivered as CEA-608 captions in HLS or as onTextData events in RTMP.

How To Convert SRT To WebVTT

Converting an SRT file to WebVTT follows a three-step process. First, add a WEBVTT header line at the top of the file. Then, replace the comma before the milliseconds in each timestamp with a period (so 00:00:01,000 becomes 00:00:01.000). Finally, save the file with a .vtt extension. WebVTT treats SRT cue numbers as optional cue identifiers, so they can stay in the file.

For video on-demand (VOD) files, Wowza Streaming Engine reads SRT companion files directly when three conditions hold:

  • The caption file shares the video file’s root name, such as sample.srt for sample.mp4.
  • The caption file sits in the same content folder as the video file.
  • The application has the SRT caption provider enabled in its Closed Captions settings.

Because URL query parameters do not work for ABR streams with captions, adaptive bitrate VOD streams need the SMIL file to reference the caption file.

How To Convert DVB Teletext Subtitles To WebVTT

Broadcast sources often carry subtitles as DVB Teletext inside an MPEG-TS stream. Wowza Streaming Engine ingests DVB Teletext subtitle data from live MPEG-TS streams through a custom application property. Two optional stream-file settings identify the subtitle page: mpegtsDVBTeletextMagazineNumber and mpegtsDVBTeletextPageNumber. Then, the subtitles are delivered as WebVTT tracks in HLS and CMAF streams. A setting labeled mpegtsDVBTeletextDebugLog confirms whether Wowza Streaming Engine is receiving subtitle data during testing.

Why Aren’t WebVTT Captions Appearing?

If WebVTT captions are missing in Wowza Streaming Engine, it can usually be traced back to one of four root causes:

  1. A VOD caption file has a different root name than the video file, or is stored in a different folder.
  2. The application does not have a caption provider enabled.
  3. The SMIL file for an adaptive bitrate stream has no caption entry.
  4. A live DASH stream is packaged with the standard MPEG-DASH packetizer instead of CMAF.

WebVTT has become the default caption format for modern streaming. Native player support, multilingual encoding, styling controls, and tight integration with HLS and DASH all reinforce WebVTT’s role as the connective tissue between video and timed text. WebVTT delivers a standards-based path that scales across protocols, devices, and audiences so teams can build accessible, compliance-sensitive streaming architectures.

Wowza Streaming Engine generates, converts, and delivers WebVTT captions natively for live HLS and CMAF streams, and for HLS VOD streams. To explore the captioning capabilities firsthand, talk to a Wowza expert.

Frequently Asked Questions

What is a VTT file?

A VTT file is a plain-text WebVTT caption file with the .vtt extension that contains timed caption or subtitle cues for video playback. The file opens with a WEBVTT header, followed by cues that pair a timecode range with the text that appears during that interval. Modern browsers and HTML5 players read .vtt files natively through the <track> element.

What is the difference between WebVTT and SRT?

WebVTT extends the SRT format with several features that SRT lacks:

  • UTF-8 character encoding for multilingual content
  • Cue positioning and alignment settings
  • CSS styling support
  • Metadata blocks

SRT remains common for simple subtitle distribution and file sharing, but most modern players either prefer WebVTT directly or convert SRT to WebVTT before rendering. SRT timestamps also use a comma before the milliseconds (00:00:01,000), while WebVTT uses a period (00:00:01.000).

Does WebVTT support styling?

WebVTT supports both inline formatting tags and broader CSS styling. Inline tags include <b>, <i>, and <u>, along with custom classes through <c.classname>. STYLE blocks in the file header apply CSS rules across cues, and cue settings control vertical and horizontal positioning, alignment, and box size within the video frame.

Does WebVTT work with HLS and DASH?

WebVTT works natively with both HTTP Live Streaming (HLS) and Dynamic Adaptive Streaming over HTTP (DASH). HLS references WebVTT caption playlists alongside the video media playlists, and DASH carries WebVTT files in the manifest’s caption AdaptationSet. For live streams, CMAF packaging allows the same WebVTT source to serve both protocols from a single workflow.

Is WebVTT a W3C standard?

WebVTT is a W3C specification that the Timed Text Working Group publishes. The current version is a Candidate Recommendation Draft, which means the W3C has not yet published it as a final Recommendation. That said, browsers and streaming players already support the format widely.

How do I convert SRT to WebVTT?

Converting SRT to WebVTT requires adding a WEBVTT header line at the top of the file, replacing the comma in each timestamp with a period, and saving the file with a .vtt extension. SRT cue numbers can stay, because WebVTT treats them as optional.

What is the MIME type for VTT files?

The MIME type for VTT files is text/vtt, which the WebVTT specification registers. Web servers should deliver .vtt caption files with this MIME type.

Can Wowza Streaming Engine convert Teletext subtitles to WebVTT?

Wowza Streaming Engine ingests DVB Teletext subtitle data from live MPEG-TS streams using a custom application property to enable DVB Teletext ingest, plus optional stream-file settings for the Teletext magazine and page numbers, then delivers the subtitles as WebVTT tracks in HLS and CMAF streams.

Does Wowza Streaming Engine support DVB-TTML?

Wowza Streaming Engine does support TTML as a companion caption file format for video-on-demand streams.

Wowza Streaming Engine: Flexible, Extensible, & Reliable Streaming

About Ian Zenoni

Ian Zenoni has been in the video industry for over 20 years and at Wowza for over 10. While at Wowza Ian has architected, built, and deployed solutions and services for live video streaming, both in the cloud and on premises. As Principal Video Engineer Ian researches the latest technology in video streaming to integrate into Wowza’s products and services. He is also a co-organizer of the local Denver Video meetup group that meets quarterly in the Denver metro area.
View More

FREE TRIAL

Live stream and Video On Demand for the web, apps, and onto any device. Get started in minutes.

START STREAMING!
  • Stream with WebRTC, HLS and MPEG-DASH
  • Fully customizable with REST and Java APIs
  • Integrate and embed into your apps

Search Wowza Resources


Subscribe


Follow Us


Categories

Blog

Back to All Posts