关于开发中视频监控遇到的问题及flv.js使用教程

文章介绍了在项目开发中遇到的海康威视视频监控集成问题,首先尝试使用webrtc-streamer将rtsp流转换为video流,但遇到CPU占用高和卡顿问题。接着提到了萤石云平台,虽然免费但超过一定数量需付费,并且设置较复杂。最后讨论了使用flv.js和后端配合来播放rtsp流,该方法需要更多后端工作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

最近项目开发中遇到一些海康威视视频监控相关的问题,在这里总结分享一下自己遇到的难点及解决办法。下面是一开始解决这些问题的办法以及一些缺陷,在不断的摸爬滚打中,终于总结出一套合适的解决办法😥。

一、webrtc-streamer-v0.7.0-dirty-Windows-AMD64-Release

最开始想的解决办法是利用webrtc-streamer将海康威视提供的rtsp接口转流成通用的video视频流的方式,效果不太理想,cpu耗用资源大,加载多个窗口视频会出现明显的卡顿等等问题。如果说加载单个视频监控的话,单个效果还算可以,唯一的优点就是上手最简单,这里就不推荐使用这种方法。

1.安装webrtc-streamer

webrtc-streamer git地址:https://github.com/mpromonet/webrtc-streamer

下载地址:Release v0.7.1 · mpromonet/webrtc-streamer · GitHub

 

推荐下载 webrtc-streamer-v0.7.1-Darwin-x86_64-Release.tar.gz

webrtc-streamer-v0.7.1-Darwin-x86_64-Release.tar.gz

下载完解压安装执行 webrtc-streamer.exe

 2.前端处理

在下载的webrtc-streamer中html>libs中copy这几个包

 新建index.html

<html>
<head>
<script src="adapter.min.js" ></script>
<script src="webrtcstreamer.js" ></script>
<script>        
    var webRtcServer= null;

    window.onload = function() { 
        webRtcServer= new WebRtcStreamer("video","http://127.0.0.1:8000");
        webRtcServer.connect("rtsp://账户名:密码@视频ip:554/h264/ch1/main/av_stream");//这里需要自己填写
    }
    window.onbeforeunload = function() { 
    	webRtcServer.disconnect(); 
    }
</script>
</head>
<h2>高清</h2>
<body> 
    <video id="video"  width="500px" height="600px" />
</body>
</html>

基本教程就到这里,简单是真的简单,但是不好用啊😯

二、萤石云平台

这里需要借助外网,还要自行到萤石云注册获取token,延时、卡顿什么的都挺好,关键是免费提供三个摄像头的托管,超过需要付费。萤石云操作还是比较繁琐的,这里我就不介绍了,想借助这个平台的可以去萤石云官网查看文档教程。知道有这个东西就行了。

三、flv.js

这个难度比较高,主要是需要后端配合,后端工作比较多,需要了解ffmpeg,websocket,推荐观看此篇文章介绍使用ffmpeg+nginx+flvjs实现web播放rtsp视频流_水电费嘎嘎的博客-优快云博客_nginx rtsp配置

### 实现 Vue3 中集成并播放实时监控视频流 为了实现在 Vue 3 项目中播放实时监控视频的功能,可以采用 Web 浏览器兼容的方式通过 HTML5 `<video>` 标签来加载 RTSP 或者 HTTP-FLV/HTTP-HLS 类型的视频流。对于海康威视设备来说,通常会使用其提供的 SDK 来获取视频流地址,并将其转换成适合浏览器播放的形式。 #### 安装依赖库 考虑到直接处理 RTSP 流可能遇到跨域等问题,在实际开发过程中推荐先将 RTSP 转换成 HLS 或 FLV 协议再推送到前端展示。这里可以选择一些成熟的第三方工具如 FFmpeg 进行转码工作。另外还需要安装 `hls.js` 库用于解析 m3u8 文件: ```bash npm install hls.js --save ``` #### 创建 VideoPlayer 组件 创建一个新的组件命名为 `VideoPlayer.vue`, 将负责渲染视频播放界面以及控制逻辑: ```vue <template> <div class="player-container"> <!-- 使用 video 标签 --> <video ref="videoRef" controls autoplay></video> </div> </div> </template> <script setup> import { onMounted, ref } from 'vue'; import Hls from 'hls.js'; const props = defineProps({ src: String, }); // 获取 DOM 元素引用 let videoRef = ref(null); onMounted(() => { if (Hls.isSupported()) { const hls = new Hls(); hls.loadSource(props.src); hls.attachMedia(videoRef.value); // 添加监听事件以便更好地管理资源释放 window.addEventListener('beforeunload', () => { hls.destroy(); }); } }); </script> <style scoped> .player-container { width: 100%; } </style> ``` 此代码片段展示了如何利用 `hls.js` 解析来自服务器端推送过来的 M3U8 音频/视频文件[^1]。 #### 设置路由与页面布局 最后一步就是把刚刚定义好的 `VideoPlayer` 放到合适的位置上显示出来。假设已经配置好了基本的 Vue Router 和 App 布局,则可以在对应的 view 页面里引入该组件并通过属性传递具体的 URL 地址给它。 需要注意的是,这里的 `props.src` 参数应该指向经过中间件处理后的合法 HTTPS 请求路径而不是原始 RTSP 地址[^2]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值