2015-09-16 80 views
0

我已經交叉編譯的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喘息工作的ARMv7

+0

這些軟件包可能需要 - 的libx11-xcb1和的libx11-XCB-dev的,還要檢查qtbase/src目錄/插件/平臺/ XCB/README – nayana

+0

我已經安裝了所有必需的軟件包 – haresh

+0

您是否嘗試過爲xcb gstreamer運行一些Qt示例應用程序?你可以發佈你運行你的應用程序後得到的錯誤消息嗎?您可以嘗試使用導出的變量運行您的應用程序:'GST_DEBUG = 3。/ your_app'這將打開gstreamer調試。我不知道它是否可能,但你也可以通過運行'gst-launch-1.0 videotestsrc來測試gstreamer! autovideosink' – nayana

回答

0

好吧,我將撰寫,而不是把噸的評論答案。

您可以嘗試更改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 再次更換autovideosink xvimagesink,也許它將有所幫助。

我不知道到底是正在使用你的代碼是什麼..

+0

感謝您的幫助。我查看了兩個文件,它使用xvimagesink,所以我認爲我必須將其更改爲autovideosink,但之後我必須再次從源代碼構建Qt。因此,我將檢查它並報告返回 – haresh

+0

@haresh我會先嚐試使用gst-launch工具運行gstreamer管道以檢查它是否可以與autovideosink一起工作。檢查您是否在某處安裝了gst-launch-1.0二進制文件並運行'gst-launch-1.0 videotestsrc! autovideosink'也可以檢查GST_DEBUG設置爲更高的值什麼樣的元素被選爲autovideosink(autovideosink嘗試幾個匯並選擇哪個工作)。在最糟糕的情況下,您可以使用gstreamer庫編寫一些C語言示例應用程序來創建所提到的管道。 – nayana

+0

:我試過ximagesink和autovideosink,但它沒有工作,然後我嘗試glimagesink,它的工作。終於它正在播放視頻,雖然我收到了一些與jack.so有關的警告。我選擇這個作爲問題的答案,但它無法處理高清視頻,如果你可以幫助解決這個問題。無論如何感謝您的幫助。 – haresh