### 视频监控前后端组件选型背景

在遍地都是摄像头的今天，往往需要在各种信息化、数字化、可视化等B/S系统中集成实时视频流播放等功能，海康、大华、华为等厂家摄像头或录像机等设备一般也都遵循安防行业标准，支持国际标准的视频主流传输协议RTSP（实时视频流）输出，不幸的是Chrome、Edge、Firefox等新一代浏览器从2015年开始不再支持NPAPI插件加载运行，直接导致RTSP视频流从此无法在高版本浏览器网页中原生播放。对于绝大部分没有影视频处理经验的前、后端工程师来说是一个非常棘手的问题，专业性强，技术门槛高，而对做B/S系统集成的大多数公司来说，为了这部分的功能单独招聘专职音视频研发人员来负责的话，成本高昂不说，还未必做的好。

当前主流版本浏览器既然已都不支持原生播放RTSP流，为了能够播放RTSP流，不少公司各显神通，出了各种商用及开源方案，不过总的说来就是在后端先转码再转流给前端播放的方案，这也是号称无插件的技术方案。对浏览器可直接硬件加速播放的H.264编码视频流，现在一般是在服务器端将RTSP流转为WebRTC通讯标准的视频流，前端接收后可通过Vedio标签播放；对于浏览器不能支持加速播放的其它编码视频流，要么在后端先转流转码为H.264编码后按前述方案播放，要么后端转流到前端，前端再通过对应编码的WASM程序利用CPU软解码播放。转流到前端WASM转码播放时，即使配置了性能不错的电脑，受限于WASM的固有缺陷，比如多线程支持差、能使用的内存大小始终受限，无法充分利用终端电脑显卡的硬件加速能力(GPU)，这就导致同时播放多路或高清RTSP流时也会比较吃力，而且大量占用终端电脑的CPU和内存资源，其它操作基本无法进行，对音视频格式的兼容能力也很有限。

虽然无插件播放方案能够播放出画面，但是往往延迟高，高分辨率视频流基本上都在数秒之久，在一些对延迟敏感的场合客户要求的是毫秒级延迟，显然无插件技术方案是无法满足的；而且首屏画面显示慢，这就导致切换播放源时迟迟看不到画面出来，用户体验很差；况且无插件技术方案，需要在后端或前端持续运行高负荷运转的视频转码转流服务，也有部分采用WebSocket直接从摄像头拉流播放的方案，不过需要设备支持才行，适用性不够。如果摄像头路数多、高清甚至是4K视频或需要在线播放的终端比较多，服务器的压力就会很大，播放卡顿、花屏、黑屏、断播等现象就会时常出现，很难让客户满意。为了解决这些问题，相关硬件、软件的投入和持续不断的带宽占用往往也让客户难以接受。现在越来越多的客户追求高大上的视频播放效果，采用高清摄像头的越来越多，播放显示器1080P已是低配，2K甚至4K大屏正在成为主流之选。这种无插件技术方案，在中高配的屏幕上如果只能播放出慢如蜗牛的画面，想不让客户吐槽实在是太难。

一个好的RTSP视频流网页播放方案，首先是要能做到持续稳定播放多路视频，还需同时支持H.264、H.265编码及其它编码格式、兼容RTSP、RTMP、HLS等流协议播放，最核心的是要做到低延迟、切换画面快，最好能支持高清甚至4K视频流畅播放。另外就是对当前主流版本的浏览器兼容能力要强，多路播放时分屏样式多，还有就是开发接口丰富并可定制，如果还能做到开源或采用免费的主流播放引擎实现，那就最好不过了，毕竟开源在商业领域的应用越来越多，是大趋势。从系统集成商的角度来说，尽可能采用成熟开源工程来使用意味着有更多的自主可控机会来降低整个系统的实施风险。

![WX20240102-170635](assets/imgs/WX20240102-170635.png)