20230228更新

我把node express的方案代码整理了下,可以兼容大华和海康威视。下载代码后安装README.md里面的步骤执行下就能看到了。效果如下,有问题可以私信我。代码传送门:使用vue在web网页端实时播放rtsp摄像头流,兼容大华和海康威视摄像头,低延迟(小于2秒),效率高可同时播放多个视频流。稍加改动可以做成监控软件,或者直播软件。

rtsp网页播放 java web页面播放rtsp_视频流


由于项目需要,对web端播放大华/海康的摄像头视频流做了点研究:在web页面中播放rtsp直播数据流方法7 ways to stream RTSP on the page使用flv.js做直播在chrome中呈现RTSP整合vxgPlayer使chrome支持vxg_media_player播放rtsp视频 总结下想在浏览器端播放摄像头的视频流有以下几个方案: 1.被淘汰的:VLC插件,flash插件 2.即将被淘汰的:VXG 播放器 3.可以丝滑播放的:streamedian方案,bilibili/flv.js方案

第一类方案中,我尝试过flash插件,效果还可以,延迟低,缺点就是flash每次要允许,而且已经彻底被淘汰了

第二类方案,我试了下,默认最新版的chrome浏览器是不支持的,不过可以开启Native Client后是可以的。但我实测能播放视频流,但非常卡顿

rtsp网页播放 java web页面播放rtsp_javascript_02

第三类方案是目前看来比较合理的,其中streamedian方案是要收费的,我没有进一步尝试。下面说下B站的flv方案,这个方案核心的逻辑就是把rtsp流通过ffmpeg转换为flv,然后再用flv.js来播放。那这个方案的核心就是如何用ffmpeg进行转换。

这里有两个解决方案:

1.使用livego,这里有介绍使用flv.js做直播。我之前用它在项目上做了一段时间,可以实现,延迟小,但画面有时候会模糊,有时也会加载失败

2.使用node express。这个方案的好处是,前端传递的是rtsp地址,不像第一个方案里面需要后端先生成flv文件,然后访问。这个方法最终访问的是ws的地址,以webscoket的形式传递数据,目前来看这种方案更适合,上面提到的streamedian本质上也是将rtsp转成webscoket流进行的。

下面是实现的效果:

rtsp网页播放 java web页面播放rtsp_rtsp网页播放 java_03

使用这个方案,完美实现了在浏览器中播放,无论是播放清晰度,延迟性和摄像头切换等各个方面表现都非常好。


2023-08-22

最近拿这个做了个简单的监控软件,可以用在智慧农业,智慧畜牧业等行业,有兴趣的老板可以私聊沟通下,这里有个示例视频。

rtsp网页播放 java web页面播放rtsp_视频流_04