使用vcpkg构建应用程序时,构建输出目录中不包含Gstreamer二进制文件



我使用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构建步骤中。

最新更新