native-hls-video
HLS video element using the browser's built-in HLS support
HLS video element that relies on the browser’s native HLS support. Works on Safari and other browsers with built-in HLS playback. For cross-browser HLS support, use HlsJsVideo instead.
Import
import { NativeHlsVideo } from '@videojs/react/media/native-hls-video';import '@videojs/html/media/native-hls-video';Or load it from the CDN:
<script type="module" src="https://cdn.jsdelivr.net/npm/@videojs/cdn@10.0.0-beta.32/media/native-hls-video.js"></script>Examples
Basic Usage
import { NativeHlsVideo } from '@videojs/react/media/native-hls-video';
export default function BasicUsage() {
return <NativeHlsVideo className="native-hls-video" src="https://stream.mux.com/BV3YZtogl89mg9VcNBhhnHm02Y34zI1nlMuMQfAbl3dM.m3u8" autoPlay muted playsInline loop />;
}
.native-hls-video {
width: 100%;
aspect-ratio: 16 / 9;
}
<media-container class="media-container">
<native-hls-video src="https://stream.mux.com/BV3YZtogl89mg9VcNBhhnHm02Y34zI1nlMuMQfAbl3dM.m3u8" autoplay muted playsinline loop></native-hls-video>
</media-container>
.media-container {
position: relative;
display: block;
width: 100%;
aspect-ratio: 16 / 9;
}
import '@videojs/html/ui/container';
import '@videojs/html/media/native-hls-video';
API Reference
Attributes
Forwards these standard media attributes to the internal <video>. See the MDN media element reference: autopictureinpictureautoplaycontrolscontrolslistcrossorigindisablepictureinpicturedisableremoteplaybackloadingloopmutedplaysinlineposterpreloadsrc
These Video.js-specific attributes configure media behavior:
| Attribute | Type | Default | Details |
|---|---|---|---|
stream-type | MediaStreamType | "unknown" | |
| |||
Properties
| Property | Type | Default | Details |
|---|---|---|---|
contentData | MediaContentData | undefined | — | |
| |||
engine | null | — | |
| |||
error | MediaError | null | — | |
| |||
isFullscreen | boolean | — | |
| |||
isPictureInPicture | boolean | — | |
| |||
liveEdgeStart | number | — | |
| |||
preload | MediaPreloadType | 'metadata' | |
| |||
source | { src?: string; drm?: DrmSystemsConfig; engine?: NativeHlsEngineConfig } | null | null | |
| |||
src | string | '' | |
| |||
streamType | MediaStreamType | "unknown" | |
| |||
targetLiveWindow | number | — | |
| |||
webkitCurrentPlaybackTargetIsWireless | boolean | undefined | — | |
| |||
webkitPresentationMode | WebKitPresentationMode | undefined | — | |
| |||
webkitSetPresentationMode | ((mode: WebKitPresentationMode) => void) | undefined | — | |
| |||
Also exposes these properties from the native media API. See HTMLVideoElement for details: autoplaybufferedcontrolscrossOrigincurrentSrccurrentTimedefaultMuteddefaultPlaybackRatedisablePictureInPicturedisableRemotePlaybackdurationendedloopmutedpausedplaybackRateplayedplaysInlineposterreadyStateremoteseekableseekingtextTrackstitlevideoHeightvideoWidthvolume
Engine options
source.engine.nativeHls
This element hands playback to the browser, so there’s no JavaScript engine to configure. This carries the one thing native playback still needs from you. Media Sources covers how engine options fit into a structured source.
<NativeHlsVideo
source={{
src: 'https://example.com/playlist.m3u8',
engine: {
nativeHls: {
drmSystems: { 'com.apple.fps': { licenseUrl: 'https://example.com/license' } },
},
},
}}
/>const video = document.querySelector('native-hls-video');
video.source = {
src: 'https://example.com/playlist.m3u8',
engine: {
nativeHls: {
drmSystems: { 'com.apple.fps': { licenseUrl: 'https://example.com/license' } },
},
},
};| Option | Type | Details |
|---|---|---|
drmSystems | DrmSystemsConfig | undefined | |
| ||
Methods
Supports these media methods. See HTMLVideoElement for details: addTextTrackcanPlayTypeexitFullscreenexitPictureInPictureloadpauseplayrequestFullscreenrequestPictureInPicture
Events
Re-dispatches these standard media events from the internal media element: abortaddtrackcanplaycanplaythroughchangecontentdatachangedurationchangeemptiedendedenterpictureinpictureerrorleavepictureinpictureloadeddataloadedmetadataloadstartpauseplayplayingprogressratechangeremovetrackresizeseekedseekingstalledsuspendtimeupdatevolumechangewaiting
Also emits these Video.js-specific events:
| Event | Description |
|---|---|
streamtypechange | Fired when the detected stream type changes. Read `streamType` for the new value. |
targetlivewindowchange | Fired when the target live window changes. Read `targetLiveWindow` for the new value. |
CSS custom properties
| Variable | Details |
|---|---|
--media-video-border-radius | |
| |
--media-object-fit | |
| |
--media-object-position | |
| |
--media-caption-track-duration | |
| |
--media-caption-track-delay | |
| |
--media-caption-track-y | |
| |