GStreamer如何让videosink在指定的窗口进行图像绘制?

想让xvimagesink/ximagesink这样的element在我们指定的窗口中绘制video?简单的很: 

1. new一个GtkDrawingArea 
2. connect它的expose-event signal,e.g: 

// Drawing on our drawing area 
g_signal_connect(G_OBJECT(area), "expose-event", G_CALLBACK(expose_cb), NULL); 

3. 书写callback函数expose_cb,e.g: 

 

/*  Callback to be called when the drawing area is exposed  */
static  gboolean expose_cb(GtkWidget  *  widget, GdkEventExpose  *   event , gpointer data)
{
    
//  `play->videosink'就是video sink element
    gst_x_overlay_set_xwindow_id(GST_X_OVERLAY(play -> videosink),
                         GDK_WINDOW_XWINDOW(widget
-> window));
    
return  FALSE;
}

 

 

这样就OK了。expose-event是drawingarea每次重绘的时候会发出的signal,应该说每次重绘都去set一遍不是很好,的确是这样,可以再改进。这里纯粹是演示一下。 

你可能感兴趣的:(Stream)