簡體   English   中英

插件中的QML和QtGStreamer

[英]QML and QtGStreamer within plugin

我正在嘗試准備QML插件,以使其在其他設備上可以輕松使用的方式在嵌入式設備上播放視頻。 但是,當前提出的方法幾乎總是需要圍繞QML應用程序編寫一些C ++包裝器。 我指的是以下示例: http : //gstreamer.freedesktop.org/data/doc/gstreamer/head/qt-gstreamer/html/examples_2qmlplayer_2main_8cpp-example.html

我希望能夠有插件並簡單地編寫:

import AwesomeVideoPlugin 1.0

Rect
{
    AwesomeVideo
    {
        width: 320 
        height: 240
        url: "./myvideo.avi" 
        // ... some minor stuff like mouse click handling, controls, etc.
    }
}

當前,QtGStreamer需要向VideoItem提供videoSurface屬性。 唯一的方法是為rootContext()中的其他屬性創建和設置上下文。 要創建GraphicsVideoSurface,我需要QGraphicsView(QDeclarativeView擔任此角色)。

是否有可能:

  1. 從QDeclarativeItem(我只能從QML插件訪問)中獲取QDeclarativeView,以便以后可以使用它來提供GraphicsVideoSurface? 我的猜測不是-但是我找到了路徑QFraphicsItem :: scene()==> QGraphScene ==> QGraphScene :: views()==> QGraphicsView的QList-看起來編程很糟糕,但也許有人可以使用它(我遇到段錯誤)

  2. 還有其他方法可以從QDeclarativeItem內部為QtGStreamer提供視頻接收器嗎?

格蕾茲

彌撒

我有同樣的問題,但還沒有提出一個優雅的解決方案。

但是,一種想法是通過訪問器功能從子類QApplication對象中使視頻表面可用。

當然,這意味着您的插件依賴於具有getVideoSurface方法的應用程序子類,但是它確實消除了QML代碼中的丑陋之處。

class MyApp : public QApplication
{
    ....
     QGst::Ui::GraphicsVideoSurface *getVideoSurface() { return m_videosurface; }
}

 ...
int MyApp::init()
{
     m_viewer = new QDeclarativeView(); 
     m_viewer->setViewport(new QGLWidget(QGLFormat(QGL::SampleBuffers)));
     m_videosurface = new QGst::Ui::GraphicsVideoSurface(m_viewer);
}

MyVideoPlugin::MyVideoPlugin(QDeclarativeItem *parent) : QDeclarativeItem(parent)
{
    QGst::Ui::GraphicsVideoSurface *surface = ((MyApp*)qApp)->getVideoSurface();
}
...

現在,可以使用MyVideoPlugin元素,而無需引用導出的videosurface上下文項。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM