2015-09-16 2 views
0

Я крест скомпилирован Qt для пи малина с QtMultimedia и Gstreamer1.0 поддержки с платформы XCB и eglfsСтранное поведение приложения Qt на Raspberry Pi

Теперь, если я запустить приложение для воспроизведения видео с помощью платформы eglfs его запускается и воспроизводится видео, и если я использую платформу xcb для приложения, это приводит к ошибке, что видеоконференция не работает

Итак, как я могу получить видео, воспроизводимое с помощью плагинов xcb?

Ошибки я получаю являются

xvimagesink xvimagesink.c:1443:gst_xvimagesink_get_xv_support:<xvimagesink1> error: Could not initialise Xv output 

xvimagesink xvimagesink.c:1443:gst_xvimagesink_get_xv_support:<xvimagesink1> error: No port available 

Я работаю на Raspbian свистящих ARMv7

+0

эти пакеты могут потребоваться - libx11-xcb1 и libx11-XCB-DEV, а также проверить qtbase/SRC/плагины/платформы/XCB/README – nayana

+0

Я установил все необходимые пакеты – haresh

+0

вы попробовали запустить пример приложения Qt для xcb gstreamer? можете ли вы опубликовать сообщения об ошибках после запуска приложения? вы можете попробовать запустить приложение с экспортируемой переменной: 'GST_DEBUG = 3./your_app', это приведет к отладке gstreamer. Я не знаю, возможно ли это, но вы также можете протестировать gstreamer, выполнив «gst-launch-1.0 videotestsrc! autovideosink' – nayana

ответ

0

Ok я сочинить ответ вместо того, чтобы сделать тонны комментариев.

Вы можете попытаться изменить исходный код для QGstreamerVideoWidget here В этой функции вы видите xvimagesink.

Интересно, что уже есть возврат к ximagesink если xvimagesink не работает .. Я хотел бы попробовать autovideosink, который всегда должен работать ..

void QGstreamerVideoWidgetControl::createVideoWidget() 
{ 
    if (m_widget) 
     return; 

    m_widget = new QGstreamerVideoWidget; 

    m_widget->installEventFilter(this); 
    m_windowId = m_widget->winId(); 

    /// --- CHANGED HERE (xvimagesink -> autovideosink) ----- 
    m_videoSink = gst_element_factory_make ("autovideosink", NULL); 
    if (m_videoSink) { /// --- maybe this if is not needed anymore --- 
     // Check if the xv sink is usable 
     if (gst_element_set_state(m_videoSink, GST_STATE_READY) != GST_STATE_CHANGE_SUCCESS) { 
      gst_object_unref(GST_OBJECT(m_videoSink)); 
      m_videoSink = 0; 
     } else { 
      gst_element_set_state(m_videoSink, GST_STATE_NULL); 

      g_object_set(G_OBJECT(m_videoSink), "force-aspect-ratio", 1, (const char*)NULL); 
     } 
    } 

    if (!m_videoSink) 
     m_videoSink = gst_element_factory_make ("ximagesink", NULL); 

    qt_gst_object_ref_sink(GST_OBJECT (m_videoSink)); //Take ownership 
} 

Или, может быть, его QGstreamerVideoWindow here снова заменить xvimagesink с autovideosink, может быть, это помогу.

Я не уверен, что именно он используется код ..

+0

спасибо за помощь. Я просмотрел оба файла, и он использует xvimagesink, поэтому я думаю, что мне нужно изменить его на autovideosink, но потом мне нужно снова построить Qt из исходного кода. Поэтому я проверю его и отчитаю – haresh

+0

@haresh. Я бы сначала попробуйте запустить gstreamer-конвейер с помощью gst-запуска, чтобы проверить, работает ли он с autovideosink .. проверьте, есть ли где-то двоичный файл gst-launch-1.0 и запускайте gest-launch-1.0 videotestsrc! autovideosink' также вы можете проверить с GST_DEBUG, установленным на какое-то более высокое значение, какой элемент был выбран для autovideosink (autovideosink пытается несколько стоков и выбирает то, что работает). В худшем случае вы можете закодировать примерное приложение на C с использованием библиотек gstreamer для создания упомянутого конвейера. – nayana

+0

: Я пробовал ximagesink и autovideosink, но это не сработало, а затем я попробовал glimagesink, и это сработало.наконец, теперь он воспроизводит видео, хотя я получаю некоторые предупреждения, связанные с jack.so. Я выбираю это как ответ на вопрос, но он не способен обрабатывать HD-видео, если вы можете помочь в этой проблеме. Спасибо за вашу помощь. – haresh

Смежные вопросы