一、基本需求:使用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

  

最新文章

  1. PHP判断用户操作系统(Android,ipad,iphone,windows)
  2. 找到MVC框架中前端URL与后端同步的解决方案
  3. 纯CSS3大转盘抽奖(响应式、可配置)
  4. android studio SDK版本的调节
  5. python的一个表达式的计算(超简单)
  6. 使用VisualStudio进行单元测试之三
  7. Linux - 简明Shell编程04 - 判断语句(If)
  8. maven3自定义archetype
  9. C#连接MySQL
  10. Reactor 3 学习笔记(1)
  11. mysql第二次安装失败的解决方法
  12. (已解决) eclipse提示报错&quot;serializing cdt project settings&quot;解决方案
  13. HIHOcoder 1466 后缀自动机六&#183;重复旋律9
  14. PTA-B 1039 到底买不买 解题思路记录
  15. mfc CFileDialog类
  16. CRM 常用SQL 脚本
  17. maven报错
  18. php判断所在的客户端
  19. Android M App休眠 (adb shell dumpsys usagestats)
  20. ueditor 百度编辑器 解决表格没有边框

热门文章

  1. Python 函数对象的本质
  2. NET 5 Cron表达式
  3. .NET Core 下的 API 网关
  4. matplotlib学习日记(四)-绘制直方统计图形
  5. [Python] iupdatable包:Status 模块使用介绍
  6. 2.mysql explain命令详解
  7. Xtrabackup备份与恢复
  8. Code Review 最佳实践
  9. 解决UE4缓存使C盘膨胀的问题
  10. 手写系列:call、apply、bind、函数柯里化