1

我正在尝试使用 boost::process 加载 gstreamer 插件来调用gst-launch.

当我通过命令行加载插件时,一切正常:

gst-launch-1.0 videotestsrc ! privacyprotector ! fakesink

如果我使用可执行文件的完整路径,它也可以正常工作:

bp::child c("/opt/intel/openvino/data_processing/gstreamer/bin/gst-launch-1.0 videotestsrc ! privacyprotector ! fakesink", ec);

但是如果我尝试在路径中找到可执行文件并将参数作为单独的参数发送到bp::child,则 gstreamer 无法找到插件:

bp::child c(bp::search_path("gst-launch-1.0"), bp::args("videotestsrc ! privacyprotector ! fakesink"), ec);

我缺少什么特定于参数处理的东西吗?

4

1 回答 1

1

我认为论点需要是一个向量:

所以,试试

活在魔杖盒上

#include <boost/process.hpp>
#include <iostream>
namespace bp = boost::process;

int main() {
    std::error_code ec;

    bp::child c(
        bp::search_path("gst-launch-1.0"),
        bp::args = {"videotestsrc", "!", "privacyprotector", "!", "fakesink"},
        ec);

    c.wait();
    std::cout << ec.message() << ": " << c.exit_code();
}

其中,在我的系统上打印:

WARNING: erroneous pipeline: no element "privacyprotector"
Success: 1
于 2021-03-31T16:36:05.017 回答