2016-05-30 8 views
0

Я использую оберток Qt GStreamer и пытается создать трубопровод следующим образом:Проблема с созданием QtGStreamer трубопровода из описания

QGst::ElementPtr bin = 
    QGst::Bin::fromDescription("videotestsrc ! videoscale 
    ! video/x-raw,width=100,height=100"); 

Однако, когда я запускаю это, я получаю ошибку:

GStreamer-CRITICAL **: gst_bin_add: assertion 'GST_IS_ELEMENT (element)' failed 
terminate called after throwing an instance of 'QGlib::Error' 
what(): no element "video" 

Я думаю, что есть проблема с "/", но не знаю, как это исправить.

GStreamer трубопровод:

gst-launch-1.0 -v videotestsrc ! videoscale ! video/x-raw,width=100,height=100 
! xvimagesink -e --gst-debug-level=3 sync=false 

работает отлично.

Я попытался убегая кавычки, как:

QGst::ElementPtr bin = 
    QGst::Bin::fromDescription(\""videotestsrc ! videoscale 
    ! video/x-raw,width=100,height=100\""); 

, но это дает:

terminate called after throwing an instance of 'QGlib::Error' 
what(): specified empty bin "bin", not allowed 

ответ

1

В GStreamer это синтаксис для колпачков (возможности элементов):

video/x-raw,width=100,height=100

Парсер ожидает, что он будет находиться между двумя элементами, чтобы определить, как они должны соединяться. Это не сам элемент. Если вы хотите, чтобы трубопровод разбирался, вы можете добавить identity в конец. Это даст исходные видеофрагменты 100x100, некоторые неопределенные цветовые пространства.

И, как вы, вероятно, знаете, этот трубопровод ничего не сделает, пока вы не подключите к нему раковину.

+0

Спасибо за ответ. В конвейере я отлично работаю, используя 'gst-launch'. Однако у меня возникают проблемы, когда я пытаюсь создать его с помощью QtGStreamer. – Luca

+0

В вашем коде QT у вас нет xvimagesink. Это намеренно? – mpr

+0

Да, но я использую эквивалентную раковину. Проблема возникает еще до того, как конвейер подключится, и он жалуется на «нет элемента» видео », что заставляет меня думать, что это связано с разбором – Luca