{"id":197,"date":"2010-03-12T15:02:09","date_gmt":"2010-03-12T14:02:09","guid":{"rendered":"http:\/\/blogs.igalia.com\/itoral\/?p=197"},"modified":"2010-03-12T15:02:09","modified_gmt":"2010-03-12T14:02:09","slug":"197","status":"publish","type":"post","link":"https:\/\/blogs.igalia.com\/itoral\/2010\/03\/12\/197\/","title":{"rendered":"Grilo and Rygel"},"content":{"rendered":"<p>After knowing about <strong>Grilo<\/strong>, <strong>Bastien<\/strong> proposed to use it as a helper library to implement <strong><a href=\"http:\/\/live.gnome.org\/Rygel\/MediaServerSpec\">Rygel&#8217;s MediaServer D-Bus API spec<\/a><\/strong>. This <em>D-Bus API<\/em> specifies how content providers can expose content over <em>D-Bus<\/em> that <strong>Rygel<\/strong> can consume and then export to the <em>UPnP<\/em> world. Although this spec was developed for <em>Rygel<\/em> in particular, it aims to be generic enough so other applications could use it to consume content over <em>D-Bus<\/em> directly.<\/p>\n<p>The idea is to decouple providers and consumers, this way one does not have to worry about the language they are written in and providers don&#8217;t have to be loaded in the consumer&#8217;s address space, instead they are communicated through <em>D-Bus<\/em>.<\/p>\n<p>So, what could be <strong>Grilo<\/strong>&#8216;s role in this context? <a href=\"http:\/\/blogs.igalia.com\/itoral\/2010\/02\/10\/grilo\/\">As you know<\/a>, <em>Grilo<\/em> is a pluggable framework that provides a single, high-level API to consume contents from various sources (Youtube, Jamendo, SHOUTcast, etc) which are implemented as plugins for the framework. As such, the role of <em>Grilo<\/em> would be that of a content provider. <strong><a href=\"http:\/\/blogs.igalia.com\/jasuarez\/\">Juan<\/a><\/strong> has been working on a daemon that would use <em>Grilo<\/em> to get access to all the content exposed by the framework and expose it over <em>D-Bus<\/em> according to <em>Rygel&#8217;s MediaServer spec<\/em>. This will enable <em>Rygel<\/em> (or any other application), to get access to all this content over <em>D-Bus<\/em>.<\/p>\n<p>As of today, I think only <em>Rygel<\/em> has implemented the consumer side of this API, but the idea is that in the future other applications like <em>Totem<\/em> or <em>Rhythmbox<\/em> would have plugins to consume it too. Also, since <em>Rygel<\/em> is a <em>UPnP<\/em> server, and it is feeding on <em>Grilo<\/em> through this <em>D-Bus<\/em> interface, it is also exposing <em>Grilo&#8217;s<\/em> contents to the <em>UPnP<\/em> world, so any <em>UPnP<\/em> client should be able to access these contents over <em>UPnP<\/em> thanks to <em>Rygel<\/em>. <em>Totem<\/em> for example, has a <em>UPnP<\/em> plugin already, and because of that it can consume the contents from <em>Grilo<\/em> through <em>Rygel<\/em> even when it does not implement the consumer API of the <em>MediaServer spec<\/em>.<\/p>\n<p>If you are interested in more details <strong><a href=\"http:\/\/blogs.igalia.com\/jasuarez\/2010\/03\/12\/rygel-are-you-hungry\/\">check Juan&#8217;s post here<\/a><\/strong>. There you will also find a screencast showcasing a <em>Grilo-powered<\/em> daemon that&#8217;s exposing content from various of its plugins over <em>D-Bus<\/em>, then <em>Rygel<\/em> feeding on that and exposing them over <em>UPnP<\/em>, and finally <em>Totem<\/em> consuming all the content though its <em>UPnP<\/em> plugin. Of course, you may ask why wouldn&#8217;t <em>Totem<\/em> feed on <em>D-Bus<\/em> directly, well just because it has the <em>UPnP<\/em> plugin already and not the <em>D-Bus<\/em> one, but it will come ;).<\/p>\n<p>Talking about that, another thing that <strong>Bastien<\/strong> proposed and on which we will be working too, is a set of helper libraries to ease development of content producers and consumers. On the producer side (backends) the idea would be to hide all the <em>D-Bus<\/em> stuff and provide a clean, easy to use interface for exposing content to the bus (for those not wanting to deal with <em>D-Bus <\/em>directly), and on the consumer side (frontends), we could do the same and maybe add some extra bonus stuff, like widgets to manipulate available sources and the like.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>After knowing about Grilo, Bastien proposed to use it as a helper library to implement Rygel&#8217;s MediaServer D-Bus API spec. This D-Bus API specifies how content providers can expose content over D-Bus that Rygel can consume and then export to the UPnP world. Although this spec was developed for Rygel in particular, it aims to &hellip; <a href=\"https:\/\/blogs.igalia.com\/itoral\/2010\/03\/12\/197\/\" class=\"more-link\">Continue reading<span class=\"screen-reader-text\"> &#8220;Grilo and Rygel&#8221;<\/span><\/a><\/p>\n","protected":false},"author":16,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1],"tags":[4],"class_list":["post-197","post","type-post","status-publish","format-standard","hentry","category-uncategorized","tag-grilo"],"_links":{"self":[{"href":"https:\/\/blogs.igalia.com\/itoral\/wp-json\/wp\/v2\/posts\/197","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/blogs.igalia.com\/itoral\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/blogs.igalia.com\/itoral\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/blogs.igalia.com\/itoral\/wp-json\/wp\/v2\/users\/16"}],"replies":[{"embeddable":true,"href":"https:\/\/blogs.igalia.com\/itoral\/wp-json\/wp\/v2\/comments?post=197"}],"version-history":[{"count":0,"href":"https:\/\/blogs.igalia.com\/itoral\/wp-json\/wp\/v2\/posts\/197\/revisions"}],"wp:attachment":[{"href":"https:\/\/blogs.igalia.com\/itoral\/wp-json\/wp\/v2\/media?parent=197"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blogs.igalia.com\/itoral\/wp-json\/wp\/v2\/categories?post=197"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blogs.igalia.com\/itoral\/wp-json\/wp\/v2\/tags?post=197"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}