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

WSL2 ubuntu子系统OpenCV调用本机摄像头的RTSP视频流做开发测试

文章目录

  • 前言
  • 一、Ubuntu安装opencv库
  • 二、启动 Windows 本机的 RTSP 视频流
    • 下载解压 EasyDarwin
    • 查看本机摄像头设备
    • 开始推流
  • 三、在ubuntu 终端编写代码
    • 创建目录及文件
    • 创建CMakeLists.txt文件
    • 启动 cmake 配置并构建
  • 四、结果展示
    • 启动图形界面
    • 在图形界面打开终端找到 rtsp_demo运行

前言

由于WSL2环境与主机系统隔离,访问本机摄像头是有限的,但是,可以通过第三方库或网络摄像头来解决这个问题,本文将本地摄像头通过rtsp流来给WSL2访问。

一、Ubuntu安装opencv库

详见链接:https://blog.csdn.net/weixin_46119406/article/details/132271955?spm=1001.2014.3001.5501

二、启动 Windows 本机的 RTSP 视频流

Easydarwin是国内团队开发的开源流媒体框架。它是基于Go语言研发,从2012年12月创建并发展至今,从原有的单服务的流媒体服务器形式,扩展成现在的云平台架构开源项目,属于高性能开源RTSP流媒体服务器,在Github上受到广大欢迎。

特点:RTSP推模式转发、RTSP拉模式转发、录像、检索、回放、关键帧缓存、秒开画面、RESTful接口、WEB后台管理、分布式负载均衡。

下载解压 EasyDarwin

下载解压 release 包
直接运行 EasyDarwin.exe

以 Ctrl + C 停止服务。打开浏览器输入 http://localhost:10008, 进入控制页面,默认用户名密码是admin/admin

查看本机摄像头设备

打开PowerShell输入以下命令

ffmpeg -list_devices true -f dshow -i dummy

在这里插入图片描述

开始推流

ffmpeg -f dshow -i video="HP HD Camera" -vcodec libx264 -preset:v ultrafast -tune:v zerolatency -rtsp_transport tcp -f rtsp rtsp://10.25.184.33/test

参数解释

-f dshow -i video=“摄像头名称” 指定从本地摄像头中读取视频流。将“摄像头名称”替换为您的摄像头名称,例如“HP HD Camera”。
-vcodec libx264 指定使用 x264 编码器进行视频编码。
-preset ultrafast 设置编码速度。这里使用的是最快的编码速度,但可能会导致视频质量下降。
-tune zerolatency 设置编码器以实现零延迟。
-f rtsp 指定输出流的格式为 RTSP。
rtsp://<IP地址>/<路径> 指定 RTSP 流的目标地址。请将 <IP地址> 替换为 Windows 本机 IP 地址,将 <路径> 替换为您想要为流指定的路径。
成功推流如下,注意保持控制台的运行
在这里插入图片描述

三、在ubuntu 终端编写代码

创建目录及文件

mkdir  -p rtsp_demo/src
cd rtsp_demo/src
touch main.cpp

编辑main.cpp

vi main.cpp

代码如下

#include <opencv2/opencv.hpp>
#include <iostream>
#include <string>int main(int argc, char **argv)
{// Ubuntu安装ffmpeg:sudo apt-get install ffmpeg// rtsp地址,模拟四路视频流进行展示std::string rtsp1 = "rtsp://172.27.148.34/test";std::string rtsp2 = rtsp1;std::string rtsp3 = rtsp1;std::string rtsp4 = rtsp1;// CAP_FFMPEG:使用ffmpeg解码cv::VideoCapture stream1 = cv::VideoCapture(rtsp1, cv::CAP_FFMPEG);cv::VideoCapture stream2 = cv::VideoCapture(rtsp2, cv::CAP_FFMPEG);cv::VideoCapture stream3 = cv::VideoCapture(rtsp3, cv::CAP_FFMPEG);cv::VideoCapture stream4 = cv::VideoCapture(rtsp4, cv::CAP_FFMPEG);if (!stream1.isOpened() || !stream2.isOpened() || !stream3.isOpened() || !stream4.isOpened()){std::cout << "有视频流未打开" << std::endl;return -1;}cv::Mat frame1;cv::Mat frame2;cv::Mat frame3;cv::Mat frame4;cv::Mat H1, H2, V, blur;// 使用namedWindow创建窗口,WINDOW_AUTOSIZE:自动调整窗口大小cv::namedWindow("rtsp_demo", cv::WINDOW_AUTOSIZE);while (true){if (!stream1.read(frame1) || !stream2.read(frame2) || !stream3.read(frame3) || !stream4.read(frame4)){std::cout << "有视频流未读取" << std::endl;continue;}// 缩放等处理cv::resize(frame1, frame1, cv::Size(500, 300));cv::resize(frame2, frame2, cv::Size(500, 300));cv::flip(frame2, frame2, 1);cv::resize(frame3, frame3, cv::Size(500, 300));cv::cvtColor(frame1, frame1, cv::COLOR_BGR2GRAY);cv::cvtColor(frame1, frame1, cv::COLOR_GRAY2BGR);cv::resize(frame4, frame4, cv::Size(500, 300));cv::putText(frame4, "RTSP demo", cv::Point(100, 100), cv::FONT_ITALIC, 1, cv::Scalar(0, 0, 255), 2);// 拼接cv::hconcat(frame1, frame2, H1);cv::hconcat(frame3, frame4, H2);cv::vconcat(H1, H2, V);// 高斯模糊一下cv::GaussianBlur(V, blur, cv::Size(25, 25), 0);cv::imshow("rtsp_demo", blur);if (cv::waitKey(1) == 27){break;}}return 0;
}

创建CMakeLists.txt文件

cd ../
touch CMakeLists.txt
vi CMakeLists.txt

代码如下:

# 最低版本要求
cmake_minimum_required(VERSION 3.10)# 项目信息
project(rtsp_demo)# 添加opencv库
find_package(OpenCV REQUIRED)# 添加头文件
include_directories(${OpenCV_INCLUDE_DIRS})
# 添加库文件
link_libraries(${OpenCV_LIBS})# 添加可执行程序
add_executable(rtsp_demo src/main.cpp)

启动 cmake 配置并构建

cmake -S . -B build 
cmake --build build 

此时会生成可执行文件 rtsp_demo

四、结果展示

启动图形界面

参见链接 https://blog.csdn.net/weixin_46119406/article/details/132269782?spm=1001.2014.3001.5501

在图形界面打开终端找到 rtsp_demo运行

./rtsp_demo

在这里插入图片描述

相关文章:

WSL2 ubuntu子系统OpenCV调用本机摄像头的RTSP视频流做开发测试

文章目录 前言一、Ubuntu安装opencv库二、启动 Windows 本机的 RTSP 视频流下载解压 EasyDarwin查看本机摄像头设备开始推流 三、在ubuntu 终端编写代码创建目录及文件创建CMakeLists.txt文件启动 cmake 配置并构建 四、结果展示启动图形界面在图形界面打开终端找到 rtsp_demo运…...

20230814让惠普(HP)锐14 新AMD锐龙电脑不联网进WIN11进系统

20230814让惠普(HP)锐14 新AMD锐龙电脑不联网进WIN11进系统 2023/8/14 17:19 win11系统无法跳过联网 https://www.xpwin7.com/jiaocheng/28499.html Win11开机联网跳过不了怎么办&#xff1f;Win11开机联网跳过不了解决方法 Win11开机联网跳过不了怎么办&#xff1f;Win11开机…...

基于ScrollView的下拉刷新

基于ScrollView的下拉刷新 组件使用 组件 import React, {useState} from react; import {ScrollView, RefreshControl, Platform} from react-native;const RefreshComponent ({children, onRefresh, onScroll}) > {const [refreshing, setRefreshing] useState(false);…...

强训第31天

选择 传输层叫段 网络层叫包 链路层叫帧 A 2^16-2 C D C 70都没收到&#xff0c;确认号代表你该从这个号开始发给我了&#xff0c;所以发70而不是71 B D C 248&123120 OSI 物理层 数据链路层 网络层 传输层 会话层 表示层 应用层 C 记一下304读取浏览器缓存 502错误网关 编…...

什么是Java中的策略模式?

Java中的策略模式是一种行为设计模式&#xff0c;它允许您在不改变客户端代码的情况下&#xff0c;在运行时动态地切换行为。这是一种非常有用的模式&#xff0c;因为它允许您在运行时根据需要更改算法或行为。 策略模式通常涉及到一个或多个策略类&#xff0c;每个策略类都实…...

【Visual Studio Code】--- Win11 安装 VS Code 超详细

Win11 安装 VS Code 超详细 概述一、下载 Vscode二、安装 Vscode 概述 一个好的文章能够帮助开发者完成更便捷、更快速的开发。书山有路勤为径&#xff0c;学海无涯苦作舟。我是秋知叶i、期望每一个阅读了我的文章的开发者都能够有所成长。 一、下载 Vscode Vscode官网 二、…...

每天一道leetcode:797. 所有可能的路径(图论中等深度优先遍历)

今日份题目&#xff1a; 给你一个有 n 个节点的 有向无环图&#xff08;DAG&#xff09;&#xff0c;请你找出所有从节点 0 到节点 n-1 的路径并输出&#xff08;不要求按特定顺序&#xff09; graph[i] 是一个从节点 i 可以访问的所有节点的列表&#xff08;即从节点 i 到节…...

创建预留成本中心与指定工厂不一致

创建预留成本中心与指定工厂不一致 这种情况SAP会警告提示&#xff0c;可以强制通过。 如果公司不允许跨公司领料&#xff0c;可以将消息号 M7517的类型从W改为为E tcode&#xff1a;OMCQ SPRO->物料管理->库存管理和实际库存->定义系统消息的属性->系统信息设置...

SCF金融公链新加坡启动会 创新驱动未来

新加坡迎来一场引人瞩目的金融科技盛会&#xff0c;SCF金融公链启动会于2023年8月13日盛大举行。这一受瞩目的活动将为金融科技领域注入新的活力&#xff0c;并为广大投资者、合作伙伴以及关注区块链发展的人士提供一个难得的交流平台。 在SCF金融公链启动会上&#xff0c; Wil…...

希尔排序【Java算法】

文章目录 1. 概念2. 思路3. 代码实现 1. 概念 希尔排序也是一种插入排序&#xff0c;它是简单插入排序经过改进之后的一个更高效的版本&#xff0c;也称为缩小增量排序。希尔排序在数组中采用跳跃式分组的策略&#xff0c;通过某个增量将数组元素划分为若干组&#xff0c;然后分…...

互联网发展历程:从布线到无线,AC/AP的崭新时代

互联网的发展&#xff0c;一直在追求更便捷、更灵活的连接方式。在网络的早期&#xff0c;布线问题常常让人头疼。一项革命性的技术应运而生&#xff0c;那就是“无线AC/AP”。 布线问题的烦恼&#xff1a;繁琐的布线 早期网络的布线工作常常耗费时间和精力&#xff0c;尤其在大…...

Vue3 Axios网络请求简单应用

cd 到项目 安装Axios&#xff1a;cnpm install --save axios post传递参数 需要安装querystring 用于转换参数格式&#xff1a;cnpm install --save querystring 运行示例&#xff1a; 后台接口&#xff1a; GetTestData.java package com.csdnts.api;import java.io.IOExce…...

day-18 代码随想录算法训练营(19)二叉树 part05

513.找树左下角的值 思路一&#xff1a;层序遍历&#xff0c;每一层判断是不是最后一层&#xff0c;是的话直接返回第一个; 如何判断是不是最后一层呢&#xff0c;首先队列头部&#xff0c;其次记录左右子节点都没有的节点数是不是等于que.size()&#xff1b;或…...

【数据结构OJ题】移除链表元素

原题链接&#xff1a;https://leetcode.cn/problems/remove-linked-list-elements/description/ 1. 题目描述 2. 思路分析 我们可以定义一个结构体指针变量cur&#xff0c;让cur一开始指向头结点&#xff0c;同时定义一个结构体指针prev&#xff0c;令prev初始化为空指针NULL…...

centos 安装 virtualbox

参考 https://phoenixnap.com/kb/how-to-install-virtualbox-centos-7 遇到 Gpg Keys Failue 这样解决 将 rpm 包下载到本地 –disablerepovirtualbox sudo yum --disablerepovirtualbox localinstall VirtualBox-7.0-7.0.10_158379_el7-1.x86_64 failure: repodata/repomd…...

Java8之Optional类的基本使用

文章目录 一、简介二、常见的Optional用法&#xff1a;1、创建Optional对象&#xff1a;1.1 使用of()方法&#xff1a;1.2 使用ofNullable()方法&#xff1a;1.3 使用empty()方法&#xff1a; 2、判断Optional是否包含值&#xff1a;2.1 使用isPresent()方法&#xff1a; 3、获…...

LinuxPTP时间同步

参考文献&#xff1a; http://linuxptp.sourceforge.net/ 0、硬件支持 查看网卡是否支持软硬件时间戳&#xff1a; sudo ethtool -T eno1 Time stamping parameters for eno1: Time stamping parameters for eno1: Capabilities: hardware-transmit (SOF_TIMESTAMPIN…...

【Django】Task1安装python环境及运行项目

【Django】Task1安装python环境及运行项目 写在最前 8月份Datawhale组队学习&#xff0c;在这个群除我佬的时代&#xff0c;写一下blog记录学习过程。 参考资源&#xff1a; 学习项目github&#xff1a;https://github.com/Joe-2002/sweettalk-django4.2 队长博客&#xff1a…...

00 - 环境配置

查看所有文章链接&#xff1a;&#xff08;更新中&#xff09;GIT常用场景- 目录 文章目录 1. 环境说明2. 安装配置2.1 配置user信息2.2 config的三个作用域 3. 建git仓库3.1 把已有的项目代码纳入git管理3.2 新建的项目直接用git管理3.3 配置local的user和email3.4 优先级&…...

R语言实现计算净重新分类指数(NRI)和综合判别改善指数(IDI)

两个模型比较&#xff0c;与第一个模型相比&#xff0c;NRI&#xff08;重新分对的 - 重新分错的&#xff09;/总人数。IDI&#xff08;新模型患者平均预测概率-旧模型患者平均预测概率&#xff09;-&#xff08;新模型非患者平均预测概率-旧模型非患者平均预测概率&#xff09…...

IGP(Interior Gateway Protocol,内部网关协议)

IGP&#xff08;Interior Gateway Protocol&#xff0c;内部网关协议&#xff09; 是一种用于在一个自治系统&#xff08;AS&#xff09;内部传递路由信息的路由协议&#xff0c;主要用于在一个组织或机构的内部网络中决定数据包的最佳路径。与用于自治系统之间通信的 EGP&…...

uni-app学习笔记二十二---使用vite.config.js全局导入常用依赖

在前面的练习中&#xff0c;每个页面需要使用ref&#xff0c;onShow等生命周期钩子函数时都需要像下面这样导入 import {onMounted, ref} from "vue" 如果不想每个页面都导入&#xff0c;需要使用node.js命令npm安装unplugin-auto-import npm install unplugin-au…...

高等数学(下)题型笔记(八)空间解析几何与向量代数

目录 0 前言 1 向量的点乘 1.1 基本公式 1.2 例题 2 向量的叉乘 2.1 基础知识 2.2 例题 3 空间平面方程 3.1 基础知识 3.2 例题 4 空间直线方程 4.1 基础知识 4.2 例题 5 旋转曲面及其方程 5.1 基础知识 5.2 例题 6 空间曲面的法线与切平面 6.1 基础知识 6.2…...

学习STC51单片机31(芯片为STC89C52RCRC)OLED显示屏1

每日一言 生活的美好&#xff0c;总是藏在那些你咬牙坚持的日子里。 硬件&#xff1a;OLED 以后要用到OLED的时候找到这个文件 OLED的设备地址 SSD1306"SSD" 是品牌缩写&#xff0c;"1306" 是产品编号。 驱动 OLED 屏幕的 IIC 总线数据传输格式 示意图 …...

Spring Boot面试题精选汇总

&#x1f91f;致敬读者 &#x1f7e9;感谢阅读&#x1f7e6;笑口常开&#x1f7ea;生日快乐⬛早点睡觉 &#x1f4d8;博主相关 &#x1f7e7;博主信息&#x1f7e8;博客首页&#x1f7eb;专栏推荐&#x1f7e5;活动信息 文章目录 Spring Boot面试题精选汇总⚙️ **一、核心概…...

2025盘古石杯决赛【手机取证】

前言 第三届盘古石杯国际电子数据取证大赛决赛 最后一题没有解出来&#xff0c;实在找不到&#xff0c;希望有大佬教一下我。 还有就会议时间&#xff0c;我感觉不是图片时间&#xff0c;因为在电脑看到是其他时间用老会议系统开的会。 手机取证 1、分析鸿蒙手机检材&#x…...

Ascend NPU上适配Step-Audio模型

1 概述 1.1 简述 Step-Audio 是业界首个集语音理解与生成控制一体化的产品级开源实时语音对话系统&#xff0c;支持多语言对话&#xff08;如 中文&#xff0c;英文&#xff0c;日语&#xff09;&#xff0c;语音情感&#xff08;如 开心&#xff0c;悲伤&#xff09;&#x…...

HTML前端开发:JavaScript 常用事件详解

作为前端开发的核心&#xff0c;JavaScript 事件是用户与网页交互的基础。以下是常见事件的详细说明和用法示例&#xff1a; 1. onclick - 点击事件 当元素被单击时触发&#xff08;左键点击&#xff09; button.onclick function() {alert("按钮被点击了&#xff01;&…...

JUC笔记(上)-复习 涉及死锁 volatile synchronized CAS 原子操作

一、上下文切换 即使单核CPU也可以进行多线程执行代码&#xff0c;CPU会给每个线程分配CPU时间片来实现这个机制。时间片非常短&#xff0c;所以CPU会不断地切换线程执行&#xff0c;从而让我们感觉多个线程是同时执行的。时间片一般是十几毫秒(ms)。通过时间片分配算法执行。…...

Android 之 kotlin 语言学习笔记三(Kotlin-Java 互操作)

参考官方文档&#xff1a;https://developer.android.google.cn/kotlin/interop?hlzh-cn 一、Java&#xff08;供 Kotlin 使用&#xff09; 1、不得使用硬关键字 不要使用 Kotlin 的任何硬关键字作为方法的名称 或字段。允许使用 Kotlin 的软关键字、修饰符关键字和特殊标识…...