0.1.0 • Published 1 year ago

@driift/player-react v0.1.0

Weekly downloads
-
License
-
Repository
-
Last release
1 year ago

player-react

Driift's video player supporting HTML5 video and modern streaming formats, built for use in React. Written in TypeScript, leveraging Video.js, and published via NPM.

Usage

Install

Use your package manager of choice to install the npm package:

npm install @driift/player-react --save
pnpm add @driift/player-react

In practice

In your React application...

import React from 'react'
import { Player } from '@driift/player-react'

function App() {
  // Event handlers

  return (
    <Player
      src="//d2zihajmogu5jn.cloudfront.net/bipbop-advanced/bipbop_16x9_variant.m3u8"
      onMounted={handlePlayerMounted}
      onPlay={handlePlay}
      onPause={handlePause}
      onSeeked={handleSeek}
      onFullscreenChange={handleToggleFullscreen}
      onDispose={handleExit}
    />
  )
}

Component Props

All parameters are optional except src or sources, one of which is required. Video.js determines the default value of most props, although several props are tailored to the Driift experience. Namely:

Prop NameDriift Default
autoplaytrue
controlstrue
className'vjs-big-play-centered'
crossorigin'anonymous'
fluidtrue
playsInlinetrue

In the table below, "responsive" indicates that Video.js will automatically respond to any updates passed into the given prop, e.g. a change in volume will cause the player to change the volume.

Prop NameVideo.js API Doc & DescriptionTypeResponsive
idoptions.idString
src (required or sources)options.srcString
sourcesoptions.sourcesArray
widthoptions.widthNumber
heightoptions.heightNumber
preloadoptions.preloadString
loopoptions.loopBoolean
mutedoptions.mutedBoolean
posteroptions.posterString
controlsoptions.controlsBoolean
autoplayoptions.autoplayBoolean \| String
playsinlineoptions.playsinlineBoolean
crossoriginoptions.crossOriginString
volumeA number, between 0 and 1, control the volume of the player.Number
playbackRateControl the playback rate of the player.Number
playbackRatesoptions.playbackRatesArray<Number>
fluidoptions.fluidBoolean
filloptions.fillBoolean
languageoptions.languageString
languagesoptions.languagesObject
tracksoptions.tracksArray
textTrackSettingsoptions.textTrackSettingsObject
responsiveoptions.responsiveBoolean
breakpointsoptions.breakpointsObject
fullscreenoptions.fullscreenFullscreenOptions
aspectRatiooptions.aspectRatioBoolean
liveuioptions.liveuiBoolean
liveTrackeroptions.liveTrackerObject
disablePictureInPictureoptions.disablePictureInPictureBoolean
notSupportedMessageoptions.notSupportedMessageString
normalizeAutoplayoptions.normalizeAutoplayBoolean
audioPosterModeoptions.audioPosterModeBoolean
audioOnlyModeoptions.audioOnlyModeBoolean
noUITitleAttributesoptions.noUITitleAttributesBoolean
preferFullWindowoptions.preferFullWindowBoolean
suppressNotSupportedErroroptions.suppressNotSupportedErrorBoolean
techCanOverridePosteroptions.techCanOverridePosterBoolean
techOrderoptions.techOrderArray
inactivityTimeoutoptions.inactivityTimeoutNumber
userActionsoptions.userActionsObject
restoreEloptions.restoreElBoolean \| Element
vtt.jsoptions['vtt.js']String
videoJsChildrenoptions.childrenArray \| Object
html5options.html5Object
pluginsoptions.pluginsObject
optionsA fallback scheme, if you need to use options that don't exist in props, pass them to options.VideoJsPlayerOptions

Component Events

Events emitted by Video.js; every event's argument type is always EventTarget.

Video.js Event🫥 🫥 🫥 🫥 🫥 🫥Component event
event.loadstart-onLoadStart
event.suspend-onSuspend
event.abort-onAbort
event.error-onError
event.emptied-onEmptied
event.stalled-onStalled
event.loadedmetadata-onLoadedMetadata
event.loadeddata-onLoadedData
event.canplay-onCanPlay
event.canplaythrough-onCanPlayThrough
event.playing-onPlaying
event.waiting-onWaiting
event.seeking-onSeeking
event.seeked-onSeeked
event.ended-onEnded
event.durationchange-onDurationChange
event.timeupdate-onTimeUpdate
event.progress-onProgress
event.play-onPlay
event.pause-onPause
event.ratechange-onRateChange
event.resize-onResize
event.volumechange-onVolumeChange
event.posterchange-onPosterChange
event.languagechange-onLanguageChange
event.fullscreenchange-onFullscreenChange
event.playbackrateschange-onPlaybackRatesChange
event.controlsdisabled-onControlsDisabled
event.controlsenabled-onControlsEnabled
event.enterFullWindow-onEnterFullWindow
event.exitFullWindow-onExitFullWindow
event.enterpictureinpicture-onEnterPictureInPicture
event.leavepictureinpicture-onLeavePictureInPicture
event.sourceset-onSourceSet
event.texttrackchange-onTextTrackChange
event.textdata-onTextData
event.useractive-onUserActive
event.userinactive-onUserInactive
event.usingcustomcontrols-onUsingCustomControls
event.usingnativecontrols-onUsingNativeControls
event.dispose-onDispose
event.beforepluginsetup-onBeforePluginSetup
event.pluginsetup-onPluginSetup
event.componentresize-onComponentResize
event.playerresize-onPlayerResize
event.tap-onTap
event.ready-onReady

Events emitted by the @driift/player-react component:

Component EventDescriptionReact
mountedFires when player component mounted. ({ video: HTMLVideoElement, player: VideoJsPlayer, state: VideoPlayerState })onMounted
unmountedFires when player component unmounted.onUnmounted
stateChangeFires when player state changed. (state: VideoPlayerState)onStateChange

Player State

The component maintains a fully responsive state object reflecting the internally state of the Video.js player. This allows you to consume the player state out-of-the-box, outside the player. You can get this object via the mounted or stateChange event.

KeyDescriptionValue type
srcThe URL of the currently playing video.String
currentSrcdittoString
currentSourceThe currently playing video source object.videojs.Tech.SourceObject
widthPlayer's width.Number
heightPlayer's height.Number
currentWidthdittoNumber
currentHeightdittoNumber
videoWidthVideo element's width.Number
videoHeightVideo element's height.Number
controlsWhether player controls are enabled or not.Boolean
volumePlayer's volume.Number
mutedIs the player muted.Boolean
posterPlayer poster image URL.String
playingIs it playing now.Boolean
waitingIs it waiting now.Boolean
seekingA seek operation began.Boolean
pausedPlayback has been paused.Boolean
endedPlayback has stopped because the end of the media was reached.Boolean
currentTime-Number
duration-Number
playbackRate-Number
playbackRates-Array<Number>
isFullscreen-Boolean
isInPictureInPictureWhether it is picture-in-picture mode.Boolean
isLiveIs the currently playing live video.Boolean
languageVideo.js current language.String
userActive-Boolean
readyState-videojs.ReadyState
networkState-videojs.NetworkState
errorA Custom MediaError of Video.js.MediaError \| Null
bufferedAn object that contains ranges of time.videojs.TimeRange
bufferedPercent-Number
played-TimeRanges
seekable-TimeRanges
textTracks-videojs.TextTrackList
audioTracks-videojs.AudioTrackList
videoTracks-videojs.VidioTrackList

Questions & troubleshooting

For how-to questions or problems that may involve making changes to the code base, please use GitHub issues or reach out to the Driift engineering team directly.

Contributing

Coming soon...

Development

Soon I say!

Testing

Like...sometime in 2023.

CI-CD

It's happening, really!

Publishing

Automatic via semantic-release...also coming soon.

0.1.0

1 year ago

0.0.3

1 year ago

0.0.2

1 year ago

0.0.1

1 year ago