WSL2 llama y muestra la transmisión de video RTSP de la cámara nativa a través de OpenCV

prefacio

El origen de este blog es como se muestra arriba jaja, el tutorial de instalación relacionado con WSL2 puede referirse a mi blog anterior: Win11 install WSL2 and Nvidia driver

Bienvenido a mi blog para más artículos, habrá más detalles técnicos ~

Instalar CMake

Ejecute en ubuntu

sudo apt install cmake -y

o compilar e instalar

# 以v3.25.1版本为例
git clone -b v3.25.1 https://github.com/Kitware/CMake.git 
cd CMake
# 你使用`--prefix`来指定安装路径,或者去掉`--prefix`,安装在默认路径。
./bootstrap --prefix=<安装路径> && make && sudo make install

# 验证
cmake --version

Si se reporta un error Could NOT find OpenSSL, instale las siguientes dependencias para solucionarlo

sudo apt update
sudo apt upgrade
sudo apt install libssl-dev

Instalar OpenCV y FFmpeg

sudo apt install libopencv-dev
sudo apt install ffmpeg

Inicie la transmisión de video RTSP nativa de Windows

Descarga y descomprime EasyDarwin

Easydarwin es un marco de medios de transmisión de código abierto desarrollado por un equipo nacional. Está desarrollado en base al lenguaje Go. Ha sido creado y desarrollado desde diciembre de 2012. Se ha expandido desde la forma original de servidor de medios de transmisión de un solo servicio al proyecto actual de código abierto de arquitectura de plataforma en la nube. fuente Servidor de medios de transmisión RTSP En Github ampliamente bienvenido.

Características: reenvío de modo de inserción RTSP, reenvío de modo de extracción RTSP, grabación de video, recuperación, reproducción, almacenamiento en búfer de fotogramas clave, segunda pantalla de apertura, interfaz RESTful, administración de fondo WEB, balanceo de carga distribuido.

Descargue y descomprima el paquete de lanzamiento

Ejecute EasyDarwin.exe directamente

Detenga el servicio con Ctrl + C. Abra el navegador e ingrese http://localhost:10008 para ingresar a la página de control.El nombre de usuario y la contraseña predeterminados son admin/admin

Ver dispositivos de cámara nativos

Instalar ffmpeg localmente en Windows

Vea el comando del dispositivo de cámara nativo de la siguiente manera

ffmpeg -list_devices true -f dshow -i dummy

comenzar a transmitir

ffmpeg -f dshow -i video="USB2.0 Camera" -vcodec libx264 -preset:v ultrafast -tune:v zerolatency -rtsp_transport tcp -f rtsp rtsp://192.168.1.101/test

explicación de parámetros

  • -f dshow -i video="摄像头名称"Especifica leer el flujo de video de la cámara local. Reemplace "Nombre de la cámara" con el nombre de su cámara, como "Cámara USB2.0".
  • -vcodec libx264Especifica usar el codificador x264 para la codificación de video.
  • -preset ultrafastConfigure la velocidad de codificación. Aquí se usa la velocidad de codificación más rápida, pero puede resultar en una calidad de video más baja.
  • -tune zerolatencyConfigure el codificador para latencia cero.
  • -f rtspEspecifica que el formato del flujo de salida es RTSP.
  • rtsp://<IP地址>/<路径>Especifica la dirección de destino del flujo RTSP. <IP地址>Reemplace con la dirección IP nativa de Windows y <路径>con la ruta que desea especificar para la transmisión.

La transmisión exitosa es la siguiente, preste atención para mantener la consola en funcionamiento

inserte la descripción de la imagen aquí

Abra el firewall local (opcional)

Debido a que queremos acceder a la transmisión de video RTSP de esta máquina en WSL2, debemos abrir el firewall de esta máquina, como se muestra en la figura a continuación.

Apague las redes públicas y privadas

Recibir transmisión de video con OpenCV

el código se muestra a continuación

#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;
}

El contenido de CMakeLists.txt es el siguiente

# 最低版本要求
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)

Comience la configuración y compilación de cmake

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

ejecutar ejecutable

./build/rtsp_demo

Visualización de resultados

Usó WSL2 con éxito para mostrar cuatro transmisiones de video RTSP ~

Supongo que te gusta

Origin blog.csdn.net/Apple_Coco/article/details/129292953
Recomendado
Clasificación