前端vue视频vue-video-player插件总结知识点案例(带源码)

文档

文档地址

选项参考

API文档

配置函数方法等

Git地址

Git地址

安装

1.vue-video-player 插件下载

npm install vue-video-player --save

2.推流/m3u8 的下载

npm install --save videojs-contrib-hls

main.js文件全局引入

// 下面引入 位置  全部在node_modules文件依赖里面找到需要对应文件引入即可
import VideoPlayer from 'vue-video-player'
import 'vue-video-player/src/custom-theme.css'
import 'video.js/dist/video-js.css'
Vue.use(VideoPlayer)
window.videojs = VideoPlayer.videojs
// 全局引入中文提示
require('video.js/dist/lang/zh-CN.js')
//引入 hls,视频直播(m3u8)必须引入的
import 'videojs-contrib-hls'
//播放rtmp视频
import 'videojs-flash'

视频格式

type:"video/webm"   // 可以播放,用ogg
type:"video/ogg"    // 可以播放,用webm
type:"video/3gp"    // 可以播放
type:"video/mp4"    // 可以播放
type:"video/avi"    // 打不开 无法播放
type:"video/flv"    // 打不开 可以使用f
type:"video/mkv"    // 打不开 使用video
type:"video/mov"    // 打不开 使用video
type:"video/mpg"    // 打不开 未测试
type:"video/swf"    // 打不开  未测试
type:"video/ts"     // 打不开 未测试
type:"video/wmv"    // 打不开 未测试
type:"video/vob"    // 没转化 未测试
type:"video/mxf"    // 转化出错 未测试
type::"video/rm"     // 转化出错 未测试

组件方法

this.$refs.videoPlayer这个代表拿div上面的ref组件,后面是方法

this.$refs.videoPlayer.player.pause()                          //  暂停视频
this.$refs.videoPlayer.player.play()                           //  播放视频
this.$refs.videoPlayer.player.playbackRate(2)                  //  改变播放速度  	
this.$refs.videoPlayer.player.currentTime(5)                   //  改变播放进度位置
this.$refs.videoPlayer.player.volume(0.1)                      //  音量大小值在0-1
this.$refs.videoPlayer.player.muted(true);                     //  true 代表静音 ,f
this.playerOptions['sources'][0]['src'] = "http:url...."       //  切换音视频资源路

this.$refs.videoPlayer.player.load();                          //  视频加载
this.$refs.videoPlayer.player.requestFullscreen();             //  直接全屏 如果当
this.$refs.videoPlayer.player.exitFullscreen();                //  在全屏模式下,将
this.$refs.videoPlayer.player.enterFullWindow();               //  当环境不支持全屏
this.$refs.videoPlayer.player.reset();                         //  重置播放器
this.$refs.videoPlayer.player.currentSources()                 //  返回当前播放源信
this.$refs.videoPlayer.player.preload(val);                    //  获取或者设置预加
this.$refs.videoPlayer.player.controls(false);                 //  播放控件是否显示

切换视频清晰度

//添加切换清晰度 按钮
// 监听播放
onPlayerPlay(){
	this.$refs.videoPlayer.player.play() // 播放
	// 播放的时候判断一下 有没有 清晰度这个按钮
	// !this.$('#vjsControl')
     if(!document.getElementById('vjsControl')){
           this.addTool()
     }
},
addTool(){
	let that = this
	this.$(".vjs-control-bar").append(
	   `<button class="vjs-control" id="vjsControl">${text}</button>`)
	let vjsControl = document.getElementById('vjsControl')
	vjsControl.addEventListener('click',that.resourceClcik)

// document.addEventListener()
},
// 切换资源
resourceClcik(){
	let text = this.$('#vjsControl').text()
	if(text === '标清') {
	   this.$('#vjsControl').text('超清')
	   // this.playerOptions.sources[0].src = ''
	} else if(text === '超清') {
	   this.$('#vjsControl').text('标清')
	   // this.playerOptions.sources[0].src = ''
	}
}

基础案例

基础案例,可以直接复制到vue页面查看效果

是否禁止拖动进度条可以设置,在样式里面,被注释掉了,可以打开

<template>
  <div class="course_node_video">
    <video-player class="video-player vjs-custom-skin" ref="videoPlayer" :playsinline="true" :options="playerOptions"
      @ready="playerReadied" @pause="onPlayerPause($event)" @timeupdate="onPlayerTimeupdate($event)">
    </video-player>
  </div>
</template>
 
<script>

export default {
      
      
  data () {
      
      
    return {
      
      
      playerOptions: {
      
      
        // 可选的播放速度
        playbackRates: [0.5, 1.0, 1.5, 2.0],
        // 如果为true,浏览器准备好时开始回放。
        autoplay: false,
        // 默认情况下将会消除任何音频。
        muted: false,
        // 是否视频一结束就重新开始。
        loop: false,
        // 建议浏览器在<video>加载元素后是否应该开始下载视频数据。auto浏览器选择最佳行为,立即开始加载视频(如果浏览器支持)
        preload: 'auto',
        // 语言设置
        language: 'zh-CN',
        // 将播放器置于流畅模式,并在计算播放器的动态大小时使用该值。值应该代表一个比例 - 用冒号分隔的两个数字(例如"16:9"或"4:3")
        aspectRatio: '16:9',
        // 当true时,Video.js player将拥有流体大小。换句话说,它将按比例缩放以适应其容器。
        fluid: true,
        sources: [{
      
      
          // 视频类型
          type: "video/mp4",
          // 视频地址
          src: 'https://qkodo.playlistmusic.com.cn/transcode_1080/video/2dd0dd6bb83b71d16c6313d0411d26aa.mp4'
        }],
        // 视频地址
        poster: '',
        // 允许覆盖Video.js无法播放媒体源时显示的默认信息。
        notSupportedMessage: '此视频暂无法播放,请稍后再试',
        //底栏控制器
        controlBar: {
      
      
          // 当前时间和持续时间的分隔符
          timeDivider: true,
          // 显示持续时间
          durationDisplay: true,
          // 是否显示剩余时间功能
          remainingTimeDisplay: false,
          // 是否显示全屏按钮
          fullscreenToggle: true
        }
      },
      currentTime: 7,         // 秒数设置 单位默认s
    }
  },
  methods: {
      
      
    /* 获取视频播放进度 */
    onPlayerTimeupdate (player) {
      
      
      this.currentTime = player.cache_.currentTime
    },
    /* 设置视频开始的进度 */
    playerReadied (player) {
      
      
      player.currentTime(this.currentTime)
    },
    // 暂停回调   将视频播放的时间保存
    onPlayerPause (player) {
      
      
      console.log('player pause currentTime!', player.cache_.currentTime);
      // let that = this;
      //   存储player.currentTime 是当前暂停时间    用于下次断续播放
    },
  },
  beforeMount () {
      
      
    // let id = this.$route.query.id;
    // if (id != undefined && id != null) {
      
      
    //   //编辑
    //   localStorage.setItem("videoId", id);
    //   // this.loadCourseNodeVideo(id);
    // } else {
      
      
    //   id = localStorage.getItem("videoId");
    //   if (id != undefined && id != null) {
      
      
    //     // this.loadCourseNodeVideo(id);
    //   } else {
      
      
    //     localStorage.removeItem("videoId");
    //   }
    // }
  }
}
</script>
 
<style scoped>
.course_node_video {
      
      
  width: 100%;
  height: auto;
  margin: 0 auto;
  text-align: center;
}

/* 是否设置禁止进度条被拖动样式 */
/* .course_node_video >>> .vjs-progress-control {
  pointer-events: none;
} */
</style>

效果如下

在这里插入图片描述

完整案例1

完整案例,可以直接复制到vue页面查看效果,有需要的功能自行复制到基础版里面使用
里面有视频观看起点设置
这里面style没有设置scoped注意,设置scoped里面底栏可能不生效

<template>
  <div class="box">
    <div class="course_node_video">
      <video-player class="video-player vjs-custom-skin" ref="videoPlayer" :playsinline="true" :options="playerOptions"
        @ready="playerReadied" @pause="onPlayerPause($event)" @timeupdate="onPlayerTimeupdate($event)"
        customEventName="customstatechangedeventname" @play="onPlayerPlay" @ended="onPlayerEnded"
        @waiting="onPlayerWaiting" @playing="onPlayerPlaying" @loadeddata="onPlayerLoadeddata"
        @canplay="onPlayerCanplay" @canplaythrough="onPlayerCanplaythrough" @statechanged="playerStateChanged">
      </video-player>
    </div>
  </div>
</template>
 
<script>

export default {
      
      
  data () {
      
      
    return {
      
      
      // 视频播放器配置
      playerOptions: {
      
      
        // 自定义设置播放速度
        playbackRates: [0.7, 1.0, 1.5, 2.0],
        // 如果为true,浏览器准备好时开始回放。
        autoplay: false,
        // 默认情况下将会消除任何音频。
        muted: false,
        // 是否视频一结束就重新开始。
        loop: false,
        // 建议浏览器在<video>加载元素后是否应该开始下载视频数据。auto浏览器选择最佳行为,立即开始加载视频(如果浏览器支持)
        preload: 'auto',
        // zh-CN  需要main.js全局引入才可以生效
        language: 'zh-CN',
        // 将播放器置于流畅模式,并在计算播放器的动态大小时使用该值。值应该代表一个比例 - 用冒号分隔的两个数字(例如"16:9"或"4:3")
        aspectRatio: '16:9',
        // 当true时,Video.js player将拥有流体大小。换句话说,它将按比例缩放以适应其容器。
        fluid: true,
        sources: [{
      
      
          // 视频格式
          type: "video/mp4",
          // 视频地址
          src: 'https://qkodo.playlistmusic.com.cn/transcode_1080/video/2dd0dd6bb83b71d16c6313d0411d26aa.mp4'
        }],
        // 视频封面地址
        poster: '',
        // 允许覆盖Video.js无法播放媒体源时显示的默认信息。
        notSupportedMessage: '此视频暂无法播放,请稍后再试',
        controlBar: {
      
      
          //  分割线/显示隐藏
          timeDivider: true,
          //  显示总时间
          durationDisplay: true,
          //  是否显示剩余时间功能
          remainingTimeDisplay: false,
          //  是否显示全屏按钮
          fullscreenToggle: true,
          //  播放暂停按钮
          playToggle: true,
          //  音量控制
          volumeMenuButton: false,
          //  当前播放时间
          currentTimeDisplay: true,
          //  进度条显示隐藏
          progressControl: true,
          //  直播流时,显示LIVE
          liveDisplay: true,
          //  播放速率,当前只有html5模式下才支持设置播放速率   如果false右下角 1X 播放速率将会隐藏
          playbackRateMenuButton: true,
        }
      },
      //视频观看起点
      //  playtimes:"",                                        有请求  接口方式设置视频播放起点  步骤:111111111
      // 秒数设置 单位默认s  进度条位置设置   视频观看起点设置     没有    请求接口方式设置视频播放起点  步骤:111111111
      currentTime: 7,
    }
  },
  // created () {                                              有请求  接口方式设置视频播放起点  步骤:2222222222
  //   this.fetchData();//获取的视频从何处播放的时间点
  //   this.playerOptions.sources[0].src = '视频地址'//视频地址
  // },
  methods: {
      
      
    //接口获取的视频观看起点                                     有请求  接口方式设置视频播放起点  步骤:333333333
    // fetchData (id) { //id为传的参数
    //   this.$http
    //     .get(`请求地址` + id, {
      
      
    //     })
    //     .then(res => {
      
      
    //       //console.log(res.data)
    //       this.playtimes = res.data;
    //     });
    // },
    //设置视频开始的进度 准备就绪(预加载前会调用)(初始化调用)     没有  请求接口方式设置视频播放起点  步骤:222222222
    playerReadied (player) {
      
      
      player.currentTime(this.currentTime)
      // player.currentTime(playtimes)                        //有请求  接口方式设置视频播放起点  步骤:555555555
    },
    //获取视频播放进度 进度更新(当前播放位置发生变化时触发)(视频接收到新内容会一直调用)(高频调用)
    onPlayerTimeupdate (player) {
      
      
      this.currentTime = player.cache_.currentTime
      // console.log(player);
    },
    // 暂停回调   将视频播放的时间保存  暂停回调(暂停时调用)(用户操作调用)
    onPlayerPause (player) {
      
      
      console.log('player pause currentTime!', player.cache_.currentTime);
      // let that = this;
      //   存储player.currentTime 是当前暂停时间    用于下次断续播放
    },

    // 播放回调(播放时会调用)(用户操作调用)
    onPlayerPlay (player) {
      
      
      console.log('播放', player)
      this.$emit('onPlayerPlay', player)
    },
    // 播放状态改变回调
    playerStateChanged (playerCurrentState) {
      
      
      console.log('数据变化', playerCurrentState)
      this.$emit('playerStateChanged', playerCurrentState)
    },
    //视频播完回调 (结束)(视频播放完毕调用)
    onPlayerEnded (player) {
      
      
      console.log('结束', player)
      this.$emit('onPlayerEnded', player)
    },
    // 等待(视频中出现loading就会调用,加载时调用)(高频调用)
    onPlayerWaiting (player) {
      
      
      console.log('等待', player)
      this.$emit('onPlayerWaiting', player)
    },
    // 播放中(进入播放状态会调用)(等待onPlayerWaiting和播放onPlayerPlay执行后会调用)(高频调用)
    onPlayerPlaying (player) {
      
      
      console.log('播放中', player)
      this.$emit('onPlayerPlaying', player)
    },
    // 当播放器在当前播放位置下载数据时触发
    onPlayerLoadeddata (player) {
      
      
      console.log('预加载', player)
      this.$emit('onPlayerLoadeddata', player)
    },
    // 媒体的readyState为HAVE_FUTURE_DATA或更高(预加载onPlayerLoadeddata调用后会调用)(初始化调用)
    onPlayerCanplay (player) {
      
      
      console.log('是否播放', player)
      this.$emit('onPlayerCanplay', player)
    },
    // 能够从头到尾播放(是否播放onPlayerCanplay调用后会调用)(初始化调用)这意味着可以在不缓冲的情况下播放整个媒体文件
    onPlayerCanplaythrough (player) {
      
      
      console.log('能够从头到尾播放', player)
      this.$emit('onPlayerCanplaythrough', player)
    }
  },
  // watch: {                                         //有  请求接口方式设置视频播放起点  步骤:44444444444
  //   playtimes (val, oldVal) {//普通的watch监听
  //     console.log("playtimes: " + val);
  //     this.playerReadied(this.$refs.videoPlayer.player, val);
  //   },
  // }
  // beforeMount () {
      
      
  // let id = this.$route.query.id;
  // if (id != undefined && id != null) {
      
      
  //   //编辑
  //   localStorage.setItem("videoId", id);
  //   // this.loadCourseNodeVideo(id);
  // } else {
      
      
  //   id = localStorage.getItem("videoId");
  //   if (id != undefined && id != null) {
      
      
  //     // this.loadCourseNodeVideo(id);
  //   } else {
      
      
  //     localStorage.removeItem("videoId");
  //   }
  // }
  // },

}
</script>
 
<style>
/* 盒子大小设置,视频在盒子内铺满且自适应 */
/* .box {
  width: 50%;
  margin: 100px auto;
} */

/* 重置样式也需要全局挂载 */
* {
      
      
  margin: 0;
  padding: 0;
}

.course_node_video {
      
      
  width: 100%;
  height: auto;
  margin: 0 auto;
  text-align: center;
}

/* 是否禁止拖动进度条 >>> 深度选择器 */
/* .course_node_video >>> .vjs-progress-control {
  pointer-events: none;
} */


/* 这里深度选择器这种生效,需要去掉style标签里面的scoped才可以生效使用,才可以铺满屏幕    完整案例,可以直接复制到vue页面查看效果,有需要的功能自行复制到基础版里面使用*/
::v-deep video {
      
      
  width: 100% !important;
  /* 我的容器高度设置的是100vh-95px,你们根据你们容器高度设置视频高度即可 */
  height: calc(100vh - 95px) !important;
  /* 消除两边留白 */
  object-fit: fill;
}

/* 播放器底栏控制   下面自定义按钮样式  如果不需要可以注释掉  就自动变为初始播放样式 */
.video-js .vjs-big-play-button .vjs-icon-placeholder:before {
      
      
  content: '播放视频';
  font-size: 18px;
  line-height: 3.5;
  letter-spacing: 2px;
  text-align: center;
  overflow: hidden;
  border: 0;
}

.video-js .vjs-fullscreen-control .vjs-icon-placeholder:before,
.vjs-icon-fullscreen-enter:before {
      
      
  content: '全屏';
  font-size: 15px;
  line-height: 2.8;
}

.video-js.vjs-fullscreen .vjs-fullscreen-control .vjs-icon-placeholder:before,
.vjs-icon-fullscreen-exit:before {
      
      
  content: '退出';
  font-size: 15px;
  line-height: 2.8;
}

.video-js .vjs-play-control .vjs-icon-placeholder:before {
      
      
  content: '播放';
  font-size: 15px;
  line-height: 2.8;
}

.video-js .vjs-play-control.vjs-playing .vjs-icon-placeholder:before {
      
      
  content: '暂停';
  font-size: 15px;
  line-height: 2.8;
}

.video-js .vjs-play-control.vjs-ended .vjs-icon-placeholder:before {
      
      
  content: '重播';
  font-size: 15px;
  line-height: 2.8;
}
</style>

效果如下

在这里插入图片描述

完整案例2

这个案例加了几个按钮,通过自定义按钮,实现这几个功能,源码如下

<template>
  <div class="box">
    <div class="course_node_video">
      <video-player class="video-player vjs-custom-skin" ref="videoPlayer" :playsinline="true" :options="playerOptions"
        @ready="playerReadied" @pause="onPlayerPause($event)" @timeupdate="onPlayerTimeupdate($event)"
        customEventName="customstatechangedeventname" @play="onPlayerPlay" @ended="onPlayerEnded"
        @waiting="onPlayerWaiting" @playing="onPlayerPlaying" @loadeddata="onPlayerLoadeddata"
        @canplay="onPlayerCanplay" @canplaythrough="onPlayerCanplaythrough" @statechanged="playerStateChanged">
      </video-player>
      <div class="footer">
        <div class="list" @click="videoPlay">播放</div>
        <div class="list" @click="videoPause">停止</div>
        <div class="list" @click="videoPosition">播放位置</div>
        <div class="list" @click="videoDoubleSpeed">倍速</div>
        <div class="list" @click="videoMute">静音</div>
      </div>
    </div>
  </div>
</template>
 
<script>

export default {
      
      
  data () {
      
      
    return {
      
      
      playerOptions: {
      
      
        playbackRates: [0, 0.5, 1.0, 1.5, 2.0], // 可选的播放速度
        autoplay: false, // 如果为true,浏览器准备好时开始回放。
        muted: false, // 默认情况下将会消除任何音频。
        loop: false, // 是否视频一结束就重新开始。
        preload: 'auto', // 建议浏览器在<video>加载元素后是否应该开始下载视频数据。auto浏览器选择最佳行为,立即开始加载视频(如果浏览器支持)
        language: 'zh-CN',  // zh-CN  需要main.js全局引入才可以生效
        aspectRatio: '16:9', // 将播放器置于流畅模式,并在计算播放器的动态大小时使用该值。值应该代表一个比例 - 用冒号分隔的两个数字(例如"16:9"或"4:3")
        fluid: true, // 当true时,Video.js player将拥有流体大小。换句话说,它将按比例缩放以适应其容器。
        sources: [{
      
      
          type: "video/mp4", // 类型
          src: 'https://qkodo.playlistmusic.com.cn/transcode_1080/video/2dd0dd6bb83b71d16c6313d0411d26aa.mp4' // url地址https://qkodo.playlistmusic.com.cn/transcode_1080/video/2dd0dd6bb83b71d16c6313d0411d26aa.mp4
        }],
        poster: '', // 封面地址
        notSupportedMessage: '此视频暂无法播放,请稍后再试', // 允许覆盖Video.js无法播放媒体源时显示的默认信息。
        controlBar: {
      
      
          // 当前时间和持续时间的分隔符
          timeDivider: true,
          // 显示持续时间
          durationDisplay: true,
          // 是否显示剩余时间功能
          remainingTimeDisplay: false,
          // 是否显示全屏按钮
          fullscreenToggle: true,
          //播放暂停按钮
          playToggle: true,
          //音量控制
          volumeMenuButton: false,
          //当前播放时间
          currentTimeDisplay: true,
          //点播流时,播放进度条,seek控制
          progressControl: true,
          //直播流时,显示LIVE
          liveDisplay: true,
          //播放速率,当前只有html5模式下才支持设置播放速率
          playbackRateMenuButton: true,
        }
      },
      // currentTime: 7,         // 秒数设置 单位默认s                                        进度条位置设置 ,  进入页面直接开始位置一一一一一一
      playtimes: 7,             //  通过点击videoPosition事件改变视频位置二二二二二
    }
  },
  methods: {
      
      
    // 视频播放
    videoPlay () {
      
      
      // this.player.play();
      // this.playerOptions.controlBar.playToggle = false;
      this.$refs.videoPlayer.player.play();
    },
    // 视频暂停
    videoPause () {
      
      
      this.$refs.videoPlayer.player.pause();
    },
    // 视频位置
    videoPosition () {
      
                  //  通过点击videoPosition事件改变视频位置二二二二二
      this.$refs.videoPlayer.player.currentTime(this.playtimes)
    },
    // 视频倍速
    videoDoubleSpeed () {
      
      
      //https://www.zhangxinxu.com/study/201807/video-playbackrate.html
      // https://blog.csdn.net/qq_35153373/article/details/112183508

      this.$refs.videoPlayer.player.playbackRate(2)   // 这个能设置固定倍速
      // var button = document.getElementsByTagName('vjs-playback-rate')
      // button.addEventListener('change', function () {
      
      
      //   this.$refs.videoPlayer.player.playbackRate = this.playerOptions.playbackRates;
      // });

      // this.$refs.videoPlayer.player.ready(function () {
      
      
      //   const num = Math.round(Math.random()*5+5);
      //   // 定义一个随机常数倍数
      //   var _this = this
      //   //速率
      //   setTimeout(function () {
      
      
      //     // _this.playbackRate(parseFloat(10));// 能设定固定值
      //     _this.playbackRate(parseFloat(num));  // 随机的
      //   }, 20);
      // });
    },
    // 视频静音
    videoMute () {
      
      
      this.$refs.videoPlayer.player.muted(true);
    },
    //获取视频播放进度 进度更新(当前播放位置发生变化时触发)(视频接收到新内容会一直调用)(高频调用)
    onPlayerTimeupdate (player) {
      
      
      //   this.currentTime = player.cache_.currentTime                                           进度条位置设置 ,  进入页面直接开始位置一一一一一一
      console.log(player);
    },
    /* 设置视频开始的进度 准备就绪(预加载前会调用)(初始化调用) */
    playerReadied (player) {
      
      
      player.currentTime(this.currentTime)
    },
    // 暂停回调   将视频播放的时间保存  暂停回调(暂停时调用)(用户操作调用)
    onPlayerPause (player) {
      
      
      console.log('player pause currentTime!', player.cache_.currentTime);
      // let that = this;
      //   存储player.currentTime 是当前暂停时间    用于下次断续播放
    },

    // 播放回调(播放时会调用)(用户操作调用)
    onPlayerPlay (player) {
      
      
      console.log('播放', player)
      this.$emit('onPlayerPlay', player)
    },
    // 播放状态改变回调
    playerStateChanged (playerCurrentState) {
      
      
      console.log('数据变化', playerCurrentState)
      this.$emit('playerStateChanged', playerCurrentState)
    },
    //视频播完回调 (结束)(视频播放完毕调用)
    onPlayerEnded (player) {
      
      
      console.log('结束', player)
      this.$emit('onPlayerEnded', player)
    },
    // 等待(视频中出现loading就会调用,加载时调用)(高频调用)
    onPlayerWaiting (player) {
      
      
      console.log('等待', player)
      this.$emit('onPlayerWaiting', player)
    },
    // 播放中(进入播放状态会调用)(等待onPlayerWaiting和播放onPlayerPlay执行后会调用)(高频调用)
    onPlayerPlaying (player) {
      
      
      console.log('播放中', player)
      this.$emit('onPlayerPlaying', player)
    },
    // 当播放器在当前播放位置下载数据时触发
    onPlayerLoadeddata (player) {
      
      
      console.log('预加载', player)
      this.$emit('onPlayerLoadeddata', player)
    },
    // 媒体的readyState为HAVE_FUTURE_DATA或更高(预加载onPlayerLoadeddata调用后会调用)(初始化调用)
    onPlayerCanplay (player) {
      
      
      console.log('是否播放', player)
      this.$emit('onPlayerCanplay', player)
    },
    // 能够从头到尾播放(是否播放onPlayerCanplay调用后会调用)(初始化调用)这意味着可以在不缓冲的情况下播放整个媒体文件
    onPlayerCanplaythrough (player) {
      
      
      console.log('能够从头到尾播放', player)
      this.$emit('onPlayerCanplaythrough', player)
    }
  },
  beforeMount () {
      
      
    // let id = this.$route.query.id;
    // if (id != undefined && id != null) {
      
      
    //   //编辑
    //   localStorage.setItem("videoId", id);
    //   // this.loadCourseNodeVideo(id);
    // } else {
      
      
    //   id = localStorage.getItem("videoId");
    //   if (id != undefined && id != null) {
      
      
    //     // this.loadCourseNodeVideo(id);
    //   } else {
      
      
    //     localStorage.removeItem("videoId");
    //   }
    // }
  }
}
</script>
 
<style>
.box {
      
      
  width: 50%;
  margin: 100px auto;
}
/* 重置样式也需要全局挂载 */
* {
      
      
  margin: 0;
  padding: 0;
}
.course_node_video {
      
      
  width: 100%;
  height: auto;
  margin: 0 auto;
  text-align: center;
  /* object-fit:fill; */
}

/* 是否禁止拖动进度条 */
/* .course_node_video >>> .vjs-progress-control {
  pointer-events: none;
} */

/* 这里深度选择器这种生效,需要去掉style标签里面的scoped才可以生效使用,才可以铺满屏幕 */
::v-deep video {
      
      
  width: 100% !important;
  /* 我的容器高度设置的是100vh-95px,你们根据你们容器高度设置视频高度即可 */
  height: calc(100vh - 95px) !important;
  /* 消除两边留白 */
  object-fit: fill;
}

.footer {
      
      
  width: 100%;
  height: 50px;
  /* border: 1px solid red; */
  /* background-color: rgb(67,77,71); */
  flex-direction: row;
  display: flex;
  justify-content: space-between;
}
.footer .list {
      
      
  width: 15%;
  height: 100%;
  /* background-color: rgba(255, 255, 255, 0.1); */
  background-color: rgb(67, 77, 71);
  border: 1px solid rgb(224, 208, 208);
  color: #fff;
  line-height: 2.8;
}
</style>

效果如下

在这里插入图片描述

最后

感觉文章好的话记得点个心心和关注和收藏,有错的地方麻烦指正一下,如果需要转载,请标明出处,多谢!!!

猜你喜欢

转载自blog.csdn.net/m0_49714202/article/details/125312364