精华内容
下载资源
问答
  • 飞瓜数据B站版的数据监控功能提供对B站UP主监控功能,实时掌握UP主视频热度走向和投放效果。通过监控输入B站视频链接,设定24/48时长开始对其监控。监控开始后在监控报告中查看对应视频的...实时监控视频数据变化...

    飞瓜数据B站版的数据监控功能提供对B站UP主监控功能,实时掌握UP主视频热度走向和投放效果。

    通过监控输入B站视频链接,设定24/48时长开始对其监控。监控开始后在监控报告中查看对应视频的数据曲线变化或者等待监控结束直接观察整个的曲线走势。

    5c390cd1a9d60e7729e3fac05b2e1e69.png

    实现分钟打点记录视频数据变化,每10分钟都会记录下视频的点赞数、播放数、弹幕数的曲线变化,在哪个时间段的视频处于最高峰值都能一目了然的看出来。实时监控视频数据变化,掌握视频增量数据让UP主快速判断其输出内容的真伪。

    6e66952923e9086ccfb3f7168561516c.png

    八月十四号我们以敬汉卿UP主作为监控对象,在大致了解这位UP主大概发视频的时间段后采取了72小时的发布视频监控。

    从监控报告中显示敬汉卿UP主从8.14-8.18号发布了两部视频,分别是在16.00 和 17.30 时间段发布,从这里我们就可以大概判断出这位UP主大致的发文时间段。

    264a4c4b98ad69ab20cfcac1e93dcf25.png

    这两部视频讲诉的都是这位UP主挑战1000块一个月北漂的事情。点击从第一个视频中的报告分析我们可以看到视频曲线总量变化从点赞数、播放数、弹幕数都是随着时间的增加而增加,整个数据曲线走势图大致呈现正比例发展趋势。

    d0eb0e00c02aa1e210848c14941f7ff1.png

    在增量趋势图中从刚发布视频那段时间点赞量处于最高水平,到了凌晨开始慢慢的下降直到第二天的7点半点赞量才有明显的浮动,说明这段时间已经趋于饱和,最高的粉丝活跃时间正是处于作品发布的那段时间。

    4d9ee7cc34c9f85c5b46b5504974dd7f.png

    通过粉丝监控数据详情也能大致了解,不管是播放总数还是点赞总数都在发文时段快速增加之后就开始趋于缓慢增长。虽然增长的幅度并不大但是可以看得出粉丝对于这位UP主的视频还是非常喜欢的,播放总数有着200多万就是证明。

    4866d5f45b76ede1278c29db65a2c6da.png

    通过第二个监控数据看到敬汉卿UP主的新作品从8.18号4点到8.19号4点,作品达到了138万播放数,点赞量也拥有六千之多,从刚开始的十几万到24小时之后的一百万,这些数据足以表明粉丝对于这位UP主作品的喜欢。

    0496f81dbb7e4e8b77f0c5c2ebf59e34.png
    b55561f45d5b6b05f8b87eff02d4fb81.png

    整个监控数据在哪个时间段的视频处于最高峰值都能一目了然的看出来,不管从点赞数、粉丝数、投币数还是收藏数,都可以看到敬汉卿UP主的视频相关数据趋势都表现的非常的好。

    c64870323e7adbfa52ed27b720b98cab.png
    8cf833629bc4329d708be085146d2175.png

    飞瓜数据B站版数据监控实时掌握UP主监控视频数据变化,分析视频热度走向和投放效果,快速判断其输出内容的真伪。

    cb201befd18b41c850743d8a4c414078.png

    百度搜索:

    “飞瓜数据B站版”

    或网址输入:

    http://bz.feigua.cn

    登录PC端

    体验官网的更多功

    展开全文
  • vue中使用海康插件实现视频实时监控(海康插件)

    万次阅读 多人点赞 2019-10-17 09:30:30
    vue中使用海康插件实现视频实时监控(海康插件) 首先 下载并安装海康插件 webcontrol.exe 然后 直接就写代码把,所有方法都是海康他们直接封装好的demo 初始化之后,后台把密钥和一些配置的东西返回给你 然后只需要...

    在vue中使用海康插件实现视频实时监控(海康插件)

    首先

    下载并安装海康插件 webcontrol.exe

    然后

    直接就写代码把,所有方法都是海康他们直接封装好的demo

    初始化之后,后台把密钥和一些配置的东西返回给你

    然后只需要把监控点编号给你就可以了。实现之后几乎你想要的操作都有

    各种黑科技,而你只需处理这个插件的兼容问题和一些bug,底层他们时用C写得,但是最终实现播放呢,又是webscoket实现的。

    代码

    在index.html中引入下面这三个js

    <script src="./static/hkjs/jquery-1.12.4.min.js"></script>
    <script src="./static/hkjs/jsencrypt.min.js"></script>
    <script src="./static/hkjs/jsWebControl-1.0.0.min.js"></script>
    

    html:

    采用了动态获取容器的宽和高

    <div id="playWnd" class="playWnd" :style="{width:swfWidth+'px',height:swfHeight+'px'}"></div>
    

    data:

         swfHeight: "",
         swfWidth: "",
        //初始化参数
          initparam: {
            appKey: "xxxxx",
            secret: "xxxxxxx",
            apiIp: "xxx.xxx.xxx",
            apiPort: 8099,
            layout: "1x1"//这里是来控制你一开始初始化之后的分屏的
          },
          //监控点编号
          pointCode: "xxxxxxx",
          pubKey: "",
          oWebControl: null,
          WebControl: null
    

    methods:

    //海康插件页面渲染方法
        //Html:<div id="playWnd" class="playWnd"></div> 就是放插件的盒子,id不要改,改了的话下面的方法里面也要改
        //css:自己写一个盒子,让上面这个盒子100%就好
        //js:data,methods,生命周期函数里面也要去看下
        //想要用海康视频直接把从onSearch以下的所以方法复制过去
        // 前面三个接口是我们自己要写的
        //查询videoList,密钥getInitParam,执行就是videoPreview
        onSearch() {
          this.oWebControl.JS_ShowWnd();
          this.videoList = [];
            videoList(
             接口参数
            ).then(res => {
              if (res.statusCode == 200) {
                this.videoList = res.result.rows;
              } else {
                this.$message({
                  message: res.message,
                  type: "warning"
                });
              }
            });
          
        },
        //获取海康密钥
        getInitParam() {
          getInitParam('xxx').then(res => {
            this.initparam = res;
            this.init()
          });
        },
        //执行每监控点预览的操作 //获取监控点编号
        videoPreview(val, index) {
          this.position = index;
          this.oWebControl.JS_ShowWnd();
          this.pointCode = val.pointCode;
          this.startpreview();
        },
        // 创建播放实例
        initPlugin() {
          this.oWebControl = new WebControl({
            szPluginContainer: "playWnd", // 指定容器id
            iServicePortStart: 15900, // 指定起止端口号,建议使用该值
            iServicePortEnd: 15909,
            szClassId: "23BF3B0A-2C56-4D97-9C03-0CB103AA8F11", // 用于IE10使用ActiveX的clsid
            // 创建WebControl实例成功
            cbConnectSuccess: () => {
              this.oWebControl
                .JS_StartService("window", {
                  // WebControl实例创建成功后需要启动服务
                  dllPath: "./VideoPluginConnect.dll" // 值"./VideoPluginConnect.dll"写死
                })
                .then(
                  () => {
                    // 启动插件服务成功
                    this.oWebControl.JS_SetWindowControlCallback({
                      // 设置消息回调
                      cbIntegrationCallBack: this.cbIntegrationCallBack
                    });
    
                    this.oWebControl
                      .JS_CreateWnd("playWnd", this.swfWidth, this.swfHeight)
                      .then(() => {
                        //JS_CreateWnd创建视频播放窗口,宽高可设定
                       this.getInitParam(); // 创建播放实例成功后初始化
                      });
                  },
                  () => {
                    // 启动插件服务失败
                  }
                );
            },
            // 创建WebControl实例失败
            cbConnectError: () => {
              this.oWebControl = null;
              $("#playWnd").html("插件未启动,正在尝试启动,请稍候...");
              this.WebControl.JS_WakeUp("VideoWebPlugin://"); // 程序未启动时执行error函数,采用wakeup来启动程序
              this.initCount++;
              if (this.initCount < 3) {
                setTimeout(() => {
                  this.initPlugin();
                }, 3000);
              } else {
                console.log("插件启动失败,请检查插件是否安装!");
              }
            },
            // 异常断开:bNormalClose = false
            cbConnectClose: bNormalClose => {
              // JS_Disconnect正常断开:bNormalClose = true
              console.log("cbConnectClose");
              this.oWebControl = null;
            }
          });
        },
        // 设置窗口控制回调
        setCallbacks() {
          this.oWebControl.JS_SetWindowControlCallback({
            cbIntegrationCallBack: this.cbIntegrationCallBack
          });
        },
        // 推送消息
        cbIntegrationCallBack(oData) {
          console.log(oData.responseMsg);
          /* showCBInfo(JSON.stringify(oData.responseMsg)); */
        },
        //初始化
        init() {
          this.getPubKey(() => {
            // 请自行修改以下变量值	
            let appkey = this.initparam.appKey; //综合安防管理平台提供的appkey,必填
            let secret = this.setEncrypt(this.initparam.secret); //综合安防管理平台提供的secret,必填
            let ip = this.initparam.apiIp; //综合安防管理平台IP地址,必填
            let port = this.initparam.apiPort; //综合安防管理平台端口,若启用HTTPS协议,默认443
            port = parseInt(port);
            let layout = this.initparam.layout;
            let playMode = 0; //初始播放模式:0-预览,1-回放
            let snapDir = "D:\\SnapDir"; //抓图存储路径
            let videoDir = "D:\\VideoDir"; //紧急录像或录像剪辑存储路径
            let enableHTTPS = 1; //是否启用HTTPS协议与综合安防管理平台交互,是为1,否为0
            let encryptedFields = "secret"; //加密字段,默认加密领域为secret
            let showToolbar = 1; //是否显示工具栏,0-不显示,非0-显示
            let showSmart = 1; //是否显示智能信息(如配置移动侦测后画面上的线框),0-不显示,非0-显示
            let buttonIDs =
              "0,16,256,257,258,259,260,512,513,514,515,516,517,768,769"; //自定义工具条按钮
            // 请自行修改以上变量值	
            this.oWebControl
              .JS_RequestInterface({
                funcName: "init",
                argument: JSON.stringify({
                  appkey: appkey, //API网关提供的appkey
                  secret: secret, //API网关提供的secret
                  ip: ip, //API网关IP地址
                  playMode: playMode, //播放模式(决定显示预览还是回放界面)
                  port: port, //端口
                  snapDir: snapDir, //抓图存储路径
                  videoDir: videoDir, //紧急录像或录像剪辑存储路径
                  layout: layout, //布局
                  enableHTTPS: enableHTTPS, //是否启用HTTPS协议
                  encryptedFields: encryptedFields, //加密字段
                  showToolbar: showToolbar, //是否显示工具栏
                  showSmart: showSmart, //是否显示智能信息
                  buttonIDs: buttonIDs //自定义工具条按钮
                })
              })
              .then(oData => {
                this.oWebControl.JS_Resize(this.swfWidth, this.swfHeight); // 初始化后resize一次,规避firefox下首次显示窗口后插件窗口未与DIV窗口重合问题
                //startpreview();  //初始化之后开启预览
              });
          });
        },
        //获取公钥
        getPubKey(callback) {
          this.oWebControl
            .JS_RequestInterface({
              funcName: "getRSAPubKey",
              argument: JSON.stringify({
                keyLength: 1024
              })
            })
            .then(oData => {
              console.log(oData);
              if (oData.responseMsg.data) {
                this.pubKey = oData.responseMsg.data;
                callback();
              }
            });
        },
        //RSA加密
        setEncrypt(value) {
          let encrypt = new JSEncrypt();
          encrypt.setPublicKey(this.pubKey);
          return encrypt.encrypt(value);
        },
        // 设置窗口裁剪,当因滚动条滚动导致窗口需要被遮住的情况下需要JS_CuttingPartWindow部分窗口
        setWndCover() {
          let iWidth = $(window).width();
          let iHeight = $(window).height();
          let oDivRect = $("#playWnd")
            .get(0)
            .getBoundingClientRect();
          let iCoverLeft = oDivRect.left < 0 ? Math.abs(oDivRect.left) : 0;
          let iCoverTop = oDivRect.top < 0 ? Math.abs(oDivRect.top) : 0;
          let iCoverRight =
            oDivRect.right - iWidth > 0 ? Math.round(oDivRect.right - iWidth) : 0;
          let iCoverBottom =
            oDivRect.bottom - iHeight > 0
              ? Math.round(oDivRect.bottom - iHeight)
              : 0;
    
          iCoverLeft = iCoverLeft > this.swfWidth ? this.swfWidth : iCoverLeft;
          iCoverTop = iCoverTop > this.swfHeight ? this.swfHeight : iCoverTop;
          iCoverRight = iCoverRight > this.swfWidth ? this.swfWidth : iCoverRight;
          iCoverBottom =
            iCoverBottom > this.swfHeight ? this.swfHeight : iCoverBottom;
          this.oWebControl.JS_RepairPartWindow(0, 0, this.swfWidth+1, this.swfHeight); // 多1个像素点防止还原后边界缺失一个像素条
          if (iCoverLeft != 0) {
            this.oWebControl.JS_CuttingPartWindow(0, 0, iCoverLeft, this.swfHeight);
          }
          if (iCoverTop != 0) {
            this.oWebControl.JS_CuttingPartWindow(0, 0, this.swfWidth+1, iCoverTop); // 多剪掉一个像素条,防止出现剪掉一部分窗口后出现一个像素条
          }
          if (iCoverRight != 0) {
            this.oWebControl.JS_CuttingPartWindow(
              this.swfWidth - iCoverRight,
              0,
              iCoverRight,
              this.swfHeight
            );
          }
          if (iCoverBottom != 0) {
            this.oWebControl.JS_CuttingPartWindow(
              0,
              this.swfHeight - iCoverBottom,
              this.swfWidth,
              iCoverBottom
            );
          }
        },
        //视频“预览”功能
        startpreview() {
          let pointCode = this.pointCode;
          let cameraIndexCode = pointCode; //获取输入的监控点编号值,必填
          let streamMode = 0; //主子码流标识:0-主码流,1-子码流
          let transMode = 1; //传输协议:0-UDP,1-TCP
          let gpuMode = 0; //是否启用GPU硬解,0-不启用,1-启用
          let wndId = -1; //播放窗口序号(在2x2以上布局下可指定播放窗口)
          cameraIndexCode = cameraIndexCode.replace(/(^\s*)/g, "");
          cameraIndexCode = cameraIndexCode.replace(/(\s*$)/g, "");
          this.oWebControl.JS_RequestInterface({
            funcName: "startPreview",
            argument: JSON.stringify({
              cameraIndexCode: cameraIndexCode, //监控点编号
              streamMode: streamMode, //主子码流标识
              transMode: transMode, //传输协议
              gpuMode: gpuMode, //是否开启GPU硬解
              wndId: wndId //可指定播放窗口
            })
          });
        },
    
        //停止全部预览功能
        stopAllPreview() {
          this.oWebControl.JS_RequestInterface({
            funcName: "stopAllPreview"
          });
        },
        //关闭视频窗口
        closeWindow() {
          if (this.oWebControl != null) {
            this.oWebControl.JS_HideWnd(); // 先让窗口隐藏,规避可能的插件窗口滞后于浏览器消失问题
            this.oWebControl.JS_Disconnect().then(
              () => {
                // 断开与插件服务连接成功
              },
              () => {
                // 断开与插件服务连接失败
              }
            );
          }
        }
      },
      created() {
        this.getInitParam();//获取初始话所需的参数
      },
      beforeMount() {this.WebControl = WebControl;},//调用电脑中的插件
      mounted() {
        this.swfHeight = document.getElementById("videoMaincontent1").offsetHeight;
        this.swfWidth = document.getElementById("videoMaincontent1").offsetWidth;
        //页面加载时创建播放实例初始化
        this.initPlugin();
        // 监听resize事件,使插件窗口尺寸跟随DIV窗口变化
        $(window).resize(() => {
          if (this.oWebControl != null) {
            this.oWebControl.JS_Resize(this.swfWidth, this.swfHeight);
            this.setWndCover();
          }
        });
        // 监听滚动条scroll事件,使插件窗口跟随浏览器滚动而移动
        $(window).scroll(() => {
          if (this.oWebControl != null) {
            this.oWebControl.JS_Resize(this.swfWidth, this.swfHeight);
            this.setWndCover();
          }
        });
      },
      beforeDestroy() {
        this.closeWindow();//关闭插件
      }
    
    展开全文
  • 主要介绍了vue-video-player实现实时视频播放方式(监控设备-rtmp流),具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
  • vue-video-player实现实时视频播放(监控设备-rtmp流)

    万次阅读 热门讨论 2018-11-13 11:05:24
    监控设备播放效果如下   1、vue项目安装vue-video-player npm install vue-video-player --save   2、编写视频播放组件(放上完整的组件例子,父组件调用时给videoSrc和playerOptions.sources[0].src...

     

    监控设备播放效果如下

     

    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,测试可用

    展开全文
  • 监控设备播放效果如下1、vue项目安装vue-video-playernpm install vue-video-player --save2、编写视频播放组件(放上完整的组件例子,父组件调用时给videosrc和playeroptions.sources[0].src赋值就可以播放了,具体...

    监控设备播放效果如下

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

    npm install vue-video-player --save

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

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

    暂未播放视频

    ref="videoplayer"

    :playsinline="true"

    :options="playeroptions">

    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', // 建议浏览器在加载元素后是否应该开始下载视频数据。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无法播放媒体源时显示的默认信息。

    }

    }

    }

    }

    .video-js{

    width:100%;

    height:100%;

    .no-video{

    display:flex;

    height:100%;

    font-size:14px;

    text-align:center;

    justify-content: center;

    align-items:center;

    }

    }

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

    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'

    }

    }

    }

    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中引入:

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

    第四步:

    引入使用组件:

    选择通道

    开始直播

    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

    })

    }

    }

    }

    .video{

    position: relative;

    width:500px;

    height:300px;

    }

    img{

    width:100%;

    height:100%;

    }

    .time1{

    position: absolute;

    top:13px;

    right:150px;

    }

    效果图:

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

    如您对本文有疑问或者有任何想说的,请点击进行留言回复,万千网友为您解惑!

    展开全文
  • 实时监控 Hive 日志,并上传到 HDFS 中实现步骤1、Flume 要想将数据输出到 HDFS,必须持有 Hadoop 相关 jar 包commons-configuration-1.6.jar、hadoop-auth-2.7.2.jar、hadoop-common-2.7.2.jar、hadoop-hdfs-2.7.2....
  • 因为我们前端用的vue嘛 自然端口不一致需要进行跨域,配置如下: @Configuration public class MywWebMvcConfig implements WebMvcConfigurer { // 全局跨域请求 @Override public void addCorsMappings...
  • vue之使用vue-video-player实现实时视频流播放

    万次阅读 热门讨论 2019-01-24 10:19:55
    由于这几天项目需要实时显示监控的视频,所以网上翻阅了很多资料,这里写下我从0到1的过程。 本篇博客参考了 :https://blog.csdn.net/liona_koukou/article/details/84025449博客,也非常感谢此博主对我一些问题...
  • 本篇文章小编给大家分享一下vue-video-player实现实时视频播放方式代码示例,文章代码介绍的很详细,小编觉得挺不错的,现在分享给大家供大家参考,有需要的小伙伴们可以来看看。监控设备播放效果如下1、vue项目安装...
  • vue实现 .flv 视频流播放 一、安装 flv.js npm install flv.js -S 二、引入项目 import flvjs from 'flv.js/dist/flv.js' 三、使用 var self; export default { data() { return { flvPlayer: null, }; ...
  • 有时候遇到这么个需求,输入框为空的时候,请求...一、使用computed属性的实时监控计算 我第一反应是做一个computed属性监控这个输入框的值,一旦监控发现值为空,我就重新执行一遍请求的方法。 <el-col :xs...
  • 接下来在 vue 中使用 hls.js 来实现视频流播放功能。 一、安装 hls.js ``` npm i hls.js -S ``` 二、html 中渲染video节点 <video ref="videoContain" :src="videoSrc" controls ></video> 三、初始化...
  • 从前端软件架构以及前后端交互机制出发,通过将北斗设备获取的原始WGS84坐标转换为国测局GCJ02坐标,实现了北斗终端的实时监控、历史轨迹回放等功能;针对历史轨迹回放中存在的位置点偏移与路径折线的问题,引入路径匹配...
  • 同步sau交流学习社区:www.mwcxs.top/page/464.ht…一、使用computed属性的实时监控计算我第一反应是做一个computed属性监控这个输入框的值,一旦监控发现值为空,我就重新执行一遍请求的方法。&lt;el-col :xs=&...
  • 视频才用流媒体,有后台实时返回数据, 要支持flash播放, 所以需安装对应的flash插件。这篇文章主要介绍了vue + typescript + video.js 流媒体播放 视频监控,需要的朋友可以参考下
  • 要播放监控实时视频,除了在浏览器的地址栏直接打开摄像头的地址(如:http://192.168.1.108,像大华和海康都可以给特定的http协议的接口),或者在vlc播放器中直接打开rtsp流的视频播放(下载vlc播放器,打开网络...
  • 需求:页面嵌入一个实时视频监控。如下:页面监控样式.png上述监控是可以点开播放的。如何实现呢?首先要成为开发者,并创建一个应用,这些公司应该为你弄好了:一、使用iframe内联框架vue页面中嵌入h5内联框架。...
  • 代码在Vue中简单实现主要思路是:a.左边部分滚动,实时修改右边部分的滚动条高度b.头部和内容部分都设置固定高度,当内容部分内容高度大于设置的高度时,产生滚动条c.左右部分也设置固定宽度,左边设置固定宽度,右边...
  • 需求:页面嵌入一个实时视频监控。如下:页面监控样式.png上述监控是可以点开播放的。如何实现呢?首先要成为开发者,并创建一个应用,这些公司应该为你弄好了:一、使用iframe内联框架vue页面中嵌入h5内联框架。...
  • 基于vue项目 vue-video-player实现rtmp hls视频流播放

    千次阅读 热门讨论 2020-01-16 16:48:11
    视频直播 在线监控——基于vue实现rtmp hls视频流播放 现在很多后台管理系统都会在项目中添加实时监控/实时直播的功能,最近刚好遇到项目需求,于是就..。
  • 可以实时监控data中变量的变化,并能在变量发生变化时,自动发出通知. 原理:将data放入 new Vue中后,new Vue自动为每个变量添加了访问器属性,这些访问器属性,直接隶属于new Vue对象,保护/监控data中的变量。...
  • 我们做的是一个监控项目,需要实时监控某机器,播放器在监控页面可拖动。 插件选择: 项目是vue框架,播放器选择了vue-video-player插件, vue-video-player,其实就是 video.js 集成到 vue 中 ,视频流选择rtmp...
  • 随着前端技术日新月异迅猛发展,为了实现更好的前端性能,最大程度提高用户体验,支持单页应用的框架逐渐占领市场,如众所周知的React,Vue等等。但是在单页应用的趋势下,快速定位并解决JS错误却成为一大难题。在...
  • 项目当中列表查看目标云主机的监控,页面当中以定时器内每一秒发出一次请求方式来实现实时刷新数据,当点击列表选项卡后,监控页面刷新数据的axios请求有pending状态,此时在列表页(即父页面)会弹出监控页面(即子...
  • 1 实时监控表格,实现关键字的定位; 2 点击搜索按钮以后,实现记录中关键字的样式变化(即高亮)。 二、实现过程 1 搜索条件表单 了解了实现思路,就让我们一起来看一下实现过程(关键位置均给了注释) 日志...
  • 随着前端技术日新月异迅猛发展,为了实现更好的前端性能,最大程度提高用户体验,支持单页应用的框架逐渐占领市场,如众所周知的React,Vue等等。但是在单页应用的趋势下,快速定位并解决JS错误却成为一大难题。在...

空空如也

空空如也

1 2 3 4
收藏数 78
精华内容 31
关键字:

vue实现实时监控

vue 订阅