Player.useMedia
Hook to access the underlying media element from within a Player.Provider
Player.useMedia returns the current HTMLMediaElement (or null if no media element has been registered yet). Use it to interact directly with the native media element when needed. It must be called within a Player.Provider. The media element becomes available after a <Video> or <Audio> component mounts inside the provider tree. Also available as a standalone import (import { useMedia } from '@videojs/react') — identical behavior, no typing difference. To register a custom media element instead of the built-in components, see useMediaRegistration.
Examples
Basic Usage
import { createPlayer } from '@videojs/react';
import { Video, videoFeatures } from '@videojs/react/video';
import './BasicUsage.css';
const Player = createPlayer({
features: videoFeatures,
});
function MediaInfo() {
const media = Player.useMedia();
if (!media) return null;
return (
<dl className="react-use-media-basic__info">
<div>
<dt>tagName</dt>
<dd>{media.tagName.toLowerCase()}</dd>
</div>
<div>
<dt>src</dt>
<dd>{media.currentSrc || '—'}</dd>
</div>
<div>
<dt>videoWidth</dt>
<dd>{media.videoWidth}px</dd>
</div>
<div>
<dt>videoHeight</dt>
<dd>{media.videoHeight}px</dd>
</div>
</dl>
);
}
export default function BasicUsage() {
return (
<Player.Provider>
<Player.Container className="react-use-media-basic">
<Video
src="https://stream.mux.com/BV3YZtogl89mg9VcNBhhnHm02Y34zI1nlMuMQfAbl3dM/highest.mp4"
autoPlay
muted
playsInline
loop
/>
<MediaInfo />
</Player.Container>
</Player.Provider>
);
}
.react-use-media-basic {
position: relative;
}
.react-use-media-basic video {
width: 100%;
}
.react-use-media-basic__info {
display: flex;
flex-direction: column;
gap: 4px;
margin: 0;
padding: 12px;
background: rgba(0, 0, 0, 0.05);
border-top: 1px solid rgba(0, 0, 0, 0.1);
font-size: 0.8125rem;
}
.react-use-media-basic__info div {
display: flex;
gap: 8px;
}
.react-use-media-basic__info dt {
color: #6b7280;
min-width: 80px;
}
.react-use-media-basic__info dd {
margin: 0;
font-variant-numeric: tabular-nums;
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
}
API Reference
Return Value
Media | null