海康威视 java B/S 开发 流程

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

注:本文中所有的使用的代码和工具以及安装包的下载地址如下(特别注意!!!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同胞们,希望对你们有所帮助!

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

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

 

 

 

 

 

 

 

 

 

 

已标记关键词 清除标记
<p style="font-size:14px;"> <span style="font-size:small;">随着国内IT事业的兴起,越来越多的小伙伴也投身到了开发这个相对高薪的行业来。很多同学进入的方式都是零基础通过培训或者看频自学,在工作一两年后,发现由于自己的基础太薄弱,想进一步提高自己的能力变得非常 困难。</span> </p> <p style="font-size:14px;"> <span style="font-size:small;">现在市面上的频教程,主要有一下两类:第一类是纯理论的,比如框架、算法、虚拟机等;另一类是Demo级别的项目,如各大培训机构的项目课程。从业这么多年,学习了大量的频教程,也跟很多毕业三年左右的程序员做过交流,但一直没发现一套特别好的教程,能让小伙伴们从零基础一直到高级进阶,持续得到学习。在工作中,他们也反馈,频教程各种高大上的技术堆砌,而在实际开发中呢,大部分技术都没有用到,就算是用,也完全不是像教程中那么用的。在面试中,你跟夸夸其谈十分钟,面试官一句,请问你在项目中是怎么用这个技术的,在使用的时候有什么问题?遇到这样的问题,大部分同学们都直接熄火,完全不知所措,为啥呢,因为他在项目中根本没有用过这个技术,只是看了文档、频,只是跟着教程做了Demo。而技术跟业务如何结合,这应该是大部分同学在工作中最薄弱的环节。甚至,有些同学会唯技术论,面对公司的业务,会去抱怨公司用的技术不新,认为业务不重要。但我要纠正的是,技术的出现本来就是为业务服务的,离开业务谈技术那就是耍流氓。</span> </p> <p style="font-size:14px;"> <span style="font-size:small;">早在两年前,我就萌生了这样的想法,既然国内的环境造成了面试修地球,上班拧螺丝的情况,那么我能不能结合我自己做的真实项目,脱敏后给大家分享出来,让各位同学能有一个真实的项目环境去边学边提高,所以,也就有了《从0开始用Java做"智慧农业物联网"》课程的诞生。</span> </p> <p style="font-size:14px;"> <span style="font-size:small;">学习本课程的基本要求:有Java基础,学习过Spring,SpringMVC,Mybatis框架,做过简单项目以上的同学均可学习。但并不代表,本课程就是个入门教程,对于有开发经验的同学们,物联网这个行业是个朝阳产业,也可以说是未来十年发展的蓝。那我相信,有实体经济支撑的行业绝不会像互联网行业有那样大的泡沫,也绝不会让你工作的没有安全感。对于有志于从事物联网相关工作的同学,对于想从各方面提升自己的各位同学们来说,本课程也非常的适合你们去学习。</span> </p> <p style="font-size:14px;"> <span style="font-size:small;">我从12年就开始接触物联网项目,做过智慧猪场、智慧农场、猪联网、云医疗等相关项目,也做过互联网行业,兜兜转转一圈下来,自认为还是积累了很多的经验和教训,那我都会在我课程中对这样的知识有所分享。</span> </p> <p style="font-size:14px;"> <span style="font-size:small;">同时,在这个课程中,我既是产品,又是设计,还是开发,还是运维,也是客户,我会从一个项目的全生命周期给大家进行介绍,并且都有相关的落地方案。这样,同学们的眼光就会有所延展,不会仅仅局限在开发这一亩三分地上。</span> </p> <p style="font-size:14px;"> <span style="font-size:small;">本课程的亮点:我只能说,亮点很多,很多。。。</span> </p> <p style="font-size:14px;"> <span style="font-size:small;">核心如下:产品经理眼中的产品、数据库设计、如何把一个需求变成代码、如何跟物联网设备交互、如何上线一个项目、在需求变更后如何做到不跟产品撕逼。。。</span> </p> <p style="font-size:14px;"> <span style="font-size:small;">看到了吧,我不会只让你知道那些高大上的技术点,我向你们学会的是如何做一个完美的产品!</span> </p> <p style="font-size:14px;"> <span style="font-size:small;">在这个课程中,你会看到太多太多跟其他教程不同的地方,你看到的不是Demo级别的案例,你看到的绝对是一个工业级别的实现方案。我也希望通过这个课程,同学们能进一步升华自己的界,你所站的高度,你看问题的不同角度,将决定未来你成长的上限。</span> </p> <p style="font-size:14px;"> <span style="font-size:small;">对于本课程的成长忠告:本课程的录制会持续很长时间,是的,你没看错,是很长时间,目前我的预期,起码是在年底之前不会结束,为什么要这样安排,因为我想要分享的内容实在太多,我也不想对课程进行拆分,也不想草草结束,所以,你所能得到的收获一定会足够大,他没有终点。。。</span> </p> <p style="font-size:14px;"> <span style="font-size:small;">最终达到的效果:在业务中学技术点,通过技术点让业务变得更优美!</span> </p>
相关推荐
©️2020 CSDN 皮肤主题: 1024 设计师:白松林 返回首页