C++ 使用gstreamer管道的qprocess

C++ 使用gstreamer管道的qprocess,c++,qt,process,gstreamer,C++,Qt,Process,Gstreamer,我想将videotestsrc的输出保存到一个20秒长的avi文件中,大小为1024x720,我希望gplay能够播放它。在命令行中,下面的管道执行我想要的操作 gst-launch -ve videotestsrc ! 'video/x-raw-yuv,width=1024,height=720,framerate=15/1,format(fourcc)I420' ! queue ! mfw_vpuencoder codec-type=2 ! queue ! avimux ! filesink

我想将videotestsrc的输出保存到一个20秒长的avi文件中,大小为1024x720,我希望gplay能够播放它。在命令行中,下面的管道执行我想要的操作

gst-launch -ve videotestsrc ! 'video/x-raw-yuv,width=1024,height=720,framerate=15/1,format(fourcc)I420' ! queue ! mfw_vpuencoder codec-type=2 ! queue ! avimux ! filesink location=test.avi
20秒后,我用kill-2杀死了这条管道

但是,当我尝试使用qprocess运行此管道并从代码中使用kill-2终止它时,gplay无法播放视频文件。另外,当我将大小信息更改为640x480并将其作为qprocess运行时,gplay可以播放它。我想知道我的错误是什么。为什么这个管道不能与qprocess一起工作

Qt代码:

QStringList args;
args << "-ve";
args << "videotestsrc";
args << "!";
args << "video/x-raw-yuv,width=1024,height=720,framerate15/1,format(fourcc)I420";
args << "!";
args << "queue";
args << "mfw_vpuencoder codec-type=2";
args << "!";
args << "queue";
args << "!";
args << "avimux";
args << "!";
args << "filesink location=test.avi";

process->start("gst-launch", args);
usleep( 20000000 ); //20secs
kill( process->pid(), 2 );

PS:当我将上述代码中的大小信息更改为640x480时,gplay将毫无问题地播放视频。

为什么要取消它?我取消它是为了结束将视频保存到文件的过程。在开始将视频保存到文件后,它会继续保存,直到被杀死;转换完成后,是否无法使其自行终止?否。videotestsrc将永远生成视频。为了停止videotestrc制作视频就是杀死它。