数字营销 · Web开发 · 基础设施

工厂监控如何接入网站,实现实时视频展示?

如何将工厂监控画面接入企业网站,实现实时视频展示?本文介绍从摄像头、NVR、RTSP 视频流,到 H.264 转码、HLS 和网页播放的完整部署方案,并介绍服务器部署、性能优化以及多摄像头接入等实际问题。

随着国内制造能力不断提升,越来越多工厂已经具备比较完善的基础设施和标准化生产管理体系。以前企业网站展示工厂,主要靠图片和宣传视频。但现在,很多企业已经不满足于这些方式,而是希望把真实的生产过程直接展示给客户。

比如在网站上放几个实时画面,让客户可以看到工厂正在生产、设备正在运行。这类展示方式看起来不复杂,但从摄像头到最终在网页上播放,中间其实需要解决几个问题摄像头视频流怎么获取、网络怎么打通、视频如何转码,以及最后怎么接入网站。

这篇文章就按照实际部署流程,讲一下如何搭建一套工厂监控网页直播系统。

企业官网直播系统
企业官网直播系统

摄像头尽量选择支持 RTSP 的专业设备

首先是监控设备。如果计划以后把监控画面接入网站,建议优先选择开放性比较高的安防级摄像头,并确认设备支持 RTSP 协议。比较常见的品牌有:

  • 海康威视
  • 大华
  • 宇视

这类设备通常都支持标准的视频流协议,方便接入第三方系统。不太建议使用家用监控设备。很多家用摄像头主要依赖自己的 App 或云平台,系统相对封闭,有些设备无法直接获取标准视频流。这样后面想接入网站,就会比较麻烦。

所以采购设备的时候,最好先确认一件事:能不能获取 RTSP 视频流。只要这个基础条件满足,后面的方案基本都可以继续做。

NVR 和摄像头的网络结构需要提前处理

很多工厂都会使用 NVR 集中管理摄像头。这里有一个比较容易踩坑的地方。不少 NVR 默认会把摄像头放在自己的内部网络里,由 NVR 充当摄像头网关。平时通过 NVR 查看和存储视频没有问题,但外部服务器可能无法直接访问摄像头。

海康威视NVR网络模式配置
海康威视NVR网络模式配置

而我们这个方案,需要程序直接拉取 RTSP 视频流。所以在配置网络时,要确保摄像头可以被视频处理服务器访问。可以根据实际网络环境进行配置,例如:

  • 给摄像头配置独立 IP 地址
  • 打通服务器和摄像头之间的网络
  • 必要时通过端口映射访问
  • 多网口 NVR 可以根据实际情况调整网络配置

如果使用多网口 NVR,在一些网络结构下也可以使用“网络容错”模式,让服务器直接访问摄像头网络。不同工厂的网络环境不一样,具体配置方式也会不同。

但最终只需要满足一个条件:运行视频处理程序的服务器,能够直接访问摄像头的 RTSP 视频流。

获取摄像头的 RTSP 地址

网络打通之后,就可以获取摄像头的视频流地址。不同品牌、不同型号的 RTSP 地址格式会有区别。以海康威视部分设备为例,一般类似这样:

rtsp://用户名:密码@IP:554/h265/ch1/main/av_stream

其他品牌可以查看设备说明,或者直接咨询厂家。

现在很多监控设备默认使用 H.265 编码。H.265 的优点是比较节省带宽和存储空间,但浏览器对它的直接播放支持并不理想。

所以拿到 RTSP 地址之后,还需要经过一层处理,才能最终放到网页上播放。这里可以直接使用我自己开发的 pullStream。它会持续拉取摄像头的 RTSP 视频流,完成 H.265 到 H.264 的转码,并进一步生成 HLS 的 m3u8ts 文件,供网站前端播放。

[下载 pullStream]

在软件中配置视频流

下载后,编辑软件目录中的streams.yaml文件,把摄像头的视频流信息写进去,例如:

- stream: "rtsp://admin:password@192.168.30.107:554/h265/ch1/main/av_stream"
hlsname: "cam1"

其中:

stream 是摄像头的 RTSP 地址。

hlsname 是后面生成网页视频时使用的名称。

如果需要接入多个摄像头,可以继续增加:

- stream: "rtsp://admin:password@192.168.30.107:554/h265/ch1/main/av_stream"
hlsname: "cam1"
- stream: "rtsp://admin:password@192.168.30.108:554/h265/ch1/main/av_stream"
hlsname: "cam2"

需要注意的是,多个摄像头的 hlsname 不能重复。否则生成视频文件时可能发生冲突。

视频处理服务部署在哪里?

这套方案中,比较消耗资源的部分是实时视频处理。尤其是 H.265 转 H.264,会持续占用 CPU。所以我不建议把视频处理服务和企业网站部署在同一台服务器上。如果网站本身也有一定访问量,两边同时运行,容易互相影响。一般可以根据实际情况选择两种部署方式。

有公网 IP 的情况

可以直接在工厂本地部署。例如使用一台电脑或者独立服务器运行视频处理程序。这种方式的好处是摄像头就在内部网络中,访问视频流比较直接。

没有公网 IP 的情况

可以使用独立云服务器。然后通过相应的网络方式,让云服务器能够访问工厂内部的摄像头视频流。具体采用 VPN、专线还是其他方案,要根据现场网络环境决定。

服务部署完成后,把软件放进 Web 服务目录,双击运行 pullStream.exe 即可。如果需要长期运行,也可以结合 Windows 计划任务,实现开机自动启动。

怎么把监控视频变成网页视频的

pullStream.exe 启动后,会读取 streams.yaml 中的配置。然后依次完成几个操作:

先拉取摄像头的 RTSP 视频流。

如果摄像头使用的是 H.265,则转换成浏览器兼容性更好的 H.264。

然后将视频切片,生成 HLS 格式的视频文件。

最终会生成:

.m3u8
.ts

这些文件可以在 resource 目录中查看。

.m3u8 可以理解为播放列表。

.ts 则是不断生成的视频片段。

到这一步,原本只能通过监控软件查看的 RTSP 视频,就已经转换成可以在网页上播放的视频流了。

网站端如何播放?

网站前端需要引入 hls.js以支持hls播放。然后使用 HTML5 的 video 标签加载对应的 .m3u8 地址。这样用户打开网站时,浏览器就会不断读取最新生成的视频片段,实现接近实时的播放效果。

如果接入多个摄像头,还可以继续做一些功能,例如:

  • 不同区域摄像头切换
  • 多画面同时展示
  • 自动轮播不同摄像头
  • 全屏查看
  • 根据不同客户开放不同画面

例如一家工厂可以分别展示:生产车间、装配区域、仓库、设备运行区域等。这些内容不需要专门拍摄,也不需要后期剪辑,只要摄像头正常运行,网站上的画面就可以持续更新。

实际运行时,主要消耗哪些资源?

从我实际测试的情况来看,单路摄像头的带宽通常可以控制在比较低的水平,很多情况下低于 500kbps。真正需要注意的是 CPU。特别是摄像头采用 H.265 编码,需要实时转成 H.264 时,转码会持续消耗计算资源。如果摄像头比较多,可以通过降低码率减少资源消耗。例如监控画面只是用于网站展示,没有必要保持特别高的清晰度。

适当降低:

  • 分辨率
  • 视频码率
  • 帧率

通常就能明显减少 CPU 和带宽压力。如果服务器支持硬件解码,也可以利用硬件加速降低 CPU 消耗。

如果网站访问量比较大,还可以接入 CDN。这样用户观看视频时,大部分访问由 CDN 分发,而不是所有人都直接请求视频处理服务器。

现在很多企业也在做直播,但很多直播内容只放在抖音、视频号等第三方平台。下一步我准备继续分享一个相关的方案:

如何把正在第三方平台进行的直播,无缝同步到企业网站,在不影响原平台直播的情况下,让网站也拥有自己的直播入口。

评论0

欢迎分享你的看法,也欢迎补充不同的实践经验。