随着国内制造能力不断提升,越来越多工厂已经具备比较完善的基础设施和标准化生产管理体系。以前企业网站展示工厂,主要靠图片和宣传视频。但现在,很多企业已经不满足于这些方式,而是希望把真实的生产过程直接展示给客户。
比如在网站上放几个实时画面,让客户可以看到工厂正在生产、设备正在运行。这类展示方式看起来不复杂,但从摄像头到最终在网页上播放,中间其实需要解决几个问题摄像头视频流怎么获取、网络怎么打通、视频如何转码,以及最后怎么接入网站。
这篇文章就按照实际部署流程,讲一下如何搭建一套工厂监控网页直播系统。

摄像头尽量选择支持 RTSP 的专业设备
首先是监控设备。如果计划以后把监控画面接入网站,建议优先选择开放性比较高的安防级摄像头,并确认设备支持 RTSP 协议。比较常见的品牌有:
- 海康威视
- 大华
- 宇视
这类设备通常都支持标准的视频流协议,方便接入第三方系统。不太建议使用家用监控设备。很多家用摄像头主要依赖自己的 App 或云平台,系统相对封闭,有些设备无法直接获取标准视频流。这样后面想接入网站,就会比较麻烦。
所以采购设备的时候,最好先确认一件事:能不能获取 RTSP 视频流。只要这个基础条件满足,后面的方案基本都可以继续做。
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 的 m3u8 和 ts 文件,供网站前端播放。
在软件中配置视频流
下载后,编辑软件目录中的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
欢迎分享你的看法,也欢迎补充不同的实践经验。