Implementing Renderers: Full Example

The external rygel-gst-0-10-fullscreen-renderer project provides a Rygel Renderer executable that uses an older GStreamer version and is an example of an external Rygel Renderer implemented in C, based on the implementation code in librygel-renderer-gst. It plays content via UPnP.

The RygelPlaybinPlayer class implements the RygelMediaPlayer interface, providing implementations for its virtual functions. For instance, see the rygel_playbin_player_real_set_uri() function, which delegates to the member GstPlaybin GstElement. The base class responds appropriately to UPnP messages, calling these virtual functions to request the specific behaviour.

The RygelPlaybinRenderer class, derived from RygelMediaRenderer, provides the singleton instance of that player to its base class and has a rygel_playbin_renderer_get_playbin() function for convenience.

Our main() instantiates our derived renderer and calls rygel_playbin_renderer_get_playbin() to get its GStreamer playbin element. We then use gst_x_overlay_set_window_handle() in our GtkWidget:realize signal handler. We connect the renderer to a network interface via rygel_media_device_add_interface, allowing the renderer to respond to UPnP messages.