概述

预计阅读时间: 3 分钟

Video.js 播放器的结构方式——状态、UI 和媒体。

Video.js v10 围绕三部分架构构建,分离关注点并最大化灵活性。每个部分都设计为独立工作或一起工作,允许你根据需要或多或少地使用 Video.js。

有关此设计背后的原因,请参阅为什么选择 Video.js?

1. 状态管理

状态由 Player.Provider 处理,它创建一个中央状态存储,所有组件都可以访问。当你用 Player.Provider 包裹播放器时,组件会自动连接到状态。

{/* 内部所有组件自动连接到状态 */}
<Player.Provider>
  <VideoSkin>
    <Video src="video.mp4" />
  </VideoSkin>
</Player.Provider>

你可以使用 usePlayer hook 从提供者内的任何位置访问状态和方法。

2. 用户界面

使用预构建的皮肤或从单个UI 组件构建你自己的皮肤。

皮肤

皮肤是完整的、预设计的播放器 UI,将组件和样式打包在一起:

<Player.Provider>
  <VideoSkin>
    <Video src="video.mp4" />
  </VideoSkin>
</Player.Provider>

了解更多关于皮肤

UI 组件

如果你想要比皮肤提供的更多控制,你可以从我们的组件构建自己的 UI。

<Player.Provider>
  <Player.Container>
    <Video src="video.mp4" />
    <MediaControls>
      <PlayButton />
      {/* ... */}
    </MediaControls>
  </Player.Container>
</Player.Provider>

要开始了解 UI 组件,你可以考虑弹出皮肤并使用其预样式组件作为基础。

了解更多关于 UI 组件

构建你自己的组件

3. 媒体

媒体组件是实际显示媒体的组件。它们本质上是"没有 UI 的播放器"。它们处理视频/音频渲染并暴露一致的 API。

媒体组件可以是特定格式的(HLS、DASH)、特定服务的(YouTube、Vimeo、Mux)或特定用例的(背景视频)。

NOTE

DASH、YouTube、Vimeo、Mux 和更多媒体元素目前正在开发中。

<Player.Provider>
  <VideoSkin>
    <HlsVideo src="https://stream.mux.com/BV3YZtogl89mg9VcNBhhnHm02Y34zI1nlMuMQfAbl3dM.m3u8" />
  </VideoSkin>
</Player.Provider>

预设

预设为特定用例预配置这些部分。

默认预设是 @videojs/react/video@videojs/react/audio,涵盖你对 HTML <video><audio> 标签期望的基线控件集。

除了默认预设外,预设还针对更具体的用例。例如,/background 包括内置自动播放、静音和循环的媒体元素、没有控件的皮肤,以及为其提供动力所需的功能:

import { createPlayer } from '@videojs/react';
import { backgroundFeatures, BackgroundVideo, BackgroundVideoSkin } from '@videojs/react/background';

const Player = createPlayer({ features: backgroundFeatures });

function Hero() {
  return (
    <Player.Provider>
      <BackgroundVideoSkin>
        <BackgroundVideo src="hero.mp4" />
      </BackgroundVideoSkin>
    </Player.Provider>
  );
}

了解更多关于预设


上一步: 为什么选择 Video.js?

下一步: 使用 AI 构建