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>