docs.rodeo

MDN Web Docs mirror

: The Embed Text Track element

{{HTMLSidebar}} 

The <track> HTML element is used as a child of the media elements, {{HTMLElement("audio")}}  and {{HTMLElement("video")}} . Each track element lets you specify a timed text track (or time-based data) that can be displayed in parallel with the media element, for example to overlay subtitles or closed captions on top of a video or alongside audio tracks.

Multiple tracks can be specified for a media element, containing different kinds of timed text data, or timed text data that has been translated for different locales. The data that is used will either be the track that has been set to be the default, or a kind and translation based on user preferences.

The tracks are formatted in WebVTT format (.vtt files) — Web Video Text Tracks.

{{EmbedInteractiveExample("pages/tabbed/track.html", "tabbed-standard")}} 

Attributes

This element includes the global attributes.

Usage notes

Track data types

The type of data that track adds to the media is set in the kind attribute, which can take values of subtitles, captions, chapters or metadata. The element points to a source file containing timed text that the browser exposes when the user requests additional data.

A media element cannot have more than one track with the same kind, srclang, and label.

Detecting cue changes

The underlying {{domxref("TextTrack")}} , indicated by the {{domxref("HTMLTrackElement.track", "track")}}  property, receives a cuechange event every time the currently-presented cue is changed. This happens even if the track isn’t associated with a media element.

If the track is associated with a media element, using the <track> element as a child of the {{HTMLElement("audio")}}  or {{HTMLElement("video")}}  element, the cuechange event is also sent to the {{domxref("HTMLTrackElement")}} .

let textTrackElem = document.getElementById("text-track");

textTrackElem.addEventListener("cuechange", (event) => {
  let cues = event.target.track.activeCues;
});

Adding text tracks programmatically

The JavaScript interface that represents the <track> element is {{domxref("HTMLTrackElement")}} . The text track associated with an element can be obtained from the {{domxref("HTMLTrackElement.track")}}  property, and is of type {{domxref("TextTrack")}} .

TextTrack objects also can be added to a {{domxref("HTMLVideoElement")}}  or {{domxref("HTMLAudioElement")}}  elements using the {{domxref("HTMLMediaElement.addTextTrack()")}}  method. The TextTrack objects associated with a media element stored in a {{domxref("TextTrackList")}} , which can be retrieved using the {{domxref("HTMLMediaElement.textTracks")}}  property.

Examples

<video controls poster="/images/sample.gif">
  <source src="sample.mp4" type="video/mp4" />
  <source src="sample.ogv" type="video/ogv" />
  <track kind="captions" src="sampleCaptions.vtt" srclang="en" />
  <track kind="chapters" src="sampleChapters.vtt" srclang="en" />
  <track kind="subtitles" src="sampleSubtitles_de.vtt" srclang="de" />
  <track kind="subtitles" src="sampleSubtitles_en.vtt" srclang="en" />
  <track kind="subtitles" src="sampleSubtitles_ja.vtt" srclang="ja" />
  <track kind="subtitles" src="sampleSubtitles_oz.vtt" srclang="oz" />
  <track kind="metadata" src="keyStage1.vtt" srclang="en" label="Key Stage 1" />
  <track kind="metadata" src="keyStage2.vtt" srclang="en" label="Key Stage 2" />
  <track kind="metadata" src="keyStage3.vtt" srclang="en" label="Key Stage 3" />
  <!-- Fallback --></video>

Technical summary

Content categories None
Permitted content None; it is a `{{Glossary("void element")}}` .
Tag omission Must have a start tag and must not have an end tag.
Permitted parents

A media element, `{{HTMLElement("audio")}}`  or `{{HTMLElement("video")}}` .

Implicit ARIA role No corresponding role
Permitted ARIA roles No role permitted
DOM interface `{{domxref("HTMLTrackElement")}}` 

Specifications

{{Specifications}} 

Browser compatibility

{{Compat}} 

See also

In this article

View on MDN