This site has been retired. For up to date information, see handbook.gnome.org or gitlab.gnome.org.


[Home] [TitleIndex] [WordIndex

Rygel Architecture

Overview

Rygel is written completely in the Vala programming language, which generates GObject-based C code. Large parts of the code are available via shared-library APIs (such as librygel-server and librygel-renderer-gst) which are generally expected to be used via the documented C API.

Rygel is based on GUPnP. See the GUPnP API and tutorial documention and the GUPnP-AV documentation.

Rygel's default media engine uses GStreamer, but developers may implement alternative Rygel media engines to use other multimedia frameworks.

Dependencies

See the Rygel Architecture Diagram.

Program Flow

The following sections describe the interaction of Rygel's parts during UPnP operations.

Startup

At startup, Rygel performs the following steps:

Network Devices Appearing

When a network device appears, Rygel is notified by the GUPnPContextManager and then:

Network Devices Disappearing

When a network device disappears, Rygel is notified by the GUPnPContextManager and then:

Browsing

When a client application calls the UPnP Browse action on a Rygel server device, by sending a UPnP message, Rygel:

Searching

Searching is very similar to browsing. When a client application calls the UPnP Search action on a Rygel server device, by sending a UPnP message, Rygel:

Uploading

Uploading is a two-step process. First an object needs to be created with the UPnP CreateObject call, then the data needs to be uploaded, either by using the ImportResource UPnP call, requiring the data to be available via HTTP, or by using HTTP POST, posting to the res@importURI returned by the CreateObject call.

When a client application calls the UPnP CreateObject action on a Rygel server device, by sending a UPnP message, Rygel:

Uploading with HTTP POST

Uploading with ImportResource

Rendering

In principle, rendering is the process of setting an URI to play and then calling play.


2024-10-23 11:37