• vue使用vue-video-player插件播放视频


    前言

    在我的一个项目中,需要进行播放视频,于是进行研究,那么本次也是将我怎么用vue-video-player插件进行播放视频的步骤进行讲解

    官网文档

    在进行正式讲解的时候,我觉得还是应该把它官网的文档进行发出来,因为我这边只是讲我有使用到的方法和属性,但是实际上,你们正式需要用到的可能不完全和我相同;这个时候就需要进行官方文档的查找了。
    文档链接:vue-video-player

    步骤

    下载依赖和配置

    首先我们需要在我们的项目进行安装下载该插件的依赖

    npm install vue-video-player
    
    • 1

    在你需要进行播放视频的页面引入

    import { videoPlayer } from "vue-video-player";
    
    • 1

    这里我们用videoPlayer进行标注名称

    编写页面

    引入完成后,我们就需要编写页面能够播放视频了

    <template>
    	<div>
    	// 视频
    	<video-player class="video-player" ref="videoPlayer">video-player>
    	div>
    template>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    以上是最最基础的播放视频的结构,而如果你想播放视频的时候进行某些操作,或者设置视频的参数、按钮控制等等就需要定义属性和方法了。

    <template>
    	<div>
    	// 视频
    	   <video-player
            class="video-player"
            ref="videoPlayer"
            :options="playerOptions"
            @pause="onPlayerPause($event)"
            @ended="onPlayerEnded($event)"
            @timeupdate="onPlayerTimeupdate($event)"
          >
          video-player>
    	div>
    template>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14

    其中
    options代表的是对视频控件的设置
    pause代表的是暂停回调,当视频暂停的时候进行操作
    ended代表的是视频播放结束的回调,当视频播放完成的时候进行操作
    timeupdate 代表的是时候监听每一秒进行操作
    以上只是其中一部分,下面我会列出一些比较常用的方法

    本人项目播放视频代码

    单纯播放视频是很简单的,关键是你需要实现不同的需求,进行不同的回调调用。
    那么在播放视频的部分,首先你需要接收到后端传过来的路径,以我的路径:

    D:/EXAM_MATERIAL/NEW-STAFF/VIDEO/B-0001/1/B-0001.mp4
    
    • 1

    为例
    ps:这里我会只实现播放,具体的其他回调我不会写进来
    界面:

    <template>
    	<div>
    	
    	   <video-player
            class="video-player"
            ref="videoPlayer"
            :options="playerOptions"
          >
          video-player>
    	div>
    template>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    js逻辑

    <script>
    import { videoPlayer } from "vue-video-player";
    export default {
      name: "newStaffMediaPlay",
      // 添加组件
      components: {
        videoPlayer,
      },
      // 定义变量
       data() {
        return {
    		mediaUrl: null, // 播放视频的路径
    		// 视频控制设置
    		playerOptions: {
    	        playbackRates: [1.0], // 可选的播放速度
    	        autoplay: true, // 如果为true,浏览器准备好时开始回放。
    	        muted: false, // 默认情况下将会消除任何音频。
    	        loop: false, // 是否视频一结束就重新开始。
    	        preload: "auto", // 建议浏览器在
    	        language: "zh-CN",
    	        aspectRatio: "16:9", // 将播放器置于流畅模式,并在计算播放器的动态大小时使用该值。值应该代表一个比例 - 用冒号分隔的两个数字(例如"16:9"或"4:3")
    	        fluid: true, // 当true时,Video.js player将拥有流体大小。换句话说,它将按比例缩放以适应其容器。
    	        sources: [
    	          {
    	            type: "video/mp4", // 类型
    	            src: "", // url地址
    	          },
    	        ],
    	        poster: "", // 封面地址
    	        notSupportedMessage: "此视频暂无法播放,请稍后再试", // 允许覆盖Video.js无法播放媒体源时显示的默认信息。
    	        controlBar: {
    	          timeDivider: true, // 当前时间和持续时间的分隔符
    	          durationDisplay: true, // 显示持续时间
    	          remainingTimeDisplay: true, // 是否显示剩余时间功能
    	          fullscreenToggle: true, // 是否显示全屏按钮
            },
          },
    	}
      },
      // 方法
      methods: {
      // 获取视频路径方法
    	  getMedia() {
    	  // 假定此临时变量为后端获取的路径
    	  	let mediaPath = "D:/EXAM_MATERIAL/NEW-STAFF/VIDEO/B-0001/1/B-0001.mp4";
    	  	// 处理路径,防止出现浏览器禁止访问问题
            mediaPath = mediaPath.replace("D:/EXAM_MATERIAL", "/EXAM_MATERIAL");
            let name = mediaPath.substring(mediaPath.lastIndexOf("/") + 1);
            this.mediaUrl =
              mediaPath.substring(0, mediaPath.lastIndexOf("/") + 1) +
              encodeURI(name);
              // 在视频控件设置视频路径
            this.playerOptions.sources[0].src = this.mediaUrl;
    	  }
    	},
      // created
      created() {
    	// 进入页面加载获取后端传过来的视频路径进行播放
    	this.getMedia();
    	},
    }
    </script>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62

    实际效果

    以下截图为我项目播放视频截图
    在这里插入图片描述

    常用回调

      <template>
        <div class='demo'>
          <video-player class="video-player vjs-custom-skin" 
            ref="videoPlayer" 
            :playsinline="true" 
            :options="playerOptions"
            @play="onPlayerPlay($event)" 
            @pause="onPlayerPause($event)"
            @ended="onPlayerEnded($event)"
            @waiting="onPlayerWaiting($event)"
            @playing="onPlayerPlaying($event)"
            @loadeddata="onPlayerLoadeddata($event)"
            @timeupdate="onPlayerTimeupdate($event)"
            @canplay="onPlayerCanplay($event)"
            @canplaythrough="onPlayerCanplaythrough($event)"
            @statechanged="playerStateChanged($event)"
            @ready="playerReadied"
          >
          video-player>
        div>
      template>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
     <script>
        export default {
          methods: {
            // 播放回调
            onPlayerPlay(player) {
              console.log('player play!', player)
            },
    
            // 暂停回调
            onPlayerPause(player) {
              console.log('player pause!', player)
            },
    
            // 视频播完回调
            onPlayerEnded($event) {
              console.log(player)
            },
    
            // DOM元素上的readyState更改导致播放停止
            onPlayerWaiting($event) {
              console.log(player)
            },
    
            // 已开始播放回调
            onPlayerPlaying($event) {
              console.log(player)
            },
    
            // 当播放器在当前播放位置下载数据时触发
            onPlayerLoadeddata($event) {
              console.log(player)
            },
    
            // 当前播放位置发生变化时触发。
            onPlayerTimeupdate($event) {
              console.log(player)
            },
    
            //媒体的readyState为HAVE_FUTURE_DATA或更高
            onPlayerCanplay(player) {
              // console.log('player Canplay!', player)
            },
    
            //媒体的readyState为HAVE_ENOUGH_DATA或更高。这意味着可以在不缓冲的情况下播放整个媒体文件。
            onPlayerCanplaythrough(player) {
              // console.log('player Canplaythrough!', player)
            },
    
            //播放状态改变回调
            playerStateChanged(playerCurrentState) {
              console.log('player current update state', playerCurrentState)
            },
    
            //将侦听器绑定到组件的就绪状态。与事件监听器的不同之处在于,如果ready事件已经发生,它将立即触发该函数。。
            playerReadied(player) {
              console.log('example player 1 readied', player);
            }
    
          },
        }
     </script>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61

    结语

    以上,就是我实现使用vue-video-player插件进行播放视频的过程

  • 相关阅读:
    C/C++微实践 - 发现圆周率
    第十四章 报告
    Ubuntu 上传项目到 GitHub
    结构体定义struct和typedef struct的区别(重新整理版)
    2022-09-18 mysql-subselect相关执行流程记录
    Spring之事务管理
    git的使用(从配置到常用命令)
    ip数据包
    ts重点学习108-枚举类型知识点补充
    Intelligence X功能介绍丨搜索引擎丨数据存储
  • 原文地址:https://blog.csdn.net/xc9711/article/details/126768285