尧图网站建设 尧图网络
  • 首页
  • 关于我们
  • 服务项目
  • 案例展示
  • 建站流程
  • 资讯中心
  • 联系我们
首页/资讯中心/详情

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

海康摄像头RTSP转换前端浏览器实时播放
📅 发布时间:2026/7/23 22:49:01

背景:

公司运维平台需求:把机房监控接入,可在运维平台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/

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

相关新闻

  • 谁还在硬啃组态屏?我直接喂饭
  • PCB绘制两层板升级到四层板
  • AI辅助数学建模全流程实战:从读题到代码生成

最新新闻

  • 支付宝、微信、美团AI助手登场,超级App如何借AI重塑交互逻辑与商业模式?
  • 2026年图片去水印工具怎么选?免费在线与AI去水印软件实测 - 免费软件工具方法教程
  • 2026年做跨境电商,很多人不知道这3个隐形关联流量入口,正被头部大卖悄悄吃透(实战复盘)
  • 华为MetaERP EBS 里 OU 本身不是 “法定报表主体”,不能直接在 GL 层按 OU 隔离余额;要单独出具某 OU 的三大表,核心是:把 OU 维度放进科目弹性域段 → 子模块(AR/AP/
  • AI会议纪要不是“转录完事”:2024最新Gartner评估报告显示,仅12%企业实现行动项自动追踪闭环
  • 【RT-DETR涨点改进】CVPR 2026顶会| 独家卷积+Mamba改进篇| 引入AKCMamba-YOLO中的CAKCMamba模块,助力小目标检测、遥感目标检测任务,高效涨点

日新闻

  • 亨得利盐城维修点在哪里?手表维修保养地址指南**公示(2026年7月最新) - 亨得利官方
  • 提升.NET API安全性:Boxed.AspNetCore.Swagger认证授权最佳实践
  • 帝舵佛山**网点地址更新:2026年7月售后热线电话与服务客户指南 - 帝舵中国官方服务中心

周新闻

  • SaaS软件行业GEO实践:AI搜索时代的品牌可见性与获客新路径
  • 什么是PCTFE?医药高端包装的“防潮王牌“材料
  • 【JVM调优实战】16-可视化利器-JConsole-VisualVM-JMC

月新闻

  • 2026年6月公司网站搭建最新热门渠道测评:四大低成本/零代码平台对比+避坑
  • 【Linux】Linux arm 编译QT程序,出现expected “}“报错
  • 【MATLAB例程】四基站二维AOA定位与距离辅助增强对比仿真。基于角度观测和测距修正的固定目标平面定位精度分析

关于尧图

  • 公司简介
  • 团队介绍
  • 企业文化
  • 荣誉资质

服务项目

  • 定制开发
  • 电商建站
  • UI 设计
  • 运维服务

快速链接

  • 案例展示
  • 建站流程
  • 常见问题
  • 资讯中心

联系方式

  • 📍北京市朝阳区互联网产业园 A 座 10 层
  • 📞400-888-8888
  • ✉️contact@rkmt.cn
  • 🕐周一至周日 9:00-21:00

© 2024 北京尧图网络科技有限公司 版权所有 | 京 ICP 备 XXXXXXXX 号