Skip to content
FrameworkStyle

HlsJsVideo

HLS video element powered by hls.js for adaptive bitrate streaming

HLS video element powered by hls.js for adaptive bitrate streaming, with full feature support across every browser. It’s more compatible than the default HlsVideo, which is smaller and covers most HLS playback. For browser-native playback, see NativeHlsVideo.

Import

pnpm add @videojs/react @videojs/hlsjs-video
import { HlsJsVideo } from '@videojs/react/media/hlsjs-video';

Examples

Basic Usage

import { HlsJsVideo } from '@videojs/react/media/hlsjs-video';

export default function BasicUsage() {
  return <HlsJsVideo className="hlsjs-video" src="https://stream.mux.com/BV3YZtogl89mg9VcNBhhnHm02Y34zI1nlMuMQfAbl3dM.m3u8" autoPlay muted playsInline loop />;
}

API Reference

Props

Accepts the standard React props for a native <video>, plus these Video.js-specific props:

PropTypeDefaultDetails
disableRemotePlaybackunknownfalse
preloadMediaPreloadType'metadata'
source{ src?: string; type?: SourceType; preferPlayback?: PlaybackType; drm?: DrmSystemsConfig; maxAutoResolution?: MediaResolution; capRenditionToPlayerSize?: boolean; minAutoResolution?: MediaResolution; engine?: HlsEngineConfig } | nullnull
srcstring''
streamTypeMediaStreamType"unknown"

Engine options

source.engine.hlsJs

Pass hls.js’s own configuration here. It’s handed to hls.js untouched, so every option in its config reference works, spelled the way hls.js spells it. Media Sources covers how engine options fit into a structured source.

The names and types below come from hls.js’s own type definitions, so they tell you what exists and what shape it takes. hls.js documents what each one does; the descriptions are theirs to write, and most are blank here because its types carry none.

<HlsJsVideo
  source={{
    src: 'https://example.com/playlist.m3u8',
    engine: { hlsJs: { maxBufferLength: 30, lowLatencyMode: true } },
  }}
/>
OptionTypeDetails
abrBandWidthFactornumber | undefined
abrBandWidthUpFactornumber | undefined
abrControllertypeof AbrController | undefined
abrEwmaDefaultEstimatenumber | undefined
abrEwmaDefaultEstimateMaxnumber | undefined
abrEwmaFastLivenumber | undefined
abrEwmaFastVoDnumber | undefined
abrEwmaSlowLivenumber | undefined
abrEwmaSlowVoDnumber | undefined
abrMaxWithRealBitrateboolean | undefined
appendErrorMaxRetrynumber | undefined
assetPlayerIdstring | undefined
audioPreferenceAudioSelectionOption | undefined
audioStreamControllertypeof AudioStreamController | undefined
audioTrackControllertypeof AudioTrackController | undefined
autoStartLoadboolean | undefined
backBufferLengthnumber | undefined
bufferControllertypeof BufferController | undefined
capLevelControllertypeof CapLevelController | undefined
capLevelOnFPSDropboolean | undefined
capLevelToPlayerSizeboolean | undefined
captionsTextTrack1Labelstring | undefined
captionsTextTrack1LanguageCodestring | undefined
captionsTextTrack2Labelstring | undefined
captionsTextTrack2LanguageCodestring | undefined
captionsTextTrack3Labelstring | undefined
captionsTextTrack3LanguageCodestring | undefined
captionsTextTrack4Labelstring | undefined
captionsTextTrack4LanguageCodestring | undefined
certLoadPolicyLoadPolicy | undefined
cmcdCMCDControllerConfig | undefined
cmcdControllertypeof CMCDController | undefined
contentSteeringControllertypeof ContentSteeringController | un...
cueHandlerCuesInterface | undefined
debugboolean | ILogger | undefined
defaultAudioCodecstring | undefined
detectStallWithCurrentTimeMsnumber | undefined
drmSystemOptionsDRMSystemOptions | undefined
drmSystemsDRMSystemsConfiguration | undefined
emeControllertypeof EMEController | undefined
emeEnabledboolean | undefined
enableCEA708Captionsboolean | undefined
enableDateRangeMetadataCuesboolean | undefined
enableEmsgKLVMetadataboolean | undefined
enableEmsgMetadataCuesboolean | undefined
enableID3MetadataCuesboolean | undefined
enableIMSC1boolean | undefined
enableInterstitialPlaybackboolean | undefined
enableSoftwareAESboolean | undefined
enableWebVTTboolean | undefined
enableWorkerboolean | undefined
errorControllertypeof ErrorController | undefined
fetchSetupRequest) | undefined | function
fLoaderFragmentLoaderConstructor | undefined
forceKeyFrameOnDiscontinuityboolean | undefined
fpsControllertypeof FPSController | undefined
fpsDroppedMonitoringPeriodnumber | undefined
fpsDroppedMonitoringThresholdnumber | undefined
fragLoadingMaxRetrynumber | undefined
fragLoadingMaxRetryTimeoutnumber | undefined
fragLoadingRetryDelaynumber | undefined
fragLoadingTimeOutnumber | undefined
fragLoadPolicyLoadPolicy | undefined
frontBufferFlushThresholdnumber | undefined
highBufferWatchdogPeriodnumber | undefined
ignoreDevicePixelRatioboolean | undefined
ignorePlaylistParsingErrorsboolean | undefined
initialLiveManifestSizenumber | undefined
interstitialAppendInPlaceboolean | undefined
interstitialAssetListLoadPolicyLoadPolicy | undefined
interstitialLiveLookAheadnumber | undefined
interstitialsControllertypeof InterstitialsController | unde...
keyLoadPolicyLoadPolicy | undefined
levelLoadingMaxRetrynumber | undefined
levelLoadingMaxRetryTimeoutnumber | undefined
levelLoadingRetryDelaynumber | undefined
levelLoadingTimeOutnumber | undefined
licenseResponseCallbackundefined | function
licenseXhrSetupUint8Array | Promise<Uint8Array | void>) | undefined | function
liveBackBufferLengthnumber | null | undefined
liveDurationInfinityboolean | undefined
liveMaxLatencyDurationnumber | undefined
liveMaxLatencyDurationCountnumber | undefined
liveSyncDurationnumber | undefined
liveSyncDurationCountnumber | undefined
liveSyncMode'edge' | 'buffered' | undefined
liveSyncOnStallIncreasenumber | undefined
loaderobject
lowLatencyModeboolean | undefined
manifestLoadingMaxRetrynumber | undefined
manifestLoadingMaxRetryTimeoutnumber | undefined
manifestLoadingRetryDelaynumber | undefined
manifestLoadingTimeOutnumber | undefined
manifestLoadPolicyLoadPolicy | undefined
maxAudioFramesDriftnumber | undefined
maxBufferHolenumber | undefined
maxBufferLengthnumber | undefined
maxBufferSizenumber | undefined
maxDevicePixelRationumber | undefined
maxFragLookUpTolerancenumber | undefined
maxLiveSyncPlaybackRatenumber | undefined
maxLoadingDelaynumber | undefined
maxMaxBufferLengthnumber | undefined
maxStarvationDelaynumber | undefined
minAutoBitratenumber | undefined
nudgeMaxRetrynumber | undefined
nudgeOffsetnumber | undefined
nudgeOnVideoHoleboolean | undefined
playlistLoadPolicyLoadPolicy | undefined
pLoaderPlaylistLoaderConstructor | undefined
preferManagedMediaSourceboolean | undefined
preserveManualLevelOnErrorboolean | undefined
primarySessionIdstring | undefined
progressiveboolean | undefined
renderTextTracksNativelyboolean | undefined
requestMediaKeySystemAccessFuncMediaKeyFunc | null | undefined
requireKeySystemAccessOnStartboolean | undefined
startFragPrefetchboolean | undefined
startLevelnumber | undefined
startOnSegmentBoundaryboolean | undefined
startPositionnumber | undefined
steeringManifestLoadPolicyLoadPolicy | undefined
stretchShortVideoTrackboolean | undefined
subtitlePreferenceSubtitleSelectionOption | undefined
subtitleStreamControllertypeof SubtitleStreamController | und...
subtitleTrackControllertypeof SubtitleTrackController | unde...
testBandwidthboolean | undefined
timelineControllertypeof TimelineController | undefined
timelineOffsetnumber | undefined
useMediaCapabilitiesboolean | undefined
videoPreferenceVideoSelectionOption | undefined
widevineLicenseUrlstring | undefined
workerPathstring | null | undefined
xhrSetupvoid) | undefined | function

source.engine.nativeHls

When playback falls back to the browser’s own HLS, hls.js isn’t involved and its options don’t apply. This configures that path instead.

OptionTypeDetails
drmSystemsDrmSystemsConfig | undefined

Ref

Forwards its ref to the rendered <video>. The ref is an HTMLVideoElement and exposes its complete native property and method API.

Events

Handle standard media events with React event props such as onPlay and onTimeUpdate. For native events without a React prop, attach a listener through the ref with addEventListener.