フォノンを使用してビデオを再生しようとしましたが、成功しませんでした。Off-late は Qt フォーラムを通じて、Qt の最新バージョンでさえ phonon をサポートしていないことを知りました。それが私がGstreamerを使い始めたときです。Gstreamer ウィンドウを Qt ウィジェットに接続する方法について何か提案はありますか? 私の目的は、Qt ウィジェットで Gstreamer を使用してビデオを再生することです。では、Gstreamer ウィンドウと Qt ウィジェットをリンクするにはどうすればよいでしょうか?
Id
を介してウィジェットの取得に成功しましたwinid()
。さらに、Gregory Pakosz の助けを借りて、アプリケーションに以下の 2 行のコードを追加しました -
QApplication::syncX();
gst_x_overlay_set_xwindow_id(GST_X_OVERLAY(sink), widget->winId());
ただし、Qt ウィジェットを gstreamer ビデオ ウィンドウにリンクすることはできません。
これは私のサンプルコードがどのように見えるかです:-
int main(int argc, char *argv[])
{
printf("winid=%d\n", w.winId());
gst_init (NULL,NULL);
/* create a new bin to hold the elements */
bin = gst_pipeline_new ("pipeline");
/* create a disk reader */
filesrc = gst_element_factory_make ("filesrc", "disk_source");
g_assert (filesrc);
g_object_set (G_OBJECT (filesrc), "location", "PATH_TO_THE_EXECUTABLE", NULL);
demux = gst_element_factory_make ("mpegtsdemux", "demuxer");
if (!demux) {
g_print ("could not find plugin \"mpegtsmux\"");
return -1;
}
vdecoder = gst_element_factory_make ("mpeg2dec", "decode");
if (!vdecoder) {
g_print ("could not find plugin \"mpeg2dec\"");
return -1;
}
videosink = gst_element_factory_make ("xvimagesink", "play_video");
g_assert (videosink);
/* add objects to the main pipeline */
gst_bin_add_many (GST_BIN (bin), filesrc, demux, vdecoder, videosink, NULL);
/* link the elements */
gst_element_link_many (filesrc, demux, vdecoder, videosink, NULL);
gst_element_set_state(videosink, GST_STATE_READY);
QApplication::syncX();
gst_x_overlay_set_xwindow_id(GST_X_OVERLAY(videosink), w.winId());
/* start playing */
gst_element_set_state (bin, GST_STATE_PLAYING);
}
私のコンテキストで gst_x_overlay_set_xwindow_id() の使用法について詳しく説明していただけますか?
Qt で gstreamer を統合する方法についてヒントを得ることができますか? この問題を解決するのを手伝ってください。