@videojs/html 10.0.0 → 10.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +2 -2
- package/dist/default/define/audio/compat-skin.css +42 -0
- package/dist/default/define/audio/compat-skin2.js +1 -1
- package/dist/default/define/audio/scaffold-skin.css +1771 -0
- package/dist/default/define/audio/scaffold-skin.js +6 -0
- package/dist/default/define/audio/scaffold-skin2.js +4 -0
- package/dist/default/define/live-audio/compat-skin.css +42 -0
- package/dist/default/define/live-audio/compat-skin2.js +1 -1
- package/dist/default/define/live-audio/scaffold-skin.css +1591 -0
- package/dist/default/define/live-audio/scaffold-skin.js +6 -0
- package/dist/default/define/live-audio/scaffold-skin2.js +4 -0
- package/dist/default/define/live-video/compat-skin.css +67 -23
- package/dist/default/define/live-video/compat-skin2.js +1 -1
- package/dist/default/define/live-video/neutral-skin.css +20 -9
- package/dist/default/define/live-video/neutral-skin2.js +1 -1
- package/dist/default/define/live-video/scaffold-skin.css +1976 -0
- package/dist/default/define/live-video/scaffold-skin.js +6 -0
- package/dist/default/define/live-video/scaffold-skin2.js +4 -0
- package/dist/default/define/live-video/skin.css +18 -7
- package/dist/default/define/live-video/skin2.js +1 -1
- package/dist/default/define/media/dash-video.js +1 -1
- package/dist/default/define/media/hls-video.js +1 -1
- package/dist/default/define/media/hlsjs-video.js +1 -1
- package/dist/default/define/media/native-hls-video.js +1 -1
- package/dist/default/define/media/playerjs-video.js +11 -0
- package/dist/default/define/video/compat-skin.css +67 -23
- package/dist/default/define/video/compat-skin2.js +1 -1
- package/dist/default/define/video/neutral-skin.css +26 -9
- package/dist/default/define/video/neutral-skin2.js +1 -1
- package/dist/default/define/video/scaffold-skin.css +2216 -0
- package/dist/default/define/video/scaffold-skin.js +6 -0
- package/dist/default/define/video/scaffold-skin2.js +4 -0
- package/dist/default/define/video/skin.css +24 -7
- package/dist/default/define/video/skin2.js +1 -1
- package/dist/default/extensions/mux-data/extension.js +1 -1
- package/dist/default/icons/dist/element/compat/icons.js +1 -1
- package/dist/default/icons/dist/element/index.js +1 -0
- package/dist/default/icons/dist/element/scaffold/icons.js +30 -0
- package/dist/default/icons/dist/element/scaffold/index.js +8 -0
- package/dist/default/icons/dist/html/compat/play.js +1 -1
- package/dist/default/icons/dist/html/scaffold/airplay-enter.js +4 -0
- package/dist/default/icons/dist/html/scaffold/airplay-exit.js +4 -0
- package/dist/default/icons/dist/html/scaffold/captions-off.js +4 -0
- package/dist/default/icons/dist/html/scaffold/captions-on.js +4 -0
- package/dist/default/icons/dist/html/scaffold/cast-enter.js +4 -0
- package/dist/default/icons/dist/html/scaffold/cast-exit.js +4 -0
- package/dist/default/icons/dist/html/scaffold/check.js +4 -0
- package/dist/default/icons/dist/html/scaffold/chevron.js +4 -0
- package/dist/default/icons/dist/html/scaffold/fullscreen-enter.js +4 -0
- package/dist/default/icons/dist/html/scaffold/fullscreen-exit.js +4 -0
- package/dist/default/icons/dist/html/scaffold/gear.js +4 -0
- package/dist/default/icons/dist/html/scaffold/pause.js +4 -0
- package/dist/default/icons/dist/html/scaffold/pip-enter.js +4 -0
- package/dist/default/icons/dist/html/scaffold/pip-exit.js +4 -0
- package/dist/default/icons/dist/html/scaffold/play.js +4 -0
- package/dist/default/icons/dist/html/scaffold/quality.js +4 -0
- package/dist/default/icons/dist/html/scaffold/restart.js +4 -0
- package/dist/default/icons/dist/html/scaffold/seek.js +4 -0
- package/dist/default/icons/dist/html/scaffold/speech.js +4 -0
- package/dist/default/icons/dist/html/scaffold/speed.js +4 -0
- package/dist/default/icons/dist/html/scaffold/spinner.js +4 -0
- package/dist/default/icons/dist/html/scaffold/switches.js +4 -0
- package/dist/default/icons/dist/html/scaffold/volume-high.js +4 -0
- package/dist/default/icons/dist/html/scaffold/volume-low.js +4 -0
- package/dist/default/icons/dist/html/scaffold/volume-off.js +4 -0
- package/dist/default/icons/element/scaffold/index.js +1 -0
- package/dist/default/icons/scaffold/index.js +26 -0
- package/dist/default/internal/skins/compat-audio/register.js +1 -0
- package/dist/default/internal/skins/compat-audio/skin.css +42 -0
- package/dist/default/internal/skins/compat-audio/template.js +18 -16
- package/dist/default/internal/skins/compat-live-audio/register.js +1 -0
- package/dist/default/internal/skins/compat-live-audio/skin.css +42 -0
- package/dist/default/internal/skins/compat-live-audio/template.js +11 -9
- package/dist/default/internal/skins/compat-live-video/skin.css +67 -23
- package/dist/default/internal/skins/compat-live-video/template.js +20 -18
- package/dist/default/internal/skins/compat-video/skin.css +67 -23
- package/dist/default/internal/skins/compat-video/template.js +34 -32
- package/dist/default/internal/skins/default-audio/template.js +12 -12
- package/dist/default/internal/skins/default-live-audio/template.js +5 -5
- package/dist/default/internal/skins/default-live-video/skin.css +18 -7
- package/dist/default/internal/skins/default-live-video/template.js +16 -16
- package/dist/default/internal/skins/default-video/skin.css +24 -7
- package/dist/default/internal/skins/default-video/template.js +26 -26
- package/dist/default/internal/skins/neutral-audio/template.js +12 -12
- package/dist/default/internal/skins/neutral-live-audio/template.js +5 -5
- package/dist/default/internal/skins/neutral-live-video/skin.css +20 -9
- package/dist/default/internal/skins/neutral-live-video/template.js +16 -16
- package/dist/default/internal/skins/neutral-video/skin.css +26 -9
- package/dist/default/internal/skins/neutral-video/template.js +26 -26
- package/dist/default/internal/skins/scaffold-audio/register.js +73 -0
- package/dist/default/internal/skins/scaffold-audio/skin.css +1739 -0
- package/dist/default/internal/skins/scaffold-audio/template.js +221 -0
- package/dist/default/internal/skins/scaffold-live-audio/register.js +53 -0
- package/dist/default/internal/skins/scaffold-live-audio/skin.css +1559 -0
- package/dist/default/internal/skins/scaffold-live-audio/template.js +118 -0
- package/dist/default/internal/skins/scaffold-live-video/register.js +86 -0
- package/dist/default/internal/skins/scaffold-live-video/skin.css +1944 -0
- package/dist/default/internal/skins/scaffold-live-video/template.js +241 -0
- package/dist/default/internal/skins/scaffold-video/register.js +115 -0
- package/dist/default/internal/skins/scaffold-video/skin.css +2184 -0
- package/dist/default/internal/skins/scaffold-video/template.js +461 -0
- package/dist/default/media/playerjs-video/adapter.js +25 -0
- package/dist/default/presets/audio/index.js +2 -1
- package/dist/default/presets/audio/scaffold-skin.js +19 -0
- package/dist/default/presets/background/skin.js +0 -2
- package/dist/default/presets/live-audio/index.js +2 -1
- package/dist/default/presets/live-audio/scaffold-skin.js +19 -0
- package/dist/default/presets/live-video/index.js +2 -1
- package/dist/default/presets/live-video/scaffold-skin.js +19 -0
- package/dist/default/presets/skin.js +0 -11
- package/dist/default/presets/video/index.js +2 -1
- package/dist/default/presets/video/scaffold-skin.js +19 -0
- package/dist/default/ui/thumbnail/element.js +2 -2
- package/dist/default/ui/time-slider/element.js +31 -7
- package/dist/default/version.js +1 -1
- package/dist/dev/define/audio/compat-skin.css +42 -0
- package/dist/dev/define/audio/compat-skin2.js +1 -1
- package/dist/dev/define/audio/compat-skin2.js.map +1 -1
- package/dist/dev/define/audio/neutral-skin2.js.map +1 -1
- package/dist/dev/define/audio/scaffold-skin.css +1771 -0
- package/dist/dev/define/audio/scaffold-skin.d.ts +1 -0
- package/dist/dev/define/audio/scaffold-skin.js +8 -0
- package/dist/dev/define/audio/scaffold-skin.js.map +1 -0
- package/dist/dev/define/audio/scaffold-skin2.js +6 -0
- package/dist/dev/define/audio/scaffold-skin2.js.map +1 -0
- package/dist/dev/define/audio/skin2.js.map +1 -1
- package/dist/dev/define/global.js.map +1 -1
- package/dist/dev/define/live-audio/compat-skin.css +42 -0
- package/dist/dev/define/live-audio/compat-skin2.js +1 -1
- package/dist/dev/define/live-audio/compat-skin2.js.map +1 -1
- package/dist/dev/define/live-audio/neutral-skin2.js.map +1 -1
- package/dist/dev/define/live-audio/scaffold-skin.css +1591 -0
- package/dist/dev/define/live-audio/scaffold-skin.d.ts +1 -0
- package/dist/dev/define/live-audio/scaffold-skin.js +8 -0
- package/dist/dev/define/live-audio/scaffold-skin.js.map +1 -0
- package/dist/dev/define/live-audio/scaffold-skin2.js +6 -0
- package/dist/dev/define/live-audio/scaffold-skin2.js.map +1 -0
- package/dist/dev/define/live-audio/skin2.js.map +1 -1
- package/dist/dev/define/live-video/compat-skin.css +67 -23
- package/dist/dev/define/live-video/compat-skin2.js +1 -1
- package/dist/dev/define/live-video/compat-skin2.js.map +1 -1
- package/dist/dev/define/live-video/neutral-skin.css +20 -9
- package/dist/dev/define/live-video/neutral-skin2.js +1 -1
- package/dist/dev/define/live-video/neutral-skin2.js.map +1 -1
- package/dist/dev/define/live-video/scaffold-skin.css +1976 -0
- package/dist/dev/define/live-video/scaffold-skin.d.ts +1 -0
- package/dist/dev/define/live-video/scaffold-skin.js +8 -0
- package/dist/dev/define/live-video/scaffold-skin.js.map +1 -0
- package/dist/dev/define/live-video/scaffold-skin2.js +6 -0
- package/dist/dev/define/live-video/scaffold-skin2.js.map +1 -0
- package/dist/dev/define/live-video/skin.css +18 -7
- package/dist/dev/define/live-video/skin2.js +1 -1
- package/dist/dev/define/live-video/skin2.js.map +1 -1
- package/dist/dev/define/media/dash-video.d.ts +1 -1
- package/dist/dev/define/media/dash-video.js +1 -1
- package/dist/dev/define/media/dash-video.js.map +1 -1
- package/dist/dev/define/media/hls-video.d.ts +1 -1
- package/dist/dev/define/media/hls-video.js +1 -1
- package/dist/dev/define/media/hls-video.js.map +1 -1
- package/dist/dev/define/media/hlsjs-video.d.ts +1 -1
- package/dist/dev/define/media/hlsjs-video.js +1 -1
- package/dist/dev/define/media/hlsjs-video.js.map +1 -1
- package/dist/dev/define/media/native-hls-video.d.ts +1 -1
- package/dist/dev/define/media/native-hls-video.js +1 -1
- package/dist/dev/define/media/native-hls-video.js.map +1 -1
- package/dist/dev/define/media/playerjs-video.d.ts +15 -0
- package/dist/dev/define/media/playerjs-video.js +13 -0
- package/dist/dev/define/media/playerjs-video.js.map +1 -0
- package/dist/dev/define/video/compat-skin.css +67 -23
- package/dist/dev/define/video/compat-skin2.js +1 -1
- package/dist/dev/define/video/compat-skin2.js.map +1 -1
- package/dist/dev/define/video/neutral-skin.css +26 -9
- package/dist/dev/define/video/neutral-skin2.js +1 -1
- package/dist/dev/define/video/neutral-skin2.js.map +1 -1
- package/dist/dev/define/video/scaffold-skin.css +2216 -0
- package/dist/dev/define/video/scaffold-skin.d.ts +1 -0
- package/dist/dev/define/video/scaffold-skin.js +8 -0
- package/dist/dev/define/video/scaffold-skin.js.map +1 -0
- package/dist/dev/define/video/scaffold-skin2.js +6 -0
- package/dist/dev/define/video/scaffold-skin2.js.map +1 -0
- package/dist/dev/define/video/skin.css +24 -7
- package/dist/dev/define/video/skin2.js +1 -1
- package/dist/dev/define/video/skin2.js.map +1 -1
- package/dist/dev/extensions/mux-data/extension.d.ts +1 -1
- package/dist/dev/extensions/mux-data/extension.js +1 -1
- package/dist/dev/extensions/mux-data/extension.js.map +1 -1
- package/dist/dev/icons/dist/element/compat/icons.js +1 -1
- package/dist/dev/icons/dist/element/compat/icons.js.map +1 -1
- package/dist/dev/icons/dist/element/index.js +1 -0
- package/dist/dev/icons/dist/element/index.js.map +1 -1
- package/dist/dev/icons/dist/element/scaffold/icons.js +32 -0
- package/dist/dev/icons/dist/element/scaffold/icons.js.map +1 -0
- package/dist/dev/icons/dist/element/scaffold/index.d.ts +1 -0
- package/dist/dev/icons/dist/element/scaffold/index.js +10 -0
- package/dist/dev/icons/dist/element/scaffold/index.js.map +1 -0
- package/dist/dev/icons/dist/html/compat/play.js +1 -1
- package/dist/dev/icons/dist/html/compat/play.js.map +1 -1
- package/dist/dev/icons/dist/html/scaffold/airplay-enter.js +6 -0
- package/dist/dev/icons/dist/html/scaffold/airplay-enter.js.map +1 -0
- package/dist/dev/icons/dist/html/scaffold/airplay-exit.js +6 -0
- package/dist/dev/icons/dist/html/scaffold/airplay-exit.js.map +1 -0
- package/dist/dev/icons/dist/html/scaffold/captions-off.js +6 -0
- package/dist/dev/icons/dist/html/scaffold/captions-off.js.map +1 -0
- package/dist/dev/icons/dist/html/scaffold/captions-on.js +6 -0
- package/dist/dev/icons/dist/html/scaffold/captions-on.js.map +1 -0
- package/dist/dev/icons/dist/html/scaffold/cast-enter.js +6 -0
- package/dist/dev/icons/dist/html/scaffold/cast-enter.js.map +1 -0
- package/dist/dev/icons/dist/html/scaffold/cast-exit.js +6 -0
- package/dist/dev/icons/dist/html/scaffold/cast-exit.js.map +1 -0
- package/dist/dev/icons/dist/html/scaffold/check.js +6 -0
- package/dist/dev/icons/dist/html/scaffold/check.js.map +1 -0
- package/dist/dev/icons/dist/html/scaffold/chevron.js +6 -0
- package/dist/dev/icons/dist/html/scaffold/chevron.js.map +1 -0
- package/dist/dev/icons/dist/html/scaffold/fullscreen-enter.js +6 -0
- package/dist/dev/icons/dist/html/scaffold/fullscreen-enter.js.map +1 -0
- package/dist/dev/icons/dist/html/scaffold/fullscreen-exit.js +6 -0
- package/dist/dev/icons/dist/html/scaffold/fullscreen-exit.js.map +1 -0
- package/dist/dev/icons/dist/html/scaffold/gear.js +6 -0
- package/dist/dev/icons/dist/html/scaffold/gear.js.map +1 -0
- package/dist/dev/icons/dist/html/scaffold/index.d.ts +28 -0
- package/dist/dev/icons/dist/html/scaffold/pause.js +6 -0
- package/dist/dev/icons/dist/html/scaffold/pause.js.map +1 -0
- package/dist/dev/icons/dist/html/scaffold/pip-enter.js +6 -0
- package/dist/dev/icons/dist/html/scaffold/pip-enter.js.map +1 -0
- package/dist/dev/icons/dist/html/scaffold/pip-exit.js +6 -0
- package/dist/dev/icons/dist/html/scaffold/pip-exit.js.map +1 -0
- package/dist/dev/icons/dist/html/scaffold/play.js +6 -0
- package/dist/dev/icons/dist/html/scaffold/play.js.map +1 -0
- package/dist/dev/icons/dist/html/scaffold/quality.js +6 -0
- package/dist/dev/icons/dist/html/scaffold/quality.js.map +1 -0
- package/dist/dev/icons/dist/html/scaffold/restart.js +6 -0
- package/dist/dev/icons/dist/html/scaffold/restart.js.map +1 -0
- package/dist/dev/icons/dist/html/scaffold/seek.js +6 -0
- package/dist/dev/icons/dist/html/scaffold/seek.js.map +1 -0
- package/dist/dev/icons/dist/html/scaffold/speech.js +6 -0
- package/dist/dev/icons/dist/html/scaffold/speech.js.map +1 -0
- package/dist/dev/icons/dist/html/scaffold/speed.js +6 -0
- package/dist/dev/icons/dist/html/scaffold/speed.js.map +1 -0
- package/dist/dev/icons/dist/html/scaffold/spinner.js +6 -0
- package/dist/dev/icons/dist/html/scaffold/spinner.js.map +1 -0
- package/dist/dev/icons/dist/html/scaffold/switches.js +6 -0
- package/dist/dev/icons/dist/html/scaffold/switches.js.map +1 -0
- package/dist/dev/icons/dist/html/scaffold/volume-high.js +6 -0
- package/dist/dev/icons/dist/html/scaffold/volume-high.js.map +1 -0
- package/dist/dev/icons/dist/html/scaffold/volume-low.js +6 -0
- package/dist/dev/icons/dist/html/scaffold/volume-low.js.map +1 -0
- package/dist/dev/icons/dist/html/scaffold/volume-off.js +6 -0
- package/dist/dev/icons/dist/html/scaffold/volume-off.js.map +1 -0
- package/dist/dev/icons/element/scaffold/index.d.ts +1 -0
- package/dist/dev/icons/element/scaffold/index.js +1 -0
- package/dist/dev/icons/scaffold/index.d.ts +2 -0
- package/dist/dev/icons/scaffold/index.js +26 -0
- package/dist/dev/index.d.ts +3 -3
- package/dist/dev/internal/skins/compat-audio/register.d.ts +1 -0
- package/dist/dev/internal/skins/compat-audio/register.js +1 -0
- package/dist/dev/internal/skins/compat-audio/register.js.map +1 -1
- package/dist/dev/internal/skins/compat-audio/skin.css +42 -0
- package/dist/dev/internal/skins/compat-audio/template.js +18 -16
- package/dist/dev/internal/skins/compat-audio/template.js.map +1 -1
- package/dist/dev/internal/skins/compat-live-audio/register.d.ts +1 -0
- package/dist/dev/internal/skins/compat-live-audio/register.js +1 -0
- package/dist/dev/internal/skins/compat-live-audio/register.js.map +1 -1
- package/dist/dev/internal/skins/compat-live-audio/skin.css +42 -0
- package/dist/dev/internal/skins/compat-live-audio/template.js +11 -9
- package/dist/dev/internal/skins/compat-live-audio/template.js.map +1 -1
- package/dist/dev/internal/skins/compat-live-video/register.d.ts +1 -1
- package/dist/dev/internal/skins/compat-live-video/skin.css +67 -23
- package/dist/dev/internal/skins/compat-live-video/template.js +20 -18
- package/dist/dev/internal/skins/compat-live-video/template.js.map +1 -1
- package/dist/dev/internal/skins/compat-video/register.d.ts +1 -1
- package/dist/dev/internal/skins/compat-video/skin.css +67 -23
- package/dist/dev/internal/skins/compat-video/template.js +34 -32
- package/dist/dev/internal/skins/compat-video/template.js.map +1 -1
- package/dist/dev/internal/skins/default-audio/register.d.ts +2 -2
- package/dist/dev/internal/skins/default-audio/template.js +12 -12
- package/dist/dev/internal/skins/default-audio/template.js.map +1 -1
- package/dist/dev/internal/skins/default-live-audio/register.d.ts +1 -1
- package/dist/dev/internal/skins/default-live-audio/template.js +5 -5
- package/dist/dev/internal/skins/default-live-audio/template.js.map +1 -1
- package/dist/dev/internal/skins/default-live-video/register.d.ts +1 -1
- package/dist/dev/internal/skins/default-live-video/skin.css +18 -7
- package/dist/dev/internal/skins/default-live-video/template.js +16 -16
- package/dist/dev/internal/skins/default-live-video/template.js.map +1 -1
- package/dist/dev/internal/skins/default-video/register.d.ts +1 -1
- package/dist/dev/internal/skins/default-video/skin.css +24 -7
- package/dist/dev/internal/skins/default-video/template.js +26 -26
- package/dist/dev/internal/skins/default-video/template.js.map +1 -1
- package/dist/dev/internal/skins/neutral-audio/register.d.ts +2 -2
- package/dist/dev/internal/skins/neutral-audio/template.js +12 -12
- package/dist/dev/internal/skins/neutral-audio/template.js.map +1 -1
- package/dist/dev/internal/skins/neutral-live-audio/register.d.ts +1 -1
- package/dist/dev/internal/skins/neutral-live-audio/template.js +5 -5
- package/dist/dev/internal/skins/neutral-live-audio/template.js.map +1 -1
- package/dist/dev/internal/skins/neutral-live-video/register.d.ts +1 -1
- package/dist/dev/internal/skins/neutral-live-video/skin.css +20 -9
- package/dist/dev/internal/skins/neutral-live-video/template.js +16 -16
- package/dist/dev/internal/skins/neutral-live-video/template.js.map +1 -1
- package/dist/dev/internal/skins/neutral-video/register.d.ts +1 -1
- package/dist/dev/internal/skins/neutral-video/skin.css +26 -9
- package/dist/dev/internal/skins/neutral-video/template.js +26 -26
- package/dist/dev/internal/skins/neutral-video/template.js.map +1 -1
- package/dist/dev/internal/skins/scaffold-audio/register.d.ts +44 -0
- package/dist/dev/internal/skins/scaffold-audio/register.js +75 -0
- package/dist/dev/internal/skins/scaffold-audio/register.js.map +1 -0
- package/dist/dev/internal/skins/scaffold-audio/skin.css +1739 -0
- package/dist/dev/internal/skins/scaffold-audio/template.js +223 -0
- package/dist/dev/internal/skins/scaffold-audio/template.js.map +1 -0
- package/dist/dev/internal/skins/scaffold-live-audio/register.d.ts +28 -0
- package/dist/dev/internal/skins/scaffold-live-audio/register.js +55 -0
- package/dist/dev/internal/skins/scaffold-live-audio/register.js.map +1 -0
- package/dist/dev/internal/skins/scaffold-live-audio/skin.css +1559 -0
- package/dist/dev/internal/skins/scaffold-live-audio/template.js +120 -0
- package/dist/dev/internal/skins/scaffold-live-audio/template.js.map +1 -0
- package/dist/dev/internal/skins/scaffold-live-video/register.d.ts +45 -0
- package/dist/dev/internal/skins/scaffold-live-video/register.js +88 -0
- package/dist/dev/internal/skins/scaffold-live-video/register.js.map +1 -0
- package/dist/dev/internal/skins/scaffold-live-video/skin.css +1944 -0
- package/dist/dev/internal/skins/scaffold-live-video/template.js +243 -0
- package/dist/dev/internal/skins/scaffold-live-video/template.js.map +1 -0
- package/dist/dev/internal/skins/scaffold-video/register.d.ts +62 -0
- package/dist/dev/internal/skins/scaffold-video/register.js +117 -0
- package/dist/dev/internal/skins/scaffold-video/register.js.map +1 -0
- package/dist/dev/internal/skins/scaffold-video/skin.css +2184 -0
- package/dist/dev/internal/skins/scaffold-video/template.js +463 -0
- package/dist/dev/internal/skins/scaffold-video/template.js.map +1 -0
- package/dist/dev/media/playerjs-video/adapter.d.ts +11 -0
- package/dist/dev/media/playerjs-video/adapter.js +61 -0
- package/dist/dev/media/playerjs-video/adapter.js.map +1 -0
- package/dist/dev/media/playerjs-video/index.d.ts +2 -0
- package/dist/dev/presets/audio/index.d.ts +2 -1
- package/dist/dev/presets/audio/index.js +2 -1
- package/dist/dev/presets/audio/scaffold-skin.d.ts +15 -0
- package/dist/dev/presets/audio/scaffold-skin.js +21 -0
- package/dist/dev/presets/audio/scaffold-skin.js.map +1 -0
- package/dist/dev/presets/background/skin.js +0 -2
- package/dist/dev/presets/background/skin.js.map +1 -1
- package/dist/dev/presets/live-audio/index.d.ts +2 -1
- package/dist/dev/presets/live-audio/index.js +2 -1
- package/dist/dev/presets/live-audio/scaffold-skin.d.ts +15 -0
- package/dist/dev/presets/live-audio/scaffold-skin.js +21 -0
- package/dist/dev/presets/live-audio/scaffold-skin.js.map +1 -0
- package/dist/dev/presets/live-video/index.d.ts +2 -1
- package/dist/dev/presets/live-video/index.js +2 -1
- package/dist/dev/presets/live-video/scaffold-skin.d.ts +15 -0
- package/dist/dev/presets/live-video/scaffold-skin.js +21 -0
- package/dist/dev/presets/live-video/scaffold-skin.js.map +1 -0
- package/dist/dev/presets/skin.js +0 -11
- package/dist/dev/presets/skin.js.map +1 -1
- package/dist/dev/presets/video/index.d.ts +2 -1
- package/dist/dev/presets/video/index.js +2 -1
- package/dist/dev/presets/video/scaffold-skin.d.ts +15 -0
- package/dist/dev/presets/video/scaffold-skin.js +21 -0
- package/dist/dev/presets/video/scaffold-skin.js.map +1 -0
- package/dist/dev/ui/thumbnail/element.js +2 -2
- package/dist/dev/ui/thumbnail/element.js.map +1 -1
- package/dist/dev/ui/time-slider/element.js +31 -7
- package/dist/dev/ui/time-slider/element.js.map +1 -1
- package/dist/dev/version.js +1 -1
- package/docs/README.md +1 -1
- package/docs/guides/architecture.md +3 -3
- package/docs/guides/autoplay.md +3 -3
- package/docs/guides/build-with-ai.md +1 -1
- package/docs/guides/captions.md +5 -5
- package/docs/guides/casting.md +5 -5
- package/docs/guides/cdn.md +11 -11
- package/docs/guides/customize-skins.md +2 -2
- package/docs/guides/features.md +1 -1
- package/docs/guides/fullscreen.md +1 -1
- package/docs/guides/installation-cdn.md +4 -4
- package/docs/guides/installation-shadcn.md +6 -6
- package/docs/guides/installation-svelte.md +5 -5
- package/docs/guides/installation-vue.md +5 -5
- package/docs/guides/installation.md +5 -5
- package/docs/guides/internationalization.md +5 -5
- package/docs/guides/live-streams.md +3 -3
- package/docs/guides/llms.txt +5 -4
- package/docs/guides/media-sources.md +3 -2
- package/docs/guides/migrate-from-media-chrome.md +4 -4
- package/docs/guides/migrate-from-mux-player.md +7 -7
- package/docs/guides/migrate-from-plyr.md +8 -8
- package/docs/guides/migrate-from-video-js-8.md +18 -10
- package/docs/guides/migrate-from-vidstack.md +9 -9
- package/docs/guides/migrate.md +18 -0
- package/docs/guides/mux-data.md +1 -1
- package/docs/guides/playback-errors.md +4 -4
- package/docs/guides/presets.md +13 -13
- package/docs/guides/quality.md +3 -3
- package/docs/guides/self-hosting.md +8 -8
- package/docs/guides/skins.md +6 -6
- package/docs/guides/thumbnails.md +2 -2
- package/docs/guides/user-preferences.md +2 -2
- package/docs/guides/v10-roadmap.md +2 -2
- package/docs/guides/why-videojs.md +3 -3
- package/docs/llms.txt +10 -4
- package/docs/reference/api/error-codes.md +1 -1
- package/docs/reference/api/feature-fullscreen.md +2 -2
- package/docs/reference/api/feature-metadata.md +2 -2
- package/docs/reference/api/feature-source.md +1 -1
- package/docs/reference/api/feature-text-tracks.md +2 -2
- package/docs/reference/api/llms.txt +1 -1
- package/docs/reference/api/media-capabilities.md +1 -1
- package/docs/reference/api/player-store.md +3 -3
- package/docs/reference/api/preset-audio.md +2 -2
- package/docs/reference/api/preset-background.md +3 -3
- package/docs/reference/api/preset-live-audio.md +3 -3
- package/docs/reference/api/preset-live-video.md +3 -3
- package/docs/reference/api/preset-video.md +2 -2
- package/docs/reference/api/resolve-adapter-type.md +2 -2
- package/docs/reference/api/vjs8-legacy-init.md +2 -2
- package/docs/reference/api/vjs8-legacy-options.md +1 -1
- package/docs/reference/components/audio-compat-skin.md +33 -3
- package/docs/reference/components/audio-neutral-skin.md +34 -4
- package/docs/reference/components/audio-scaffold-skin.md +39 -0
- package/docs/reference/components/audio-skin.md +34 -4
- package/docs/reference/components/audio.md +1 -1
- package/docs/reference/components/background-video-skin.md +36 -4
- package/docs/reference/components/background-video.md +1 -1
- package/docs/reference/components/cast-button.md +1 -1
- package/docs/reference/components/cloudflare-video.md +1 -1
- package/docs/reference/components/dash-video.md +1 -1
- package/docs/reference/components/google-cast.md +1 -1
- package/docs/reference/components/hls-audio.md +3 -2
- package/docs/reference/components/hls-background-video.md +1 -1
- package/docs/reference/components/hls-video.md +13 -2
- package/docs/reference/components/hlsjs-video.md +11 -1
- package/docs/reference/components/icons.md +2 -1
- package/docs/reference/components/live-audio-compat-skin.md +35 -4
- package/docs/reference/components/live-audio-neutral-skin.md +36 -5
- package/docs/reference/components/live-audio-scaffold-skin.md +41 -0
- package/docs/reference/components/live-audio-skin.md +36 -5
- package/docs/reference/components/live-video-compat-skin.md +36 -4
- package/docs/reference/components/live-video-neutral-skin.md +37 -5
- package/docs/reference/components/live-video-scaffold-skin.md +47 -0
- package/docs/reference/components/live-video-skin.md +37 -5
- package/docs/reference/components/llms.txt +6 -1
- package/docs/reference/components/mux-audio.md +2 -2
- package/docs/reference/components/mux-background-video.md +1 -1
- package/docs/reference/components/mux-data.md +1 -1
- package/docs/reference/components/mux-video.md +2 -2
- package/docs/reference/components/native-hls-video.md +1 -1
- package/docs/reference/components/player-container.md +1 -1
- package/docs/reference/components/player.md +4 -4
- package/docs/reference/components/playerjs-video.md +197 -0
- package/docs/reference/components/shaka-video.md +1 -1
- package/docs/reference/components/spotify-audio.md +1 -1
- package/docs/reference/components/thumbnail.md +5 -5
- package/docs/reference/components/tiktok-video.md +1 -1
- package/docs/reference/components/twitch-video.md +1 -1
- package/docs/reference/components/video-compat-skin.md +36 -3
- package/docs/reference/components/video-neutral-skin.md +37 -4
- package/docs/reference/components/video-scaffold-skin.md +51 -0
- package/docs/reference/components/video-skin.md +37 -4
- package/docs/reference/components/video.md +1 -1
- package/docs/reference/components/vimeo-video.md +1 -1
- package/docs/reference/components/wistia-video.md +5 -1
- package/docs/reference/components/youtube-video.md +2 -2
- package/package.json +44 -41
|
@@ -13,22 +13,22 @@ import '@videojs/html/live-video/skin';
|
|
|
13
13
|
The import registers the skin and every UI element it composes. The [CDN](../../guides/cdn.md) player bundle registers this skin together with its player:
|
|
14
14
|
|
|
15
15
|
```html
|
|
16
|
-
<script type="module" src="https://cdn.jsdelivr.net/npm/@videojs/cdn@10.
|
|
16
|
+
<script type="module" src="https://cdn.jsdelivr.net/npm/@videojs/cdn@10.1.0/live-video.js"></script>
|
|
17
17
|
```
|
|
18
18
|
|
|
19
|
-
##
|
|
19
|
+
## Anatomy
|
|
20
20
|
|
|
21
|
-
The skin goes between the player and the media
|
|
21
|
+
The skin goes between the player and the media component. It renders its controls around the media.
|
|
22
22
|
|
|
23
23
|
```html
|
|
24
24
|
<live-video-player>
|
|
25
25
|
<live-video-skin>
|
|
26
|
-
<hls-video
|
|
26
|
+
<hls-video></hls-video>
|
|
27
27
|
</live-video-skin>
|
|
28
28
|
</live-video-player>
|
|
29
29
|
```
|
|
30
30
|
|
|
31
|
-
|
|
31
|
+
This uses the lightweight [HLS video element](./hls-video.md) because most browsers can’t play HLS streams with a plain `<video>`. See [Play live streams](../../guides/live-streams.md).
|
|
32
32
|
|
|
33
33
|
## Poster
|
|
34
34
|
|
|
@@ -40,6 +40,38 @@ See [Add a poster and loading placeholder](../../guides/poster.md) for complete
|
|
|
40
40
|
|
|
41
41
|
Packaged skins style themselves and expose a small set of public CSS custom properties. Everything else inside the skin is private and may change between releases. [Customize skins](../../guides/customize-skins.md#style-a-packaged-skin) documents the properties. For deeper changes, the Video.js registry provides the skin files.
|
|
42
42
|
|
|
43
|
+
## Examples
|
|
44
|
+
|
|
45
|
+
### Basic Usage
|
|
46
|
+
|
|
47
|
+
**index.html**
|
|
48
|
+
|
|
49
|
+
```html
|
|
50
|
+
<live-video-player>
|
|
51
|
+
<live-video-skin class="html-live-video-skin-basic">
|
|
52
|
+
<hls-video src="https://stream.mux.com/v69RSHhFelSm4701snP22dYz2jICy4E4FUyk02rW4gxRM.m3u8" playsinline crossorigin="anonymous"></hls-video>
|
|
53
|
+
</live-video-skin>
|
|
54
|
+
</live-video-player>
|
|
55
|
+
```
|
|
56
|
+
|
|
57
|
+
**index.css**
|
|
58
|
+
|
|
59
|
+
```css
|
|
60
|
+
.html-live-video-skin-basic {
|
|
61
|
+
display: block;
|
|
62
|
+
width: 100%;
|
|
63
|
+
aspect-ratio: 16 / 9;
|
|
64
|
+
}
|
|
65
|
+
```
|
|
66
|
+
|
|
67
|
+
**index.ts**
|
|
68
|
+
|
|
69
|
+
```ts
|
|
70
|
+
import '@videojs/html/live-video/player';
|
|
71
|
+
import '@videojs/html/live-video/skin';
|
|
72
|
+
import '@videojs/html/media/hls-video';
|
|
73
|
+
```
|
|
74
|
+
|
|
43
75
|
## Own the UI
|
|
44
76
|
|
|
45
77
|
Packaged skins keep their controls and layout inside Video.js. When you need to add, remove, rearrange, or deeply restyle controls, use Shadcn to add the skin source to your project. Its components, layout, styles, and interactions become local files you can change.
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# Video.js v10 — HTML Components
|
|
2
2
|
|
|
3
|
-
> API reference for skins, media components, extensions, and interface components. Bundled with `@videojs/html` v10.
|
|
3
|
+
> API reference for skins, media components, extensions, and interface components. Bundled with `@videojs/html` v10.1.0. Links are relative paths to files in this directory.
|
|
4
4
|
|
|
5
5
|
## Layout
|
|
6
6
|
|
|
@@ -17,15 +17,19 @@ API reference for the packaged skins each preset ships.
|
|
|
17
17
|
- [video-skin](./video-skin.md): The video preset's default skin with the modern, frosted look
|
|
18
18
|
- [video-neutral-skin](./video-neutral-skin.md): The video preset's visually lighter skin, closer to a classic control bar
|
|
19
19
|
- [video-compat-skin](./video-compat-skin.md): A video skin designed for broader browser compatibility
|
|
20
|
+
- [video-scaffold-skin](./video-scaffold-skin.md): A video skin with minimal styling for custom skins
|
|
20
21
|
- [audio-skin](./audio-skin.md): The audio preset's default skin with the modern, frosted look
|
|
21
22
|
- [audio-neutral-skin](./audio-neutral-skin.md): The audio preset's visually lighter skin, closer to a classic control bar
|
|
22
23
|
- [audio-compat-skin](./audio-compat-skin.md): An audio skin designed for broader browser compatibility
|
|
24
|
+
- [audio-scaffold-skin](./audio-scaffold-skin.md): An audio skin with minimal styling for custom skins
|
|
23
25
|
- [live-video-skin](./live-video-skin.md): The live video preset's default skin, which swaps time controls for a Live button
|
|
24
26
|
- [live-video-neutral-skin](./live-video-neutral-skin.md): The live video preset's visually lighter skin, closer to a classic control bar
|
|
25
27
|
- [live-video-compat-skin](./live-video-compat-skin.md): A live video skin designed for broader browser compatibility
|
|
28
|
+
- [live-video-scaffold-skin](./live-video-scaffold-skin.md): A live video skin with minimal styling for custom skins
|
|
26
29
|
- [live-audio-skin](./live-audio-skin.md): The live audio preset's default skin, which swaps time controls for a Live button
|
|
27
30
|
- [live-audio-neutral-skin](./live-audio-neutral-skin.md): The live audio preset's visually lighter skin, closer to a classic control bar
|
|
28
31
|
- [live-audio-compat-skin](./live-audio-compat-skin.md): A live audio skin designed for broader browser compatibility
|
|
32
|
+
- [live-audio-scaffold-skin](./live-audio-scaffold-skin.md): A live audio skin with minimal styling for custom skins
|
|
29
33
|
- [background-video-skin](./background-video-skin.md): The background preset's chrome-less skin for ambient video
|
|
30
34
|
|
|
31
35
|
## Media
|
|
@@ -44,6 +48,7 @@ API reference for media components that handle streaming protocols and playback.
|
|
|
44
48
|
- [mux-background-video](./mux-background-video.md): Mux-specific name for the HLS background video component
|
|
45
49
|
- [mux-video](./mux-video.md): Video element for Mux-hosted HLS streams
|
|
46
50
|
- [native-hls-video](./native-hls-video.md): HLS video element using the browser's built-in HLS support
|
|
51
|
+
- [playerjs-video](./playerjs-video.md): Video component that plays any embed implementing the player.js protocol, such as Mux Player, Gumlet, FrameRate, Livid, Bunny Stream, and Streamable
|
|
47
52
|
- [shaka-video](./shaka-video.md): Video element powered by Shaka Player for DASH, HLS, and progressive playback with DRM
|
|
48
53
|
- [spotify-audio](./spotify-audio.md): Audio component that plays Spotify tracks, episodes, playlists, and shows through the Spotify embed
|
|
49
54
|
- [tiktok-video](./tiktok-video.md): Video component that plays TikTok videos through the TikTok embed player
|
|
@@ -17,7 +17,7 @@ import '@videojs/html/media/mux-audio';
|
|
|
17
17
|
Or load it from the [CDN](../../guides/cdn.md):
|
|
18
18
|
|
|
19
19
|
```html
|
|
20
|
-
<script type="module" src="https://cdn.jsdelivr.net/npm/@videojs/cdn@10.
|
|
20
|
+
<script type="module" src="https://cdn.jsdelivr.net/npm/@videojs/cdn@10.1.0/media/mux-audio.js"></script>
|
|
21
21
|
```
|
|
22
22
|
|
|
23
23
|
## Analytics and casting
|
|
@@ -91,7 +91,7 @@ These Video.js-specific attributes configure media behavior:
|
|
|
91
91
|
| `liveEdgeStart` | `number` | — | Read-only. Presentation time marking the start of the Live Edge Window. Derived from the delegate on every read; `NaN` when no delegate is attached or the stream is not live. |
|
|
92
92
|
| `preload` | `MediaPreloadType` | `'metadata'` | Preload type (`'none'` / `'metadata'` / `'auto'`). |
|
|
93
93
|
| `source` | `{ type?: 'application/vnd.apple.mpegurl' \| 'video/mp4' \| string & {}; preferPlayback?: 'mse' \| 'native' \| string & {}; maxAutoResolution?: '270p' \| '360p' \| '480p' \| '540p' \| '720p' \| '1080p' \| '1440p' \| '2160p'; capRenditionToPlayerSize?: boolean; minAutoResolution?: '270p' \| '360p' \| '480p' \| '540p' \| '720p' \| '1080p' \| '1440p' \| '2160p'; engine?: HlsEngineConfig; src?: string; playbackId?: string; customDomain?: string; playback?: MuxPlaybackParams; poster?: MuxPosterParams; storyboard?: MuxStoryboardParams; drm?: MuxDrmParams } \| null` | `null` | Structured Mux source. Setting it derives `src` from the playback ID, custom domain, and `playback` params (appended as `snake_case` query params). A `playback.token` replaces all other params — signed URLs bake them into the token. Engine options live under `engine`. A `drm.token` fills in `drm` itself: Mux's FairPlay, Widevine, and PlayReady license servers for this playback ID, so protected media plays whichever path the browser takes. License servers named alongside the token win, key by key, for content Mux does not license. `playback.maxResolution` and `playback.minResolution` are server-side: they decide which renditions Mux puts in the manifest at all. The inherited `maxAutoResolution` and `minAutoResolution` only look like their pair — those are client-side and bound which of the renditions that *do* arrive adaptive selection reaches for. The two halves are independent. |
|
|
94
|
-
| `src` | `string` | `''` | Media source URL. Setting a Mux stream URL (`https://stream.mux.com/<playback-id>.m3u8
|
|
94
|
+
| `src` | `string` | `''` | Media source URL. Setting a Mux stream URL (`https://stream.mux.com/<playback-id>.m3u8?...`, with or without the `.m3u8` extension) extracts the playback ID and query params into `source`; other URLs are kept as a plain `source.src`. Only playback options carry over. Mux identity comes from the URL, and the signed `poster`, `storyboard`, and `drm` tokens are scoped to a playback ID, so carrying them onto a different source would build rejected URLs. |
|
|
95
95
|
| `streamType` | `'on-demand' \| 'live' \| 'unknown'` | `'unknown'` | Current stream type (`'on-demand'` / `'live'` / `'unknown'`). |
|
|
96
96
|
| `targetLiveWindow` | `number` | — | Read-only. Seekable range size for live content. `0` for standard live, `Infinity` for DVR, `NaN` for on-demand or unknown. Fires `targetlivewindowchange` when the value changes (bridged from the delegate). |
|
|
97
97
|
| `videoRenditions` | `VideoRenditionListLike \| undefined` | — | Read-only. Selectable quality levels, populated only while the hls.js (MSE) engine is active; otherwise `undefined`. |
|
|
@@ -15,7 +15,7 @@ import '@videojs/html/media/mux-background-video';
|
|
|
15
15
|
Or load it from the [CDN](../../guides/cdn.md):
|
|
16
16
|
|
|
17
17
|
```html
|
|
18
|
-
<script type="module" src="https://cdn.jsdelivr.net/npm/@videojs/cdn@10.
|
|
18
|
+
<script type="module" src="https://cdn.jsdelivr.net/npm/@videojs/cdn@10.1.0/media/mux-background-video.js"></script>
|
|
19
19
|
```
|
|
20
20
|
|
|
21
21
|
## Load a Mux source
|
|
@@ -17,7 +17,7 @@ import '@videojs/html/extensions/mux-data';
|
|
|
17
17
|
Or load it from the [CDN](../../guides/cdn.md):
|
|
18
18
|
|
|
19
19
|
```html
|
|
20
|
-
<script type="module" src="https://cdn.jsdelivr.net/npm/@videojs/cdn@10.
|
|
20
|
+
<script type="module" src="https://cdn.jsdelivr.net/npm/@videojs/cdn@10.1.0/extensions/mux-data.js"></script>
|
|
21
21
|
```
|
|
22
22
|
|
|
23
23
|
## Anatomy
|
|
@@ -17,7 +17,7 @@ import '@videojs/html/media/mux-video';
|
|
|
17
17
|
Or load it from the [CDN](../../guides/cdn.md):
|
|
18
18
|
|
|
19
19
|
```html
|
|
20
|
-
<script type="module" src="https://cdn.jsdelivr.net/npm/@videojs/cdn@10.
|
|
20
|
+
<script type="module" src="https://cdn.jsdelivr.net/npm/@videojs/cdn@10.1.0/media/mux-video.js"></script>
|
|
21
21
|
```
|
|
22
22
|
|
|
23
23
|
## Load a source
|
|
@@ -170,7 +170,7 @@ These Video.js-specific attributes configure media behavior:
|
|
|
170
170
|
| `liveEdgeStart` | `number` | — | Read-only. Presentation time marking the start of the Live Edge Window. Derived from the delegate on every read; `NaN` when no delegate is attached or the stream is not live. |
|
|
171
171
|
| `preload` | `MediaPreloadType` | `'metadata'` | Preload type (`'none'` / `'metadata'` / `'auto'`). |
|
|
172
172
|
| `source` | `{ type?: 'application/vnd.apple.mpegurl' \| 'video/mp4' \| string & {}; preferPlayback?: 'mse' \| 'native' \| string & {}; maxAutoResolution?: '270p' \| '360p' \| '480p' \| '540p' \| '720p' \| '1080p' \| '1440p' \| '2160p'; capRenditionToPlayerSize?: boolean; minAutoResolution?: '270p' \| '360p' \| '480p' \| '540p' \| '720p' \| '1080p' \| '1440p' \| '2160p'; engine?: HlsEngineConfig; src?: string; playbackId?: string; customDomain?: string; playback?: MuxPlaybackParams; poster?: MuxPosterParams; storyboard?: MuxStoryboardParams; drm?: MuxDrmParams } \| null` | `null` | Structured Mux source. Setting it derives `src` from the playback ID, custom domain, and `playback` params (appended as `snake_case` query params). A `playback.token` replaces all other params — signed URLs bake them into the token. Engine options live under `engine`. A `drm.token` fills in `drm` itself: Mux's FairPlay, Widevine, and PlayReady license servers for this playback ID, so protected media plays whichever path the browser takes. License servers named alongside the token win, key by key, for content Mux does not license. `playback.maxResolution` and `playback.minResolution` are server-side: they decide which renditions Mux puts in the manifest at all. The inherited `maxAutoResolution` and `minAutoResolution` only look like their pair — those are client-side and bound which of the renditions that *do* arrive adaptive selection reaches for. The two halves are independent. |
|
|
173
|
-
| `src` | `string` | `''` | Media source URL. Setting a Mux stream URL (`https://stream.mux.com/<playback-id>.m3u8
|
|
173
|
+
| `src` | `string` | `''` | Media source URL. Setting a Mux stream URL (`https://stream.mux.com/<playback-id>.m3u8?...`, with or without the `.m3u8` extension) extracts the playback ID and query params into `source`; other URLs are kept as a plain `source.src`. Only playback options carry over. Mux identity comes from the URL, and the signed `poster`, `storyboard`, and `drm` tokens are scoped to a playback ID, so carrying them onto a different source would build rejected URLs. |
|
|
174
174
|
| `streamType` | `'on-demand' \| 'live' \| 'unknown'` | `'unknown'` | Current stream type (`'on-demand'` / `'live'` / `'unknown'`). |
|
|
175
175
|
| `targetLiveWindow` | `number` | — | Read-only. Seekable range size for live content. `0` for standard live, `Infinity` for DVR, `NaN` for on-demand or unknown. Fires `targetlivewindowchange` when the value changes (bridged from the delegate). |
|
|
176
176
|
| `videoRenditions` | `VideoRenditionListLike \| undefined` | — | Read-only. Selectable quality levels, populated only while the hls.js (MSE) engine is active; otherwise `undefined`. |
|
|
@@ -13,7 +13,7 @@ import '@videojs/html/media/native-hls-video';
|
|
|
13
13
|
Or load it from the [CDN](../../guides/cdn.md):
|
|
14
14
|
|
|
15
15
|
```html
|
|
16
|
-
<script type="module" src="https://cdn.jsdelivr.net/npm/@videojs/cdn@10.
|
|
16
|
+
<script type="module" src="https://cdn.jsdelivr.net/npm/@videojs/cdn@10.1.0/media/native-hls-video.js"></script>
|
|
17
17
|
```
|
|
18
18
|
|
|
19
19
|
## Examples
|
|
@@ -73,7 +73,7 @@ Custom video elements such as `<mux-video>` and `<hlsjs-video>` do not create th
|
|
|
73
73
|
|
|
74
74
|
### Media attachment
|
|
75
75
|
|
|
76
|
-
Media discovery is handled by the player provider, not the container.
|
|
76
|
+
Media discovery is handled by the player provider, not the container. Media components like `<hlsjs-video>` register themselves via context when they connect. Plain `<video>` and `<audio>` elements are tracked automatically, including when they are added, removed, or replaced after connection. No `slot="media"` attribute is needed.
|
|
77
77
|
|
|
78
78
|
### Interaction surface
|
|
79
79
|
|
|
@@ -53,7 +53,7 @@ Everything that needs player state goes inside `<video-player>`: skins, containe
|
|
|
53
53
|
```html
|
|
54
54
|
<video-player>
|
|
55
55
|
<video-skin> <!-- skin — includes container + controls -->
|
|
56
|
-
<video src="..."></video> <!-- media
|
|
56
|
+
<video src="..."></video> <!-- media component -->
|
|
57
57
|
</video-skin>
|
|
58
58
|
<my-custom-overlay></my-custom-overlay> <!-- your own element — can use PlayerController -->
|
|
59
59
|
</video-player>
|
|
@@ -63,7 +63,7 @@ Everything that needs player state goes inside `<video-player>`: skins, containe
|
|
|
63
63
|
|
|
64
64
|
Packaged skins make `<video-player>` boxless with `display: contents`. Width, height, positioning, transforms, and `getBoundingClientRect()` do not describe a visible player box there. Put layout and measurements on the [`<media-container>`](./player-container.md) instead.
|
|
65
65
|
|
|
66
|
-
If you omit `<video-skin>` and import only the player and media
|
|
66
|
+
If you omit `<video-skin>` and import only the player and media components, those skin styles are not loaded. The player element still owns state, not layout, so add and style a `<media-container>` instead of using the player itself as the layout surface.
|
|
67
67
|
|
|
68
68
|
## Accessing state
|
|
69
69
|
|
|
@@ -122,7 +122,7 @@ The player’s scope can extend beyond the fullscreen target. Playlists, transcr
|
|
|
122
122
|
Video.js elements clean up after themselves when you remove them from the page:
|
|
123
123
|
|
|
124
124
|
- `<video-player>` and the UI elements destroy themselves two animation frames after they’re removed. Destroying the player also destroys its store.
|
|
125
|
-
- Media
|
|
125
|
+
- Media components such as `<hlsjs-video>` tear down their playback engine in a microtask after they’re removed.
|
|
126
126
|
|
|
127
127
|
Moving an element synchronously, removing it and inserting it elsewhere with no `await` in between, triggers neither. To keep an element through a longer move, add the `keep-alive` attribute:
|
|
128
128
|
|
|
@@ -134,4 +134,4 @@ Moving an element synchronously, removing it and inserting it elsewhere with no
|
|
|
134
134
|
</video-player>
|
|
135
135
|
```
|
|
136
136
|
|
|
137
|
-
`keep-alive` applies only to the element that carries it; descendants don’t inherit it. Set it on every Video.js element in the tree you move. Packaged skins don’t pass it to the controls inside them, so move a player that uses a packaged skin synchronously. An element with `keep-alive` is never destroyed automatically. When you’re finished with it, call `destroy()` on the player and UI elements, and `adapter.destroy()` on media
|
|
137
|
+
`keep-alive` applies only to the element that carries it; descendants don’t inherit it. Set it on every Video.js element in the tree you move. Packaged skins don’t pass it to the controls inside them, so move a player that uses a packaged skin synchronously. An element with `keep-alive` is never destroyed automatically. When you’re finished with it, call `destroy()` on the player and UI elements, and `adapter.destroy()` on media components, which release their engine that way. A destroyed element can’t be reconnected; create a new one instead.
|
|
@@ -0,0 +1,197 @@
|
|
|
1
|
+
# playerjs-video
|
|
2
|
+
|
|
3
|
+
Video component that plays any embed implementing the player.js protocol, such as Mux Player, Gumlet, FrameRate, Livid, Bunny Stream, and Streamable
|
|
4
|
+
|
|
5
|
+
[player.js](https://github.com/embedly/player.js/blob/master/SPEC.rst) is a `postMessage` protocol for controlling embedded players, not a video host. Any embed that implements its receiver side plays through this one component: Mux Player’s iframe embed, Gumlet, FrameRate, Livid, Bunny Stream, Streamable, and others. Commands are posted to the embed directly, so no third-party script loads.
|
|
6
|
+
|
|
7
|
+
## Import
|
|
8
|
+
|
|
9
|
+
```bash
|
|
10
|
+
pnpm add @videojs/playerjs-video
|
|
11
|
+
```
|
|
12
|
+
|
|
13
|
+
```ts
|
|
14
|
+
import '@videojs/html/media/playerjs-video';
|
|
15
|
+
```
|
|
16
|
+
|
|
17
|
+
Or load it from the [CDN](../../guides/cdn.md):
|
|
18
|
+
|
|
19
|
+
```html
|
|
20
|
+
<script type="module" src="https://cdn.jsdelivr.net/npm/@videojs/cdn@10.1.0/media/playerjs-video.js"></script>
|
|
21
|
+
```
|
|
22
|
+
|
|
23
|
+
## Load a source
|
|
24
|
+
|
|
25
|
+
`src` takes the embed URL of any player.js receiver: an absolute `http` or `https` URL, with protocol-relative URLs (`//host/…`) read as `https`. Nothing inspects the URL to decide whether it speaks player.js; choosing this component is the opt-in. A `src` that isn’t an `http(s)` URL fails with `MEDIA_ERR_SRC_NOT_SUPPORTED`, and an embed that doesn’t implement the protocol never reports ready, so the element stays at `readyState` 0.
|
|
26
|
+
|
|
27
|
+
```html
|
|
28
|
+
<playerjs-video src="https://play.gumlet.io/embed/64bfb0913ed6e5096d66dc1e"></playerjs-video>
|
|
29
|
+
```
|
|
30
|
+
|
|
31
|
+
## Feature detection
|
|
32
|
+
|
|
33
|
+
Embeds implement the spec to different degrees. Each one lists the methods and events it supports in its `ready` message, and every command is checked against that list:
|
|
34
|
+
|
|
35
|
+
- A missing getter leaves its value at the default, such as a `duration` of `NaN`. Some embeds implement a getter but can’t answer it yet: Streamable reports no duration until playback starts.
|
|
36
|
+
- A missing setter is a no-op; the value stays wherever the embed has it.
|
|
37
|
+
|
|
38
|
+
`supports(type, name)` reports whether the embed advertised a method or event. `type` is `'method'` or `'event'`, and `name` is one player.js name or an array of names that must all be supported. It returns `false` until the embed reports ready.
|
|
39
|
+
|
|
40
|
+
The `loadcomplete` event marks the point where the answer is meaningful:
|
|
41
|
+
|
|
42
|
+
```ts
|
|
43
|
+
const video = document.querySelector('playerjs-video');
|
|
44
|
+
|
|
45
|
+
video.addEventListener('loadcomplete', () => {
|
|
46
|
+
const canSeek = video.supports('method', 'setCurrentTime');
|
|
47
|
+
});
|
|
48
|
+
```
|
|
49
|
+
|
|
50
|
+
## Controls
|
|
51
|
+
|
|
52
|
+
Without `controls`, the element ignores pointer events, so a [player skin](../../guides/skins.md) above it receives every click. With `controls`, the embed’s own chrome takes pointer input.
|
|
53
|
+
|
|
54
|
+
player.js itself can’t hide an embed’s chrome, but for the services it recognizes, the element does it through the embed URL, as far as each service allows:
|
|
55
|
+
|
|
56
|
+
| Service | Without `controls` |
|
|
57
|
+
| --- | --- |
|
|
58
|
+
| [Mux Player](https://www.mux.com/docs/guides/player?utm_source=videojs&utm_campaign=vjs10&utm_content=docs-content) (`player.mux.com`) | Nothing: its controls are hidden with the `--controls` CSS property, which the iframe doesn’t expose. Under a skin its control bar still stays out of sight, since the frame never gets the hover that reveals it, but its center play button shows while paused |
|
|
59
|
+
| [Gumlet](https://docs.gumlet.com/video/embed-stream) | `disable_player_controls=true`: only the large center play button stays |
|
|
60
|
+
| FrameRate | `show_controls=0` and `initial_play_btn=0`: no control bar and no large start button |
|
|
61
|
+
| [Livid](https://support.livid.com/article/46-advanced-embedding-parameters) | `controls=0`: no chrome at all, the play button included. Livid applies it to videos on Pro and Premium accounts only |
|
|
62
|
+
| [Bunny Stream](https://bunny.net/docs/stream/embedding) | No parameter hides the control bar, so it’s shrunk instead: `compactControls=true`, `showSpeed=false`, `showHeatmap=false`, `chromecast=false`, `disableAirPlay=true` |
|
|
63
|
+
| Streamable | `nocontrols=1`: no chrome at all |
|
|
64
|
+
|
|
65
|
+
Other services get their URL untouched; pass whatever they offer under [`source.engine.playerJs`](#sourceengineplayerjs).
|
|
66
|
+
|
|
67
|
+
## URL parameters
|
|
68
|
+
|
|
69
|
+
For the recognized services, `autoplay`, `muted` (either `muted` or `defaultMuted`), `loop`, and `preload` are written onto the embed URL in the service’s own spelling, and turned off explicitly where the service defaults to on: Gumlet and Streamable loop, and Bunny Stream autoplays. Livid and Mux Player also take `preload` as the element’s own value. The embed reads its URL once, so changing these later reaches the embed over the protocol (`autoplay`, `muted`, `loop`) or not until the next source (`controls`, `preload`); rebuilding the frame for them would restart the video.
|
|
70
|
+
|
|
71
|
+
Every other parameter a service documents works too, in either of two places. Written into `src`, a parameter is kept as written, even over one the element would derive. Under `source.engine.playerJs`, it overrides both. A parameter a service reads from the URL hash, like Livid’s start time `#t=25`, goes in `src`.
|
|
72
|
+
|
|
73
|
+
```html
|
|
74
|
+
<playerjs-video src="https://player.mediadelivery.net/embed/759/eb1c4f77-0cda-46be-b47d-1118ad7c2ffe?t=30s&captions=en"></playerjs-video>
|
|
75
|
+
```
|
|
76
|
+
|
|
77
|
+
## Behavior
|
|
78
|
+
|
|
79
|
+
- `autoplay`, `muted` (seeded by `defaultMuted`), and `loop` are also applied over the protocol once the embed reports ready, which is how they reach services the element doesn’t recognize. An embed without `setLoop` is looped by replaying it on `ended`.
|
|
80
|
+
- `volume` (0 to 1, sent as the spec’s 0 to 100), `muted`, and seeking through `currentTime` use the spec’s methods.
|
|
81
|
+
- `playbackRate` reaches only embeds that advertise `setPlaybackRate`, an extension to the spec that Gumlet implements.
|
|
82
|
+
- player.js reports no buffering, so a started embed counts as playing.
|
|
83
|
+
- No text tracks: `textTracks` stays empty.
|
|
84
|
+
- The protocol has no fullscreen command, so the element’s own `requestFullscreen()` fullscreens the iframe.
|
|
85
|
+
- `poster` and `playsInline` are stored but have no effect on the embed. `preload` reaches Livid and Mux Player as is and Bunny Stream as `preload=false` when it’s `"none"`, and no other service.
|
|
86
|
+
- An embed `error` with code 1 surfaces as `MEDIA_ERR_SRC_NOT_SUPPORTED`. Codes 2 and 3 mean a command wasn’t supported; they’re ignored, with a warning in development. Any other code is a fatal error carrying the embed’s message.
|
|
87
|
+
|
|
88
|
+
## Examples
|
|
89
|
+
|
|
90
|
+
### Basic Usage
|
|
91
|
+
|
|
92
|
+
**index.html**
|
|
93
|
+
|
|
94
|
+
```html
|
|
95
|
+
<playerjs-video class="playerjs-video" src="https://play.gumlet.io/embed/64bfb0913ed6e5096d66dc1e" controls></playerjs-video>
|
|
96
|
+
```
|
|
97
|
+
|
|
98
|
+
**index.css**
|
|
99
|
+
|
|
100
|
+
```css
|
|
101
|
+
.playerjs-video {
|
|
102
|
+
width: 100%;
|
|
103
|
+
aspect-ratio: 16 / 9;
|
|
104
|
+
}
|
|
105
|
+
```
|
|
106
|
+
|
|
107
|
+
**index.ts**
|
|
108
|
+
|
|
109
|
+
```ts
|
|
110
|
+
import '@videojs/html/media/playerjs-video';
|
|
111
|
+
```
|
|
112
|
+
|
|
113
|
+
## API Reference
|
|
114
|
+
|
|
115
|
+
### Attributes
|
|
116
|
+
|
|
117
|
+
These attributes configure the embedded media adapter:
|
|
118
|
+
|
|
119
|
+
| Attribute | Type | Default |
|
|
120
|
+
| --- | --- | --- |
|
|
121
|
+
| `autoplay` | `boolean` | `false` |
|
|
122
|
+
| `controls` | `boolean` | `false` |
|
|
123
|
+
| `loop` | `boolean` | `false` |
|
|
124
|
+
| `muted` | `boolean` | `false` |
|
|
125
|
+
| `playsinline` | `boolean` | `true` |
|
|
126
|
+
| `poster` | `string` | `''` |
|
|
127
|
+
| `preload` | `MediaPreloadType` | `'metadata'` |
|
|
128
|
+
| `src` | `string` | `''` |
|
|
129
|
+
|
|
130
|
+
### Properties
|
|
131
|
+
|
|
132
|
+
| Property | Type | Default | Description |
|
|
133
|
+
| --- | --- | --- | --- |
|
|
134
|
+
| `autoplay` | `boolean` | `false` | |
|
|
135
|
+
| `buffered` | `TimeRangeLike` | — | Read-only. |
|
|
136
|
+
| `controls` | `boolean` | `false` | |
|
|
137
|
+
| `currentSrc` | `string` | — | Read-only. |
|
|
138
|
+
| `currentTime` | `number` | — | |
|
|
139
|
+
| `defaultMuted` | `boolean` | `false` | |
|
|
140
|
+
| `duration` | `number` | — | Read-only. |
|
|
141
|
+
| `ended` | `boolean` | — | Read-only. |
|
|
142
|
+
| `engine` | `Window \| null` | — | Read-only. The embed's window. player.js publishes no player object; commands are posted to the frame. Null until rendered. |
|
|
143
|
+
| `error` | `MediaError \| null` | — | Read-only. |
|
|
144
|
+
| `isFullscreen` | `boolean` | — | Read-only. |
|
|
145
|
+
| `loop` | `boolean` | `false` | |
|
|
146
|
+
| `muted` | `boolean` | `false` | |
|
|
147
|
+
| `paused` | `boolean` | — | Read-only. |
|
|
148
|
+
| `playbackRate` | `number` | — | Reaches the embed only where it advertises `setPlaybackRate`, an extension to the spec. |
|
|
149
|
+
| `played` | `{ length: number; start(index: number): number; end(index: number): number }` | — | Read-only. |
|
|
150
|
+
| `playsInline` | `boolean` | `true` | |
|
|
151
|
+
| `poster` | `string` | `''` | |
|
|
152
|
+
| `preload` | `MediaPreloadType` | `'metadata'` | |
|
|
153
|
+
| `readyState` | `number` | — | Read-only. |
|
|
154
|
+
| `seekable` | `TimeRangeLike` | — | Read-only. |
|
|
155
|
+
| `seeking` | `boolean` | — | Read-only. |
|
|
156
|
+
| `source` | `{ src?: string; engine?: PlayerJsSourceEngineConfig } \| null` | `null` | Embed URL in `src`, extra URL parameters under `engine.playerJs`. Re-derives `src`; equal sources skip reload. |
|
|
157
|
+
| `src` | `string` | `''` | |
|
|
158
|
+
| `textTracks` | `TextTrackListLike` | — | Read-only. Always empty: player.js has no text track surface. |
|
|
159
|
+
| `volume` | `number` | — | |
|
|
160
|
+
|
|
161
|
+
### Engine options
|
|
162
|
+
|
|
163
|
+
#### `source.engine.playerJs`
|
|
164
|
+
|
|
165
|
+
player.js standardizes the messages an embed answers, not its URL, so there are no shared parameters. Every key under `source.engine.playerJs` is written onto the embed URL’s query as given, for whichever service serves it — anything in [Gumlet’s](https://docs.gumlet.com/video/embed-stream), [Bunny Stream’s](https://bunny.net/docs/stream/embedding), or [Livid’s](https://support.livid.com/article/46-advanced-embedding-parameters) parameter lists, for example. Values are stringified (`true` becomes `'true'`), an array repeats the parameter once per value, and `null` removes a parameter the URL would otherwise carry. These override both `src` and the parameters the element derives from its props. Changing them reloads the embed. [Media Sources](../../guides/media-sources.md) covers how engine options fit into a structured source.
|
|
166
|
+
|
|
167
|
+
`referrerPolicy` never reaches the URL, and `<playerjs-video>` doesn’t apply it to its iframe either; it takes effect only in the React component.
|
|
168
|
+
|
|
169
|
+
Prefer the `autoplay`, `loop`, `muted`, `controls`, and `preload` props over their URL spellings: the props also reach the embed over the protocol and keep the element’s state in step with it.
|
|
170
|
+
|
|
171
|
+
```ts
|
|
172
|
+
const video = document.querySelector('playerjs-video');
|
|
173
|
+
video.controls = true;
|
|
174
|
+
video.source = {
|
|
175
|
+
src: 'https://play.gumlet.io/embed/64bfb0913ed6e5096d66dc1e',
|
|
176
|
+
engine: { playerJs: { player_color: '#ff0000', disabled_player_control: ['cast', 'pip'] } },
|
|
177
|
+
};
|
|
178
|
+
```
|
|
179
|
+
|
|
180
|
+
| Option | Type | Description |
|
|
181
|
+
| --- | --- | --- |
|
|
182
|
+
| `referrerPolicy` | `ReferrerPolicy \| undefined` | `referrerpolicy` for the embed iframe. Not written to the URL. |
|
|
183
|
+
|
|
184
|
+
### Methods
|
|
185
|
+
|
|
186
|
+
Supports these media methods: `exitFullscreen`, `load`, `pause`, `play`, `requestFullscreen`, `supports`.
|
|
187
|
+
|
|
188
|
+
### Events
|
|
189
|
+
|
|
190
|
+
Implements these standard media events through the embedded player: `durationchange`, `emptied`, `ended`, `error`, `loadedmetadata`, `loadstart`, `pause`, `play`, `playing`, `progress`, `ratechange`, `seeked`, `seeking`, `timeupdate`, `volumechange`.
|
|
191
|
+
|
|
192
|
+
Also emits these Video.js-specific events:
|
|
193
|
+
|
|
194
|
+
| Event | Description |
|
|
195
|
+
| --- | --- |
|
|
196
|
+
| `loadcomplete` | |
|
|
197
|
+
| `sourcechange` | Fired when `source` changes, either directly or by resolving a new `src`. Read `source` for the new value. |
|
|
@@ -21,7 +21,7 @@ import '@videojs/html/media/shaka-video';
|
|
|
21
21
|
Or load it from the [CDN](../../guides/cdn.md):
|
|
22
22
|
|
|
23
23
|
```html
|
|
24
|
-
<script type="module" src="https://cdn.jsdelivr.net/npm/@videojs/cdn@10.
|
|
24
|
+
<script type="module" src="https://cdn.jsdelivr.net/npm/@videojs/cdn@10.1.0/media/shaka-video.js"></script>
|
|
25
25
|
```
|
|
26
26
|
|
|
27
27
|
## Load a source
|
|
@@ -17,7 +17,7 @@ import '@videojs/html/media/spotify-audio';
|
|
|
17
17
|
Or load it from the [CDN](../../guides/cdn.md):
|
|
18
18
|
|
|
19
19
|
```html
|
|
20
|
-
<script type="module" src="https://cdn.jsdelivr.net/npm/@videojs/cdn@10.
|
|
20
|
+
<script type="module" src="https://cdn.jsdelivr.net/npm/@videojs/cdn@10.1.0/media/spotify-audio.js"></script>
|
|
21
21
|
```
|
|
22
22
|
|
|
23
23
|
## Load a source
|
|
@@ -4,13 +4,13 @@ Time-based thumbnail preview component for timeline scrubbing and hover previews
|
|
|
4
4
|
|
|
5
5
|
## Quick Start: Video Track
|
|
6
6
|
|
|
7
|
-
`<media-thumbnail>` can read thumbnail cues directly from your video track. Add a `<track>` with `kind="metadata"` and `label="thumbnails"` to your media
|
|
7
|
+
`<media-thumbnail>` can read thumbnail cues directly from your video track. Add a `<track>` with `kind="metadata"` and `label="thumbnails"` to your media component.
|
|
8
8
|
|
|
9
9
|
[Mux](https://www.mux.com/?utm_source=videojs&utm_campaign=vjs10&utm_content=docs-content) provides this as `storyboard.vtt`:
|
|
10
10
|
|
|
11
11
|
`https://image.mux.com/{PLAYBACK_ID}/storyboard.vtt`
|
|
12
12
|
|
|
13
|
-
That track is cross-origin, and a cross-origin `<track>` only loads when the media
|
|
13
|
+
That track is cross-origin, and a cross-origin `<track>` only loads when the media component is CORS-enabled:
|
|
14
14
|
|
|
15
15
|
```html
|
|
16
16
|
<video src="video.mp4" crossorigin="anonymous">
|
|
@@ -58,7 +58,7 @@ The component picks the latest thumbnail whose `startTime` is less than or equal
|
|
|
58
58
|
|
|
59
59
|
### Cross-origin images
|
|
60
60
|
|
|
61
|
-
Leave `crossOrigin` unset and the
|
|
61
|
+
Leave `crossOrigin` unset and the thumbnail follows the media component. A cross-origin thumbnail `<track>` only loads when the media is CORS-enabled, so the images its cues point at are fetched with that same mode. Skins get this for free, with nothing to thread through.
|
|
62
62
|
|
|
63
63
|
Opt out to fetch them without CORS:
|
|
64
64
|
|
|
@@ -67,11 +67,11 @@ const thumbnail = document.querySelector('media-thumbnail');
|
|
|
67
67
|
thumbnail.crossOrigin = null;
|
|
68
68
|
```
|
|
69
69
|
|
|
70
|
-
Leaving the `crossorigin` attribute off is not the opt out. An absent attribute means “follow the media
|
|
70
|
+
Leaving the `crossorigin` attribute off is not the opt out. An absent attribute means “follow the media component”; only the property set to `null` opts out.
|
|
71
71
|
|
|
72
72
|
An empty value does not opt out either. The [CORS settings attribute](https://developer.mozilla.org/en-US/docs/Web/HTML/Reference/Attributes/crossorigin) reads anything other than `use-credentials` as Anonymous, so it is a value like any other.
|
|
73
73
|
|
|
74
|
-
Thumbnails you supply through `thumbnails` never inherit, since they need not be related to the media
|
|
74
|
+
Thumbnails you supply through `thumbnails` never inherit, since they need not be related to the media component at all. Set `crossOrigin` yourself when those images need it.
|
|
75
75
|
|
|
76
76
|
## Styling
|
|
77
77
|
|
|
@@ -17,7 +17,7 @@ import '@videojs/html/media/tiktok-video';
|
|
|
17
17
|
Or load it from the [CDN](../../guides/cdn.md):
|
|
18
18
|
|
|
19
19
|
```html
|
|
20
|
-
<script type="module" src="https://cdn.jsdelivr.net/npm/@videojs/cdn@10.
|
|
20
|
+
<script type="module" src="https://cdn.jsdelivr.net/npm/@videojs/cdn@10.1.0/media/tiktok-video.js"></script>
|
|
21
21
|
```
|
|
22
22
|
|
|
23
23
|
## Load a source
|
|
@@ -17,7 +17,7 @@ import '@videojs/html/media/twitch-video';
|
|
|
17
17
|
Or load it from the [CDN](../../guides/cdn.md):
|
|
18
18
|
|
|
19
19
|
```html
|
|
20
|
-
<script type="module" src="https://cdn.jsdelivr.net/npm/@videojs/cdn@10.
|
|
20
|
+
<script type="module" src="https://cdn.jsdelivr.net/npm/@videojs/cdn@10.1.0/media/twitch-video.js"></script>
|
|
21
21
|
```
|
|
22
22
|
|
|
23
23
|
## Load a source
|
|
@@ -10,14 +10,14 @@ The Compat skin of the video preset provides basic controls and plain surfaces,
|
|
|
10
10
|
import '@videojs/html/video/compat-skin';
|
|
11
11
|
```
|
|
12
12
|
|
|
13
|
-
##
|
|
13
|
+
## Anatomy
|
|
14
14
|
|
|
15
|
-
The skin goes between the player and the media
|
|
15
|
+
The skin goes between the player and the media component. It renders its controls around the media.
|
|
16
16
|
|
|
17
17
|
```html
|
|
18
18
|
<video-player>
|
|
19
19
|
<video-compat-skin>
|
|
20
|
-
<video
|
|
20
|
+
<video></video>
|
|
21
21
|
</video-compat-skin>
|
|
22
22
|
</video-player>
|
|
23
23
|
```
|
|
@@ -38,6 +38,39 @@ See [Show timeline thumbnail previews](../../guides/thumbnails.md) for complete
|
|
|
38
38
|
|
|
39
39
|
Packaged skins style themselves and expose a small set of public CSS custom properties. Everything else inside the skin is private and may change between releases. [Customize skins](../../guides/customize-skins.md#style-a-packaged-skin) documents the properties. For deeper changes, the Video.js registry provides the skin files.
|
|
40
40
|
|
|
41
|
+
## Examples
|
|
42
|
+
|
|
43
|
+
### Basic Usage
|
|
44
|
+
|
|
45
|
+
**index.html**
|
|
46
|
+
|
|
47
|
+
```html
|
|
48
|
+
<video-player poster="https://image.mux.com/BV3YZtogl89mg9VcNBhhnHm02Y34zI1nlMuMQfAbl3dM/thumbnail.jpg">
|
|
49
|
+
<video-compat-skin class="html-video-compat-skin-basic">
|
|
50
|
+
<video src="https://stream.mux.com/BV3YZtogl89mg9VcNBhhnHm02Y34zI1nlMuMQfAbl3dM/highest.mp4" playsinline crossorigin="anonymous">
|
|
51
|
+
<track kind="metadata" label="thumbnails" src="https://image.mux.com/BV3YZtogl89mg9VcNBhhnHm02Y34zI1nlMuMQfAbl3dM/storyboard.vtt" default />
|
|
52
|
+
</video>
|
|
53
|
+
</video-compat-skin>
|
|
54
|
+
</video-player>
|
|
55
|
+
```
|
|
56
|
+
|
|
57
|
+
**index.css**
|
|
58
|
+
|
|
59
|
+
```css
|
|
60
|
+
.html-video-compat-skin-basic {
|
|
61
|
+
display: block;
|
|
62
|
+
width: 100%;
|
|
63
|
+
aspect-ratio: 16 / 9;
|
|
64
|
+
}
|
|
65
|
+
```
|
|
66
|
+
|
|
67
|
+
**index.ts**
|
|
68
|
+
|
|
69
|
+
```ts
|
|
70
|
+
import '@videojs/html/video/player';
|
|
71
|
+
import '@videojs/html/video/compat-skin';
|
|
72
|
+
```
|
|
73
|
+
|
|
41
74
|
## Own the UI
|
|
42
75
|
|
|
43
76
|
Packaged skins keep their controls and layout inside Video.js. When you need to add, remove, rearrange, or deeply restyle controls, use Shadcn to add the skin source to your project. Its components, layout, styles, and interactions become local files you can change.
|
|
@@ -13,17 +13,17 @@ import '@videojs/html/video/neutral-skin';
|
|
|
13
13
|
The import registers the skin and every UI element it composes. The [CDN](../../guides/cdn.md) player bundle registers this skin together with its player:
|
|
14
14
|
|
|
15
15
|
```html
|
|
16
|
-
<script type="module" src="https://cdn.jsdelivr.net/npm/@videojs/cdn@10.
|
|
16
|
+
<script type="module" src="https://cdn.jsdelivr.net/npm/@videojs/cdn@10.1.0/video-neutral.js"></script>
|
|
17
17
|
```
|
|
18
18
|
|
|
19
|
-
##
|
|
19
|
+
## Anatomy
|
|
20
20
|
|
|
21
|
-
The skin goes between the player and the media
|
|
21
|
+
The skin goes between the player and the media component. It renders its controls around the media.
|
|
22
22
|
|
|
23
23
|
```html
|
|
24
24
|
<video-player>
|
|
25
25
|
<video-neutral-skin>
|
|
26
|
-
<video
|
|
26
|
+
<video></video>
|
|
27
27
|
</video-neutral-skin>
|
|
28
28
|
</video-player>
|
|
29
29
|
```
|
|
@@ -44,6 +44,39 @@ See [Show timeline thumbnail previews](../../guides/thumbnails.md) for complete
|
|
|
44
44
|
|
|
45
45
|
Packaged skins style themselves and expose a small set of public CSS custom properties. Everything else inside the skin is private and may change between releases. [Customize skins](../../guides/customize-skins.md#style-a-packaged-skin) documents the properties. For deeper changes, the Video.js registry provides the skin files.
|
|
46
46
|
|
|
47
|
+
## Examples
|
|
48
|
+
|
|
49
|
+
### Basic Usage
|
|
50
|
+
|
|
51
|
+
**index.html**
|
|
52
|
+
|
|
53
|
+
```html
|
|
54
|
+
<video-player poster="https://image.mux.com/BV3YZtogl89mg9VcNBhhnHm02Y34zI1nlMuMQfAbl3dM/thumbnail.jpg">
|
|
55
|
+
<video-neutral-skin class="html-video-neutral-skin-basic">
|
|
56
|
+
<video src="https://stream.mux.com/BV3YZtogl89mg9VcNBhhnHm02Y34zI1nlMuMQfAbl3dM/highest.mp4" playsinline crossorigin="anonymous">
|
|
57
|
+
<track kind="metadata" label="thumbnails" src="https://image.mux.com/BV3YZtogl89mg9VcNBhhnHm02Y34zI1nlMuMQfAbl3dM/storyboard.vtt" default />
|
|
58
|
+
</video>
|
|
59
|
+
</video-neutral-skin>
|
|
60
|
+
</video-player>
|
|
61
|
+
```
|
|
62
|
+
|
|
63
|
+
**index.css**
|
|
64
|
+
|
|
65
|
+
```css
|
|
66
|
+
.html-video-neutral-skin-basic {
|
|
67
|
+
display: block;
|
|
68
|
+
width: 100%;
|
|
69
|
+
aspect-ratio: 16 / 9;
|
|
70
|
+
}
|
|
71
|
+
```
|
|
72
|
+
|
|
73
|
+
**index.ts**
|
|
74
|
+
|
|
75
|
+
```ts
|
|
76
|
+
import '@videojs/html/video/player';
|
|
77
|
+
import '@videojs/html/video/neutral-skin';
|
|
78
|
+
```
|
|
79
|
+
|
|
47
80
|
## Own the UI
|
|
48
81
|
|
|
49
82
|
Packaged skins keep their controls and layout inside Video.js. When you need to add, remove, rearrange, or deeply restyle controls, use Shadcn to add the skin source to your project. Its components, layout, styles, and interactions become local files you can change.
|