海康摄像头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 charsetUTF-8 titleRTSP 播放/title script srchttps://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 idvideo-canvas/canvas script // ⭐ 原始 RTSP 地址不要做任何编码 // 海康web页面的用户名、密码 及 ip地址端口默认554后面的1301代表通道13的数据如果是通道1则为101其他通道类似102, 103 ....。 var rawUrl rtsp://username:passwordxx.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第四步开始播放保持后端服务运行确保第一步的命令行窗口没有关闭node main.js一直在运行。打开前端页面在浏览器中打开你刚创建的index.html文件。在刚才的服务器上用 VS Code 的 Live Server 插件或者用 Python 快速启动一个静态服务# 在 index.html 所在目录执行python3 -m http.server 8080然后通过http://xxx.xxx.xx.xx:8080访问页面查看效果稍等片刻转码需要一点时间你应该就能在页面上看到 RTSP 视频流了。最后通过以上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更新------------------------------------------------------考虑到网站可能是httpsws会升级为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 /CN192.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/浏览器会显示证书警告点击高级 → 继续访问然后再刷新你的播放页面。

相关新闻

面向欧洲GDPR合规的Node-RED边缘计算网关本地脱敏架构实战

面向欧洲GDPR合规的Node-RED边缘计算网关本地脱敏架构实战

摘要:在装备出海(如发往欧盟或欧洲经济区市场)项目中,实现底层PLC与海外物联网云平台的数据互通,不仅要解决复杂的电信与电磁兼容(CE RED指令)物理阻碍,更要在系统架构层面应对GDPR&…

2026/9/18 16:38:03 阅读更多 →
Django计算机毕设之基于 Django 的贵州山地特色产品产地直售商城系统设计与实现 轻量化贵州特色好物线上交易平台的设计与实现(完整前后端 代码+说明文档+LW,调试定制等)

Django计算机毕设之基于 Django 的贵州山地特色产品产地直售商城系统设计与实现 轻量化贵州特色好物线上交易平台的设计与实现(完整前后端 代码+说明文档+LW,调试定制等)

博主介绍:✌️码农一枚 ,专注于大学生项目实战开发、讲解和毕业🚢文撰写修改等。全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围:&am…

2026/9/18 19:25:49 阅读更多 →
Autorize:越权检测插件性能优化

Autorize:越权检测插件性能优化

核心配置调整1、精准设置扫描范围在Target 标签 → Scope 子标签页中,仅添加需要测试的路径(如/admin/*、/api/user/*),避免全域名扫描。勾选Exclude static files,过滤CSS、JS、图片等静态资源,减少无效请…

2026/9/21 15:57:35 阅读更多 →

最新新闻

my63777免费域名查询最佳实践:5步搞定从原理到落地

my63777免费域名查询最佳实践:5步搞定从原理到落地

my63777免费域名查询最佳实践:5步搞定从原理到落地 看了一堆教程还是不会写项目?别急,这锅不全是你的。很多时候是资料太散,没人把底层逻辑掰开了揉碎了讲给你听。特别是涉及 my63777免费域名查询…

2026/9/21 20:14:21 阅读更多 →
门怎么画性能优化面试必问3招搞定渲染卡顿

门怎么画性能优化面试必问3招搞定渲染卡顿

门怎么画性能优化面试必问3招搞定渲染卡顿 配置环境就卡半天?别怪电脑,怪你代码写得烂。很多后端和前端新手,一遇到“门怎么画”这种看似简单的 UI 需求,直接上来就是 div 套 div ,或者在 Canvas…

2026/9/21 20:14:21 阅读更多 →
逼的种类完整示例

逼的种类完整示例

面试被问原理答不上来,那种瞬间大脑空白的尴尬,谁没经历过?别急着背八股文,光背代码逻辑根本讲不清背后的 图解原理 。很多开发者死磕算法,却忽略了工程实践中更基础、更隐蔽的“逼的种类”——这里指的不是网络烂梗,而是我们在面对复杂业务场景时,被…

2026/9/21 20:14:21 阅读更多 →
BAV99源码解析速查手册:从入门到实战避坑

BAV99源码解析速查手册:从入门到实战避坑

BAV99源码解析速查手册:从入门到实战避坑 你是不是也这样:教程刷了几百集,文档翻了半本,一动手写项目就脑子空白?别慌,这不是你笨,是缺一份能直接抄作业的 速查手册 。BAV99…

2026/9/21 20:14:21 阅读更多 →
一文搞懂火影忍者疾风传:究极忍者风暴3

一文搞懂火影忍者疾风传:究极忍者风暴3

图解原理:搞定火影忍者疾风传究极忍者风暴3配置坑 打开《火影忍者疾风传:究极忍者风暴3》安装包,看着进度条卡在99%,或者进去后画面撕裂、闪退,是不是感觉配置环境就卡半天?别急着卸载,很多新人以为这是游戏优化差,其实是底层架构与本地环境的“…

2026/9/21 20:14:21 阅读更多 →
西安音乐节技术栈重构:3招搞定版本升级API全变痛点

西安音乐节技术栈重构:3招搞定版本升级API全变痛点

西安音乐节技术栈重构:3招搞定版本升级API全变痛点 刚把项目从旧版框架升到最新稳定版,代码一跑,满屏红叉。那种感觉就像你熟练地系好了安全带,结果发现仪表盘上的按钮全换了位置。这就是很多开发者在接手老项目或跟进新版本时的噩梦: 版本升级后…

2026/9/21 20:13:20 阅读更多 →

日新闻

agents-generator 决策矩阵全解析:从项目检测到 AGENTS.md 规则生成的 16 步判定流程

agents-generator 决策矩阵全解析:从项目检测到 AGENTS.md 规则生成的 16 步判定流程

agents-generator 决策矩阵全解析:从项目检测到 AGENTS.md 规则生成的 16 步判定流程 【免费下载链接】agentic-awesome-skills AAS Core is the local, agent-first control plane for complete catalog discovery, agent-owned selection, stack validation, and …

2026/9/21 0:00:01 阅读更多 →
gin-vue-admin 前端工具函数全景指南:src/utils 复用规范与源码级解析

gin-vue-admin 前端工具函数全景指南:src/utils 复用规范与源码级解析

gin-vue-admin 前端工具函数全景指南:src/utils 复用规范与源码级解析 【免费下载链接】gin-vue-admin 🚀ViteVue3Gin拥有AI辅助的基础开发平台,企业级业务AI开发解决方案,内置mcp辅助服务,内置skills管理,…

2026/9/21 0:00:01 阅读更多 →
Wox 全功能插件开发实战指南:基于 Python / Node.js 宿主与 WebSocket 的持久化插件体系

Wox 全功能插件开发实战指南:基于 Python / Node.js 宿主与 WebSocket 的持久化插件体系

桌面应用AI 应用插件系统 【免费下载链接】Wox A cross-platform launcher that simply works 项目地址: https://gitcode.com/gh_mirrors/wo/Wox 点击查看 免费下载 全功能插件(Full-featured Plugin)是 Wox 三类插件实现方式中能力最完整的…

2026/9/21 0:00:01 阅读更多 →

周新闻

Flutter for OpenHarmony游戏卡片渐变背景实战:从原理到性能优化

Flutter for OpenHarmony游戏卡片渐变背景实战:从原理到性能优化

直接铺开项目本身吧。这几个月我一直在折腾一件事:用Flutter给OpenHarmony做一款游戏集合类的App,说白了就是把若干小游戏塞进一个壳里,用统一入口分发。这个方向本身不算新鲜,真正让我花了不少心思的,是首页那堆游戏卡…

2026/9/21 3:13:20 阅读更多 →
Word表格编号全攻略:从列表编号到题注交叉引用

Word表格编号全攻略:从列表编号到题注交叉引用

写Word文档,最让人头疼的往往是那些“看起来不起眼”的小问题。比如表格编号这事:今天在表后面多加了两个空白行,明天给客户交稿前发现整个章节的编号全部错位,光是挨个改序号就能耗掉大半个下午。我前阵子帮人整理一份上百页的技…

2026/9/21 2:19:36 阅读更多 →
从第一个站到第二个站:独立开发者的静态网站选型与落地实践

从第一个站到第二个站:独立开发者的静态网站选型与落地实践

1. 项目概述1.1 核心需求解析做独立开发者这几年,说实话,第一个网站上线的那天晚上我兴奋得没睡着。但等它跑了半年,流量惨淡、功能臃肿、代码自己都懒得看第二遍之后,我才慢慢琢磨明白一个道理:第一个网站是练手&…

2026/9/21 4:51:05 阅读更多 →

月新闻

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能分类:[AI/大模型]细分主题:AI 增强型 CI/CD 流水线自动化与 GitOps 实践:Agent 工作流、工具调用与任务拆解:从原型到生产的验收清单很多团队在尝试用大…

2026/9/21 15:36:51 阅读更多 →
容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场分类:[工程技术]细分主题:Kubernetes 生产环境运维与排障实战:可复制的项目复盘模板与决策记录大部分团队的事故复盘报告,最后都变成了躺在 Confluence 或钉…

2026/9/21 15:36:51 阅读更多 →
容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步

容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步

容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步分类:[工程技术]细分主题:Docker 容器化技术与镜像安全管理:核心链路的逐步实现与关键代码取舍面对一个积累了五六年历史包袱的单体架构应用(包含 Web 接口、后台…

2026/9/19 23:35:34 阅读更多 →