Skip to content

Video Player 视频播放器

用于播放视频流。

全局配置

在全局配置组件属性。

VideoPlayer组件属性配置
ts
app.provide(VIDEO_PLAYER_KEY, {
  core: 'xgplayer-hls',
  // 使用天翼视联播放器内核时必须设置appId
  appId: 'xxxxxx',
  // 网络配置,使用西瓜播放器内核时生效
  networkOptions: {
    loadTimeout: 15000,
    retryCount: 3,
    retryDelay: 1000,
  },
  // others props...
});

业务注入

在全局注入加载视频播放配置业务。

注入加载视频播放配置业务
ts
app.provide(LOAD_VIDEO_PLAY_OPTIONS_KEY, id => {
  // 先加载视频信息
  return axios
    .get('/api/video/get', {
      params: {
        id: id,
      },
    })
    .then(res => {
      // 组装成播放配置并返回
      const options: VideoPlayOptions = {
        url: res.data.url,
        core: res.data.streamType === 'hls' ? 'xgplayer-hls' : 'xgplayer-flv',
        definitions: res.data.urls.map(item => {
          return {
            definition: item.name,
            url: item.url,
          };
        }),
      };
      return options;
    });
});

基础用法

传入视频流地址即可开始播放,通过core属性可以切换播放器内核

动态加载

大部分情况下视频地址需要动态加载,只需在全局注入加载视频播放配置业务,后续使用组件直接设置id属性即可自动加载视频地址及播放配置。

属性

属性名说明
类型
默认值
url视频流地址string
id视频id,需注入加载视频播放配置业务后使用string
core播放器内核VideoPlayerCorexgplayer-hls
keep-alive-interval保活间隔时间,每隔一段时间会重新加载视频播放配置,0表示不保活number0
definitions2.1.5清晰度列表VideoPlayerDefinition[]
use-native-hls2.1.7当播放环境原生支持 HLS 播放时,直接播放 HLS 流而不使用 HLS 插件,仅 IOS 系统生效booleantrue
loading-text2.2.0加载文案string

xg-player可选参数

属性名说明类型默认值
network-options网络配置选项XgPlayerNetworkOptions

xg-player播放器官方文档

meta-player可选参数

属性名说明类型默认值
appId申请的播放器授权appIdstring
playerURL播放器地址string
authUrlhttps+租户播放器业务域名,在小程序场景下需传入string
miniAppId小程序的appid,在小程序场景下需传入string

meta-player播放器官方文档

播放器内核

可选值说明
xgplayer-hls推荐 xgplayer官方实现的用于处理hls协议视频流库
xgplayer-flv推荐 xgplayer官方实现的用于处理flv协议视频流库
xgplayer-hls.jsxgplayer基于hls.js二次封装的hls协议视频流处理库
xgplayer-flv.jsxgplayer基于flv.js二次封装的flv协议视频流处理库
metaplayer-hls-soft无插件播放器软解码模式(四宫格以下HLS流使用)
metaplayer-plugin-float使用插件进行播放(浮层模式)
metaplayer-hls-hard推荐 针对HLS流,自动识别H.264、H.265编码进行无插件硬解码播放
metaplayer-plugin-peer推荐 使用插件进行播放(同层模式)
metaplayer-webRTCwebRTC直播协议流(仅支持H264)
metaplayer-websocketwebsocket + fmp4、websocket+flv直播流支持

提示

使用meta-player的插件模式播放或需要调用播放器API和事件时,需要在页面的head标签中引入工具文件。

html
<head>
  <title>Liv Web</title>
  <script src="https://vcp.21cn.com/metaplayer/static/template/latest/lib/mpIframe-min.js"></script>
</head>
类型声明
ts
import VideoPlayer from './video-player.vue';
import type { XgPlayerProps, XgPlayerCore } from './xg-player';
import type { MetaPlayerProps, MetaPlayerCore } from './meta-player';

/**
 * 播放器内核
 * - xgplayer-hls: xgplayer官方实现的用于处理hls协议视频流库
 * - xgplayer-flv: xgplayer官方实现的用于处理flv协议视频流库
 * - xgplayer-hls.js: xgplayer基于hls.js二次封装的hls协议视频流处理库
 * - xgplayer-flv.js: xgplayer基于flv.js二次封装的flv协议视频流处理库
 * - metaplayer-hls-soft: 无插件播放器软解码模式(四宫格以下HLS流使用)
 * - metaplayer-plugin-float: 使用插件进行播放(浮层模式)
 * - metaplayer-hls-hard: 针对HLS流,自动识别H.264、H.265编码进行无插件硬解码播放
 * - metaplayer-plugin-peer: 使用插件进行播放(同层模式)
 * - metaplayer-webRTC: webRTC直播协议流(仅支持H264)
 * - metaplayer-websocket: websocket + fmp4、websocket+flv直播流支持
 */
export type VideoPlayerCore = XgPlayerCore | MetaPlayerCore;

/**
 * 播放器清晰度
 */
export interface VideoPlayerDefinition {
  /**
   * 清晰度名称
   */
  definition: string;
  /**
   * 清晰度对应的视频流地址
   */
  url: string;
}

/**
 * 视频播放器组件属性
 */
export type VideoPlayerProps = VideoPlayerUniqueProps &
  Omit<Omit<XgPlayerProps, 'url'>, 'core'> &
  Omit<Omit<MetaPlayerProps, 'url'>, 'core'> & {
    /**
     * 视频流地址
     */
    url?: string;
    /**
     * 需要播放的视频id
     */
    id?: string;
    /**
     * 播放器内核
     * @defaultValue 'xgplayer-hls'
     */
    core?: VideoPlayerCore;
    /**
     * 清晰度切换选项
     */
    definitions?: VideoPlayerDefinition[];
    /**
     * 加载文案
     */
    loadingText?: string;
  };

/**
 * 视频播放器独有属性
 */
export interface VideoPlayerUniqueProps {
  /**
   * 保活时间间隔
   * @remarks 开启保活后,每隔一段时间会重新请求视频流地址,以保持视频播放,0表示不保活。
   * @defaultValue 0
   */
  keepAliveInterval?: number;
  /**
   * 是否使用原生HLS
   * @remarks 当播放环境原生支持 HLS 播放时,直接播放 HLS 流而不使用 HLS 插件,仅 IOS 系统生效
   * @defaultValue true
   */
  useNativeHls?: boolean;
}

/**
 * 视频播放配置
 */
export type VideoPlayOptions = VideoPlayerUniqueProps & (XgPlayerProps | MetaPlayerProps);

/**
 * 视频播放器组件实例
 */
export type VideoPlayerInstance = InstanceType<typeof VideoPlayer>;
xg-player类型声明
ts
import XgPlayer from './xg-player.vue';
import type { VideoPlayerDefinition } from './video-player';

/**
 * 西瓜播放器内核
 * - xgplayer-hls: xgplayer官方实现的用于处理hls协议视频流库
 * - xgplayer-flv: xgplayer官方实现的用于处理flv协议视频流库
 * - xgplayer-hls.js: xgplayer基于hls.js二次封装的hls协议视频流处理库
 * - xgplayer-flv.js: xgplayer基于flv.js二次封装的flv协议视频流处理库
 */
export type XgPlayerCore = 'xgplayer-hls' | 'xgplayer-flv' | 'xgplayer-hls.js' | 'xgplayer-flv.js';

/**
 * 西瓜播放器网络配置
 */
export interface XgPlayerNetworkOptions {
  /**
   * 重试次数,单位毫秒
   * @defaultValue 3
   */
  retryCount?: number;
  /**
   * 重试间隔,单位毫秒
   * @defaultValue 1000
   */
  retryDelay?: number;
  /**
   * 请求超时时间,单位毫秒
   * @defaultValue 10000
   */
  loadTimeout?: number;
  /**
   * fetch请求配置
   */
  fetchOptions?: Record<string, any>;
  /**
   * 直播目标延迟,单位秒
   * @defaultValue 10
   */
  targetLatency?: number;
  /**
   * 直播允许的最大延迟,单位秒
   * @defaultValue 20
   */
  maxLatency?: number;
  /**
   * 直直播断流时间,单位秒
   * @defaultValue 0
   */
  disconnectTime?: number;
}

/**
 * 西瓜播放器组件属性
 */
export interface XgPlayerProps {
  /**
   * 视频流地址
   */
  url: string;
  /**
   * 播放器内核
   * @defaultValue 'xgplayer-hls'
   */
  core?: XgPlayerCore;
  /**
   * 清晰度切换选项
   */
  definitions?: VideoPlayerDefinition[];
  /**
   * 网络配置选项
   */
  networkOptions?: XgPlayerNetworkOptions;
}

/**
 * 西瓜播放器组件事件
 */
export type XgPlayerEmits = {
  error: [errorMsg: string];
};

/**
 * 西瓜播放器组件实例
 */
export type XgPlayerInstance = InstanceType<typeof XgPlayer>;
meta-player类型声明
ts
import MetaPlayer from './meta-player.vue';
import type { VideoPlayerDefinition } from './video-player';

/**
 * 天翼视联播放器内核
 * - metaplayer-hls-soft: 无插件播放器软解码模式(四宫格以下HLS流使用)
 * - metaplayer-plugin-float: 使用插件进行播放(浮层模式)
 * - metaplayer-hls-hard: 针对HLS流,自动识别H.264、H.265编码进行无插件硬解码播放
 * - metaplayer-plugin-peer: 使用插件进行播放(同层模式)
 * - metaplayer-webRTC: webRTC直播协议流(仅支持H264)
 * - metaplayer-websocket: websocket + fmp4、websocket+flv直播流支持
 */
export type MetaPlayerCore =
  | 'metaplayer-hls-soft'
  | 'metaplayer-plugin-float'
  | 'metaplayer-hls-hard'
  | 'metaplayer-plugin-peer'
  | 'metaplayer-webRTC'
  | 'metaplayer-websocket';

/**
 * 天翼视联播放器组件属性
 */
export interface MetaPlayerProps {
  /**
   * 视频流地址
   */
  url: string;
  /**
   * 播放器内核
   * @defaultValue 'metaplayer-hls-hard'
   */
  core?: MetaPlayerCore;
  /**
   * 播放器地址
   * @defaultValue https://vcp.21cn.com/metaplayer/static/template/latest/player.html
   */
  playerURL?: string;
  /**
   * 申请的播放器授权appId
   */
  appId?: string;
  /**
   * https+租户播放器业务域名,在小程序场景下需传入
   */
  authUrl?: string;
  /**
   * 小程序的appid,在小程序场景下需传入
   */
  miniAppId?: string;
  /**
   * 清晰度切换选项
   */
  definitions?: VideoPlayerDefinition[];
}

/**
 * 天翼视联播放器组件事件
 */
export type MetaPlayerEmits = {
  error: [errorMsg: string];
};

/**
 * 天翼视联播放器组件实例
 */
export type MetaPlayerInstance = InstanceType<typeof MetaPlayer>;