<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Arun Raghavan &#187; rygel</title>
	<atom:link href="http://arunraghavan.net/tag/rygel/feed/" rel="self" type="application/rss+xml" />
	<link>http://arunraghavan.net</link>
	<description>Extremely pithy tagline here</description>
	<lastBuildDate>Sat, 12 May 2012 10:50:34 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	
		<item>
		<title>GNOME Asia 2011</title>
		<link>http://arunraghavan.net/2011/03/gnome-asia-2011/</link>
		<comments>http://arunraghavan.net/2011/03/gnome-asia-2011/#comments</comments>
		<pubDate>Sun, 27 Mar 2011 07:24:15 +0000</pubDate>
		<dc:creator>Arun</dc:creator>
				<category><![CDATA[Blog]]></category>
		<category><![CDATA[f/oss]]></category>
		<category><![CDATA[gentoo]]></category>
		<category><![CDATA[gnome]]></category>
		<category><![CDATA[rygel]]></category>
		<category><![CDATA[soc]]></category>

		<guid isPermaLink="false">http://arunraghavan.net/?p=998</guid>
		<description><![CDATA[Just a quick (and late!) heads-up for all of you who missed it &#8212; the GNOME Asia Summit 2011 is happening in Bangalore this week, with a bunch of really cool people doing hackfests through the week, and whole bunch of talks on Saturday and Sunday (April 2nd and 3rd). I&#8217;ll be presenting a talk [...]]]></description>
			<content:encoded><![CDATA[<p>Just a quick (and late!) heads-up for all of you who missed it &#8212; the <a href="http://2011.gnome.asia/">GNOME Asia Summit 2011</a> is happening in Bangalore this week, with a bunch of really cool people doing hackfests through the week, and whole bunch of talks on Saturday and Sunday (April 2nd and 3rd).</p>

<p><img alt="" src="http://live.gnome.org/GnomeAsia/2011Summit/PromoteRegistration?action=AttachFile&#038;do=get&#038;target=iamspeaking_blue_plain.png" title="I&#039;m speaking at GNOME Asia 2011" class="alignright" width="190" height="121" /></p>

<p>I&#8217;ll be presenting a talk titled <em>DLNA in a GNOME 3 World</em>, talking about Rygel and the work we&#8217;ve been doing on <tt>gupnp-dlna</tt> to make DLNA rock on GNOME.</p>

<p>If you&#8217;re in or around Bangalore and contribute to or are interested in contributing to GNOME, you really have no excuse to not attend (heck, entry&#8217;s <em>free</em>). This applies doubly to students who are looking for cool stuff to do for the Google Summer of Code this year. So, do drop by and say hello! :)</p>
]]></content:encoded>
			<wfw:commentRss>http://arunraghavan.net/2011/03/gnome-asia-2011/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Updates from the Rygel + DLNA world</title>
		<link>http://arunraghavan.net/2010/08/updates-from-the-rygel-dlna-world/</link>
		<comments>http://arunraghavan.net/2010/08/updates-from-the-rygel-dlna-world/#comments</comments>
		<pubDate>Tue, 17 Aug 2010 14:30:32 +0000</pubDate>
		<dc:creator>Arun</dc:creator>
				<category><![CDATA[Blog]]></category>
		<category><![CDATA[collabora]]></category>
		<category><![CDATA[f/oss]]></category>
		<category><![CDATA[gnome]]></category>
		<category><![CDATA[gstreamer]]></category>
		<category><![CDATA[gupnp]]></category>
		<category><![CDATA[rygel]]></category>

		<guid isPermaLink="false">http://arunraghavan.net/?p=926</guid>
		<description><![CDATA[Things have been awfully quiet since Zeeshan&#8217;s posted about the work we&#8217;ve been doing on DLNA support in Rygel. Since I&#8217;ve released GUPnP DLNA 0.3.0, I thought this is a good time to explain what we&#8217;ve been up to. This is also a sort of expansion of my Lightning Talk from GUADEC, since 5 minutes [...]]]></description>
			<content:encoded><![CDATA[<p>Things have been awfully quiet since <a href="http://zee-nix.blogspot.com/">Zeeshan&#8217;s</a> posted about the work we&#8217;ve been doing on <a href="http://lists.o-hand.com/gupnp/0915.html">DLNA support in Rygel</a>. Since I&#8217;ve <a href="http://lists.o-hand.com/gupnp/0984.html">released GUPnP DLNA 0.3.0</a>, I thought this is a good time to explain what we&#8217;ve been up to. This is also a sort of expansion of my Lightning Talk from GUADEC, since 5 minutes weren&#8217;t enough to establish all the background I would have liked to.</p>

<p>For those that don&#8217;t know, the <a href="http://www.dlna.org/"><acronym title="Digital Living Network Alliance">DLNA</acronym></a> is a consortium that aims to standardise how various media devices around your house communicate with each other (that is, your home theater, TV, laptop, phone, tablet, &#8230;). One piece of this problem is having a standard way of identifying the <em>type</em> of a file, and communicating this between devices. For example, say your laptop (MediaServer in DLNA parlance) is sharing the movies you&#8217;ve got with your TV (MediaPlayer), and your TV can play only upto 720p H.264-encoded video. When the MediaServer is sharing files, it needs to provide sufficient information about the file so that the MediaPlayer knows whether it can play it or not, so that it can be intelligent about what files show up in its UI.</p>

<p>How the DLNA specification achieves this is by using &#8220;profiles&#8221;. For each media format supported by the DLNA specification, a number of profiles are defined, that identify the audio/video codec used, the container, and (in a sense) the complexity of decoding the file. (for multimedia geeks, that translates to things like the codec profile, resolution, framerate/samplerate, bitrate, etc.)</p>

<p>For example, if a file is indicated to be of a DLNA profile named <tt>AAC_ISO_320</tt>, this indicates that this is an audio file encoded with the AAC codec, contained in an MP4 container (that&#8217;s &#8220;ISO&#8221;), with a bitrate of at most 320 kbps. Similarly, a file with profile <tt>AVC_MP4_MP_SD_MPEG1_L3</tt> represents a file with H.264 (a.k.a. AVC) video coded in the H.264 Main Profile at specific resolutions upto 720&#215;576, MP3 audio, in an MP4 container (there are more restrictions, but I don&#8217;t want to swamp you with details).</p>

<p>So now we have a problem statement &#8211; given a media file, we need to get the corresponding DLNA profile. It&#8217;s easiest to break this problem into 3 pieces:</p>

<ol>
<li><p><em>Discovery</em>: First we need to get all the metadata that the DLNA specification requires us to check. Using GStreamer and <a href="http://blogs.gnome.org/edwardrv">Edward&#8217;s</a> <a href="http://blogs.gnome.org/edwardrv/2009/11/30/the-result-of-the-past-few-months-of-hacking/"><tt>gst-convenience</tt></a> library, getting the metadata we needed was reasonably simple. Where the metadata wasn&#8217;t available (mostly codec profiles and bitrate), I&#8217;ve tried to expose the required data from the corresponding GStreamer plugin.</p></li>
<li><p><em>DLNA Profiles</em>: I won&#8217;t rant much about the DLNA specification, because that&#8217;s a whole series of blog posts in itself, but the spec is sometimes overly restrictive and doesn&#8217;t support a number of popular formats (Matroska, AVI, DivX, OGG, Theora). With this in mind, we decided that it would be nice to have a generic way to store the constraints specified by the DLNA specification and use them in our library. We chose to store the profile constraints in XML files. This allows non-programmers to tweak the profile data when their devices resort to non-standard methods to work around the limitations of the DLNA spec.</p></li>
<li><p><em>Matching</em>: With 1. and 2. above in place, we just need some glue code to take the metadata from discovery and match it with the profiles loaded from disk. For the GStreamer hackers in the audience, the profile storage format we chose looks suspiciously like serialized GstCaps, so matching allows us to reuse some GStreamer code. Another advantage of this will be revealed soon.</p></li>
</ol>

<p>So there you have it folks, this covers the essence of what GUPnP DLNA does. So what&#8217;s next?</p>

<ol>
<li><p><em>Frankie Says Relax</em>: Since the DLNA spec can often be too strict about what media is supported, we&#8217;ve decided to introduce a soon-to-come &#8220;relaxed mode&#8221; which should make a lot more of your media match some profile.</p></li>
<li><p><em>I Can Haz Trancoding</em>: While considering how to store the DLNA profiles loaded from the XML on disk, we chose to use <tt>GstEncodingProfile</tt>s from the <tt>gst-convenience</tt> library since the restrictions defined by the DLNA spec closely resemble the kind of restrictions you&#8217;d expect to set while encoding a file (codec, bitrate, resolution, etc. again). One nice fallout of this is that (in theory), it should be easy to reuse these to transcode media that doesn&#8217;t match any profile (the <tt>encodebin</tt> plugin from <tt>gst-convenience</tt> makes this a piece of cake). That is, if GStreamer can play your media, Rygel will be able to stream it.</p></li>
</ol>

<p>Apart from this, we&#8217;ll be adding support for more profiles, extending the API as more uses arise, adding more automated tests, and on and on. If you&#8217;re interested in the code, check out (sic) the <a href="http://gitorious.org/gupnp/gupnp-dlna">repository on Gitorious</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://arunraghavan.net/2010/08/updates-from-the-rygel-dlna-world/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>(Gst)Discovering Vala</title>
		<link>http://arunraghavan.net/2010/01/gstdiscovering-vala/</link>
		<comments>http://arunraghavan.net/2010/01/gstdiscovering-vala/#comments</comments>
		<pubDate>Sat, 16 Jan 2010 10:55:17 +0000</pubDate>
		<dc:creator>Arun</dc:creator>
				<category><![CDATA[Blog]]></category>
		<category><![CDATA[collabora]]></category>
		<category><![CDATA[f/oss]]></category>
		<category><![CDATA[gnome]]></category>
		<category><![CDATA[gstreamer]]></category>
		<category><![CDATA[rygel]]></category>
		<category><![CDATA[work]]></category>

		<guid isPermaLink="false">http://arunraghavan.net/?p=883</guid>
		<description><![CDATA[My exploits at Collabora Multimedia currently involve a brief detour into hacking on Rygel, specifically improving the DLNA profile name guessing. We wanted to use Edward&#8216;s work on GstDiscoverer work, and Rygel is written in Vala, so the first thing to do was write Vala bindings for GstDiscoverer. This turned out to be somewhat easier [...]]]></description>
			<content:encoded><![CDATA[<p>My exploits at <a href="http://www.collabora.co.uk/about/multimedia">Collabora Multimedia</a> currently involve a brief detour into hacking on <a href="http://live.gnome.org/Rygel">Rygel</a>, specifically improving the <a href="http://www.dlna.org/">DLNA</a> profile name guessing. We wanted to use <a href="http://blogs.gnome.org/edwardrv">Edward</a>&#8216;s work on <a href="http://blogs.gnome.org/edwardrv/2009/11/30/the-result-of-the-past-few-months-of-hacking/">GstDiscoverer work</a>, and Rygel is written in Vala, so the first thing to do was write Vala bindings for GstDiscoverer. This turned out to be somewhat easier and more difficult than initially thought. :)</p>

<p>There&#8217;s a nice <a href="http://live.gnome.org/Vala/Bindings">tutorial</a> for generating Vala bindings that serves as a good starting point. The process basically involves running a tool called <tt>vapigen</tt>, which examines your headers and libraries, and generates a <a href="http://live.gnome.org/GObjectIntrospection">GIR</a> file from them (it&#8217;s an XML file describing your GObject-based API). It then converts this GIR file into a &#8220;VAPI&#8221; file which describes the API in a format that Vala can understand. Sounds simple, doesn&#8217;t it?</p>

<p>Now if only it were <em>that</em> simple :). The introspected file is not perfect, which means you need to manually annotate some bits to make sure the generated VAPI accurately represents the C API. These annotations are specified in a metadata file. You need to include things like &#8220;the string returned by this function must be freed by the caller&#8221; (that&#8217;s a <tt>transfer_ownership</tt>), or, object type <tt>Foo</tt> is derived from object type <tt>FooDaddy</tt>
(specified using the <tt>base_class</tt> directive). Not all these directives are documented, so you might need to grok around the sources (specifically, <tt>vapigen/valagidlparser.vala</tt>) and ask on IRC (<tt>#vala</tt> on <tt>irc.gnome.org</tt>).</p>

<p>All said and done, the process really is quite straightforward. The work is in [my gst-convenience repository][arun-gst-conv-ks.git] right now (should be merged with the main repository soon). I really must thank all the folks on <tt>#vala</tt> who helped me with all the questions and some of the bugs that I discovered. Saved me a lot of frustration!</p>

<p>I&#8217;ve already got Rygel using these bindings, though that&#8217;s not been integrated yet. More updates in days to come.</p>
]]></content:encoded>
			<wfw:commentRss>http://arunraghavan.net/2010/01/gstdiscovering-vala/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

