前言
本篇博客的由來(lái)如上圖哈哈,WSL2 相關(guān)安裝教程可以參考我之前的博客:Win11安裝WSL2和Nvidia驅(qū)動(dòng)
更多文章歡迎來(lái)我的博客小站看呀,會(huì)有更多的技術(shù)細(xì)節(jié)~
安裝 CMake
ubuntu上請(qǐng)執(zhí)行
sudo apt install cmake -y
或者編譯安裝
# 以v3.25.1版本為例
git clone -b v3.25.1 https://github.com/Kitware/CMake.git
cd CMake
# 你使用`--prefix`來(lái)指定安裝路徑,或者去掉`--prefix`,安裝在默認(rèn)路徑。
./bootstrap --prefix=<安裝路徑> && make && sudo make install
# 驗(yàn)證
cmake --version
如果報(bào)錯(cuò)Could NOT find OpenSSL
,安裝如下依賴即可解決
sudo apt update
sudo apt upgrade
sudo apt install libssl-dev
安裝 OpenCV 和 FFmpeg
sudo apt install libopencv-dev
sudo apt install ffmpeg
啟動(dòng) Windows 本機(jī)的 RTSP 視頻流
下載解壓 EasyDarwin
Easydarwin是國(guó)內(nèi)團(tuán)隊(duì)開(kāi)發(fā)的開(kāi)源流媒體框架。它是基于Go語(yǔ)言研發(fā),從2012年12月創(chuàng)建并發(fā)展至今,從原有的單服務(wù)的流媒體服務(wù)器形式,擴(kuò)展成現(xiàn)在的云平臺(tái)架構(gòu)開(kāi)源項(xiàng)目,屬于高性能開(kāi)源RTSP流媒體服務(wù)器,在Github上受到廣大歡迎。
特點(diǎn):RTSP推模式轉(zhuǎn)發(fā)、RTSP拉模式轉(zhuǎn)發(fā)、錄像、檢索、回放、關(guān)鍵幀緩存、秒開(kāi)畫面、RESTful接口、WEB后臺(tái)管理、分布式負(fù)載均衡。
下載解壓 release 包
直接運(yùn)行 EasyDarwin.exe
以 Ctrl + C 停止服務(wù)。打開(kāi)瀏覽器輸入 http://localhost:10008, 進(jìn)入控制頁(yè)面,默認(rèn)用戶名密碼是admin/admin
查看本機(jī)攝像頭設(shè)備
Windows 本機(jī)安裝 ffmpeg 這里不再贅述啦,網(wǎng)上教程很多~
查看本機(jī)攝像頭設(shè)備命令如下
ffmpeg -list_devices true -f dshow -i dummy
開(kāi)始推流
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
參數(shù)解釋
-
-f dshow -i video="攝像頭名稱"
指定從本地?cái)z像頭中讀取視頻流。將“攝像頭名稱”替換為您的攝像頭名稱,例如“USB2.0 Camera”。 -
-vcodec libx264
指定使用 x264 編碼器進(jìn)行視頻編碼。 -
-preset ultrafast
設(shè)置編碼速度。這里使用的是最快的編碼速度,但可能會(huì)導(dǎo)致視頻質(zhì)量下降。 -
-tune zerolatency
設(shè)置編碼器以實(shí)現(xiàn)零延遲。 -
-f rtsp
指定輸出流的格式為 RTSP。 -
rtsp://<IP地址>/<路徑>
指定 RTSP 流的目標(biāo)地址。請(qǐng)將<IP地址>
替換為 Windows 本機(jī) IP 地址,將<路徑>
替換為您想要為流指定的路徑。
成功推流如下,注意保持控制臺(tái)的運(yùn)行
開(kāi)放本機(jī)防火墻(可選)
因?yàn)槲覀円?WSL2 里訪問(wèn)本機(jī)的 RTSP 視頻流,所以需要打開(kāi)本機(jī)的防火墻,如下圖
關(guān)閉專用網(wǎng)絡(luò)和公用網(wǎng)絡(luò)即可
用 OpenCV 接收視頻流
代碼如下
#include <opencv2/opencv.hpp>
#include <iostream>
#include <string>
int main(int argc, char **argv)
{
// Ubuntu安裝ffmpeg:sudo apt-get install ffmpeg
// rtsp地址,模擬四路視頻流進(jìn)行展示
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 << "有視頻流未打開(kāi)" << std::endl;
return -1;
}
cv::Mat frame1;
cv::Mat frame2;
cv::Mat frame3;
cv::Mat frame4;
cv::Mat H1, H2, V, blur;
// 使用namedWindow創(chuàng)建窗口,WINDOW_AUTOSIZE:自動(dòng)調(diào)整窗口大小
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 內(nèi)容如下
# 最低版本要求
cmake_minimum_required(VERSION 3.10)
# 項(xiàng)目信息
project(rtsp_demo)
# 添加opencv庫(kù)
find_package(OpenCV REQUIRED)
# 添加頭文件
include_directories(${OpenCV_INCLUDE_DIRS})
# 添加庫(kù)文件
link_libraries(${OpenCV_LIBS})
# 添加可執(zhí)行程序
add_executable(rtsp_demo src/main.cpp)
啟動(dòng) cmake 配置并構(gòu)建
cmake -S . -B build
cmake --build build
運(yùn)行可執(zhí)行程序
./build/rtsp_demo
結(jié)果展示
成功用 WSL2 展示出四路 RTSP 視頻流~文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-489922.html
文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-489922.html
到了這里,關(guān)于WSL2通過(guò)OpenCV調(diào)用并展示本機(jī)攝像頭的RTSP視頻流的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!