vue-video-player实现实时视频播放方式(监控设备-rtmp流)


Posted in Javascript onAugust 10, 2020

监控设备播放效果如下

vue-video-player实现实时视频播放方式(监控设备-rtmp流)

1、vue项目安装vue-video-player

npm install vue-video-player --save

2、编写视频播放组件(放上完整的组件例子,父组件调用时给videoSrc和playerOptions.sources[0].src赋值就可以播放了,具体操作有注释)

注:style样式部分用了lang=scss,如果自己的项目没用他请用自己的方式改一下样式部分避免报错

<template>
  <div class="video-js">
   <div v-if="videoSrc===''" class="no-video">
    暂未播放视频
   </div>
   <video-player v-else class="video-player vjs-custom-skin"
          ref="videoPlayer"
          :playsinline="true"
          :options="playerOptions">
   </video-player>
  </div>
</template>
 
<script>
import videojs from 'video.js'
import 'video.js/dist/video-js.css'
import 'vue-video-player/src/custom-theme.css'
import {videoPlayer} from 'vue-video-player'
import 'videojs-flash'
import SWF_URL from 'videojs-swf/dist/video-js.swf'
 
videojs.options.flash.swf = SWF_URL // 设置flash路径,Video.js会在不支持html5的浏览中使用flash播放视频文件
export default {
 name: 'videojs',
 components: {
  videoPlayer
 },
 data () {
  return {
   videoSrc: '',
   playerOptions: {
    live: true,
    autoplay: true, // 如果true,浏览器准备好时开始播放
    muted: false, // 默认情况下将会消除任何音频
    loop: false, // 是否视频一结束就重新开始
    preload: 'auto', // 建议浏览器在<video>加载元素后是否应该开始下载视频数据。auto浏览器选择最佳行为,立即开始加载视频(如果浏览器支持)
    aspectRatio: '16:9', // 将播放器置于流畅模式,并在计算播放器的动态大小时使用该值。值应该代表一个比例 - 用冒号分隔的两个数字(例如"16:9"或"4:3")
    fluid: true, // 当true时,Video.js player将拥有流体大小。换句话说,它将按比例缩放以适应其容器。
    controlBar: {
     timeDivider: false,
     durationDisplay: false,
     remainingTimeDisplay: false,
     currentTimeDisplay: false, // 当前时间
     volumeControl: false, // 声音控制键
     playToggle: false, // 暂停和播放键
     progressControl: false, // 进度条
     fullscreenToggle: true // 全屏按钮
    },
    techOrder: ['flash'], // 兼容顺序
    flash: {
     hls: {
      withCredentials: false
     },
     swf: SWF_URL
    },
    sources: [{
     type: 'rtmp/flv',
     src: '' // 视频地址-改变它的值播放的视频会改变
    }],
    notSupportedMessage: '此视频暂无法播放,请稍后再试' // 允许覆盖Video.js无法播放媒体源时显示的默认信息。
   }
  }
 }
}
</script>
 
<style scoped lang="less">
 .video-js{
  width:100%;
  height:100%;
  .no-video{
   display:flex;
   height:100%;
   font-size:14px;
   text-align:center;
   justify-content: center;
   align-items:center;
  }
 }
</style>

3、父组件调用视频播放组件,点击“播放视频”替换组件里的视频流地址播放实时视频

<template>
 <div class="about">
  <video-player ref="playerObj"></video-player>
  <a @click="playVideo">播放视频</a>
 </div>
</template>
<script>
 import VideoPlayer from './../../components/VideoPlayer'
 export default {
   name: 'about',
   components: {
     VideoPlayer
   },
   data() {
     return {}
 
   },
   methods: {
     playVideo() {
       this.$refs['playerObj'].videoSrc = 'rtmp://xxxxxxxx'
       this.$refs['playerObj'].playerOptions.sources[0].src = 'rtmp://xxxxxxxx'
     }
   }
 }
</script>

4、vue.config.js文件如下:需要加入的是chainwebpack配置

// vue.config.js
const path = require('path')
const webpack = require('webpack')
 
module.exports = {
 baseUrl: process.env.NODE_ENV === 'production' ? '/bcmp-web/' : '/',
 outputDir: process.env.NODE_ENV === 'production' ? 'bcmp-web' : 'dist',
 lintOnSave: true,
 productionSourceMap: false,
 
 devServer: {
  open: true,
  host: '0.0.0.0',
  port: 9005,
  https: false,
  hotOnly: false,
  proxy: null
 },
 configureWebpack: {
  plugins: [
   new webpack.ProvidePlugin({
    jQuery: 'jquery',
    $: 'jquery',
    'windows.jQuery': 'jquery'
   })
  ]
 },
 chainWebpack: config => {
  config.module
   .rule('swf')
   .test(/\.swf$/)
   .use('url-loader')
   .loader('url-loader')
   .options({
    limit: 10000
   })
 },
 
 pluginOptions: {
  'style-resources-loader': {
   preProcessor: 'scss',
   patterns: [
    path.resolve(__dirname, './src/assets/baseStyle/var.scss'),
    path.resolve(__dirname, './src/assets/baseStyle/mixin.scss')
   ]
  }
 }
}

目前vue-video-player版本5.0.2,测试可用

补充知识:vue项目接入视频监控系列-------播放器的选择

在智慧城市发展迅速的今天,视频监控接入web平台的需求似乎成了不可或缺和潮流。博主准备对自己开发视频监控项目的经历做个记录,整理成一个系列的文章。

在前端发展迅速的今天,h5的出现让在web平台实现无插件播放似乎成了可能,但是video对于RTMP或者RTSP协议的视频流却无能为力,在这里向大家推荐一个播放器: LivePlayer,这是一家视频公司封装的一个播放器,可以免费使用:说明文档

(获取的播放地址为后端配置服务后调用接口获取的)

使用:

第一步: 安装:

npm install @liveqing/liveplayer

npm i -D copy-webpack-plugin

第二步:引入:

在webpack.dev.conf.js中引入和声明插件:

const CopyWebpackPlugin = require('copy-webpack-plugin')

在该文件夹下plugins中声明插件new CopyWebpackPlugin

plugins: [
new CopyWebpackPlugin([

  { from: 'node_modules/@liveqing/liveplayer/dist/component/crossdomain.xml'},
  { from: 'node_modules/@liveqing/liveplayer/dist/component/liveplayer.swf'},
  { from: 'node_modules/@liveqing/liveplayer/dist/component/liveplayer-lib.min.js', to: 'js/'}

])]

第三步:

在index.html中引入:<script type="text/javascript" src="./js/liveplayer-lib.min.js"></script>

路径中的js为上面输出的js地址

第四步:

引入使用组件:

<template>
 <div class="video">
  <el-button type="primary" size="mini" @click="getDeviceChanleData" icon="el-icon-search">选择通道</el-button>
  <el-button type="primary" size="mini" @click="doStart" icon="el-icon-search">开始直播</el-button>
  <live-player :videoUrl="videoUrl" fluent autoplay live stretch></live-player>
 </div>
</template>
<script>
import LivePlayer from '@liveqing/liveplayer'
import {
 getDeviceList,
 getDeviceChanleList,
 start
} from './apis/index.js'
export default {
 data() {
  return {
   id: '',
   videoUrl: ''
  }
 },
 components: {
  LivePlayer
 },
 created() {
  this.getDeviceData()
 },
 methods: {
  // 获取设备数据列表
  getDeviceData() {
   const para = {
    start: 1,
    limit: 10,
    online: true,
    q: ''
   }
   var par = {
    params: para
   }
   getDeviceList(par).then(res => {
    console.log('设备数据', res)
    this.id = res.DeviceList[0].ID
   })
  },
  // 查询设备通道列表
  getDeviceChanleData() {
   const para = {
    serial: this.id
   }
   var par = {
    params: para
   }
   getDeviceChanleList(par).then(res => {
    console.log('设备通道数据', res)
   })
  },
  // 开始直播
  doStart() {
   const para = {
    serial: this.id
   }
   var par = {
    params: para
   }
   start(par).then(res => {
    console.log('开始直播', res)
    this.videoUrl = res.RTMP
    // this.videoUrl = res.HLS
    // this.videoUrl = res.FLV
   })
  }
 }
}
</script>
<style scoped>
.video{
 position: relative;
 width:500px;
 height:300px;
}
img{
 width:100%;
 height:100%;
}
.time1{
 position: absolute;
 top:13px;
 right:150px;
}
</style>

效果图:

vue-video-player实现实时视频播放方式(监控设备-rtmp流)

以上这篇vue-video-player实现实时视频播放方式(监控设备-rtmp流)就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
js去除输入框中所有的空格和禁止输入空格的方法
Jun 09 Javascript
JavaScript实现的类字典插入或更新方法实例
Jul 10 Javascript
基于JavaScript代码实现自动生成表格
Jun 15 Javascript
ionic实现可滑动的tab选项卡切换效果
Apr 15 Javascript
基于JS实现9种不同的面包屑和分布式多步骤导航效果
Feb 21 Javascript
JS简单实现点击按钮或文字显示遮罩层的方法
Apr 27 Javascript
详解Angular Reactive Form 表单验证
Jul 06 Javascript
Vue.js实现网格列表布局转换方法
Aug 25 Javascript
jQuery实现锚点向下平滑滚动特效示例
Aug 29 jQuery
parabola.js抛物线与加入购物车效果的示例代码
Oct 25 Javascript
利用node实现一个批量重命名文件的函数
Dec 21 Javascript
浅谈Vue服务端渲染框架Nuxt的那些事
Dec 21 Javascript
解决vue+webpack项目接口跨域出现的问题
Aug 10 #Javascript
vue 导航锚点_点击平滑滚动,导航栏对应变化详解
Aug 10 #Javascript
vue添加锚点,实现滚动页面时锚点添加相应的class操作
Aug 10 #Javascript
vue 实现锚点功能操作
Aug 10 #Javascript
vscode 使用Prettier插件格式化配置使用代码详解
Aug 10 #Javascript
Vue-cli 移动端布局和动画使用详解
Aug 10 #Javascript
在vue-cli3.0 中使用预处理器 (Sass/Less/Stylus) 配置全局变量操作
Aug 10 #Javascript
You might like
php中http_build_query 的一个问题
2012/03/25 PHP
php图片上传类 附调用方法
2016/05/15 PHP
ThinkPHP中类的构造函数_construct()与_initialize()的区别详解
2017/03/13 PHP
解析 thinkphp 框架中的部分方法
2017/05/07 PHP
php查看一个变量的占用内存的实例代码
2020/03/29 PHP
JavaScript 封装Ajax传递的数据代码
2009/06/05 Javascript
jquery控制listbox中项的移动并排序
2009/11/12 Javascript
关于eval 与new Function 到底该选哪个?
2013/04/17 Javascript
JS过滤url参数特殊字符的实现方法
2013/12/24 Javascript
JavaScript判断是否为数组的3种方法及效率比较
2015/04/01 Javascript
基于jQuery下拉选择框插件支持单选多选功能代码
2016/06/07 Javascript
javascript回调函数详解
2018/02/06 Javascript
微信公众号平台接口开发 获取access_token过程解析
2019/08/14 Javascript
python实现读取并显示图片的两种方法
2017/01/13 Python
python先序遍历二叉树问题
2017/11/10 Python
Python实现的寻找前5个默尼森数算法示例
2018/03/25 Python
基于数据归一化以及Python实现方式
2018/07/11 Python
Python基于OpenCV库Adaboost实现人脸识别功能详解
2018/08/25 Python
Python使用POP3和SMTP协议收发邮件的示例代码
2019/04/16 Python
使用python实现男神女神颜值打分系统(推荐)
2019/10/31 Python
使用Python给头像加上圣诞帽或圣诞老人小图标附源码
2019/12/25 Python
xadmin使用formfield_for_dbfield函数过滤下拉表单实例
2020/04/07 Python
菲律宾酒店预订网站:Hotels.com菲律宾
2017/07/12 全球购物
MyBag中文网:英国著名的时尚包袋电商零售网站
2020/07/31 全球购物
城市轨道交通工程职业规划书范文
2014/01/18 职场文书
八年级数学教学反思
2014/01/31 职场文书
高中军训感言800字
2014/03/05 职场文书
小区门卫岗位职责范本
2014/08/24 职场文书
医学专业大学生职业生涯规划书
2014/10/25 职场文书
求职自我推荐信
2015/03/24 职场文书
2015年社区反邪教工作总结
2015/10/14 职场文书
财产分割协议书
2016/03/22 职场文书
如何使用CocosCreator对象池
2021/04/14 Javascript
pytorch 中nn.Dropout的使用说明
2021/05/20 Python
CentOS7安装GlusterFS集群以及相关配置
2022/04/12 Servers
Python自动化实战之接口请求的实现
2022/05/30 Python