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

vue3+vite+ts 使用webrtc-streamer播放海康rtsp监控视频

了解webrtc-streamer

webrtc-streamer 是一个使用简单机制通过 WebRTC 流式传输视频捕获设备和 RTSP 源的项目,它内置了一个小型的 HTTP server 来对 WebRTC需要的相关接口提供支持。相对于ffmpeg+flv.js的方案,延迟降低到了0.4秒左右,画面的加载速度也变快了,切换浏览器标签后也不会暂停画面,并且解决了http1.1的同域名中的并发限制(在谷歌浏览器中可以同时播放6个以上的video)。

探索WebRTC Streamer:实时通信的新境界-CSDN博客

一、下载webrtc-streamer

网址:Releases · mpromonet/webrtc-streamer (github.com)

二、下载完成解压并启动

启动方式:最好选2

1、双击webrtc-streamer.exe启动。

2、当前目录cmd,使用 webrtc-streamer.exe -o -H 0.0.0.0:9001 命令行开启,

      -o:是指无需转码,降低CPU

      -H:指定端口号

 

三、 测试webRtc插件是否有问题

打开浏览器,输入127.0.0.1:9001/webrtcstreamer.html?video=rtsp://admin:01@10.0.151.254:554/h264/ch1/main/av_stream

 127.0.0.0是webrtc-streamer的运行ip,video后面是rtsp流的网络URL

我用的是海康摄像头,rtsp流的网络URL是rtsp://admin:01@10.0.151.254:554/h264/ch1/main/av_stream

海康摄像头rtsp格式:rtsp://<账号>:<密码>@<IP>:<端口,默认554>/<视频编码,h264/h265>/<通道>/<码流,main主 sub子>/av_stream
例:rtsp://admin:12345@1.0.151.254:554/h264/ch1/main/av_stream

 

 到这里说明webRtc插件没问题!

四、下面整合到项目中(vue3+vite+ts)~~~~

1、assets文件夹下放入两个js文件(在下载的插件中寻找)

两个js分别为webrtcstreamer.js和adater.min.js,分别在html文件夹中和html/lib文件夹中

js在插件中位置(如图):

 

将两个js放入项目的assets目录中 

 

2、index.html中引入webrtcstreamer.js

 <script type="text/javascript" src="/src/assets/webrtcstreamer.js"></script>

3、vue中使用

<script setup lang="ts">
import {ref, onMounted, defineComponent, onUnmounted,nextTick} from "vue";
import {RouterView, useRouter} from "vue-router";
import ScaleScreen from "@/components/scale-screen";
import Headers from "@/views/header.vue";
import Setting from "@/views/setting.vue";
import {useSettingStore} from "@/stores/index";
import {storeToRefs} from "pinia";
import {BorderBox1, Decoration3} from '@kjgl77/datav-vue3';
import {ArrowLeft} from "@element-plus/icons-vue";//返回按钮使用
const router =useRouter();
//自适应窗体
const settingStore = useSettingStore();const {isScale} = storeToRefs(settingStore);
const wrapperStyle = {};//webRtcServer
//rtsp视频流的URL
const RTSP_URL = "rtsp://admin:hmrghck01@10.0.151.254:554/h264/ch1/main/av_stream";
//对应video的id
let video = document.getElementById('video');
//后端运行的webrtc-streamer.exe中的ip
const webRtcServerIp = ref('127.0.0.1');
const webRtcServer = ref(null);const initWebRtcServer = () => {nextTick(() => {video = document.getElementById('video');if (video) {
//9001后端运行的webrtc-streamer.exe中的端口webRtcServer.value = new WebRtcStreamer('video', `${location.protocol}//${webRtcServerIp.value}:9001`);webRtcServer.value.connect(RTSP_URL);} else {console.error('视频元素未找到');}});
};
// Call initWebRtcServer when the component is mounted
onMounted(() => {
//启动initWebRtcServer();
});// Destroy WebRTC server on component unmount
onUnmounted(() => {if (webRtcServer.value) {
//销毁webRtcServer.value.disconnect();webRtcServer.value = null;}
});</script><template><video id="video" class="video-js"  autoplay  ></video>
</template>
<style lang="scss" scoped>
#video{width: 95%;height: 95%;margin: 0 auto;position: absolute;top: 50%;left: 50%;transform: translate(-50%, -50%);//   blur(5px):这是一个模糊滤镜,它使图像的边缘变得模糊。5px表示模糊的程度,你可以根据需要调整这个值。// opacity(50%):这是一个透明度滤镜,它使图像变得半透明。50%表示透明度的程度,你可以根据需要调整这个值。filter: blur(0.5px) opacity(80%);
}</style>

 五、运行成功!!

参考:大佬文章

webRtc播放rtsp视频流(vue2、vue3+vite+ts)_webrtc播放rtsp流-CSDN博客

相关文章:

  • C++面经
  • C# list 成员对象是int型存在堆区还是栈区
  • 机器学习——集成学习和梯度提升决策树
  • C#中[StructLayout(LayoutKind.Sequential, Pack = 1)]解释
  • C++ 58 之 计算器案例
  • 模板方法模式(大话设计模式)C/C++版本
  • Python:基础爬虫
  • 【odoo17】富文本小部件widget=“html“的使用
  • sqli-labs 靶场 less-7 第七关详解:OUTFILE注入与配置
  • 英伟达开源 3400 亿参数模型;苹果 iOS 18 紧急 SOS 新增实时视频功能丨 RTE 开发者日报 Vol.225
  • VB.net调用VC DLL
  • 实战 | 基于YOLOv10的车辆追踪与测速实战【附源码+步骤详解】
  • 智慧工厂监控可视化解决方案(160页WORD)
  • 从零开始学GeoServer源码(一)(搭建开发环境Win10+IDEA23.3.5+jdk11+geoserver2.24.x)
  • Zenity向Ubuntu系统发送通知
  • .pyc 想到的一些问题
  • 【css3】浏览器内核及其兼容性
  • 【跃迁之路】【733天】程序员高效学习方法论探索系列(实验阶段490-2019.2.23)...
  • CentOS7简单部署NFS
  • CSS3 变换
  • Hibernate【inverse和cascade属性】知识要点
  • HTTP中GET与POST的区别 99%的错误认识
  • Linux CTF 逆向入门
  • Linux下的乱码问题
  • Nacos系列:Nacos的Java SDK使用
  • nginx 负载服务器优化
  • niucms就是以城市为分割单位,在上面 小区/乡村/同城论坛+58+团购
  • session共享问题解决方案
  • V4L2视频输入框架概述
  • Vue 动态创建 component
  • vue-router 实现分析
  • webgl (原生)基础入门指南【一】
  • 分布式事物理论与实践
  • 工程优化暨babel升级小记
  • 提升用户体验的利器——使用Vue-Occupy实现占位效果
  • 我有几个粽子,和一个故事
  • shell使用lftp连接ftp和sftp,并可以指定私钥
  • ​【数据结构与算法】冒泡排序:简单易懂的排序算法解析
  • ​人工智能书单(数学基础篇)
  • # C++之functional库用法整理
  • #define MODIFY_REG(REG, CLEARMASK, SETMASK)
  • #pragma预处理命令
  • ()、[]、{}、(())、[[]]命令替换
  • (1)(1.19) TeraRanger One/EVO测距仪
  • (1)bark-ml
  • (1)SpringCloud 整合Python
  • (2)关于RabbitMq 的 Topic Exchange 主题交换机
  • (39)STM32——FLASH闪存
  • (Repost) Getting Genode with TrustZone on the i.MX
  • (仿QQ聊天消息列表加载)wp7 listbox 列表项逐一加载的一种实现方式,以及加入渐显动画...
  • (附源码)springboot掌上博客系统 毕业设计063131
  • (力扣记录)1448. 统计二叉树中好节点的数目
  • (七)理解angular中的module和injector,即依赖注入
  • (五) 一起学 Unix 环境高级编程 (APUE) 之 进程环境
  • (杂交版)植物大战僵尸