2人参与 • 2025-04-24 • Javascript
// 安装 npm install vue-video-player@5.0.1 --save
// 在main.js中全局引入 import videoplayer from 'vue-video-player/src'; import 'vue-video-player/src/custom-theme.css' import 'video.js/dist/video-js.css' vue.use(videoplayer)
属性:
videowidth
:返回音频/视频源文件本身的宽度。videoheight
:返回音频/视频源文件本身的高度。audiotracks
:返回表示可用音频轨道的 audiotracklist 对象。autoplay
:设置或返回是否在加载完成后随即播放音频/视频。buffered
:返回表示音频/视频已缓冲部分的 timeranges 对象。controller
:返回表示音频/视频当前媒体控制器的 mediacontroller 对象。controls
:设置或返回音频/视频是否显示控件(比如播放/暂停等)。crossorigin
:设置或返回音频/视频的 cors 设置。currentsrc
:返回当前音频/视频的url。currenttime
:设置或返回音频/视频中的当前播放位置(以秒计)。defaultmuted
:设置或返回音频/视频默认是否静音。defaultplaybackrate
:设置或返回音频/视频的默认播放速度。duration
:返回当前音频/视频的长度(以秒计)。ended
:返回音频/视频的播放是否已结束。error
:返回表示音频/视频错误状态的 mediaerror 对象。loop
:设置或返回音频/视频是否应在结束时重新播放。mediagroup
:设置或返回音频/视频所属的组合(用于连接多个音频/视频元素)。muted
:设置或返回音频/视频是否静音。networkstate
:返回音频/视频的当前网络状态。paused
:设置或返回音频/视频是否暂停。playbackrate
:设置或返回音频/视频播放的速度。played
:返回表示音频/视频已播放部分的 timeranges 对象。preload
:设置或返回音频/视频是否应该在页面加载后进行加载。readystate
:返回音频/视频当前的就绪状态。seekable
:返回表示音频/视频可寻址部分的 timeranges 对象。seeking
:返回用户是否正在音频/视频中进行查找。src
:设置或返回音频/视频元素的当前来源。startdate
:返回表示当前时间偏移的 date 对象。texttracks
:返回表示可用文本轨道的 texttracklist对象。videotracks
:返回表示可用视频轨道的 videotracklist 对象。volume
:设置或返回音频/视频的音量。addtexttrack()
:向音频/视频添加新的文本轨道。canplaytype()
:检测浏览器是否能播放指定的音频/视频类型。load()
:重新加载音频/视频元素。play()
:开始播放音频/视频。pause()
:暂停当前播放的音频/视频。abort
:当音频/视频的加载已放弃时触发。canplay
:当浏览器可以开始播放音频/视频时触发。canplaythrough
:当浏览器可在不因缓冲而停顿的情况下进行播放时触发。durationchange
:当音频/视频的时长已更改时触发。emptied
:当目前的播放列表为空时触发。ended
:当目前的播放列表已结束时触发。error
:当在音频/视频加载期间发生错误时触发。loadeddata
:当浏览器已加载音频/视频的当前帧时触发。loadedmetadata
:当浏览器已加载音频/视频的元数据时触发。loadstart
:当浏览器开始查找音频/视频时触发。pause
:当音频/视频已暂停时触发。play
:当音频/视频已开始或不再暂停时触发。playing
:当音频/视频在因缓冲而暂停或停止后已就绪时触发。progress
:当浏览器正在下载音频/视频时触发。ratechange
:当音频/视频的播放速度已更改时触发。seeked
:当用户已移动/跳跃到音频/视频中的新位置时触发。seeking
:当用户开始移动/跳跃到音频/视频中的新位置时触发。stalled
:当浏览器尝试获取媒体数据,但数据不可用时触发。suspend
:当浏览器刻意不获取媒体数据时触发。timeupdate
:当目前的播放位置已更改时触发。volumechange
:当音量已更改时触发。waiting
:当视频由于需要缓冲下一帧而停止时触发。完整代码如下:
<template> <div class="player"> <video-player ref="videoplayer" class="player-video" :playsinline="false" :options="playoptions" @ready="onplayerready" @play="onplayerplay($event)" @pause="onplayerpause($event)" @ended="onplayerend($event)" @waiting="onplayerwaiting($event)" @playing="onplayerplaying($event)" @loadeddata="onplayerloadeddata($event)" @timeupdate="onplayertimeupdate($event)" @statechanged="playerstatechanged($event)" /> </div> </template> <script> export default { props: { path: { // 传入的地址 type: string, default: "", }, lasttime: { // 传入的上次播放位置 type: number, default: 0, }, }, components: {}, data() { return { playedtime: this.lasttime, currenttime: 0, maxtime: 0, playoptions: { height: "200px", width: "100%", playbackrates: [1.0], // 可选的播放速度 autoplay: true, // 如果为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", // 类型 src: require("./1.mp4"), // url地址,在使用本地的资源时,需要用require()引入,否则控制台会报错 }, ], poster: "./gcy-logo-200.png", // 设置封面地址 notsupportedmessage: "此视频暂无法播放,请稍后再试", // 允许覆盖video.js无法播放媒体源时显示的默认信息 controlbar: { currenttimedisplay: true, progresscontrol: true, // 是否显示进度条 playbackratemenubutton: true, // 是否显示调整播放倍速按钮 timedivider: true, // 当前时间和持续时间的分隔符 durationdisplay: true, // 显示持续时间 remainingtimedisplay: true, // 是否显示剩余时间功能 fullscreentoggle: true, // 是否显示全屏按钮 }, }, }; }, computed: { }, mounted() { this.getdata() // 调用获取地址的接口,然后修改播放器配置中的src属性 }, methods: { // 准备好了 onplayerready() { console.log("准备好了"); }, // 视频播放 onplayerplay(player) { console.log('播放了'); console.log(player); let playtime = 0; if ( number(math.floor(this.playedtime)) === number(math.floor(player.duration())) ) { this.playedtime = 0; playtime = 0; } else if ( number(math.floor(player.currenttime())) !== number(math.floor(this.playedtime)) ) { playtime = this.playedtime; player.currenttime(playtime) } }, // 视频暂停的 onplayerpause(player) { console.log('暂停中'); console.log(player); this.playedtime = player.currenttime(); }, // 视频播放完 onplayerend(player) { console.log('播放结束了'); console.log(player); }, // dom元素上的readystate更改导致播放停止 onplayerwaiting(player) { console.log("播放停止中"); console.log(player); }, // 视频已开始播放 onplayerplaying(player) { console.log("开始播放了"); console.log(player); }, // 当播放器在当前播放位置下载数据时触发 onplayerloadeddata(player) { console.log("开始下载数据"); console.log(player); }, // 当前播放位置发生变化时触发 onplayertimeupdate(player) { console.log("播放位置变化了"); console.log(player); let timedisplay = player.currenttime(); if (timedisplay - this.currenttime > 1) { player.currenttime(this.currenttime > this.maxtime ? this.currenttime : this.maxtime); } this.currenttime = player.currenttime(); this.maxtime = this.currenttime > this.maxtime ? this.currenttime : this.maxtime; }, //播放状态改变 playerstatechanged(playercurrentstate) { console.log("播放状态变化了"); console.log(playercurrentstate); }, // 手动暂停视频的播放 pause() { // 视频播放器的方法调用,要使用this.$refs.videoplayer.player这个对象去调用 this.$refs.videoplayer.player.pause() } }, }; </script> <style lang="scss" scoped> </style>
注意:
vue-video-player 是基于 video.js 实现的,所以 api 地址:video.js api docs
调用的时候使用这个对象进行操作:this.$refs.videoplayer.player
// 安装 npm install dplayer --save
完整代码如下:
// 直接在组件中引入 // dplayer.vue <template> <div :id="flag"></div> </template> <script> import dplayer from "dplayer"; export default { props: { flag: { // 每个dplayer的id不可以重复 type: string, default: "", }, lasttime: { // 上次播放到的时间 type: number, default: 0, }, }, data() { return { dp: null, playedtime: this.lasttime, }; }, mounted() {}, methods: { async init(id) { let currenttime = 0; let maxtime = 0; let res = await api(); // 调用获取视频的地址 let src = res.data.path; this.dp = new dplayer({ container: document.getelementbyid(this.flag), // 播放器容器元素 hotkey: true, // 开启热键,支持快进、快退、音量控制、播放暂停,默认是true lang: "zh-cn", // 可选值:'en'、'zh-cn'、'zh-tw' screenshot: false, // 开启截图,如果开启,视频和视频封面需要允许跨域 playbackspeed: [0.75, 1, 1.25, 1.5, 2, 3], // 可选的视频播放倍速,可以设置自定义的数组 video: { // 视频信息,更多可以参考官网:https://dplayer.diygod.dev/zh/guide.html url: src, // 视频地址 }, }); // 监听视频开始播放 this.dp.on("play", () => { let playtime = 0; if ( number(math.floor(this.playedtime)) === number(math.floor(this.dp.video.duration)) ) { this.playedtime = 0; playtime = 0; } else if ( number(math.floor(this.dp.video.currenttime)) !== number(math.floor(this.playedtime)) ) { playtime = this.playedtime; this.dp.seek(playtime); } }); // 监听视频暂停 this.dp.on("pause", () => { this.playedtime = this.dp.video.currenttime; }); // 设置不可以快进(timeupdate:当前播放位置更改时触发) this.dp.on("timeupdate", () => { let timedisplay = this.dp.video.currenttime; if (timedisplay - currenttime > 1) { this.dp.video.currenttime = currenttime > maxtime ? currenttime : maxtime; this.dp.notice("禁止快进", 2000); } currenttime = this.dp.video.currenttime; maxtime = currenttime > maxtime ? currenttime : maxtime; }); // 快进的提示,在禁止快进的提醒存在时不显示 this.dp.on("notice_show", function (e) { var text = e.innerhtml; if ( "禁止快进" != text && (text.indexof("快进") > -1 || text.indexof("快退") > -1) ) { e.style.display = "none"; } }); }, }, }; </script> <style lang="scss" scoped> </style>
想要了解更多的功能可以参考dplayer的官网:dplayer
以上为个人经验,希望能给大家一个参考,也希望大家多多支持代码网。
您想发表意见!!点此发布评论
版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。
发表评论