当前位置: 代码网 > it编程>编程语言>Asp.net > WSL2 ubuntu子系统OpenCV调用本机摄像头的RTSP视频流做开发测试

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

2024年07月31日 Asp.net 我要评论
由于WSL2环境与主机系统隔离,访问本机摄像头是有限的,但是,可以通过第三方库或网络摄像头来解决这个问题,本文将本地摄像头通过rtsp流来给WSL2访问。

前言

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

一、ubuntu安装opencv库

详见链接:

二、启动 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

四、结果展示

启动图形界面

参见链接

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

./rtsp_demo

在这里插入图片描述

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2025  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com