Странное поведение приложения Qt на Raspberry Pi

Я кросс-скомпилировал Qt для Raspberry pi с поддержкой QtMultimedia и Gstreamer1.0 с платформой xcb и eglfs

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

Итак, как я могу воспроизвести видео с помощью плагинов 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 Wheezy armv7

1 ответ

Решение

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

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

Интересно, что если xvimagesink не работает, то уже есть запасной вариант к ximagesink. Я бы попробовал 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 снова заменит xvimagesink на autovideosink, возможно, это поможет.

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

Другие вопросы по тегам