11

Qtを使用して、ローカルビデオファイルを再生できる単純なGUIアプリケーションを作成したいと思います。舞台裏ですべての作業を行うフォノンを使用することもできますが、もう少し制御する必要があります。私はすでに、decodebin要素とautovideosink要素を使用してGStreamerパイプラインを実装することに成功しています。ここで、Qtウィジェットを使用して出力をチャネルします。

誰かがこれを行うことに成功したことがありますか?(GStreamerに基づいて構築されたQtベースのビデオプレーヤーがあるのでそうだと思います。)誰かがそれを行う方法について正しい方向に私を向けることができますか?

注:この質問は、Qtを着信RTPストリームに接続する方法について以前に投稿した質問と似ています。これは非常に難しいようでした。この質問に答えるのは簡単だと思います。

アップデート1

libVLCを使用するというPatriceの提案は、すでに非常に役立ちます。VLCのWebサイトにあるコードのややクリーンなバージョンは次の とおりです。Qt+libVLCのサンプル。ただし、元の質問は残っています。GStreamerをQtウィジェットに接続するにはどうすればよいですか。

アップデート2

いくつかの実験の後、私はこの作業サンプルに行き着きました。それは私自身の小さなGstSupportライブラリのGstWidget.hGstWidget.cppに依存しています。ただし、これは現在MacバージョンのQtでのみテストされていることに注意してください。

4

3 に答える 3

8

GstreamerをQWidgetに接続するには、を使用してウィンドウハンドルを取得し、QWidget::winId()それをに渡す必要があります。gst_x_overlay_set_xwindow_id();

大まかなサンプルコード:

    sink = gst_element_factory_make("xvimagesink", "sink");
    gst_element_set_state(sink, GST_STATE_READY);

    QApplication::syncX();
    gst_x_overlay_set_xwindow_id(GST_X_OVERLAY(sink), widget->winId());

Qt::AA_NativeWindowsまた、アプリケーションレベルで属性を設定するかQt::WA_NativeWindow、ウィジェットレベルで属性を設定することで実現される、ネイティブウィンドウによってウィジェットをサポートする必要があります。

于 2009-12-17T11:58:36.870 に答える
7

Phononはgstreamerに基づいているため、詳細を探す場所はPhononソースツリーです(ここで入手可能:http://gitorious.org/phonon/import/trees/master)。ビデオプレーヤーの場合、X11レンダラー(gstreamer / x11renderer.hcpp )を使用するgstreamer / videowidget.hcpp )などのビデオ表示ウィジェットが必要になる可能性があります。使用されるシンクはxvimagesinkであり、最初のシンク作成できない場合はximagesinkにフォールバックします。

基本的なトリックは、VideoWidgetをビデオ出力でオーバーレイすることです。これを行うために必要なX11ハンドルは、プラットフォーム固有のQWidget :: winIdメソッドを使用して取得されます(シンクと同様、大きな問題はありません)。

また、オーバーレイが使用できない場合は、QWidgetVideoSinkが使用され、ビデオフレームがWidgetRendererクラスの個々のフレームに変換されます。このクラスは、現在のフレームをQImageオブジェクトとして使用できるようにし、あらゆるタイプの処理に対応できるようにします。

したがって、質問に答えるには、オーバーレイを使用するか(X11Rendererとして)、ビデオストリームから個々のQImageを抽出します(QWidgetVideoSinkとして)

于 2009-12-14T09:46:00.280 に答える
3

VLCバージョンはQTベースのビデオプレーヤーです(バージョン0.99以降)。ストリームのストリーミングや読み取りも可能です。必要なすべての情報は、http ://wiki.videolan.org/Developers_Cornerで見つけることができます。プレーヤーのインスタンスを作成し、それをウィジェットに関連付けるだけです。次に、プレーヤーを完全に制御できます。

私はすでに(LinuxとWindowsで)ローカルの音楽とビデオファイルを再生してテストしましたが、正常に動作します。

試してみて、自分で見てください。

お役に立てば幸いです。

編集: VLCを使用する場合は、 videolan wiki で説明されているように、GStreamerコーデックを作成または検索する必要があるようです(存在するかどうかはわかりません)。私はそうするだろうと思います。

于 2009-12-09T11:17:56.860 に答える