0

我正在创建一个可以流式传输多个 rtsp 客户端(摄像头)的 gstreamer 相机应用程序,并且我正在尝试将这些视频绑定到单个 GTK 小部件。但是,当我在 gtk 小部件上使用单个流运行应用程序时,它可以通过调用gst_bus_set_sync_handler()覆盖 gtk 小部件上的视频的 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,但它仍然只覆盖单个视频。

请评论。提前致谢。

4

1 回答 1

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 来实现这一点,因为它可以为您提供硬件加速。

于 2017-09-23T10:17:56.960 回答