2

QT プロジェクトで VLC を使用してビデオを表示するために 1 日を費やしました。

回線を使用しない場合、ビデオは機能しますlibvlc_media_player_set_hwnd。この行がないと、VLC はウィンドウを自動的に生成します。ビデオを表示するために独自のウィンドウまたはサブウィンドウ領域を選択できることは非常に重要です。

エラーは次のとおりです。 main vout display error: Failed to set on top

ビデオを表示するために、さまざまな QT クラスを使用しました。QVideoWidget、QWidget、QFrame、および QMainWindow。何も変わりませんでした。(OSはウィンドウズです)

インターネットにはさまざまなソリューションがたくさんあります。以下のコードで動作するはずです。

libvlc のさまざまなバージョンも試しましたが、エラーは常に同じでした。

play() メソッド:

void MainWindow::play()
{

    libvlc_instance_t * inst;
    libvlc_media_player_t *mp;
    libvlc_media_t *m;

    /* Load the VLC engine */
    inst = libvlc_new (0, NULL);

    if(!inst)
        std::cout << "Can't load video player plugins" << std::endl;


    m = libvlc_media_new_path (inst, "content.avi");

    /* Create a media player playing environment */
    mp = libvlc_media_player_new_from_media (m);

    HWND windowID = reinterpret_cast<HWND>(this->winId());

    /* It works without this line */
    libvlc_media_player_set_hwnd(mp, windowID);


    /* play the media_player */
    libvlc_media_player_play (mp);

    Sleep(uint(10000)); /* Let it play a bit */

    /* Stop playing */
    libvlc_media_player_stop (mp);

    /* Free the media_player */
    libvlc_media_player_release (mp);

    libvlc_release (inst);

}

main.cpp:

QApplication a(argc, argv);
MainWindow w;
w.show();

w.play();

return a.exec();

役立つ情報を事前にありがとう。

ダリアン

4

3 に答える 3

0

QFrame と libvlc_media_player_set_hwnd (player, reinterpret_cast (winId)); を使用します。しかし、私は libvlc_media_player_new を介してプレーヤーを作成し、メディアをそれに設定します。同じようにしてみては?

于 2013-09-29T00:54:44.567 に答える
0

この行を使用して、ビデオを再生する場所を指定しました。それは私のために働いています。videoWidget は通常の QWidget に他なりません。

libvlc_media_player_set_hwnd(m_player, (void*)ui->videoWidget->winId());

だからこれを試してください:

libvlc_media_player_set_hwnd(mp, (void*)this->winId());

編集:作業例を追加

Mac および Windows で動作し、Qt 4.8.1 は Qt 5.1.1 でもテストされています。VLC SDK は 2.2.0-git-20130728-0003 です。

#include <QApplication>
#include <QMainWindow>
#include <QDebug>
#include <vlc/vlc.h>

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);

    QMainWindow *window = new QMainWindow;
    QWidget *videoWidget = new QWidget;
    window->setCentralWidget(videoWidget);

    libvlc_media_player_t *m_player;
    libvlc_media_t *m_media;
    libvlc_instance_t *m_vlc;

    // load the vlc engine
    m_vlc = libvlc_new(0, NULL);

    // open media
    m_media = libvlc_media_new_path(m_vlc, "test.mp4");

    if (m_media == 0) {
        qDebug() << "not possible to open file";
        return 0;
    }

    m_player = libvlc_media_player_new_from_media(m_media);

    // no need to keep the media now
    libvlc_media_release(m_media);

#if defined(Q_OS_WIN) // Windows
    libvlc_media_player_set_hwnd(m_player, (void*)videoWidget->winId());
#elif defined(Q_OS_MAC) // Mac
    libvlc_media_player_set_nsobject(m_player, (void *)videoWidget->winId());
#else //Linux
    int windid = _videoWidget->winId();
    libvlc_media_player_set_xwindow (m_player, windid );
#endif

    libvlc_media_player_play(m_player);

    window->show();
    return a.exec();
}

残念ながら、出力ウィンドウにエラーが表示されます。

main vout display error: Failed to set on top

しかし、すべてが期待どおりに機能します。

于 2013-09-28T17:36:04.300 に答える