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

前端使用rtsp视频流接入海康威视摄像头

在纯前端(Vue 2)中直接通过 RTSP 协议接入海康威视摄像头是不可行的,因为:

  1. 浏览器限制:现代浏览器(Chrome、Firefox等)不支持直接播放 RTSP 流(基于 TCP/UDP 的协议)。
  2. 安全策略:浏览器通常禁止直接访问本地网络设备(如摄像头)。

可行的前端解决方案

需要借助中转服务将 RTSP 转成浏览器支持的格式(如 HLS、WebRTC 或 FLV)。以下是具体实现方案:


方案 1:RTSP → WebSocket + flv.js(推荐)

使用 FFmpegNode.js 中转服务 将 RTSP 转成 FLV,前端用 flv.js 播放。

步骤

1. 后端中转服务(Node.js + FFmpeg)

安装 node-rtsp-stream 或自行搭建转流服务:

npm install node-rtsp-stream

示例代码(Node.js 服务端)

const NodeRTSPStream = require('node-rtsp-stream');
const stream = new NodeRTSPStream({name: '海康摄像头',streamUrl: 'rtsp://admin:password@192.168.1.64:554/Streaming/Channels/101', // 海康 RTSP 地址wsPort: 9999, // WebSocket 端口ffmpegOptions: { // FFmpeg 转码选项'-stats': '','-r': 30,'-f': 'flv',},
});

注意streamUrl 格式通常为:
rtsp://[用户名]:[密码]@[IP地址]:[端口]/Streaming/Channels/[通道号]
海康默认端口 554,通道号 101 通常代表主码流。

2. 前端 Vue 2 使用 flv.js 播放

安装 flv.js

npm install flv.js

Vue 组件示例

<template><div><video ref="videoPlayer" controls autoplay muted width="800"></video></div>
</template><script>
import flvjs from 'flv.js';export default {mounted() {this.initVideo();},methods: {initVideo() {if (flvjs.isSupported()) {const videoElement = this.$refs.videoPlayer;const flvPlayer = flvjs.createPlayer({type: 'flv',url: 'ws://localhost:9999', // 对应 Node.js 服务的 WebSocket});flvPlayer.attachMediaElement(videoElement);flvPlayer.load();flvPlayer.play();}},},beforeDestroy() {if (this.flvPlayer) {this.flvPlayer.destroy();}},
};
</script>

方案 2:RTSP → HLS(HTTP Live Streaming)

使用 FFmpeg 将 RTSP 转成 HLS(.m3u8 + .ts),前端用 hls.js 播放。

步骤

1. FFmpeg 转码
ffmpeg -i "rtsp://admin:password@192.168.1.64:554/Streaming/Channels/101" \-c:v libx264 -c:a aac -f hls \-hls_time 2 -hls_list_size 3 -hls_flags delete_segments \./stream/stream.m3u8
2. 前端 Vue 使用 hls.js
<template><video ref="videoPlayer" controls></video>
</template><script>
import Hls from 'hls.js';export default {mounted() {const video = this.$refs.videoPlayer;const hls = new Hls();hls.loadSource('http://your-server/stream.m3u8');hls.attachMedia(video);hls.on(Hls.Events.MANIFEST_PARSED, () => {video.play();});},
};
</script>

方案 3:WebRTC 实时流(更复杂,需后端支持)

使用 WebRTC(如 Janus GatewayMediasoup)实现低延迟播放,但需要额外搭建信令服务器。


海康 RTSP 地址格式

海康威视摄像头的 RTSP URL 通常为:

rtsp://[用户名]:[密码]@[IP地址]:[端口]/Streaming/Channels/[通道号]
  • 主码流/Streaming/Channels/101
  • 子码流/Streaming/Channels/102(低分辨率)
  • 默认用户名/密码admin + 设备背面密码

总结

方案技术延迟适用场景
RTSP → WebSocket + flv.jsNode.js + FFmpeg2-5s局域网/内网
RTSP → HLSFFmpeg + hls.js10-30s录播/高兼容
WebRTCJanus/Mediasoup<1s超低延迟

推荐

  • 内网/低延迟flv.js
  • 公网/高兼容HLS

如果有后端支持,可进一步优化(如鉴权、CDN 分发)。

http://www.lryc.cn/news/574999.html

相关文章:

  • QT 学习笔记摘要(三)
  • HCIA-IP路由基础
  • C++ 多线程深度解析:掌握并行编程的艺术与实践
  • 基于CMS的黄道吉日万年历源码(自适应)
  • 商务年度总结汇报PPT模版分享
  • 板凳-------Mysql cookbook学习 (十--10)
  • LeetCode 3258.统计满足K约束的子字符串数量1
  • HTML表单元素
  • 线性结构之链表
  • 深度学习实战112-基于大模型Qwen+RAG+推荐算法的作业互评管理系统设计与实现
  • 机器学习01
  • SpringBoot高校党务系统
  • SpringBoot项目快速开发框架JeecgBoot——数据访问!
  • ros (二) 使用消息传递点云+rviz显示
  • Happy-LLM-Task06 :3.1 Encoder-only PLM
  • C++设计模式(GOF-23)——04 C++装饰器模式(Decorator)(一个类同时继承和组合另一个类)解决类爆炸问题、模板装饰器
  • python3文件操作
  • Node.js特训专栏-实战进阶:8. Express RESTful API设计规范与实现
  • python的智慧养老院管理系统
  • klayout db::edge 里的 crossed_by_point 的坑点
  • mbedtls ssl handshake error,res:-0x2700
  • 从零开始的云计算生活——第二十三天,稍作休息,Tomcat
  • Excel数据转SQL语句(增删改查)
  • 阿里云Web应用防火墙3.0使用CNAME接入传统负载均衡CLB
  • DDNS-GO 使用教程:快速搭建属于自己的动态域名解析服务(Windows 版)
  • 大语言模型的通用局限性与全球技术演进
  • React Native【实战范例】账号管理(含转换分组列表数据的封装,分组折叠的实现,账号的增删改查,表单校验等)
  • 【版本控制教程】如何使用Unreal Engine 5 + UE源代码控制(Perforce P4)
  • 【GPU RAM】实时监控GPU内存分配(一)
  • 微信小程序中scss、ts、wxml