media-cast-button
Accessible Cast toggle button with state reflection and keyboard support
Anatomy
<CastButton /><media-cast-button></media-cast-button>Behavior
Toggles a Google Cast session. Clicking the button while disconnected opens the Cast device picker; clicking while connected ends the session.
The button does nothing when availability is not 'available' — for example, when no Chromecast is on the network, or on browsers that don’t support Cast.
Styling
Style based on cast state and availability:
/* During an active session */
media-cast-button[data-cast-state="connected"] {
color: blue;
}
/* Hide when Cast is unsupported (non-Chromium browsers) */
media-cast-button[data-availability="unsupported"] {
display: none;
} React renders a <button> element. Add a className to style it:
/* During an active session */
.cast-button[data-cast-state="connected"] {
color: blue;
}
/* Hide when Cast is unsupported (non-Chromium browsers) */
.cast-button[data-availability="unsupported"] {
display: none;
}Accessibility
Renders a <button> with an automatic aria-label:
| Cast state | Default label |
|---|---|
'disconnected' | ”Start casting” |
'connecting' | ”Connecting” |
'connected' | ”Stop casting” |
Override with the label prop. Keyboard activation: Enter / Space.
Examples
Basic Usage
import { CastButton, createPlayer } from '@videojs/react';
import { HlsVideo } from '@videojs/react/media/hls-video';
import { videoFeatures } from '@videojs/react/video';
const Player = createPlayer({ features: videoFeatures });
export default function BasicUsage() {
return (
<Player.Provider>
<Player.Container className="media-container">
<HlsVideo
src="https://stream.mux.com/BV3YZtogl89mg9VcNBhhnHm02Y34zI1nlMuMQfAbl3dM.m3u8"
autoPlay
muted
playsInline
loop
/>
<CastButton
className="media-cast-button"
render={(props, state) => (
<button {...props}>{state.castState === 'connected' ? 'Stop casting' : 'Start casting'}</button>
)}
/>
</Player.Container>
</Player.Provider>
);
}
.media-container {
position: relative;
}
.media-container video {
width: 100%;
}
.media-cast-button {
position: absolute;
right: 10px;
bottom: 10px;
padding-block: 8px;
padding-inline: 20px;
color: black;
cursor: pointer;
background: rgba(255, 255, 255, 0.7);
border: 1px solid rgba(255, 255, 255, 0.3);
border-radius: 9999px;
backdrop-filter: blur(10px);
}
.media-cast-button[data-availability="unsupported"] {
display: none;
}
<video-player class="video-player">
<media-container>
<hls-video
src="https://stream.mux.com/BV3YZtogl89mg9VcNBhhnHm02Y34zI1nlMuMQfAbl3dM.m3u8"
autoplay
muted
playsinline
loop
></hls-video>
<media-cast-button class="media-cast-button">
<span class="connected">Stop casting</span>
<span class="disconnected">Start casting</span>
</media-cast-button>
</media-container>
</video-player>
.video-player {
position: relative;
display: block;
}
.video-player video {
width: 100%;
}
.media-cast-button {
position: absolute;
right: 10px;
bottom: 10px;
padding-block: 8px;
padding-inline: 20px;
color: black;
cursor: pointer;
background: rgba(255, 255, 255, 0.7);
border: 1px solid rgba(255, 255, 255, 0.3);
border-radius: 9999px;
backdrop-filter: blur(10px);
}
.media-cast-button[data-availability="unsupported"] {
display: none;
}
.media-cast-button .connected {
display: none;
}
.media-cast-button .disconnected {
display: none;
}
.media-cast-button[data-cast-state="connected"] .connected {
display: inline;
}
.media-cast-button:not([data-cast-state="connected"]) .disconnected {
display: inline;
}
import '@videojs/html/video/player';
import '@videojs/html/media/hls-video';
import '@videojs/html/ui/cast-button';
API Reference
Props
| Prop | Type | Default | Details |
|---|---|---|---|
disabled | boolean | false | |
| |||
label | string | function | '' | |
| |||
State
State is accessible via the
render, className, and style props.
State is reflected as data attributes for CSS styling.
| Property | Type | Details |
|---|---|---|
castState | 'disconnected' | 'connecting' | 'conn... | |
| ||
availability | 'available' | 'unavailable' | 'unsupp... | |
| ||
label | string | |
Data attributes
| Attribute | Type | Details |
|---|---|---|
data-cast-state | 'disconnected' | 'connecting' | 'conn... | |
| ||
data-availability | 'available' | 'unavailable' | 'unsupp... | |
| ||