将多个gstreamer视频窗口绑定到单个GTK小部件(RTSP流)

时间:2017-07-10 13:17:12

标签: gstreamer-1.0

我正在创建一个gstreamer相机应用程序,它可以流式传输多个rtsp客户端(凸轮),我正在尝试将这些视频绑定到一个GTK小部件。 但是,当我在gtk小部件上运行带有单个流的应用程序时,通过调用覆盖gtk小部件上的视频的gst_bus_set_sync_handler() api,它可以很好地播放,如下所示:

overlay = GST_VIDEO_OVERLAY (GST_MESSAGE_SRC (message));
gst_video_overlay_set_window_handle (overlay, xid);

gst_message_unref (message);

现在我遇到了绑定多个rtsp流式视频的问题,并且不确定如何使用gst_bus_set_sync_handler()来传递多条消息。 我尝试创建多个绘图区域和XID,但它仍然只覆盖单个视频。

请评论。提前谢谢。

1 个答案:

答案 0 :(得分:0)

我面临着完全相同的问题。     有可能在一个窗口中嵌入多个场景,类似于使用clutter-gst框架的单个场景示例:

    https://github.com/ruby-gnome2/ruby-gnome2/issues/225

但是,我已经尝试过,但在创建多个混乱场景时:

GtkWidget *clutter0 = gtk_clutter_embed_new();
GtkWidget *clutter1 = gtk_clutter_embed_new();

将它们包含在GTK窗口中:

GtkWidget *hbox = gtk_box_new(GTK_ORIENTATION_HORIZONTAL, 0);
gtk_box_pack_start(GTK_BOX(vbox), hbox, TRUE, TRUE, 0);
gtk_box_pack_start(GTK_BOX(hbox), clutter0, TRUE, TRUE, 0);
gtk_box_pack_start(GTK_BOX(hbox), clutter1, TRUE, TRUE, 0);
tk_container_add(GTK_CONTAINER(window), vbox);

为了更好的可读性,我没有包含流代码,但它足以生成错误

它为我无法解决的第二个问题产生了这个错误:

(gstreamergtkclutterplayer:11614): Clutter-CRITICAL **: Unable to retrieve the geometry of the foreign window: XGetGeometry() failed (status code: 1)

我想我读过它可能只打开某个接收器的一个实例,例如gleglessink用于一个视频流,你不能再使用这个接收器,你必须使用例如ximagesink,但根据我的经验,这样做不适用于所有的接收器,一些接收器可以针对许多流进行实例化,但是我想通过cluttersink实现这一点,因为它可以为您提供硬件加速。