电话+V:159999-78052 ,欢迎咨询海康摄像头用浏览器用的什么插件,[python实用课程],[C++单片机原理],[C#、PHP网站搭建],[Nodejs小程序开发],[ios游戏开发],[安卓游戏开发],[教会用大脑用想法赚钱实现阶层跨越]
在监控设备广泛应用的今天,RTSP传输协议是监控行业标准,但主流浏览器如Chrome、Firefox和Edge并未原生支持。面对这一挑战,有三种常见的解决方案:
1.服务器端转码播放:尽管这种方法兼容性好,但延迟高,服务器压力大,尤其在高分辨率和多路视频播放时,体验欠佳,且对关键应用可能构成风险。
2.前端WASM技术:虽然能在现代浏览器中实现,但受限于硬件性能,中低配置设备播放效果差,且不支持硬件加速,多路RTSP播放能力有限。
3.依赖插件的方案:在NPAPI插件时代,可以实现低延迟和多路播放,但随着浏览器升级,兼容性问题出现。猿大师中间件提供了一个创新的解决方案:
使用VLC网页播放小程序,模拟ActiveX或NPAPI插件,可在Chrome等浏览器的高版本中直接播放RTSP流,充分利用本地硬件加速,支持25路同时播放,兼容性广泛。该方案具有以下优势:
部署时,只需在终端电脑安装VLC网页播放小程序和中间件,过程相对简单。总的来说,VLC网页播放小程序是安防行业在网页端播放RTSP流的理想选择,兼顾了性能、成本和兼容性。
最近公司项目需要在web上实时播放摄像头视频。但是早前由于html发展太慢。浏览器不支持。各大视频厂商基本都是开发扩展插件来实现。但是目前各大浏览器都有安全机制,基本不允许额外安装插件等,
百度了很多。很多都是基于ie,,使用active插件实现,而我们公司项目优化是基于谷歌,,,,而且不能使用插件(用户体验)。
所以整理一套。无需安装插件,在任意浏览器实时播放摄像头视频
正文:
部署nginx、ffmpeg转为rtmp、利用video.js播放,无需浏览器安装插件
摄像头采用大华的,这里提供一个大华摄像头ip搜索软件(用于检测同一网段下在线摄像头设备信息)
地址:
https://download.csdn.net/download/u011877155/10765657
环境:windows服务器
vcl视频播放器
https://download.csdn.net/download/u011877155/10765708
1、查看摄像头信息:首先打开上面ip搜索软件,获取摄像头ip,查看主码流,视频编码等。如果知道摄像头地略过
2、确认提供流是否能够播放:打开vlc播放器【媒体--》打开网络串流,输入流地址】。这里大华提供的rtsp流地址,
【rtsp://账号:密码@IP地址:544/cam/realmonitor?channel=1subtype=0\】【端口号默认544,通道号channel默认1,主码流为0(即subtype=0),辅码流为1(即subtype=1)】
3、将nginx、ffmpeg解压后放置c盘根目录。配置环境变量path:C:\ffmpeg\bin
相关文件地址:
https://download.csdn.net/download/u011877155/10765746
4、启动nginx【运行文件中的exe文件,运行一闪之后任务管理器查看nginx.exe进程存在即可】
4、验证是否配置成功:cmd输入ffmpeg提示一大段话即可
4、cmd中输入
ffmpeg-i"rtsp://admin:dsgbridge@192.168.1.102:554//cam/realmonitor?channel=1subtype=0"-vcodech264-fflv-an"rtmp://localhost/live"
回车后控制台持续打印转流信息
5、打开vcl播放器,播放rtmp://localhost/live,看看是否成功
这样转流步骤就完成了,下面集成进java即可
1、设置项目启动自动启动ngix服务,创建线程,项目启动时启动。建议不要集成,直接在服务器启动一次即可
publicclassnginxextendsThread{publicvoidrun(){Stringcmd="cmd/cc:cdnginxstartnginx";//Stringstop="cmd/cE:cdnginxnginx.exe-squit";Runtimerun=Runtime.getRuntime();try{java.lang.Processprocess=run.exec(cmd);InputStreamin=process.getInputStream();System.out.println(cmd);while(in.read()!=-1){System.out.println(in.read());}in.close();process.waitFor();System.out.println("nginx启动成功");}catch(IOException|InterruptedExceptione){e.printStackTrace();}}publicstaticvoidmain(String[]args){newnginx().start();}}2、启动转流代码
附上编写好的工具类
https://download.csdn.net/download/u011877155/10765835
在javaweb中直接调用
publicstaticMap<String,String>maps=newHashMap<>();publicstaticFFmpegManagermanager=newFFmpegManagerImpl();//启动视频转码@RequestMapping(value="/zhuanma")publicvoidzhuanma(Stringip,Stringcode,HttpServletResponseresponse,HttpServletRequestrequest){try{Map<String,String>map=newHashMap<>();map.put("appName",code);//code为客户端编码map.put("input",""rtsp://admin:dsgbridge@"+ip+"/cam/realmonitor?channel=1subtype=0"");map.put("output",""rtmp://localhost/live/"");map.put("codec","h264");map.put("fmt","flv");map.put("fps","25");map.put("rs","640x360");map.put("twoPart","0");//执行任务,id就是appName,如果执行失败返回为nullStringid=manager.start(map);//将转流放入静态map中用于关转流maps.put(code+ip,id);//manager.stop(id);System.out.println(code+ip+"流已开启");}catch(Exceptione){e.getStackTrace();}}//关闭转流@RequestMapping(value="/guanbi")publicvoidguanbi(Stringcodeip,HttpServletResponseresponse,HttpServletRequestrequest){try{manager.stop(maps.get(codeip));System.out.println(codeip+"流已关闭");}catch(Exceptione){e.getStackTrace();}}后端完成,下面是前端展示
引入js
<scriptsrc="
http://vjs.zencdn.net/5.20.1/video.js"></script>这是在线的,局域网的话自己百度下载一个
<videoid="video-div"class="video-jsvjs-default-skin"controlsposter="${ctx}/resources/css/bj.jpg"data-setup="{}"><sourceid="video"src=""type="rtmp/flv"></video>src写入rtmp://localhost/live流即可,code客户端编码可以随意输入,我这了是要区分不同浏览器客户端打开不同ip摄像头的记录,用于关闭对应流,节省资源,记得启用浏览器flash。。。好像flash也要被淘汰,但是目前只能这样
注:暂未将nginx、ffmpeg等文件集成在我提供的jar中,可以将这这2个文件集成到jar,这样只需要一个jar,全部搞定。不过没啥难度,懒得弄了。
下面放上jar的源码。提供大家修改优化。
https://download.csdn.net/download/u011877155/10765896,
没csdn积分的可以给我留言,我分享给你
电话+V: 159999-78052
机构由一批拥有10年以上开发管理经验,且来自互联网或研究机构的IT精英组成,负责研究、开发教学模式和课程内容。公司具有完善的课程研发体系,一直走在整个行业发展的前端,在行业内竖立起了良好的品质口碑。