我正在尝试使用此管道创建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);
答案 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.