由于公司项目需求,需要做摄像头,门禁,刷卡取电等功能。我主要负责硬件与javaweb平台对接这一块,下面说说我对java与硬件对接的总结。
一,海康的监控摄像头。
目前国内的监控摄像头提供的摄像头一般只支持 rtsp协议的数据流,只有少部分公司支持rtmp协议的视频数据流。由于flush插件只支持rtmp协议,所以,在这一点上,要做b/s结构的架构,是不能直接调用 rtsp 视频数据流的。要在浏览器上播放海康监控视频,只有两种方式。
1,vlc控件,或activity控件能直接播放 rtsp 流。其中,vlc控件支持火狐浏览器,ie9及以上内核浏览器。谷歌浏览器不支持。
2,用ffmpeg做转流处理,将rtsp流 推送到 nginx-rtmp服务器上,这样所有安装flush的浏览器都能播放。
以上两种方式,各有利弊。
1,用控件的方式
利:开发方便,不需要搭建nginx-rtmp服务器,播放流畅。
弊:搭建流媒体服务器(nginx-rtmp服务器)硬件成本高,因为视频服务器需要处理的视频数据太多,要求服务器网速,cpu性能强。
2,用 ffmpeg + nginx-rtmp 转流 的方式
利:几乎支持所有安装flush插件的浏览器,用户体验更好
弊:成本和开发难度更大(其实也不大,只要公司能提供性能好的流媒体服务器)
二,java调用dll文件
1,配置环境永远是一个问题,大致有4中方法调用dll。
(1) 将dll文件放在jdk/jre/bin 下 ,注意 是jdk下面的jre中,有关jdk,jre的知识,自行百度。
(2)将dll文件放在tomcat 里的bin文件里
(3)在 path ,java环境变量中配置
(4 ) 在实例接口是,写dll文件的绝对或相对路径
个人建议,就放在jdk/jre/bin下,因为简单
总结,java调用dll文件,有jni和jna两种方式,其中jna是对jni的简单封装框架。
在运行时,经常会遇到 "“不安全的动态链接库异常”,你可以尝试,重启电脑以及检查dll文件和jdk是否同时64位或32位的。