video.js 和 Vue集成

该文介绍了一个基本的Vue组件,用于创建video.js播放器。组件在mounted时初始化播放器,beforeDestroy时销毁。它包含错误和网速问题的处理,以及视频源的更换。此外,还展示了如何自定义控制条和播放选项。
摘要由CSDN通过智能技术生成

这是一个基本的 VUE 播放器实现。

它只是在 mounted 上实例化 video.js 播放器,并在 beforeDestroy 上销毁它。

1. 安装依赖

npm install --save-dev video.js

2.在main.js 引用css

import 'video.js/dist/video-js.css'

3.创建 VideoPlayer组件

<template>
  <div>
    <video ref="videoPlayer" class="video-js vjs-default-skin vjs-big-play-centered vjs-16-9"></video>
  </div>
</template>

<script>
import videojs from 'video.js'

export default {
  name: 'VideoPlayer',
  props: {
    options: {
      type: Object,
      default() {
        return {}
      }
    }
  },
  data() {
    return {
      player: null
    }
  },
  mounted() {
    let that = this
    this.player = videojs(this.$refs.videoPlayer, this.options, function onPlayerReady() {
      this.play()
      this.on('error', function(err) { //请求数据时遇到错误
        console.log('请求数据时遇到错误', err)
        that.$message.error('获取视频资源失败,请联系管理员上传视频')
      })
      this.on('stalled', function(stalled) { //网速失速
        console.log('网速失速', stalled)
        that.$message.warning('网速失速')
      })
    })
  },
  beforeDestroy() {
    if (this.player) {
      this.player.dispose()
    }
  }
}
</script>
<style lang="scss">
.video-js { /* 给.video-js设置字体大小以统一各浏览器样式表现,因为video.js采用的是em单位 */

  font-size: 14px;

}

.video-js button {

  outline: none;

}

.video-js.vjs-fluid,
.video-js.vjs-16-9,
.video-js.vjs-4-3 { /* 视频占满容器高度 */

  height: 100%;

  background-color: #161616;

}

.vjs-poster {

  background-color: #161616;

}

.video-js .vjs-big-play-button { /* 中间大的播放按钮 */

  font-size: 2.5em;

  line-height: 2.3em;

  height: 2.5em;

  width: 2.5em;

  -webkit-border-radius: 2.5em;

  -moz-border-radius: 2.5em;

  //border-radius: 2.5em;

  background-color: rgba(115, 133, 159, .5);

  border-width: 0.12em;

  margin-top: -1.25em;

  margin-left: -1.75em;

}

.video-js.vjs-paused .vjs-big-play-button { /* 视频暂停时显示播放按钮 */

  display: block;

}

.video-js.vjs-error .vjs-big-play-button { /* 视频加载出错时隐藏播放按钮 */

  display: none;

}

.vjs-loading-spinner { /* 加载圆圈 */

  font-size: 2.5em;

  width: 2em;

  height: 2em;

  border-radius: 1em;

  margin-top: -1em;

  margin-left: -1.5em;

}

.video-js .vjs-control-bar { /* 控制条默认显示 */

  display: flex;

}

.video-js .vjs-time-control {
  display: block;
}

.video-js .vjs-time-divider {
  display: none;
}

.vjs-button > .vjs-icon-placeholder:before { /* 控制条所有图标,图标字体大小最好使用px单位,如果使用em,各浏览器表现可能会不大一样 */

  font-size: 22px;

  line-height: 1.9;

}

.video-js .vjs-playback-rate .vjs-playback-rate-value {

  line-height: 2.4;

  font-size: 14px;

}

/* 进度条背景色 */

.video-js .vjs-play-progress {

  color: #ffb845;

  background-color: #ffb845;

}

.video-js .vjs-progress-control .vjs-mouse-display {

  background-color: #ffb845;

}

.vjs-mouse-display .vjs-time-tooltip {

  padding-bottom: 6px;

  background-color: #ffb845;

}

.video-js .vjs-play-progress .vjs-time-tooltip {

  display: none !important;

}

.video-js {
  // 进度条的圆点式样跳转
  .vjs-play-progress:before {
    top: -0.45em !important;
  }

  .vjs-progress-control:hover .vjs-play-progress:before, {
    top: -0.33em !important;
  }
}
// 声音的圆点式样调整
.vjs-slider-vertical .vjs-volume-level:before {
  left: -4.5px !important;
}
</style>

4.使用

 <video-player ref="videoPlayer" v-if="videoVisible" :options="videoOptions"/>
videoVisible : false,
videoOptions: {
        autoplay: true,
        controls: true,
        playbackRates: [1, 1.25, 1.5, 2, 2.5],
        sources: [
          {
            src: '/path/to/video.mp4',
            type: 'video/mp4'
          }
        ],
        controlBar: {
          // 设置控制条组件
          currentTimeDisplay: true,
          timeDivider: true,
          durationDisplay: true,
          remainingTimeDisplay: true,
          playbackRateMenuButton: true,
          volumePanel: {
            inline: false
          },
          children: [
            { name: 'playToggle' }, // 播放/暂停按钮
            { name: 'currentTimeDisplay' }, // 视频当前已播放时间
            { name: 'progressControl' }, // 播放进度条
            { name: 'durationDisplay' }, // 视频播放总时间
            {
              // 倍速播放
              name: 'playbackRateMenuButton',
              playbackRates: [0.5, 1, 1.5, 2]
            },
            {
              name: 'volumePanel', // 音量控制
              inline: false // 不使用水平方式
            },
            { name: 'FullscreenToggle' } // 全屏
          ]
        }
      },

播放和切换视频

handlePaly(obj, node) {
      this.obj = obj
      this.node = node
      if (!obj.children && node.level !== 1) {
        let data = {
          src: process.env.VUE_APP_BASE_API + this.tepmItem
        }
        if (this.videoVisible) {
          this.$refs.videoPlayer.player.src(data)
          return
        } else {
          this.videoOptions.sources[0] = data
        }
       this.videoVisible = true
      }
    },

参考:https://gitcode.gitcode.host/docs-cn/video.js-docs-cn/docs/guides/vue.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

对的态度带你走向对的路

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值