videojs 使用手册

简介: 因为最近做了一个关于直播与录播的项目,需要用到播放器,常用的 video 标签无法满足兼容性和可配置性,为了降低编写难度,使用了 videojs 这个库来辅助开发,这里记录一下,方便之后使用回忆。

介绍

Video.js is an extendable framework/library around the native video element. It does the following:
  • Offers a plugin API so that different types of video can be handed to the native video element
  • Unifies the native video API across browsers (polyfilling support for features if necessary)
  • Offers an extendable and themable UI
  • Ensures accessibility for keyboard and screen reader users
  • Has a set of core plugins that offer support for additional video formats...

上面这段话的大概意思就是:videojs 是围绕客户端本地的 video 标签的一个框架,它提供了一个插件 API,用来接收不同类型的视频,并且提供了一个统一的 API,解决了不同浏览器的兼容性问题,提供了一个可扩展的 UI,提供了一个可访问性的 UI,提供了一些核心插件,用来支持额外的视频格式。

引入 & 安装

支持通过 cdn 和 npm 引入

  1. 通过 cdn、script 标签引入
<\script src="https://vjs.zencdn.net/7.17.0/video.min.js"></script>
//把\去掉
  1. 通过 npm 安装
npm install video.js --save
or yarn add video.js

配置

用法就不多简述了,参考 videojs官网这篇文章

因为英文看的吃力,所以不想看第二遍,于是把一些配置说明记录一下。

options={
  controls: true, // 是否显示控制条
  poster: 'xxx', // 视频封面图地址,记住这一点poster是绝对地址,如果给相对位置会请求到你封装的地址中去,向封装的地址发起请求。
  preload: 'auto',
  autoplay: false,
  fluid: true, // 自适应宽高,也可以设置为常见比例"4:3","16:9"
  language: 'zh-CN', // 设置语言
  muted: false, // 是否静音
  liveDisplay:true, // 直播提示
  inactivityTimeout: false,
  controlBar: { // 设置控制条组件
    /* 设置控制条里面组件的相关属性及显示与否
    'currentTimeDisplay':true,
    'timeDivider':true,
    'durationDisplay':true,
    'remainingTimeDisplay':false,
    volumePanel: {
      inline: false,
    }
    */
    /* 使用children的形式可以控制每一个控件的位置,以及显示与否 */
    children: [
      {name: 'playToggle'}, // 播放按钮
      {name: 'currentTimeDisplay'}, // 当前已播放时间
      {name: 'progressControl'}, // 播放进度条
      {name: 'durationDisplay'}, // 总时间
      { // 倍数播放
        name: 'playbackRateMenuButton',
        'playbackRates': [0.5, 1, 1.5, 2, 2.5]
      },
      {
        name: 'volumePanel', // 音量控制
        inline: false, // 不使用水平方式
      },
      {name: 'FullscreenToggle'} // 全屏
    ]
  },
  sources:[ // 视频源
    {
      src: 'xxx', // 视频地址
      type: 'video/mp4' // 视频格式
    }
  ],
  ]
}

实例

有了配置之后就可以生成实例了,牢记一点:videojs 是需要一个意见渲染出来挂载到 dom 上的 video 节点来作为容器,所以如果是通过 script 标签引入的话,需要将 script 放在 video 之后,否则会报“该标签不支持”的错误。同理,通过 npm 安装的话需要注意当使用 videojs 实例化的时候必须保证 dom 节点存在,一般这块出问题都是生命周期的问题。

import Videojs from "video.js";

var myPlayer = Videojs('videoId', options, function() {
  // 这个函数会在videojs初始化完成后执行

  // 函数的this指向实例对象,所以可以在这个函数里做一些事件监听和一些dom操作

  // on() and addEventListener()
  // 语法糖:this.on('event', function(e) {});
  // this.addEventListener('event', function(e) {});

  // off() and removeEventListener()
  // 删除监听器:this.off('event', function(e) {});
  // this.removeEventListener('event', function(e) {});
  // 它支持的默认事件列表有:play,pause,waitting,
  // timeupdate,ended,error,seeking,seeked等常见的事件
  // 通过对这些事件进行监听我们可以做一些异常处理

//  触发事件this.trigger('dispose')
    console.log('播放器初始化完成');
});

自定义样式

主要是 这篇文章

首先要了解实例的样式是怎么产生的,官网很清楚的说到它的样式来源于两部分:

  1. 是来源于 video-min.css(如果包含,一般都包含)
  2. 是来源于 videojs 代码执行产生的,并包含在 < head > 的 < style > 元素中

vjs-styles-defaults元素检查如果发现这个类则说明它来自于默认样式

vjs-styles-dimensions 而这样的类则说明它来自于开发者自定义的样式,可以覆盖掉 defaults 样式,而不用依赖脚本或者用!important来克服内联样式

自定义样式的步骤:

tips: 建议创建外观的过程是覆盖默认外观提供的样式。这样,你就不需要从头开始。

tips: 在播放器中为你的皮肤创建一个钩子的最方便的方法是为它添加一个类。你可以通过在初始的 < video > 元素中添加一个类来实现:

tips: vjs- 前缀是 Video.js 播放器中包含的所有类的约定。

  1. 向播放器添加一个自定义类,两种方法
<!-- 通过html引入 -->
<video class="vjs-matrix video-js">...</video>

<!-- 通过js引入 -->
<script>
var player = videojs('my-player');

player.addClass('vjs-matrix');
</script>
  1. 使用自定义样式覆盖默认样式的需要确定去覆盖哪些选择器和属性。例如,假设我们不喜欢控件的默认颜色(白色) ,我们想将它们更改为亮绿色(比如 # 00ff00)。要做到这一点,我们将使用浏览器的开发工具来检查播放器,并找出我们需要使用哪些选择器来调整这些样式 - 我们将添加我们的自定义。Vjs-matrix 选择器,以确保我们的最终选择器足够特定,以覆盖默认皮肤。
/* Change all text and icon colors in the player. */
.vjs-matrix .video-js {
  color: #00ff00;
}

/* Change the border of the big play button. */
.vjs-matrix .vjs-big-play-button {
  border-color: #00ff00;
}

/* Change the color of various "bars". */
.vjs-matrix .vjs-volume-level,
.vjs-matrix .vjs-play-progress,
.vjs-matrix .vjs-slider-bar {
  background: #00ff00;
}
  1. 最后,我们可以将其保存为 videojs-matrix. CSS 文件,和 video-js.min.css 文件一起放在自己的项目中。
<link rel="stylesheet" type="text/css" href="path/to/video-js.min.css">
<link rel="stylesheet" type="text/css" href="path/to/videojs-matrix.css">

异常处理经验

  1. 初始化错误一般是由生命周期引起,可以通过改变初始化时间点来解决,一般了解 JavaScript 事件循环很好理解
  2. option 里的 notSupportedMessage 属性只能处理 source 错误的提示,如果想要对各种错误进行差异化处理,可以通过 onError 事件中处理,携带的参数是一个 error 对象,可以通过 param.error_来区分是哪种播放错误,然后通过 param.errDisplay 来进行差异化的提示,主要用到 contentEl()createEl 这两个 api,前者获取提示元素,然后对这个元素进行改造,通过后者挂到 dom 中。如果不想让它显示,则通过 close() 这个API关掉。 更多参考 这篇文章
目录
相关文章
|
3月前
|
JavaScript
tailwindcss使用教程
【8月更文挑战第1天】
60 3
|
4月前
命令行加载特效 【cli-spinner.js】 实用教程
命令行加载特效 【cli-spinner.js】 实用教程
48 0
|
JavaScript 前端开发 Java
《JS零基础入门教程(上册)》下载
通过阅读本书,您能学到JS零基础入门教学、JavaScpript实战案例解析、JS常用结构、工具及语法汇总详解和理论与实践的结合。
111 0
《JS零基础入门教程(上册)》下载
|
移动开发 JavaScript 前端开发
Video.js使用指南
Video.js使用指南
|
存储 移动开发 JavaScript
Video.js 使用教程 - 手把手教你基于 Vue 搭建 HTML 5 视频播放器
Video.js 是最强大的网页嵌入式 HTML 5 视频播放器的组件库之一,也是大多数人首选的网页视频播放解决方案。复杂的网页视频渲染,在引入 Video.js 后,轻松解决。本教程手把手教你搭建一套基于 Vue 的 Video.js 视频播放页。 跟随本教程学习,最终你可以自己搭建一套可以播放本地视频文件及网络流媒体的网页视频播放器。学习如何修改 video.js 的默认样式来实现播放按钮自定义形状(圆形)、居中及播放时间的显示与否, 如何播放 m3u8 格式,以及如何使用 video 的属性、事件及方法,音量增减,最终实现一个功能齐全的视频播放器。
954 0
|
资源调度 前端开发 JavaScript
wangEditor富文本编辑器安装与入门
wangEditor富文本编辑器安装与入门
689 0
|
应用服务中间件 视频直播 nginx
使用flv.js与video.js实现播放视频直播(简教程)
推荐教程:《使用flv.js做直播》 1.准备 1.下载 nginx 2.下载 livego 3.下载 OBS 4.引用 flv.js 5.引用 video.
6218 0
|
JavaScript .NET 开发框架
KindEditor 在线编辑器
地址 http://www.kindsoft.net/index.php 调用 下载KindEditor最新版本。打开下载页面 解压zip文件,将所有文件上传到您的网站程序目录下。例如:http://您的域名/editor/ 要显示编辑器的位置添加TEXTAREA输入框。
1025 0