qt创建gst-launch进程

时间:2014-08-19 09:53:19

标签: c++ qt process gstreamer

我正在尝试使用此管道创建gst-launch进程:

gst-launch -ve videotestsrc ! 'video/x-raw-yuv,width=640,height=480,framerate=15/1,format=(fourcc)I420' ! queue ! mfw_vpuencoder codec-type=2 ! queue ! avimux name=mux ! filesink location=sd/Video/1.avi

我尝试使用qprocess来运行此管道。但最后我失败了。我尝试运行gst-launch的一些尝试如下:

process->start("gst-launch -ve videotestsrc ! 'video/x-raw-yuv,width=640,height=480,framerate=15/1,format=(fourcc)I420' ! queue ! mfw_vpuencoder codec-type=2 ! queue ! avimux name=mux ! filesink location=sd/Video/1.avi");

QStringList args = QString("-ve videotestsrc ! 'video/x-raw-yuv,width=640,height=480,framerate=15/1,format=(fourcc)I420' ! queue ! mfw_vpuencoder codec-type=2 ! queue ! avimux name=mux ! filesink location=sd/Video/1.avi").split(" ");
process->start("gst-launch", args);

1 个答案:

答案 0 :(得分:2)

当shell调用时,引号(和双引号)用于将多个单词转换为单个参数,但引号也会被丢弃。可能在参数中包含引号会导致错误。

因此,这会更接近(我已删除'个字符):

QStringList args = QString("-ve videotestsrc ! video/x-raw-yuv,width=640,height=480,framerate=15/1,format=(fourcc)I420 ! queue ! mfw_vpuencoder codec-type=2 ! queue ! avimux name=mux ! filesink location=sd/Video/1.avi").split(" ");
process->start("gst-launch", args);

我相信这会适用于你的情况,但这只是因为没有一个参数包含空格,需要引用它。

更好但更乏味的是手动创建参数列表,如果您想要使用包含空格的参数,则一次一个字符串:

QStringList args;
args << "-ve" << "videotestsrc" << "!" << "video/x-raw-yuv,width=640,height=480,framerate=15/1,format=(fourcc)I420" << etc.