vue的nuxt框架中使用vue-video-player
一、基本需求:使用nuxt框架,需要在移动端网页中播放视频。
二、文中解决的基本问题:
1、vue-video-player在nuxt中怎么使用。
2、由于为了适配移动端,使用了postcss-px2rem插件,如何解决vue-video-player的样式与postcss-px2rem插件的冲突。
3、如何播放m3u8的视频。
三、解决方案:
1、vue-video-player在nuxt中的使用:
1) npm i vue-video-player --save
2) 编写插件: 在plugins目录下新建 videoPlayer.js文件
import Vue from 'vue'
const VueVideoPlayer = require('vue-video-player/dist/ssr')
Vue.use(VueVideoPlayer)
3)创建组件: 在components文件下新建VueVideo.vue文件,注意class="video-player-box" 这个是约定的。
<template>
<section class="vueVideo">
<div
v-video-player:myVideoPlayer="playerOptions"
class="video-player-box"
:playsinline="playsinline"
@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)"
></div>
</section>
</template> <script>
import 'video.js/dist/video-js.css'
import 'vue-video-player/src/custom-theme.css'
export default {
data() {
return {
playsinline: true,
playerOptions: {
// 播放器配置
muted: false, // 是否静音
language: 'zh-CN',
// aspectRatio: '16:9',
playbackRates: [0.7, 1.0, 1.5, 2.0], // 播放速度
controls: true,
preload: 'auto', // 视频预加载
fluid: true,
sources: [
{
type: 'video/mp4',
src:
'https://cdn.theguardian.tv/webM/2015/07/20/150716YesMen_synd_768k_vp8.webm'
}
],
poster: '/imgs/choice/avator.png', // 封面图
notSupportedMessage: '此视频暂无法播放,请稍后再试'
}
}
},
mounted() {
console.log('this is current player instance object', this.myVideoPlayer)
},
methods: {
// 监听播放
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)
},
// 监听状态改变
playerStateChanged(playerCurrentState) {
// console.log('player current update state', playerCurrentState)
},
// 监听播放器准备就绪
playerReadied(player) {
// console.log('example 01: the player is readied', player)
}
}
}
</script> <style lang="scss" scoped></style>
4)配置nuxt.config.js文件
css: [
'video.js/dist/video-js.css',
],
plugins: [{ src: '~plugins/videoPlayer.js', ssr: false }],
5)调用组件(只写了关键代码)
<template>
<div>
<VueVideo></VueVideo>
</div>
</template> import VueVideo from '~/components/VueVideo' components: {
VueVideo
},
2、解决适配问题:
postcss-px2rem插件主要是用来适配各种大小的移动端设备,将px转换成rem。但是他会影响到node_modules中的插件的样式。所以,将postcss-px2rem插件换成postcss-px2rem-exclude插件,postcss-px2rem-exclude的好处是可以排除那些不需要要进行单位转化的文件。
1)安装
npm uninstall postcss-px2rem
npm i postcss-px2rem-exclude -D
2)配置
npm i postcss-px2rem-exclude的官方文档
module.exports = {
'plugins': {
'postcss-px2rem-exclude': {
remUnit: 75,
exclude: /node_modules|folder_name/i
}
}
}
在我的nuxt中的配置是:在nuxt.config.js文件中
build: {
/*
** You can extend webpack config here
*/
postcss: [
require('postcss-px2rem-exclude')({
remUnit: 75,
exclude: /video.js/i
})
]
}
这样postcss-px2rem-exclude就会吧node_modules/video.js文件夹下面的样式排除掉。从而video的样式不会受到postcss-px2rem-exclude的影响。
3、播放m3u8视频
1)先安装videojs-contrib-hls插件
npm i videojs-contrib-hls --save
2)修改之前的videoPlayer.js文件
import Vue from 'vue'
const VueVideoPlayer = require('vue-video-player/dist/ssr')
// 若是只是想播放普通视频,则不需要videojs-contrib-hls
const hls = require('videojs-contrib-hls')
Vue.use(hls)
Vue.use(VueVideoPlayer)
3)修改VueVideo.vue文件,可换成直播流,这是CCTV1的直播流。
sources: [
// {
// type: 'video/mp4',
// src:
// 'https://cdn.theguardian.tv/webM/2015/07/20/150716YesMen_synd_768k_vp8.webm'
// }
// 直播流
{
type: 'application/x-mpegURL/video/mp4',
src: 'http://ivi.bupt.edu.cn/hls/cctv1hd.m3u8'
}
]
最后,十分感谢以下博文,文章参考:
https://blog.csdn.net/wtyzky/article/details/103859955
https://blog.csdn.net/qq_41980461/article/details/104773632?depth_1-utm_source=distribute.pc_relevant_right.none-task-blog-BlogCommendFromBaidu-5&utm_source=distribute.pc_relevant_right.none-task-blog-BlogCommendFromBaidu-5
vue的nuxt框架中使用vue-video-player的更多相关文章
- 基于vue的nuxt框架cnode社区服务端渲染
nuxt-cnode 基于vue的nuxt框架仿的cnode社区服务端渲染,主要是为了seo优化以及首屏加载速度 线上地址 http://nuxt-cnode.foreversnsd.cngithub ...
- vue生命周期图示中英文版Vue实例生命周期钩子
vue生命周期图示中英文版Vue实例生命周期钩子知乎上近日有人发起了一个 “react 是不是比 vue 牛皮,为什么?” 的问题,Vue.js 作者尤雨溪12月4日正面回应了该问题.以下是尤雨溪回复 ...
- Vue学习之webpack中使用vue(十七)
一.包的查找规则: 1.在项目根目录中找有没有 node_modules 的文件夹: 2.在 node_modules 中根据包名,找对应的vue 文件夹: 3.在vue 文件夹中,找 一个叫做 pa ...
- vue项目element-ui框架中的弹窗中的表单验证清除问题
问题回顾: 1.vue项目的在弹窗上的form表单验证,第一次点击新增时正常,第二次新增打开弹窗后由于表单内容为空,出现验证这种情况 2.为了解决上面的情况,在执行点击新增事件加上this.$refs ...
- vue的js文件中获取vue实例
1.main.js导出vue实例: var vue = new Vue({ el: '#app', router, components: { App }, template: '<App/&g ...
- 在Vue&Element前端项目中,对于字典列表的显示处理
在很多项目开发中,我们为了使用方便,一般都会封装一些自定义组件来简化界面的显示处理,例如参照字典的下拉列表显示,是我们项目中经常用到的功能之一,本篇随笔介绍在Vue&Element前端项目中如 ...
- webstorm中新建vue工程
1.在https://nodejs.org/en/下载安装nodejs 2.vue-cli 搭建框架 首先从官方网站安装 node.js,会一并安装 npm工具.注意 npm一定要3.10以上,以免很 ...
- SSM框架中,controller的action返回参数给vue.js
在SSM框架中,controller的action中,返回的是视图,即jsp页面或是ModelAndView,若是通过axios给vue传值的话,需要转换为字符串或是user实体类对象. 使用@Res ...
- 基于vue项目的组件中导入mui框架初始化滑动等效果时需移除严格模式的问题
基于vue项目的组件中导入mui框架初始化滑动等效果时,控制台报错:Uncaught TypeError: 'caller', 'callee', and 'arguments' properties ...
随机推荐
- 手写算法-python代码实现KNN
原理解析 KNN-全称K-Nearest Neighbor,最近邻算法,可以做分类任务,也可以做回归任务,KNN是一种简单的机器学习方法,它没有传统意义上训练和学习过程,实现流程如下: 1.在训练数据 ...
- C++STL教程
1 什么是STL? STL(Standard Template Library),即标准模板库,是一个具有工业强度的,高效的C++程序库.它被容纳于C++标准程序库(C++ Standard Libr ...
- 熬夜肝了这篇Spring Cloud Gateway的功能及综合使用
前言 SpringCloud 是微服务中的翘楚,最佳的落地方案. Spring Cloud Gateway 是 Spring Cloud 新推出的网关框架,之前是 Netflix Zuul.网关通常在 ...
- 在wildfly 21中搭建cluster集群
目录 简介 下载软件和相关组件 配置domain 创建应用程序 部署应用程序 集群配置 总结 简介 wildfly是一个非常强大的工具,我们可以轻松的使用wildfly部署应用程序,更为强大的是,wi ...
- Android猜数字大小游戏
功能介绍:该程序能够提示猜大了猜小了,并且对空白输入处理,还对猜测次数限制,提供重置功能. 1.先看界面,一个输入框EditText,两个Button 2.界面设计 activity_main2.x ...
- 编写高质量JAVA代码之让接口的职责保持单一
上述标题读者朋友应该也注意到了是让接口的职责保持单一,而不是实现者单一. 设计模式六大原则之单一原则: 定义 不要存在多于一个导致类变更的原因.**通俗的说,即一个类只负责一项职责. 下面以一个电话模 ...
- 使用Modbus4J进行RTU模式串口通信
Modus协议是由MODICON(现为施耐德电气公司的一个品牌)在1979年开发的,是全球第一个真正用于工业现场的总线协议,应用非常广泛,可谓大名鼎鼎. 理论性的东西就不多介绍了,推荐一本书<M ...
- hbase:ERROR: org.apache.hadoop.hbase.ipc.ServerNotRunningYetException: Server is not running yet
hbase连接deug:DEBUG [main-SendThread(bigdata.server1:2181)] - Reading reply sessionid:0x16f764e7f6e000 ...
- 手把手教你用C语言编写一个哈希表
原文链接:https://www.swack.cn/wiki/001558681974020669b912b0c994e7090649ac4846e80b2000/001572849111298ae3 ...
- JVM 源码分析(二):搭建 JDK 8 源码调试环境(Windows 上使用 CLion)
前言 一.准备源码 二.安装 "Bootstrap JDK" 三.配置编译环境 四.编译与测试 五.安装 CMake 和 GDB 五.准备远程调试 六.开始远程调试 前言 上一篇文 ...