最近一直在搞监控视频接入方面的事情,积累了不少的经验,这里总结一下。提前说一句,本文提到的视频接入均是以RTSP为基础转码而来的,至于用海康大华等插件播放的咱们就闭口不提了可以看这个文章,在vue中接入ocx控件播放监控视频。

现在监控视频在前端的播放主要有如下三种方式:

RTSP视频流播放

RTMP视频流播放

HLS视频流播放

RTSP

咱们一种一种的说,首先是RTSP这种其实和海康插件是一样的,需要VLC插件的支持,所以也是要用老版本的浏览器才可以使用。其实刚接触的时候查到了一个js包vxg-video可以前端在线播放RTSP,但是接入的效果差强人意,虽然能播放但是延迟太高,遂放弃,感兴趣的可以自己了解一下。

RTMP

然后是RTMP视频流,这里放一个链接,感兴趣的可以自己了解它和RTSP有什么区别。

简单来说呢,就是RTMP是Adobe维护的,没开源,而RTSP和HTTP一样都是开源的。所以呢,要在前端播放RTMP视频就必须得使用flash插件,看主流浏览器对flash的态度,只能说且用且珍惜吧。

现在在前端播放RTMP主要有三种方案,videojs,jwplayer,ckplayer。先说接入效果吧,ckplayer和videojs成功了,jwplayer虽然失败了,但是在这里也谈一下吧,记录下失败的地点,等日后有实力了再试试能不能成功。

流行的不得了的videojs

当初要做RTMP播放的时候我第一个想到的就是videojs,毕竟这个太流行了,也有大神给vue封装了videojs,名字叫做vue-video-player,这两者我都尝试了,很尴尬的是,引入原生videojs成功了,但是使用vue-video-player却失败了,可能是后者的作者大大很久没维护的原因了吧,下面先贴一下videojs播放的源码

class="video-js

vjs-default-skin

vjs-big-play-centered"

preload="auto"

width="500"

height="400"

data-setup='{ "html5" : { "nativeTextTracks" : false }}'>

/* 下载的包

"video.js": "^5.6.0",

"videojs-flash": "^2.2.0"

"videojs-swf": "^5.4.2",

*/

import videojs from 'video.js'

import 'video.js/dist/video-js.css'

import 'vue-video-player/src/custom-theme.css'

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: 'videojsTest',

mounted(){

this.player1 = videojs('my-player', this.VideoOptions, function onPlayerReady() {

videojs.log('播放器已经准备好了!')

this.on('play', function() {

console.log('开始/恢复播放')

})

this.on('pause', function() {

console.log('暂停播放')

})

this.on('ended', function() {

console.log('结束播放')

})

})

setTimeout(() => {

this.player1.player()

}, 1000)

},

data () {

return {

VideoOptions: {

autoplay: true, // 是否自动播放

muted: false, // 是否静音

controls: false,

fluid: true, // 宽高自适应

techOrder: ["flash"],

sources: [{

src: 'rtmp://192.168.100.205:10935/hls/stream_1',

type: 'rtmp'

}]

},

}

}

}

在引入的时候要注意 video.js 的版本,6.0以上的版本有可能会出现问题,如果不行的话建议切换 5.6.0 版本。

在引入的时候遇到了一个问题,这个看一下报错就清楚了,vue找不到swf文件的loader引起的,我使用vue-cli3搭建的项目,所以在vue.js.config里做了配置,如果你用的是webpack的话,在webpack.base.js里添加下就可以了,当然写法不一样,这里我都贴上了。

swf文件解析失败

vue.config.js

module.exports = {

// 选项...

chainWebpack: config => {

config.module

.rule('swf')

.test(/\.swf$/)

.use('url-loader')

.loader('url-loader')

.tap(options => {

return {

limit: 10000

}

})

}

}

webpack.base.js

module: {

rules: [

{

test: /\.swf$/,

loader: 'url-loader',

options: {

limit: 1024,

name: 'file/[path][name].[hash7].[ext]'

}

}

]

}

vue-video-player

然后是使用vue-video-player集成的代码,大佬集成的很好,写起来很舒服:

video-player(:options="playerOptions")

import { videoPlayer } from 'vue-video-player'

import 'video.js/dist/video-js.css'

import 'videojs-flash'

export default {

data() {

return {

playerOptions: {

height: '360',

width: '500',

sources: [{

type: 'rtmp/mp4',

src: 'rtmp://192.168.100.205:10935/hls/stream_1'

}],

techOrder: ['flash'],

autoplay: true,

controls: true,

},

}

},

components: { videoPlayer },

methods: { },

}

但是测试的时候出问题了,很难受,一直在报The "flash" tech is undefined错误,试过很多方法,什么用cnpm代替npm下载啊、给videojs-flash添加file loader啊,无论怎么尝试都不行。如果有大佬知道请一定要教教我。

vue-video-player集成失败

CkPlayer

然后就是Ckplayer的接入,这个算是比较简单的,因为ckplayer是静态的第三方依赖。所以我们要把他放在public(vue-cli3)或者static(vue-cli2)文件夹下,然后在index.html里引入,注意,这里要使用绝对路径引入,因为相对路径会被解析为非静态资源。

vue-project

网站未响应,请稍后再试。

引入之后就可以直接在组件里调用了:

.video

height 400px

width 800px

.video ckplayer将会挂载到该div上

export default {

data() { return { }},

mounted() {

var videoObject = {

container: '.video', //容器的ID或className

variable: 'player', //播放函数名称

live: true,

flashplayer: true,//如果强制使用flashplayer则设置成true

video: 'rtmp://192.168.100.205:1935/oflaDemo/hkvideo'//视频地址

}

// 定义一个对象

var player = new ckplayer(videoObject)

}

}

测试之后发现视频黑屏、控制台无报错、播放时间正常进行的问题

无报错但视频黑屏

经过搜索后解决了该问题,要先到ckplayer的源文件目录下打开ckplayer.js文件,然后修改bufferTime为0,playCorrect为true,如下:

function ckplayerConfig() {

return {

flashvars: {},//用来补充flashvars里的对象

languagePath: '',//语言包文件地址

stylePath: '',//风格包文件地址

config: {

...

bufferTime: 0,//缓存区的长度,单位:毫秒,不要小于10

...

playCorrect: true,//是否需要错误修正,这是针对rtmp的

...

}

}

}

然后就可以播放了,但是还有个小问题,就是点击播放之后视频依旧黑屏,要再次暂停后点继续才可以正常播放。这个问题暂时没找到原因,ckplayer播放easyNVR转出来的 rtmp 源就可以,播放ffmpeg转出的 rtmp 就有这个问题,而videojs播放哪种源都是没问题的。videojs牛批!

JwPlayer

jwplayer和ckplayer一样都属于静态的第三方依赖,但是迷一般的,现在网上关于接入jwplayer的文章几乎为零,在遇到错误之后找不到解决方法,随放弃。下面贴一下代码和报错,求有缘人解决:

.player

export default {

data() { return { }},

mounted() {

jwplayer('player').setup({

'flashplayer': 'player.swf',

'file': 'hkvideo',

'streamer': 'rtmp://39.96.37.119/oflaDemo',

'controlbar': 'bottom',

'width': '848',

'height': '360'

})

}

}

jwplayer 报错信息

HLS

HLS是苹果公司提出的一种视频流类型,所以苹果的设备对它有原生支持,不过其他的浏览器也可以通过js包的形式进行播放,和rtmp相比,hls最大的坏处就是延迟高,rtmp基本可以控制在1秒内播放,而hls基本都是5-6秒开外。而且RTMP是基于TCP协议,播放更加的稳定。

我这里接入HLS也是用的vue-video-player,下面贴一下源码,我把它封装成了一个公共组件,只接受一个hls的播放地址src,调用时把播放地址传递进来就可以播放了,因为没有打印什么log,所以播放成功的页面就不截图了

.size

width 900px

video-player.size.video-player.vjs-custom-skin(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 'videojs-contrib-hls'

import { videoPlayer } from 'vue-video-player'

export default {

name: 'IVideoPlayer',

data() { return { }},

props: {

src: String

},

components: { videoPlayer },

computed: {

playerOptions() {

return {

autoplay: true,

muted: false,

loop: false,

preload: 'auto',

language: 'zh-CN',

aspectRatio: '16:9',

fluid: true,

sources: [{

type: "application/x-mpegURL",

src: this.src

}],

width: document.documentElement.clientWidth,

notSupportedMessage: ' ',//'此视频暂无法播放,请稍后再试',

}

}

}

}

总结

最后总结一下,虽然海康插件和RTSP的形式可以播放,但是受浏览器限制的影响,最后是肯定需要放弃的,而RTMP播放质量高效果好,可以说是当下最值得应用的监控视频接入技术了,当然了,需要flash也确实要考虑进来,这个接入方案在未来估计也会逐渐的降温,然后是hls方案,这个对移动端的适配挺好,安卓和苹果的浏览器都提供了原生支持,所以移动端开发应该优先考虑这个方案。

vue项目使用大华摄像头怎样初始化_Vue接入监控视频技术总结相关推荐

  1. vue项目使用大华摄像头怎样初始化_vue项目初始化步骤

    一.安装Vue脚手架 安装步骤参考上篇博文及Vue-cli官方文档 二.通过Vue脚手架创建项目 通过GUI可视化面板创建项目 1.win+r打开运行窗口,输入cmd回车打开终端窗口 2.切换到要创建 ...

  2. vue项目使用大华摄像头怎样初始化_【译】如何使用Vue捕获网络摄像头视频

    几个月前,我一直关注着比特币的爆发并且在GDAX网站上注册账号.在注册验证的过程中,网站提示要通过计算机的网络摄像头提交我自己的一张照片作为照片ID.这是一个很酷的做法,让我思考一个问题:在网络浏览器 ...

  3. 使用大华NetSDK对接大华相机

    使用大华NetSDK对接相机 一. 下载大华NetSDK support 根据自己的需要下载对应版本的sdk.这边我们就以Win32版本作为开发使用. 下载的文件解压后,内部文件如下图所示: 开发使用 ...

  4. 使用大华设备开发行AI人流量统计出现时间不正确的原因分析

    人流量统计是基于AI人工智能算法,可以实时统计视频图像中的人体个数和流动趋势,与视频监控技术结合,能实现当前监控区域的人流量统计,实时了解行人流量动态,还能达到人群密度监测.避免人群聚集的目的,在安防 ...

  5. EasyCVR使用大华SDK接入时录像显示失败是什么原因?该如何解决?

    EasyCVR视频融合云服务支持多协议.多类型设备的接入,包括国标GB/T28181.RTMP.RTSP/Onvif协议,以及厂家私有协议,如:海康SDK.大华SDK.海康Ehome等.平台可对前端接 ...

  6. 如何使用大华SDK工具查询和播放设备录像?

    EasyCVR视频融合云平台可支持多协议.多类型的设备接入,包括国标GB28181.RTSP/Onvif.RTMP协议,以及海康/大华SDK.海康Ehome等,对外可分发RTSP.RTMP.FLV.H ...

  7. 海康、大华摄像头网页无插件直播监控流媒体服务EasyNVR使用web和安卓浏览器能正常使用,苹果手机无法打开问题解决

    海康.大华摄像头网页无插件直播监控流媒体服务EasyNVR使用web和安卓浏览器能正常使用,苹果手机无法打开问题解决 参考文章: (1)海康.大华摄像头网页无插件直播监控流媒体服务EasyNVR使用w ...

  8. 使用大华惠智双目半球网络摄像机DH-IPC-HD4140X-E2获取人流量统计数据

    记录一下使用Java的SpringBoot+大华SDK在智慧公厕项目中使大华惠智双目半球网络摄像机DH-IPC-HD4140X-E2获取人流量统计数据 首先根据说明书登录摄像头,一般摄像头都有自己的账 ...

  9. vue项目开发实录--仿去哪儿网App-张鹏-专题视频课程

    vue项目开发实录--仿去哪儿网App-160人已学习 课程介绍         本课程为vue项目开发实录(仿去哪儿网App)其中涉及到知识点有:组件搭建,路由,vuex,axios,webpack ...

最新文章

  1. java 反射机制--根据属性名获取属性值
  2. linux 启动rabbitmq 报错:
  3. case when mysql_mysql条件语句case when的实例
  4. spring中bean的作用域属性single与prototype的区别
  5. 分享自己写的一个贪吃蛇的游戏(Linux)
  6. 第 6-2 课:SpringMVC 核心 + 面试题
  7. 作者:胡卫生,博士,上海交通大学教授、博士生导师。
  8. oracle数据库关不掉,oracle进程关不掉的问题??新手问题
  9. ios 平滑移动view_iOS 关于列表上拉(平滑加载数据)自动加载数据的问题
  10. 用正则表达式去除标点符号
  11. d2j-dex2jar之DexException :not support version
  12. 报警触发音频和音频素材网址
  13. python画指北针_Python-geopandas 中国地图绘制
  14. Error response from daemon: conflict: unable to delete feb5d9fea6a5 (must be forced) - image is bein
  15. PHP array_column() 函数
  16. 中兴笔试题目总结(一)C++部分
  17. 在线画图工具-heatmap热图
  18. Wait延时及定时查询
  19. 【Eelectron-vue】构建桌面应用(20)-electron的退出quit和exit
  20. Java——计算机基础知识

热门文章

  1. 第二章 数据的表示和运算 2.1.5 汉明(海明)校验码 [计算机组成原理笔记]
  2. python天天向上的力量三天打鱼两天晒网_017 示例3-天天向上的力量-Go语言中文社区...
  3. math python 向上取整_Python成为专业人士笔记-各数学运算操作深度剖析
  4. TensorFlow实现单隐层神经网络
  5. MapReduce分析NCDC 年气象数据最低温度与最高温度
  6. 数据结构之Dijkstra算法
  7. shell 中 $(( )) 与 $( ) 还有 ${ } 的区别
  8. 开源 Python网络爬虫框架 Scrapy
  9. 接口隔离原则(ISP)
  10. oracle sequence 不同 会话 不连续_序列 Sequence