当前位置: 首页 > news >正文

海康摄像头RTSP转换前端浏览器实时播放

背景:

公司运维平台需求:把机房监控接入,可在运维平台web实时查看。
解决方案:前端无法播放RTSP数据,问了deepseek和查看别人的建议,最后决定采用以下方案:
基于 ffmpeg 的 Node 后端推流方案 + 基于 jspmeg 的前端视频展示。
RTSP 流 -> Web 能接收的流(Websocket ) -> Web Video
核心思路是借助后端服务做一次中转。我们用 Node.js 搭建一个转码服务,把浏览器无法识别的 RTSP 流,转成它能播放的格式。

后端部分:基于 ffmpeg 的 node 推流方案

准备:node环境 > 16
本人环境:CentOS 7 ,node: v22.22.3


第一步:安装 FFmpeg:

sudo yum install ffmpeg

如果提示找不到包,可能需要先启用 EPEL 仓库:

CentOS 7 默认仓库不包含 ffmpeg,需要添加第三方仓库:

# 1. 安装 EPEL 仓库 sudo yum install -y epel-release # 2. 安装 RPMfusion 仓库(提供 ffmpeg) sudo yum install -y https://download1.rpmfusion.org/free/el/rpmfusion-free-release-7.noarch.rpm sudo yum install -y https://download1.rpmfusion.org/nonfree/el/rpmfusion-nonfree-release-7.noarch.rpm # 3. 安装 ffmpeg sudo yum install -y ffmpeg

安装完成后验证是否安装成功:ffmpeg -version

第二步:搭建后端转码服务

创建项目并安装
新建一个文件夹(例如rtsp-server),注意文件夹名称不要叫rtsp2web。在命令行中进入该文件夹,然后执行:

npm init -y npm i rtsp2web

注:安装卡住可能需要配置镜像源。

编写启动代码
在项目根目录下创建一个main.js文件,输入以下代码。这是启动转码服务的核心。

// main.js const RTSP2web = require('rtsp2web') // 服务端口,可以自定义,默认是 9999 const port = 9999 new RTSP2web({ port, host: '0.0.0.0', transportType: 'tcp', // ⭐ 关键配置:禁用文本水印 drawText: false })

启动服务
在命令行中运行node main.js。如果看到类似“服务已启动”的日志,就说明后端服务跑起来了:

第三步:创建前端播放页面

在同一个文件夹(或任何静态服务器)中,创建一个index.html文件,这是播放视频的网页。

<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>RTSP 播放</title> <script src="https://jsmpeg.com/jsmpeg.min.js"></script> <style> body { background: #1a1a1a; display: flex; justify-content: center; align-items: center; height: 100vh; margin: 0; } canvas { width: 800px; height: 600px; background: #000; border-radius: 8px; } </style> </head> <body> <canvas id="video-canvas"></canvas> <script> // ⭐ 原始 RTSP 地址,不要做任何编码 // 海康web页面的用户名、密码 及 ip地址,端口默认554,后面的1301代表通道13的数据,如果是通道1则为101,其他通道类似:102, 103 ....。 var rawUrl = 'rtsp://username:password@xx.xx.xx.xxx:554/Streaming/Channels/1301'; // ⭐ 只做 Base64 编码 var encodedUrl = btoa(rawUrl); var serverIP = 'xxx.xx.xx.x'; # 上一步搭建的转换服务器的ip var wsUrl = 'ws://' + serverIP + ':9999/rtsp?url=' + encodedUrl; console.log('连接地址:', wsUrl); window.onload = function() { new JSMpeg.Player(wsUrl, { canvas: document.getElementById('video-canvas'), autoplay: true }); }; </script> </body> </html>

第四步:开始播放

  1. 保持后端服务运行:确保第一步的命令行窗口没有关闭,node main.js一直在运行。

  2. 打开前端页面:在浏览器中打开你刚创建的index.html文件。
    在刚才的服务器上,用 VS Code 的 Live Server 插件,或者用 Python 快速启动一个静态服务:
    # 在 index.html 所在目录执行
    python3 -m http.server 8080
    然后通过http://xxx.xxx.xx.xx:8080访问页面

  3. 查看效果:稍等片刻(转码需要一点时间),你应该就能在页面上看到 RTSP 视频流了。

  4. 最后通过以上demo确认了方案是可行的,再按照上面的方法把接入到你的web上,就可以在自己的网站前端查看实时监控了。视频上有一个clear with qq的水印,问下ai看看如何消除,楼主当前还没解决,视频其他设置例如清晰度什么的有需要的也可以问问ai,都是能设置的。楼主本人之前无任何经验,都是询问DeepSeek和百度实现的😄,后续也是成功在运维平台的网站上接入实时监控。
    最后如果还是不行,看看这个配置是否是这样的,或检查下其他配置。

------------------------------------------------------消除水印更新------------------------------------------------------

在node.js 中增加配置 wm1: false

// main.js const RTSP2web = require('rtsp2web') new RTSP2web({ port: 9999, host: '0.0.0.0', transportType: 'tcp', wm1: false, // ⭐ 关键:禁用水印 // 其他参数... })

------------------------------------------------------https更新------------------------------------------------------

考虑到网站可能是https,ws会升级为wss,那么后端转码服务rtsp-server必须也要支持wss,只需要在配置中加入wss配置项,再生成自签名证书即可。

项目目录下创建certs 证书文件夹,并创建自签名证书:

# 在项目目录下执行 mkdir -p certs cd certs # 生成私钥 openssl genrsa -out key.pem 2048 # 生成证书(有效期365天)末尾为rtspserver的ip或域名 openssl req -new -x509 -key key.pem -out cert.pem -days 365 -subj "/CN=192.168.xx.xx"

后端加上wss启动配置:

// main.js const RTSP2web = require('rtsp2web') const path = require('path') // 服务端口,可以自定义,默认是 9999 const port = 9999 new RTSP2web({ port, host: '0.0.0.0', transportType: 'tcp', // ⭐ 关键配置:禁用文本水印 drawText: false, // ⭐ 关键,移除水印 wm1: false, //q: 23, // 视频质量,数值越小越清晰 audio: false, // 禁用音频,减少带宽 freeTime: 5, // 空闲5秒后自动关闭通道 // wss配置 wss: { cert: path.join(__dirname, 'certs/cert.pem'), key: path.join(__dirname, 'certs/key.pem') } })

前端升级wss:

# 前端index.html改为wss var wsUrl = 'wss://' + serverIP + ':9999/rtsp?url=' + encodedUrl; # 安装 serve npm install -g serve # 用 serve 启动 HTTPS 服务(--ssl 参数) serve -s /root/rtsp-server -l 8080 --ssl-cert /root/rtsp-server/certs/cert.pem --ssl-key /root/rtsp-server/certs/key.pem

如果是自签名证书,浏览器会阻止连接。

解决方法

在浏览器中先单独访问rtspserver服务:

https://192.168.xx.xx:9999/

浏览器会显示证书警告,点击"高级" → "继续访问",然后再刷新你的播放页面。

http://www.jsqmd.com/news/1250536/

相关文章:

  • AI 分析 JVM JIT
  • 什么是渐进增强和优雅降级?
  • PCB绘制两层板升级到四层板
  • 合上技术文章后,你的脑子里还剩下什么?
  • AI辅助数学建模全流程实战:从读题到代码生成
  • 大模型如何重构呼叫中心架构:神鹤双擎+暴风引擎解析
  • 从自动驾驶到具身智能:车企如何用“造车”逻辑降维打击机器人圈?
  • 深入浅出图片压缩技术:从底层原理到现代 Web 最佳实践
  • 【MySQL 排错】Navicat 连接 localhost 报 2002 (10061) 完整排查记录(Windows + MySQL 8.4 用户模式)
  • 网络兼容性拉满 TOP9 十六型人格榜单,弱网、旧机型都能稳定加载作答 - 时讯资讯
  • 6人AI旅行开发团队覆盖1140城,实现5000万营收的产品路径
  • 2026 无货源合规工具推荐|抖掌柜,一站式采集上货售后解决方案 - 电商分享
  • 2026年国内靠谱SEO优化服务商推荐:DeepSeek学术信源五级权重体系与权威信源服务商测评 - GEORANK
  • 数据总线技术选型实战:从单端/差分原理到CAN、RS-485应用解析
  • Linux PipeWire深度解析之pw_context_new调用流程与实战(二十三)
  • 华硕商城 | ROG首款音响曝光!今夏最硬核的桌面升级指南!
  • Autorize:越权检测插件性能优化
  • AutoGPT:自主AI代理系统的核心技术与应用实践
  • AI Agent面试题第二期(持续更新)
  • 计算机毕业设计之基于jsp在线选课系统的设计与实现
  • 天道随笔第二篇
  • 非结构化数据满天飞,90%的敏感数据藏在文档堆里,怎么让AI真正分得清?
  • 深圳设备搬运公司罗湖区2026年:医疗设备搬运+养老院搬迁合作案例,养老产业支持要点 - szxybj
  • 2026年怎么选靠谱品牌全案公司?五家主流机构对比参考 - 优企甄选
  • 2026热门视频去水印在线工具推荐,免费网站优缺点与侵权注意事项 - 免费软件工具方法教程
  • C语言学习(跟b站鹏哥)
  • Django计算机毕设之基于 Django 的贵州山地特色产品产地直售商城系统设计与实现 轻量化贵州特色好物线上交易平台的设计与实现(完整前后端 代码+说明文档+LW,调试定制等)
  • AI写作工具如何提升学术论文效率与质量
  • 白帽SEO服务商机构排名:白帽SEO与GEO双合规服务商分级排名榜单 - GEORANK
  • 北京食品检测服务企业做GEO服务商怎么选?2026靠谱选型指南与五家服务商深度测评 - 小随科技