我使用Visual Studio 2022与VCPKG来构建一个简单的测试程序,该程序使用gstreamer管道打开OpenCV videoccapture对象到RTSP提要。
#include <iostream>
#include <opencv2/opencv.hpp>
int main()
{
auto path = "rtspsrc location=rtsp://username:password@192.168.0.115 ! rtph264depay ! h264parse ! nvh264dec ! videoconvert ! appsink";
auto cap = new cv::VideoCapture(path, cv::CAP_GSTREAMER);
std::cout << "Hello World!n";
}
这是vcpkg清单
{
"$schema": "https://raw.githubusercontent.com/microsoft/vcpkg/master/scripts/vcpkg.schema.json",
"name": "opencvtest",
"version": "0.0.1",
"dependencies": [
{
"name": "opencv",
"default-features": true,
"features": [ "gstreamer" ]
},
{
"name": "gstreamer",
"default-features": true,
"features": [ "plugins-good","plugins-base","plugins-ugly","x264" ]
}
]
}
我可以很好地构建程序,但当运行时,它抱怨找不到rtspsrc元素。
[ WARN:0@0.014] global H:vcpkgbuildtreesopencv4src4.5.5-923325adf5.cleanmodulesvideoiosrccap_gstreamer.cpp (1127) cv::GStreamerCapture::open OpenCV | GStreamer warning: Error opening bin: no element "rtspsrc"
[ WARN:0@0.014] global H:vcpkgbuildtreesopencv4src4.5.5-923325adf5.cleanmodulesvideoiosrccap_gstreamer.cpp (862) cv::GStreamerCapture::isPipelinePlaying OpenCV | GStreamer warning: GStreamer: pipeline have not been created
这似乎是合理的,因为构建输出目录似乎没有所有必要的gstreamer dll,如gstrtsp*.dll。
我如何让vcpkg包括所有必要的gstreamer dll到我的构建输出目录?使用OpenCV/gstreamer与vcpkg的正确方法是什么?
gstreamer的vcpkg端口默认不构建rtsp插件(其中包含rtspsrc元素)。您需要编辑portfile.cmake
.
在生产环境中这样做需要您创建自己的vcpkg存储库,在那里您可以根据需要调整portfile.cmake
和构建选项。
如果这是你需要做的事情,我可以更详细地描述。
短版:将-Dgst-plugins-good:rtsp=enabled
添加到gstreamer的portfile.cmake
中描述的vcpkg_configure_meson
构建步骤中。