我正在创建一个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,但它仍然只覆盖单个视频。
请评论。提前谢谢。
答案 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实现这一点,因为它可以为您提供硬件加速。