Video is used for media layout.
Props
Accessibility
Captions
Captions are intended for deaf and hard-of-hearing audiences. Captions are usually in the same language as the audio. Please, read the differences between captions and subtitles.
Read more about adding captions to video.
The following example uses an excerpt from the Sintel open movie, created by the Blender Foundation.
Labels
Video requires several accessibility labels for each video control: accessibilityMaximizeLabel
, accessibilityMinimizeLabel
, accessibilityMuteLabel
, accessibilityPauseLabel
, accessibilityPlayLabel
, accessibilityProgressBarLabel
and accessibilityUnmuteLabel
.
If the video contain captions, it also requires accessibilityHideCaptionsLabel
and accessibilityShowCaptionsLabel
.
Variants
Autoplay and error detection
Autoplay or automatically starting the playback of the video requires the autoplay
prop. While autoplay of media serves a useful purpose, it should be used carefully and only when needed. In order to give users control over this, browsers often provide various forms of autoplay blocking.
Autoplay blocking is not applied to video elements when the source media doesn't have an audio track or is muted.
Gestalt Video provides a comprehensive API to handle gracefully autoplay blocking and prevent UI and/or client errors. The example below shows how to correctly handle autoplay error detection.
If autoplay
is set, use onPlay
to detect when the video starts playing and display the pause control accordingly. In case autoplay
gets blocked, onPlay
would never get triggered and controls will still display the play control.
onPlayError
is another error-handling callback. In this case, onPlayError
detects if the HTMLMediaElement.play() method fails. HTMLMediaElement.play() returns a Promise and onPlayError
catches the error if the Promise is rejected. Display the pause control if any error is detected.
If autoplay
is set, don't set the initial playing
state to true as both will attempt to autoplay the video. We recommend setting autoplay
, using onPlay
to detect when the video is played and setting playing
to true. If the initial playing
state is set to true, don't set autoplay
. If both autoplay
and the initial playing
state are set to true, autoplay
has preference.
For more information about autoplay, check the MDN Web Docs: video, MDN Web Docs: HTMLMediaElement.autoplay, and the MDN Web Docs: Autoplay guide for media and Web Audio APIs.
Video controls
Video components can show a control bar to users in order to allow them access to certain features such as play/pause, timestamps, mute, and fullscreen. Pass in the controls
prop to make them appear. The Video controls
are custom; they aren't the native video controls.
With children
Video component can show components in the children
prop on top of the html video element, while under the controls.
The children of Video aren't same as the children of the html video element; they're "outside" the html video element.
Video updates
Video is robust enough to handle any updates, such as changing the source, volume, or speed.
Multiple video sources
Not all browsers support the same video encoding types. If you have multiple video file sources, you can pass them as a list to Video in the order you want the HTML video tag to use as fallbacks.
Component quality checklist
Quality item | Status | Status description |
---|---|---|
Figma Library | Partially ready | Component is live in Figma, however may not be available for all platforms. |
Responsive Web | Ready | Component is available in code for web and mobile web. |
iOS | Component is not currently available in code for iOS. | |
Android | Component is not currently available in code for Android. |