Player.useMedia
Hook to access the media object from within a Player.Provider
Player.useMedia (from createPlayer) returns the current Media object (or null if no media has been registered yet). Media is a runtime-agnostic playback interface — any instance that conforms to it, including an HTMLVideoElement, can be the media. It exposes capabilities like play() and event subscription rather than assuming a native element. It must be called within a Player.Provider. The media object becomes available after a <Video> or <Audio> component mounts inside the provider tree. To attach a custom media element instead of the built-in components, see useMediaAttach.
Examples
Basic Usage
import { createPlayer, isMediaSourceCapable, isMediaVideoDimensionsCapable } from '@videojs/react';
import { Video, videoFeatures } from '@videojs/react/video';
const Player = createPlayer({
features: videoFeatures,
});
function MediaInfo() {
const media = Player.useMedia();
if (!media) return null;
return (
<dl className="info-panel">
{isMediaSourceCapable(media) && (
<div>
<dt>src</dt>
<dd>{media.currentSrc || '—'}</dd>
</div>
)}
{isMediaVideoDimensionsCapable(media) && (
<>
<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="media-container">
<Video
src="https://stream.mux.com/BV3YZtogl89mg9VcNBhhnHm02Y34zI1nlMuMQfAbl3dM/highest.mp4"
autoPlay
muted
playsInline
loop
/>
<MediaInfo />
</Player.Container>
</Player.Provider>
);
}
.media-container {
position: relative;
}
.media-container video {
width: 100%;
}
.info-panel {
display: flex;
flex-direction: column;
gap: 4px;
padding: 12px;
margin: 0;
font-size: 0.8125rem;
background: rgba(0, 0, 0, 0.05);
border-top: 1px solid rgba(0, 0, 0, 0.1);
}
.info-panel div {
display: flex;
gap: 8px;
}
.info-panel dt {
min-width: 80px;
color: #6b7280;
}
.info-panel dd {
margin: 0;
overflow: hidden;
text-overflow: ellipsis;
font-variant-numeric: tabular-nums;
white-space: nowrap;
}
API Reference
Return Value
Media | null