qt создать процесс запуска gst

Я пытаюсь создать процесс 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);

person haitaka    schedule 19.08.2014    source источник


Ответы (1)


При вызове оболочкой кавычки (и двойные кавычки) используются для объединения нескольких слов в один аргумент, но кавычки также отбрасываются. Возможно, включение кавычек в ваши аргументы вызывает ваши ошибки.

Поэтому это было бы ближе (я удалил символы '):

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.
person trojanfoe    schedule 19.08.2014