HTTP/2 301
content-length: 162
content-type: text/html
date: Thu, 16 Oct 2025 00:33:04 GMT
location: https://developer.mozilla.org/en-US/docs/Web/API/VideoTrackList
server: nginx
strict-transport-security: max-age=60; includeSubDomains
via: 1.1 google
alt-svc: h3=":443"; ma=2592000,h3-29=":443"; ma=2592000
HTTP/2 200
content-type: text/html
x-guploader-uploadid: AAwnv3INC2vx5anLhaDTO_UqkKvlLS-E5U_PMvRYibZUGlJl8lBHUhmuNNgr6hSJGhP_Qtyf
cache-control: public, max-age=3600
expires: Thu, 16 Oct 2025 01:33:04 GMT
last-modified: Wed, 15 Oct 2025 09:09:55 GMT
etag: W/"a50635d0eb387c82171f77fd6d9cd62b"
x-goog-generation: 1760519394955139
x-goog-metageneration: 1
x-goog-stored-content-encoding: identity
x-goog-stored-content-length: 147538
x-goog-meta-goog-reserved-file-mtime: 1760517662
x-goog-hash: crc32c=8u7VzA==, md5=pQY10Os4fIIXH3f9bZzWKw==
x-goog-storage-class: STANDARD
accept-ranges: none
alt-svc: h3=":443"; ma=2592000,h3-29=":443"; ma=2592000
alt-svc: clear
referrer-policy: strict-origin-when-cross-origin
x-content-type-options: nosniff
strict-transport-security: max-age=63072000
content-security-policy: default-src 'self'; script-src 'report-sample' 'self' 'wasm-unsafe-eval' https://www.google-analytics.com/analytics.js https://www.googletagmanager.com/gtag/js assets.codepen.io production-assets.codepen.io https://js.stripe.com 'sha256-XNBp89FG76amD8BqrJzyflxOF9PaWPqPqvJfKZPCv7M=' 'sha256-YCNoU9DNiinACbd8n6UPyB/8vj0kXvhkOni9/06SuYw=' 'sha256-PZjP7OR6mBEtnvXIZfCZ5PuOlxoDF1LDZL8aj8c42rw='; script-src-elem 'report-sample' 'self' 'wasm-unsafe-eval' https://www.google-analytics.com/analytics.js https://www.googletagmanager.com/gtag/js assets.codepen.io production-assets.codepen.io https://js.stripe.com 'sha256-XNBp89FG76amD8BqrJzyflxOF9PaWPqPqvJfKZPCv7M=' 'sha256-YCNoU9DNiinACbd8n6UPyB/8vj0kXvhkOni9/06SuYw=' 'sha256-PZjP7OR6mBEtnvXIZfCZ5PuOlxoDF1LDZL8aj8c42rw='; style-src 'report-sample' 'self' 'unsafe-inline'; object-src 'none'; base-uri 'self'; connect-src 'self' developer.allizom.org bcd.developer.allizom.org bcd.developer.mozilla.org updates.developer.allizom.org updates.developer.mozilla.org https://*.google-analytics.com https://*.analytics.google.com https://*.googletagmanager.com https://incoming.telemetry.mozilla.org https://observatory-api.mdn.allizom.net https://observatory-api.mdn.mozilla.net https://api.github.com/search/issues stats.g.doubleclick.net https://api.stripe.com; font-src 'self'; frame-src 'self' interactive-examples.mdn.mozilla.net interactive-examples.mdn.allizom.net mdn.github.io live-samples.mdn.mozilla.net live-samples.mdn.allizom.net *.mdnplay.dev *.mdnyalp.dev *.play.test.mdn.allizom.net https://v2.scrimba.com https://scrimba.com jsfiddle.net www.youtube-nocookie.com codepen.io survey.alchemer.com https://js.stripe.com; img-src 'self' data: *.githubusercontent.com *.googleusercontent.com *.gravatar.com mozillausercontent.com firefoxusercontent.com profile.stage.mozaws.net profile.accounts.firefox.com developer.mozilla.org mdn.dev interactive-examples.mdn.mozilla.net interactive-examples.mdn.allizom.net wikipedia.org upload.wikimedia.org https://mdn.github.io/shared-assets/ https://mdn.dev/ https://*.google-analytics.com https://*.googletagmanager.com www.gstatic.com; manifest-src 'self'; media-src 'self' archive.org videos.cdn.mozilla.net https://mdn.github.io/shared-assets/; child-src 'self'; worker-src 'self';
x-frame-options: DENY
origin-trial: AxVILwizhbMjxFeHOn1P3R8niO1RJY/smaK4B4d1rLzc1gTaxtXMSaTi+FoigYgCw40uFRDwFcEAeqDR+vVLOW4AAABfeyJvcmlnaW4iOiJodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZyIsImZlYXR1cmUiOiJQcml2YXRlQXR0cmlidXRpb25WMiIsImV4cGlyeSI6MTc0MjA3OTYwMH0=
x-cloud-trace-context: d90cc8e88cb4481f6b7ae30550f0a1d0
date: Thu, 16 Oct 2025 00:33:05 GMT
server: Google Frontend
via: 1.1 google
vary: Accept-Encoding
content-encoding: gzip
x-cache: miss
VideoTrackList - Web APIs | MDN
This interface also inherits properties from its parent interface, EventTarget
.
length
Read only
The number of tracks in the list.
selectedIndex
Read only
The index of the currently selected track, if any, or −1
otherwise.
This interface also inherits methods from its parent interface, EventTarget
.
getTrackById()
Returns the VideoTrack
found within the VideoTrackList
whose id
matches the specified string. If no match is found, null
is returned.
addtrack
Fired when a new video track has been added to the media element.
Also available via the onaddtrack
property.
change
Fired when a video track has been made active or inactive.
Also available via the onchange
property.
removetrack
Fired when a new video track has been removed from the media element.
Also available via the onremovetrack
property.
In addition to being able to obtain direct access to the video tracks present on a media element, VideoTrackList
lets you set event handlers on the addtrack
and removetrack
events, so that you can detect when tracks are added to or removed from the media element's stream.
To get a media element's VideoTrackList
, use its videoTracks
property.
const videoTracks = document.querySelector("video").videoTracks;
In this example, we have an app that displays information about the number of channels available. To keep it up to date, handlers for the addtrack
and removetrack
events are set up.
videoTracks.onaddtrack = updateTrackCount;
videoTracks.onremovetrack = updateTrackCount;
function updateTrackCount(event) {
trackCount = videoTracks.length;
drawTrackCountIndicator(trackCount);
}