0

我已经为 Raspberry pi 交叉编译了 Qt,具有 QtMultimedia 和 Gstreamer1.0 支持,平台 xcb 和 eglfs

现在,如果我使用平台 eglfs 运行应用程序来播放视频,它会运行并播放视频,如果我将平台 xcb 用于应用程序,则会给出一个错误,即 videosink 无法正常工作

那么如何使用 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

4

1 回答 1

0

好的,我将撰写答案,而不是发表大量评论。

您可以尝试在此处更改 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 在这里 再次用 autovideosink 替换 xvimagesink,也许它会有所帮助。

我不确定您的代码到底使用了什么..

于 2015-09-17T09:13:59.837 回答