最近项目用到了一个调用海康威视摄像头实现外网网页预览的需求,由于第一次接触这类需求,不免有些焦头烂额,现终于将需求实现,故,作一笔记用于记忆,并希望帮到要用的人。废话不多说,直接开始:

注:本文中所有的使用的代码和工具以及安装包的下载地址如下(特别注意!!!csdn和demo大师的附件都非完整demo,只有核心方法的使用,请谨慎下载或购买):

传送门:https://download.csdn.net/download/qq_36720088/10696597

由于csdn资源价值算法的原因,资源分数过高,若csdn资源分数不够(最高时50分,会波动,请确认),可移步至:demo大师

一、分析流程

整理了一下整个流程,共分以下四个步骤:

1.使用海康威视的官方SDK访问摄像头,获取摄像头可用通道号,组装rtsp地址,获取摄像头的实时rtsp视频流。

注1:12年之后海康设备支持两种组装rtsp流的方式,可以不使用通道号就可以,故此步可以省略;

注2:如果不使用通道,使用量多的话会影响画质,故,推荐使用通道号组装rtsp地址;

2.使用FFmpeg将rtsp流转换成rtmp流供网页显示。

注1:FFmpeg支持转mp4,webm,ogg等多种前言音视频文件的格式转换哦;

注2:本文使用rtmp流,有其他需求的小伙伴可以使用FFmpeg转成其他格式;

3.服务器搭建集成nginx-rtmp插件的nginx服务,将转换的rtmp流推送至nginx制定代理地址,实现外网访问。

注1:建议有能力的公司使用单独服务器搭建流媒体服务器哦。

4.前端页面使用免费的前端H5插件video.js实现实时预览

注1:video.js支持mp4,webm,ogg三种格式的文件的播放。

注2:rtmp流属于flv格式只能用flash播放,故需要flash插件支持;

注3:video.js只有一些版本支持flash,故,要选好版本(本文使用的是v5.20.5);

二、具体实现过程及问题解决

第一步:

1.下载海康威视的最新SDK;海康威视官方SDK下载;

自己选择适合自己环境的SDK下载

2.下载之后解压,目录如下:

Demo示例中的是几种开发语言的demo,其中java的是用swing写客户端,C/S架构的,可以参考。

库文件中是需要使用的dll运行库;是需要引进项目中的。那个txt文件里说了,有几个文件和文件夹

是必须的:

HCNetSDK.dll、HCCore.dll、PlayCtrl.dll、SuperRender.dll、

AudioRender.dll、HCNetSDKCom文件夹

3.我个人是在项目的webapp下创建了一个libraries的文件夹专一放摄像头的库文件的,因为我除了海康,

还要调华为的高清视讯终端;(有外网链接需求的朋友,可以选择搭建一个小项目专一做流媒体服务器)

(注意:java调用dll库需要使用jna.jar)

目录如下:

4.然后在一个全局工具类里写了一个静态方法获取webapp的路径以获取dll文件的路径;

由于开发环境为内网,故只能以图片方式贴代码,大家将就看:

println中的是获取的的HCNetSdk.dll的绝对路径;

5.根据SDK压缩包里的那个txt文件所说,修改SDK文件的路径:

注:我们不用预览功能所以不用修改PlayCtrl的路径,不会调用他的;

6.编写工具类的各种方法,初始化,注册设备,获取通道:

6.1初始化环境:

6.2注册设备:

6.3获取通道:

6.4:整体调用获取通道号:

这里的注释是推流哈,这个后边再说;

先看到这句:int channelNumber = hcTools.getChannelNumber();就是获取到了通道号;

看过Demo的小伙伴看了就知道我是根据demo改的哈!

7.组装rtsp地址:

成功的rtsp地址如下:

rtsp://admin:admin123456@10.192.44.101:554/h264/ch1/main/av_stream

解释下

admin:设备登录账号;

admin123456:设备登录密码;

10.192.44.101:设备的内网IP地址:

554:默认端口(注:不要变,这是取rtsp流的默认端口);

h264:是视频流编码格式;

ch1:通道号(注:下面会详细介绍通道号规则);

如上为一个rtsp流的格式,具体介绍见下文:

传送门:https://blog.csdn.net/qq_34845917/article/details/75077712

下文为海康威视的rtsp的规则:

传送门:https://blog.csdn.net/xiejiashu/article/details/71786187

以下为个人对于海康的通道号的理解(原文在海康SDK开发文档内,自己扒):

海康通道号分两种模拟通道和数字通道。

通道号是一个整形数字,在组装rtsp地址的时候需要加上“ch”前缀;

数字通道(即IP通道)在使用时要在获得的值的基础上加32;

以上在代码中都有实现。

现在我们就获取到了一个rtsp视频流。接下来我们测一下可以用否:

安装vlc-2.2.4-win32.exe:一直下一步。(64位系统可用);

打开vlc客户端==>媒体==>流==>网络

将得到的rtsp地址放进去,然后点击图片中串流右边的三角选播放:

成功!第一步结束!

第二步:

1.下载window可用的FFmpegCommandHandler,传送门:https://blog.csdn.net/eguid_1/article/details/52968220

这里是已经用java包装好的一个FFempg的工具

2.下载后打开压缩包

选择jar文件夹下有一个jar包:FFmpegCommandHandler.jar

3.将这个jar包安装到本地的maven仓库(maven项目):

将jar包解压之文件夹然后使用 maven 的 install:install-file命令

mvn install:install-file -DgroupId=FFmpeg -DartifactId=FFmpeg -Dversion=1.0

-Dpackaging=jar -Dfile=D:\XXX\FFmpegCommandHandler.jar;

4.进入自己的本地Maven仓库找ffempg\ffempg\1.0\ffempg-1.0.pom

5.项目中pom.xml引入

6.安装FFmpeg,并配置环境变量

下载地址:https://ffmpeg.zeranoe.com/builds/

我们选择static版本

下载之后,将压缩包解压到你想安装的地方然后复制ffmpeg.exe文件所在路径,

添加至系统环境变量;

7.FFmpeg的使用

这里小伙伴们会看到rtmp://localhost:1935/live/,这是把转好的rtmp流直接推送到

流媒体服务器上的nginx服务上,因为我用的是本机做服务器,所以是localhost;

1935是nginx-rtmp的默认端口,这是下一节的事情

第二步骤结束

第三步:

1.下载已经集成nginx-rtmp插件的nginx,传送门:https://github.com/illuspas/nginx-rtmp-win32

解压到指定文件夹,打开conf/nginx.conf文件

这里的live就是上边代码中的rtmp://localhost:1935/live/中的live,可以自己定义

2.启动nginx

在nginx的安装目录下按住shift键右击鼠标,点击出现菜单中的在此处打开命令行

输入命令 nginx.ece -c cong\nginx.conf 回车,nginx启动时不能关闭命令行窗口!

有时间的小伙伴可以尝试一下将nginx安装为windows系统服务,这样就可以用

net start nginx 命令启动nginx且不会有命令行窗口打开。

3.执行上文中出现的Java代码中的startTranscoding方法就可以实现推流;

这时候的推流只是将rtsp流转为rtmp流并推送至nginx中。而产生的rtmp流地址为:

rtmp://xxx.xxx.xxx.xxx:1935/live/appName

这里的xxx.xxx.xxx.xxx是流媒体所在服务器的外网ip;下面是动态获取ip的方法

这里的appName是自定义的我用的是用户账号好摄像头ip去“.”之后的组合字符串

具体效果见传送门:https://blog.csdn.net/gui66497/article/details/78590190

成功!第三步结束!

第四步:

1.前端选择目前免费的H5插件:videojs;此处注意本文头部的注意事项

video.js v5.20.5 下载地址:https://github.com/videojs/video.js/releases/tag/v5.20.5

2.页面引用

注意最后一句 videojs.options.flash.swf = "../js/videojs/video-js.swf"

本文开头的时候说了由于rtmp流属于flv格式,是属于flash的专用格式。这句话的意思就是判断当前浏览器是否支持H5标准或者video.js是否支持当前格式播放,如果不支持H5或者格式不允许,则默认调用flash播放

第五步:

使用完成后记得关闭推流进程,当然如果需求要保存视频,可以不用关闭,一直推送,并转换成MP4保存,关闭进程的方法在FFmpegCommandHandler的源码包里,自己看源码,我文件头步上传的附件里有关闭的代码,时间来不及了了,不写了。

OK!到此一切结束,本文先给正在苦恼海康威视的java同胞们,希望对你们有所帮助!

本文内容纯手打!转载请注明出处,谢谢!

另:本文一切需下载的文件,均可在页头链接处一次性下载完成!

海康威视 java B/S 开发 流程相关推荐

  1. java se开发_JAVA_SE基础——3.Java程序的开发流程

    上一篇,写的是JAVA的环境变量的配置,今天我抽空写篇Java程序的开发流程,下面的教程是我结合书本和毕向东老师的视频写下的心的~ 在没有真正写Java程序前,首先需要了解Java程序的开发过程. S ...

  2. Java微服务开发流程及详细案例

    微服务开发流程及详细案例 文章目录 微服务开发流程及详细案例 一. 微服务示例简介 二. IDEA创建父Maven工程及子项目 2.1 使用IDEA创建Maven项目 2.2创建子项目模块 2.3父项 ...

  3. Java Web项目开发流程

    1.Web项目开发流程图解 2.Web项目开发的细节(转载) 任何一个项目或者系统开发之前都需要定制一个开发约定和规则,这样有利于项目的整体风格统一.代码维护和扩展.由于Web项目开发的分散性.独立性 ...

  4. java二次开发流程,源码修改流程(Hadoop)

    1.困难 在实际业务场景中,目前现有的框架在很大情况下可能不能满足现有的需求,用代码进行二次开发就是最好的选择.在一开始进行的时候,根本无从下手是一方面,因为源码的量特别大,如果是在官方的源码中,基本 ...

  5. java小程序开发流程,一招彻底弄懂!

    一.先来解读:23种设计模式要点 1.单例模式(Singleton Pattern) 2.工厂模式 3.抽象工厂模式(Abstract Factory Pattern) 4.模板方法模式(Templa ...

  6. Java-GUI编程实战之管理系统 Day1【项目开发流程、软件三层架构、项目需求、项目结构分析】

    视频.课件.源码[链接:https://pan.baidu.com/s/13ffqGDzH-DZib6-MFViW3Q 提取码:zjxs] Java-GUI编程实战之管理系统 Day1[项目开发流程. ...

  7. jira集成开发代码_7种JIRA集成可优化您的Java开发流程

    jira集成开发代码 有哪些最佳集成可以用来优化JIRA工作流程? 我喜欢寻找在工作流程中提高效率的方法. 看着那些小小的自动化和流畅的流程,我的脸上露出了微笑. 我知道我并不孤单,有时花费更多的时间 ...

  8. 7种JIRA集成可优化Java开发流程

    有哪些最佳集成可以用来优化JIRA工作流程? 我喜欢寻找在工作流程中提高效率的方法. 看着那些小的自动化和流畅的流程,使我的脸上露出笑容. 我知道我并不孤单,偶尔花更多的时间来获得一点点提升以使其正常 ...

  9. Java笔记11-软件开发流程设计原则

    今天内容: 1.常用的设计原则 2.常用的设计模式 3.常用的查找算法 4.常用的排序算法 1.常用的设计原则(记住) 1.1软件的开发流程 软件开发授权-投标 -> 100万 1. 编写需求分 ...

  10. 海康威视Java开发第一步

    海康威视-Java G-SISI 2017-04-18 海康威视视频开发 还不知道能不能行,但索性到官网上下载了Demo,结果想运行,一直报错,不过还好,最终搞定. 很多人都没弄成功,可能是因为海康做 ...

最新文章

  1. Element-ui学习笔记3--Form表单(二)
  2. Toad for Oracle工具的使用(二)
  3. Executor家族的辨析
  4. 解题报告——蓝桥杯 试题 基础练习 2n皇后问题(附n皇后代码)
  5. python协成_Python协程技术的演进
  6. Beego开源项目 收藏
  7. Java调用Lua脚本(热载实现)
  8. 小小智慧树机器人_中国工厂番外篇丨AGV机器人演绎智能“搬运工”
  9. 解决eclipse端口被占用的问题
  10. LeetCode_Maximum Subarray | Maximum Product Subarray
  11. 推荐好用在线画图网站
  12. matlab colorbar 颜色范围,Matlab对数范围colorbar imagesc
  13. 最新!谷歌浏览器去除CSDN广告插件
  14. 利用Fiddler作为网络代理
  15. 通俗易懂物联网(11):物联网解决方案设计
  16. 测量运放的输入偏置电流 - 实验准备
  17. 解决2021版本idea定位图标消失
  18. [Android开发学iOS系列] ViewController - 圣骑士wind - 博客园
  19. 计算机网络技术在实践中应用,计算机网络技术及在实践中的具体应用
  20. 马斯克辞任CEO,产品经理如何用项目协作软件武装自己?

热门文章

  1. javaEE常用开源框架的认识及概述,带你深入探索Java开发世界
  2. matlab拟合曲线教程,【Matlab】matlab如何使用拟合工具?matlab如何拟合曲线?matlab拟合工具cftool如何使用?...
  3. 网络盘的计算机密码,win10系统映射网络驱动器密码错误的步骤
  4. 业务需求、用户需求和功能需求
  5. 如何直接操作SVN将分支代码合并到主干【转载】
  6. 第七版(谢希仁)计算机网络 知识点总结
  7. 【论文笔记】韩家炜团队AutoPhrase:自动短语挖掘
  8. switchhost,更方便的管理host
  9. Unity渲染管线,初探SRP
  10. 百科不全书之Python进阶