yarn add vue-video-player
main.js
import VideoPlayer from ‘vue-video-player‘ require(‘video.js/dist/video-js.css‘) require(‘vue-video-player/src/custom-theme.css‘) Vue.use(VideoPlayer)
完整代码如下
<template> <div> <!--https://github.surmon.me/vue-video-player/--> <video-player class="vjs-custom-skin" ref="videoPlayer" :options="playerOptions" :playsinline="true" @play="onPlayerPlay($event)" @pause="onPlayerPause($event)" @ended="onPlayerEnded($event)" @loadeddata="onPlayerLoadeddata($event)" @waiting="onPlayerWaiting($event)" @playing="onPlayerPlaying($event)" @timeupdate="onPlayerTimeupdate($event)" @canplay="onPlayerCanplay($event)" @canplaythrough="onPlayerCanplaythrough($event)" @ready="playerReadied" @statechanged="playerStateChanged($event)"> </video-player> </div> </template> <script> export default { data() { return { // videojs options playerOptions: { height: ‘360‘, //如果true,浏览器准备好时开始回放 autoplay: false, // 默认情况下将会消除任何音频。 muted: true, // 视频一结束就重新开始。 loop: false, // 建议浏览器在<video>加载元素后是否应该开始下载视频数据。auto浏览器选择最佳行为,立即开始加载视频(如果浏览器支持) // preload : ‘auto‘, language: ‘en‘, // //可选择的播放速度 playbackRates: [1.0, 1.5, 2.0], // 将播放器置于流畅模式,并在计算播放器的动态大小时使用该值。值应该代表一个比例 - 用冒号分隔的两个数字(例如"16:9"或"4:3") aspectRatio: ‘16:9‘, // 当true时,Video.js player将拥有流体大小。将按比例缩放以适应其容器。 fluid: true, 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: "https://surmon-china.github.io/vue-quill-editor/static/images/surmon-1.jpg", // 允许覆盖Video.js无法播放媒体源时显示的默认信息。 notSupportedMessage: ‘此视频暂无法播放,请稍后再试‘, controlBar: { //当前时间和持续时间的分隔符 timeDivider: true, //显示持续时间 durationDisplay: true, //是否显示剩余时间功能 remainingTimeDisplay: false, //全屏按钮 fullscreenToggle: true }, // 热键播放 暂停 userActions: { hotkeys: function(event) { // `this` is the player in this context // `x` key = pause if (event.which === 88) { this.pause(); } // `y` key = play if (event.which === 89) { this.play(); } } } } } }, mounted() { // console.log(‘this is current player instance object‘, this.player) setTimeout(() => { console.log(‘dynamic change options‘, this.player) // change src // this.playerOptions.sources[0].src = ‘https://cdn.theguardian.tv/webM/2015/07/20/150716YesMen_synd_768k_vp8.webm‘; // change item // this.$set(this.playerOptions.sources, 0, { // type: "video/mp4", // src: ‘https://cdn.theguardian.tv/webM/2015/07/20/150716YesMen_synd_768k_vp8.webm‘, // }) // change array // this.playerOptions.sources = [{ // type: "video/mp4", // src: ‘https://cdn.theguardian.tv/webM/2015/07/20/150716YesMen_synd_768k_vp8.webm‘, // }] this.player.muted(false) }, 5000) }, computed: { player() { return this.$refs.videoPlayer.player } }, methods: { // listen event onPlayerPlay(player) { console.log(‘player play!‘, player) }, onPlayerPause(player) { // console.log(‘player pause!‘, player) }, onPlayerEnded(player) { // console.log(‘player ended!‘, player) }, onPlayerLoadeddata(player) { // console.log(‘player Loadeddata!‘, player) }, onPlayerWaiting(player) { // console.log(‘player Waiting!‘, player) }, onPlayerPlaying(player) { // console.log(‘player Playing!‘, player) }, onPlayerTimeupdate(player) { // console.log(‘player Timeupdate!‘, player.currentTime()) }, onPlayerCanplay(player) { // console.log(‘player Canplay!‘, player) }, onPlayerCanplaythrough(player) { // console.log(‘player Canplaythrough!‘, player) }, // or listen state event playerStateChanged(playerCurrentState) { // console.log(‘player current update state‘, playerCurrentState) }, // player is ready playerReadied(player) { // seek to 10s console.log(‘example player 1 readied‘, player) player.currentTime(10) // console.log(‘example 01: the player is readied‘, player) } } } </script>
原文:https://www.cnblogs.com/ronle/p/11809990.html