vue video播放器

1.npm安装 video 

npm install vue-video-player --save

2.main.js全局引入

import VideoPlayer from 'vue-video-player'

Vue.use(VideoPlayer);

require('video.js/dist/video-js.css') 

require('vue-video-player/src/custom-theme.css')

3.新建myvideo.vue文件

 

<template>
  <div class="container">
    <div class="player">
      <video-player  class="video-player vjs-custom-skin"
                     ref="videoPlayer"
                     :playsinline="true"
                     :options="playerOptions"
                     @play="onPlayerPlay($event)"
                     @pause="onPlayerPause($event)"
      >
      </video-player>
    </div>
  </div>
</template>

<script>
import { videoPlayer } from "vue-video-player";
export default {
  data() {
    return {
      playerOptions: {
        //        playbackRates: [0.7, 1.0, 1.5, 2.0], //播放速度
        autoplay: false, //如果true,浏览器准备好时开始回放。
        muted: false, // 默认情况下将会消除任何音频。
        loop: false, // 导致视频一结束就重新开始。
        preload: "auto", // 建议浏览器在<video>加载元素后是否应该开始下载视频数据。auto浏览器选择最佳行为,立即开始加载视频(如果浏览器支持)
        language: "zh-CN",
        aspectRatio: "16:9", // 将播放器置于流畅模式,并在计算播放器的动态大小时使用该值。值应该代表一个比例 - 用冒号分隔的两个数字(例如"16:9"或"4:3")
        fluid: true, // 当true时,Video.js player将拥有流体大小。换句话说,它将按比例缩放以适应其容器。
        sources: [
          {
            type: "video/mp4",
            // mp4
            src: "http://vjs.zencdn.net/v/oceans.mp4"
            // webm
            // src: "https://cdn.theguardian.tv/webM/2015/07/20/150716YesMen_synd_768k_vp8.webm"
          }
        ],
        poster: "poster.jpg", //你的封面地址
        width: document.documentElement.clientWidth,
        notSupportedMessage: "此视频暂无法播放,请稍后再试" //允许覆盖Video.js无法播放媒体源时显示的默认信息。
        //        controlBar: {
        //          timeDivider: true,
        //          durationDisplay: true,
        //          remainingTimeDisplay: false,
        //          fullscreenToggle: true  //全屏按钮
        //        }
      }
    };
  },
  components: {
    videoPlayer
  },
  methods: {
    onPlayerPlay(player) {
      alert("play");
    },
    onPlayerPause(player) {
      alert("pause");
    }
  },
  computed: {
    player() {
      return this.$refs.videoPlayer.player;
    }
  }
};
</script>

<!-- Add "scoped" attribute to limit CSS to this component only -->
<style type="text/css" scoped>
.container {
  background-color: #efefef;
  min-height: 100%;
}
</style>

4.官方链接    https://surmon-china.github.io/vue-video-player/

<think>好的,用户想了解如何在Vue.js中创建自定义视频播放器。首先,我需要回忆一下相关的Vue.js知识,特别是关于集成第三方库的部分。记得之前有看到过使用Video.js和Vue结合的示例,可能需要引用相关的内容。 用户提供的引用中,引用[1]提到了在Vue组件的mounted钩子中初始化Video.js播放器,并且需要配置选项,比如视频源和控件。这应该是关键步骤。另外,引用[3]提到使用Vite等构建工具,可能需要考虑项目的搭建方式,但基本结构类似。 接下来,我需要整理步骤。首先安装Video.js及其样式,然后在Vue组件中导入。在mounted生命周期中初始化播放器,配置选项,并在beforeDestroy钩子中销毁实例以防止内存泄漏。同时,用户可能需要自定义控件,这时候Vue的自定义指令(引用[2])可能派上用场,或者使用组件(引用[5])来封装播放器部分。 还要注意代码示例的正确性,比如使用this.playerId获取DOM元素,以及处理视频源的方式。可能需要提醒用户关于响应式数据的变化,比如视频源更新时需要重新加载播放器。 另外,引用[4]提到的插件配置可能在复杂情况下需要,但基础播放器可能不需要。需要保持回答的简洁,但覆盖关键点:安装、初始化、配置、销毁,以及可能的自定义扩展。 最后,生成相关问题,可能涉及性能优化、自定义控件、第三方库比较等,帮助用户深入理解。同时确保所有LaTeX格式正确,虽然这个问题中可能用不上数学公式,但需留意是否有变量或代码块需要正确标注。</think>### 如何在 Vue.js 中创建自定义视频播放器? 以下是基于 **Video.js** 和 **Vue.js** 实现自定义视频播放器的分步指南: --- #### **1. 环境准备** - 确保已创建 Vue.js 项目(可通过 Vue CLI 或 Vite 构建,引用[3]) - 安装 Video.js 核心库及其样式: ```bash npm install video.js video.js/dist/video-js.css ``` --- #### **2. 创建基础播放器组件** ```vue <template> <video :id="playerId" class="video-js"></video> </template> <script> import videojs from 'video.js' import 'video.js/dist/video-js.css' export default { data() { return { playerId: 'custom-video-player', // 唯一播放器ID player: null } }, props: { sources: { type: Array, default: () => [ { src: '默认视频路径.mp4', type: 'video/mp4' } ] } }, mounted() { this.initPlayer() }, beforeDestroy() { if (this.player) { this.player.dispose() // 销毁播放器避免内存泄漏 } }, methods: { initPlayer() { const options = { controls: true, // 显示默认控件 autoplay: false, sources: this.sources } this.player = videojs(this.$el, options) } } } </script> ``` --- #### **3. 高级功能实现** - **自定义控件** 通过 Vue 指令(引用[2])或组件(引用[5])扩展按钮功能: ```javascript // 示例:添加自定义播放按钮指令 Vue.directive('custom-play', { inserted(el, binding) { el.addEventListener('click', () => { binding.value.play() // 调用播放器实例的播放方法 }) } }) ``` - **响应式更新视频源** 在 `watch` 中监听 `sources` 变化并更新播放器: ```javascript watch: { sources(newVal) { if (this.player) { this.player.src(newVal) this.player.load() } } } ``` --- #### **4. 使用组件** ```vue <template> <div> <VideoPlayer :sources="videoSources" /> </div> </template> <script> import VideoPlayer from './components/VideoPlayer.vue' export default { components: { VideoPlayer }, data() { return { videoSources: [ { src: 'https://example.com/video.mp4', type: 'video/mp4' } ] } } } </script> ``` --- ### 关键注意事项 1. **生命周期管理** 必须在 `beforeDestroy` 中销毁播放器对象,避免内存泄漏[^1] 2. **样式覆盖** 通过 `video-js` 类名自定义播放器样式 3. **插件扩展** Video.js 支持插件系统,可集成字幕、画中画等功能 ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值