<?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>The adventures of Foo</title>
	<atom:link href="http://jensge.org/feed/" rel="self" type="application/rss+xml" />
	<link>http://jensge.org</link>
	<description>My aggregated random tech blabber</description>
	<lastBuildDate>Mon, 03 Jun 2013 08:27:17 +0000</lastBuildDate>
	<language>en-US</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.5.1</generator>
		<item>
		<title>GNOME.Asia 2013</title>
		<link>http://jensge.org/2013/05/gnome-asia-2013/</link>
		<comments>http://jensge.org/2013/05/gnome-asia-2013/#comments</comments>
		<pubDate>Fri, 31 May 2013 12:30:36 +0000</pubDate>
		<dc:creator>Jens</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[DLNA]]></category>
		<category><![CDATA[English]]></category>
		<category><![CDATA[Gnome]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[rygel]]></category>
		<category><![CDATA[UPnP]]></category>

		<guid isPermaLink="false">http://jensge.org/?p=885</guid>
		<description><![CDATA[A bit late for the &#8220;I&#8217;m back from this year&#8217;s GNOME.Asia&#8221; post, but well. This was the fist GNOME.Asia event I attended and even my first time in asia and it was a very interesting experience that needs repeating. It &#8230; <a href="http://jensge.org/2013/05/gnome-asia-2013/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
				<content:encoded><![CDATA[<p><img class="size-medium wp-image-886 alignleft" style="border-color: #bbbbbb; margin-top: 0.4em; background-color: #eeeeee;" alt="DSCF0524_RAF_embedded" src="http://jensge.org/wp-content/uploads/2013/05/DSCF0524_RAF_embedded-300x225.jpg" width="300" height="225" /></p>
<p>A bit late for the &#8220;I&#8217;m back from <a href="http://2013.gnome.asia" target="_blank">this year&#8217;s GNOME.Asia</a>&#8221; post, but well. This was the fist GNOME.Asia event I attended and even my first time in asia and it was a very interesting experience that needs repeating. It was nice to meet all those people from around this part of the world who never make it to the european conference and I was particularly pleased to meet Jiro who enabled i18n support in the GUPnP tools and to learn about the &lt;Super&gt;M shortcut to get the message bar. Unfortunately I couldn&#8217;t join the city tour on Sunday since I was already heading back to London then.</p>
<p>I did a talk on DLNA (who would have guessed that) in GNOME and some of the things that might come: <a href="http://jensge.org/wp-content/uploads/2013/05/gnome-asia-2013.pdf">Slides of the talk.</a> I&#8217;m afraid the blog post on setting up a hardware-accelerated DLNA renderer on the Raspberry Pi that I announced during the talk is still not written, sorry about that.</p>
<p>A big thanks to the the cheerful local team, the GNOME.Asia people and of course the sponsors who made all this possible and thanks to the GNOME foundation for sponsoring my attendence.</p>
<p><a href="http://jensge.org/wp-content/uploads/2013/05/sponsored-badge-simple.png"><img class="size-full wp-image-888 alignnone" alt="sponsored-badge-simple" src="http://jensge.org/wp-content/uploads/2013/05/sponsored-badge-simple.png" width="213" height="213" /></a></p>
]]></content:encoded>
			<wfw:commentRss>http://jensge.org/2013/05/gnome-asia-2013/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>DLNA, client side</title>
		<link>http://jensge.org/2013/04/dlna-client-side/</link>
		<comments>http://jensge.org/2013/04/dlna-client-side/#comments</comments>
		<pubDate>Thu, 25 Apr 2013 12:51:43 +0000</pubDate>
		<dc:creator>Jens</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[DLNA]]></category>
		<category><![CDATA[English]]></category>
		<category><![CDATA[Gnome]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[UPnP]]></category>

		<guid isPermaLink="false">http://jensge.org/?p=857</guid>
		<description><![CDATA[While we were busy fixing the server and rendering side of DLNA with Rygel, the guys at Intel OTC are fixing the Client side of DLNA with something called dLeyna, a nice set of APIs to access and maipulate UPnP-AV &#8230; <a href="http://jensge.org/2013/04/dlna-client-side/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
				<content:encoded><![CDATA[<p>While we were busy fixing the server and rendering side of DLNA with <a href="http://rygel-project.org" target="_blank">Rygel</a>, the guys at Intel OTC are fixing the Client side of DLNA with something called <a href="https://01.org/dleyna/" target="_blank">dLeyna</a>, a nice set of APIs to access and maipulate UPnP-AV and DLNA servers / renderers (such as Rygel, of course), so you can easily add DLNA support to your applications, including the obvious server browsing and render remote control, but also the more non-obvious like media pushing, synchronization, server-side playlists. They already prepared a cool set of demos (for example a <a href="https://github.com/01org/telerender" target="_blank">Firefox extension</a> to send images from your browser to your TV).</p>
<p>So why is this better than using <a href="http://gupnp.ogr" target="_blank">GUPnP</a> for this? Let me show you some examples.</p>
<h2>Controlling a renderer</h2>
<p>Not much code to see here, you get the usual suspects of player control functions such as start, stop, etc. as well as methods to query device&#8217;s capabilities as there are a lot of optional things on UPnP devices.</p>
<h2>Uploading</h2>
<p>Well, say you want to upload a file to a server. The <a href="https://git.gnome.org/browse/gupnp-tools/tree/src/upload" target="_blank">code how to do that in GUPnP is  available in gupnp-tools</a> and it&#8217;s not exactly pretty. With dLeyna, on the other hand, it&#8217;s a fewliner:</p>

<div class="wp_syntax"><table><tr><td class="code"><pre class="python" style="font-family:monospace;"><span style="color: #808080; font-style: italic;">#!/usr/bin/env python</span>
<span style="color: #ff7700;font-weight:bold;">import</span> <span style="color: #dc143c;">sys</span>
<span style="color: #ff7700;font-weight:bold;">import</span> mediaconsole <span style="color: #ff7700;font-weight:bold;">as</span> mc
&nbsp;
u <span style="color: #66cc66;">=</span> mc.<span style="color: black;">UPNP</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>
d <span style="color: #66cc66;">=</span> u.<span style="color: black;">server_from_udn</span><span style="color: black;">&#40;</span><span style="color: #dc143c;">sys</span>.<span style="color: black;">argv</span><span style="color: black;">&#91;</span><span style="color: #ff4500;">1</span><span style="color: black;">&#93;</span><span style="color: black;">&#41;</span>
d.<span style="color: black;">upload_to_any</span><span style="color: black;">&#40;</span><span style="color: #dc143c;">sys</span>.<span style="color: black;">argv</span><span style="color: black;">&#91;</span><span style="color: #ff4500;">2</span><span style="color: black;">&#93;</span><span style="color: #66cc66;">,</span> <span style="color: #dc143c;">sys</span>.<span style="color: black;">argv</span><span style="color: black;">&#91;</span><span style="color: #ff4500;">3</span><span style="color: black;">&#93;</span><span style="color: black;">&#41;</span></pre></td></tr></table></div>

<p>In DLNA land, this is called &#8220;+UP+&#8221;.</p>
<h2>Playing a file</h2>
<p>Or you want to show some media file you got on your device or app on a DLNA-capable TV? <a href="https://github.com/phako/korva/tree/master/server/upnp" target="_blank">Korva is showing how you can do that with plain GUPnP</a>, again with a lots of lines of code. dLeyna providing a nice and clean solution:</p>

<div class="wp_syntax"><table><tr><td class="code"><pre class="python" style="font-family:monospace;"><span style="color: #808080; font-style: italic;">#!/usr/bin/env python</span>
<span style="color: #ff7700;font-weight:bold;">import</span> <span style="color: #dc143c;">sys</span>
<span style="color: #ff7700;font-weight:bold;">import</span> rendererconosle <span style="color: #ff7700;font-weight:bold;">as</span> rc
m <span style="color: #66cc66;">=</span> rc.<span style="color: black;">Manager</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>
d <span style="color: #66cc66;">=</span> m.<span style="color: black;">renderer_from_udn</span><span style="color: black;">&#40;</span><span style="color: #dc143c;">sys</span>.<span style="color: black;">argv</span><span style="color: black;">&#91;</span><span style="color: #ff4500;">1</span><span style="color: black;">&#93;</span><span style="color: black;">&#41;</span>
uri <span style="color: #66cc66;">=</span> d.<span style="color: black;">host_file</span><span style="color: black;">&#40;</span><span style="color: #dc143c;">sys</span>.<span style="color: black;">argv</span><span style="color: black;">&#91;</span><span style="color: #ff4500;">2</span><span style="color: black;">&#93;</span><span style="color: black;">&#41;</span>
d.<span style="color: black;">stop</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span>
d.<span style="color: black;">open_uri</span><span style="color: black;">&#40;</span>uri<span style="color: black;">&#41;</span>
d.<span style="color: black;">play</span><span style="color: black;">&#40;</span><span style="color: black;">&#41;</span></pre></td></tr></table></div>

<p>And this is called &#8220;+PU+&#8221; in DLNA land.</p>
<p>Behind the scenes, this is all GUPnP of course. Currently it consists of two DBus services, dleyna-renderer-service and dleyna-server-service, although other IPC mechanisms are on its way. What happens is that that these two services scan the network for available devices and making them available through a set of DBus interfaces, relieving you from the need of searching for devices yourself (and with that providing a device cache, relieving the network from UDP packet bursts), introspecting the devices for supported capabilities and methods and so on.</p>
<p>If you execute the push script from above you get a python wrapper for the com.intel.dLeynaRenderer.Manager DBus interface, which is then locally looking for the DBus path matching the given UPnP UDN and returning a python object implementing the com.intel.dLeynaRenderer.PushHost and com.intel.dLeynaRenderer.RendererDevice interfaces.</p>
<p>Then we temporarily host the file given on the command-line on dLeyna&#8217;s internal HTTP server, stopping the currently running playback (Which translates to RenderingControl:Stop SOAP call), send the URI to the server (RenderingControl:SetAVTransportURI) and last but not least start the playback (RenderingControl:Play) which in the end starts the HTTP streaming from dleyna&#8217;s internal HTTP server to (Rygel&#8217;s) renderer.</p>
<p>And it doesn&#8217;t stop at the application level, there&#8217;s even integration with HTML5 through cloudeebus and cloud-dLeyna.</p>
<p>As a sidenote: You might ask how that relates to Grilo&#8217;s UPnP-AV support or Korva. This is a very valid question. Grilo and Korva are doing very specific tasks while dLeyna aims to be a more complete SDK. It should be quite easy, for example, to port Grilo&#8217;s UPnP-AV suppport to dLeyna.</p>
]]></content:encoded>
			<wfw:commentRss>http://jensge.org/2013/04/dlna-client-side/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Certification time</title>
		<link>http://jensge.org/2013/04/certification-time/</link>
		<comments>http://jensge.org/2013/04/certification-time/#comments</comments>
		<pubDate>Tue, 02 Apr 2013 09:39:12 +0000</pubDate>
		<dc:creator>Jens</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[English]]></category>
		<category><![CDATA[Gnome]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[UPnP]]></category>

		<guid isPermaLink="false">http://jensge.org/?p=843</guid>
		<description><![CDATA[For the second time (at least that we know of) software based on GUPnP has been successfully certified by the UPnP Forum. Cloud-dLeyna, providing UPnP-AV/DLNA client APIs to HTML5, has achieved UPnP certification recently: https://lists.01.org/pipermail/dleyna/2013-March/000115.html]]></description>
				<content:encoded><![CDATA[<p>For the second time (at least that we know of) software based on <a href="http://gupnp.org" target="_blank">GUPnP</a> has been successfully certified by the <a href="http://www.upnp.org" target="_blank">UPnP Forum</a>. Cloud-<a href="http://01.org/dleyna" target="_blank">dLeyna</a>, providing UPnP-AV/DLNA client APIs to HTML5, has achieved UPnP certification recently: <a href="https://lists.01.org/pipermail/dleyna/2013-March/000115.html">https://lists.01.org/pipermail/dleyna/2013-March/000115.html</a></p>
]]></content:encoded>
			<wfw:commentRss>http://jensge.org/2013/04/certification-time/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Rygel progress in current master</title>
		<link>http://jensge.org/2013/01/rygel-progress-in-current-master/</link>
		<comments>http://jensge.org/2013/01/rygel-progress-in-current-master/#comments</comments>
		<pubDate>Sun, 20 Jan 2013 15:34:51 +0000</pubDate>
		<dc:creator>Jens</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[DLNA]]></category>
		<category><![CDATA[English]]></category>
		<category><![CDATA[Gnome]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[OSS]]></category>
		<category><![CDATA[rygel]]></category>
		<category><![CDATA[UPnP]]></category>

		<guid isPermaLink="false">http://jensge.org/?p=834</guid>
		<description><![CDATA[It&#8217;s been a while since I last blogged about Rygel. Many things have happened since, mainly in features and documentation. Features Exchangeable media engines: We&#8217;ve loosened the dependency on GStreamer a bit. While it is still our first-class transcoding and general &#8230; <a href="http://jensge.org/2013/01/rygel-progress-in-current-master/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
				<content:encoded><![CDATA[<p>It&#8217;s been a while since I last blogged about Rygel. Many things have happened since, mainly in features and documentation.</p>
<h2>Features</h2>
<ul>
<li>Exchangeable media engines: We&#8217;ve loosened the dependency on GStreamer a bit. While it is still our first-class transcoding and general media handling library, it is now possible to substitute it with other media processing libraries. <a href="http://git.gnome.org/browse/rygel/tree/src/media-engines/simple" target="_blank">A simple example is included in the source</a>.</li>
<li>Change tracking. This is a feature introduced in the UPnP content directory specification version 3. It allows clients to, well, track the changes that happen on the server in detail for synchronization purposes. It&#8217;s implemented in the framework and as a demonstration in the MediaExport plug-in.</li>
<li>GStreamer 1.0 support. As the rest of GNOME, we transitioned to GStreamer 1.0.</li>
<li>Playlist support. Rygel now generates playlists for containers on-the-fly and the renderer framework supports automatic playback of them. The only format that&#8217;s supported currently is one of the two formats defined by DLNA, DIDL_S, which is just the same format that is used by UPnP AV to describe the media content on a server.</li>
<li>Playspeed support. A renderer now can announce that it supports different speeds and directions than normal forward playback.</li>
</ul>
<h2>API</h2>
<p>There was another split-up into a renderer framework library and a specific implementation of a renderer using GStreamer which again may be used in your own programs. This is mainly due to the aforementioned change in media backend flexibility.</p>
<p>Otherwise we&#8217;re working on making the API easier to use from C and other languages through introspection.</p>
<h2>Documentation</h2>
<p>There&#8217;s been a lot of effort into extending our sparse documentation. It is currently concentrating on the <a href="http://developer.gnome.org/librygel-core/unstable/" target="_blank">API</a> <a href="http://developer.gnome.org/librygel-server/unstable/" target="_blank">side</a> <a href="http://developer.gnome.org/librygel-renderer/unstable/" target="_blank">of</a> <a href="http://developer.gnome.org/librygel-renderer-gst/unstable/" target="_blank">things</a> but will be extended to a higher level as well soon.</p>
<h2>Misc</h2>
<ul>
<li>There is an <a href="http://git.gnome.org/browse/rygel/tree/examples/fullscreen-renderer.c" target="_blank">example</a> now that implements a DLNA renderer which is running in full-screen</li>
<li>There are <a href="http://git.gnome.org/browse/rygel/tree/examples/service" target="_blank">several examples</a> for the most common init systems to run Rygel as a system service if wanted</li>
<li>A load of bugfixes</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://jensge.org/2013/01/rygel-progress-in-current-master/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>Rygel + Transcoding on Ubuntu 12.10</title>
		<link>http://jensge.org/2012/10/rygel-transcoding-on-ubuntu-12-04/</link>
		<comments>http://jensge.org/2012/10/rygel-transcoding-on-ubuntu-12-04/#comments</comments>
		<pubDate>Sat, 06 Oct 2012 15:28:38 +0000</pubDate>
		<dc:creator>Jens</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[DLNA]]></category>
		<category><![CDATA[English]]></category>
		<category><![CDATA[Gnome]]></category>
		<category><![CDATA[UPnP]]></category>

		<guid isPermaLink="false">http://jensge.org/?p=812</guid>
		<description><![CDATA[Update: As Jeremy points out, the update has been synched. All should be well now. Update: This post only applies to the package on 12.10 and will be fixed when Ubuntu resyncs Rygel from Debian. It seems that the Rygel &#8230; <a href="http://jensge.org/2012/10/rygel-transcoding-on-ubuntu-12-04/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
				<content:encoded><![CDATA[<p>Update: As Jeremy points out, the update has been synched. All should be well now.</p>
<p>Update: This post only applies to the package on 12.10 and will be fixed when Ubuntu resyncs Rygel from Debian.</p>
<p>It seems that the Rygel package is missing some important files which renders the transcoding non-functional.</p>
<p>A work-around is to download the files from <a href="http://git.gnome.org/browse/rygel/tree/data/presets">http://git.gnome.org/browse/rygel/tree/data/presets</a><br />
and drop them into <code>/usr/share/rygel/presets</code>.</p>
]]></content:encoded>
			<wfw:commentRss>http://jensge.org/2012/10/rygel-transcoding-on-ubuntu-12-04/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Helium 0.6.0</title>
		<link>http://jensge.org/2012/09/helium-0-6-0/</link>
		<comments>http://jensge.org/2012/09/helium-0-6-0/#comments</comments>
		<pubDate>Tue, 18 Sep 2012 16:17:56 +0000</pubDate>
		<dc:creator>Jens</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[DLNA]]></category>
		<category><![CDATA[English]]></category>
		<category><![CDATA[N9]]></category>
		<category><![CDATA[OSS]]></category>
		<category><![CDATA[UPnP]]></category>

		<guid isPermaLink="false">http://jensge.org/?p=802</guid>
		<description><![CDATA[Helium 0.6.0 is available. It mostly contains back-end changes, but  several user-visible changes as well: Improved seeking The handling of seeking in the player view has been improved. The area that reacts to the seeking has been enlarged and the &#8230; <a href="http://jensge.org/2012/09/helium-0-6-0/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
				<content:encoded><![CDATA[<p><a href="http://jensge.org/helium_0.6.0_armel.deb"><img class="alignleft size-full wp-image-803" title="Helium 0.6.0" src="http://jensge.org/wp-content/uploads/2012/09/qrcode_helium_0.6.0_armel.deb_.png" alt="" width="111" height="111" /></a>Helium 0.6.0 is available. It mostly contains back-end changes, but  several user-visible changes as well:</p>
<h2>Improved seeking</h2>
<p><a style="font-style: normal; line-height: 24px; text-decoration: underline;" href="http://jensge.org/wp-content/uploads/2012/09/player-seeking-scaled-screenshot.png"><img class="alignright size-medium wp-image-804" style="border-color: #bbbbbb; background-color: #eeeeee; margin-top: 0.4em;" title="player-seeking-scaled-screenshot" src="http://jensge.org/wp-content/uploads/2012/09/player-seeking-scaled-screenshot-300x138.png" alt="" width="300" height="138" /></a></p>
<div><span style="color: #1b8be0;"><span style="text-decoration: underline;"><br />
</span></span>The handling of seeking in the player view has been improved. The area that reacts to the<br />
seeking has been enlarged and the the flicking doesn&#8217;t steal the events anymore. A tool-tip will show the current seek position.</p>
<h2><a href="http://jensge.org/wp-content/uploads/2012/09/filtering-scaled-screenshot.png"><img class="alignleft size-medium wp-image-806" title="filtering-scaled-screenshot" src="http://jensge.org/wp-content/uploads/2012/09/filtering-scaled-screenshot-300x206.png" alt="" width="300" height="206" /></a>Filtering</h2>
<p>It is now possible to filter the list of media files. To activate the filter input, just drag down and pull the list at the top as in every other program on the device. By default the filtering will only work on the titles. This can be changed in settings to match against most of the other meta-data as well.</p>
<h2>Debugging<a href="http://jensge.org/wp-content/uploads/2012/09/settings-scaled-screenshot.png"><img class="alignright size-medium wp-image-807" title="settings-scaled-screenshot" src="http://jensge.org/wp-content/uploads/2012/09/settings-scaled-screenshot-300x192.png" alt="" width="300" height="192" /></a></h2>
<p>It&#8217;s now possible to log the UPnP traffic to help debugging of interoperability issues. By default, the log file is written to MyDocs to enable easy transfer of the log files via mass storage mode.</p>
</div>
]]></content:encoded>
			<wfw:commentRss>http://jensge.org/2012/09/helium-0-6-0/feed/</wfw:commentRss>
		<slash:comments>9</slash:comments>
		</item>
		<item>
		<title>UPnP Hall of shame</title>
		<link>http://jensge.org/2012/08/upnp-hall-of-shame/</link>
		<comments>http://jensge.org/2012/08/upnp-hall-of-shame/#comments</comments>
		<pubDate>Tue, 28 Aug 2012 09:03:35 +0000</pubDate>
		<dc:creator>Jens</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[DLNA]]></category>
		<category><![CDATA[English]]></category>
		<category><![CDATA[N9]]></category>
		<category><![CDATA[UPnP]]></category>

		<guid isPermaLink="false">http://jensge.org/?p=792</guid>
		<description><![CDATA[This XML snippet is from a LG TV: ackDuration val="àý]Üž"/&#62;&#60;CurrentMediaDuration val="àý Duration is supposed to be a string representation of an integer. Well done, guys m(]]></description>
				<content:encoded><![CDATA[<p>This XML snippet is from a LG TV:</p>
<p><code>ackDuration val="àý]Üž"/&gt;&lt;CurrentMediaDuration val="àý</code></p>
<p>Duration is supposed to be a string representation of an integer. Well done, guys m(</p>
]]></content:encoded>
			<wfw:commentRss>http://jensge.org/2012/08/upnp-hall-of-shame/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>A common mistake in UPnP</title>
		<link>http://jensge.org/2012/08/a-common-mistake-in-upnp/</link>
		<comments>http://jensge.org/2012/08/a-common-mistake-in-upnp/#comments</comments>
		<pubDate>Sat, 18 Aug 2012 19:01:59 +0000</pubDate>
		<dc:creator>Jens</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[DLNA]]></category>
		<category><![CDATA[English]]></category>
		<category><![CDATA[Gnome]]></category>
		<category><![CDATA[rygel]]></category>
		<category><![CDATA[UPnP]]></category>

		<guid isPermaLink="false">http://jensge.org/?p=785</guid>
		<description><![CDATA[We get a lot of reports of UPnP AV clients not working properly with Rygel. It either isn&#8217;t seen by the client at all or does not show any content. The reason is usually the same. People are not following &#8230; <a href="http://jensge.org/2012/08/a-common-mistake-in-upnp/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
				<content:encoded><![CDATA[<p>We get a lot of reports of UPnP AV clients not working properly with Rygel. It either isn&#8217;t seen by the client at all or does not show any content.</p>
<p>The reason is usually the same. People are not following the specs. Rygel seems to be one of the few UPnP-AV/DLNA server out there that implements a higher version of the UPnP-AV specification than :1. A lot of clients are explicitly testing for this version, ignoring higher versions although the UPnP standard states that higher version services need to be backward-compatible. (cf. UDA 1.1, section 1.2.2, last paragraph on page 10). Of course we can work around that &#8211; and we do, but the list of exceptions is getting longer and longer and to be honest I&#8217;m starting to get really annoyed of those fixes.</p>
<p>I expect that there will be more and more devices with higher versions now that DLNA has added features that require higher versions of the specification than :1. So pretty please get your clients fixed. And if you don&#8217;t want to, <a href="https://bugzilla.gnome.org/show_bug.cgi?id=680743" target="_blank">then don&#8217;t make it extra complicated to work around your bug</a>. But really, fix it.</p>
<p>And please have a working support email address so I can complain directly. About every client author I tried to contact has bounced &#8211; and the rest ignored me.</p>
]]></content:encoded>
			<wfw:commentRss>http://jensge.org/2012/08/a-common-mistake-in-upnp/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>N9 PR1.3</title>
		<link>http://jensge.org/2012/07/n9-pr1-3/</link>
		<comments>http://jensge.org/2012/07/n9-pr1-3/#comments</comments>
		<pubDate>Wed, 04 Jul 2012 16:27:04 +0000</pubDate>
		<dc:creator>Jens</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[DLNA]]></category>
		<category><![CDATA[English]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[N9]]></category>
		<category><![CDATA[rygel]]></category>
		<category><![CDATA[UPnP]]></category>

		<guid isPermaLink="false">http://jensge.org/?p=771</guid>
		<description><![CDATA[You might have noticed, there&#8217;s a new device update out; the changes relates to Rygel are rather small: It fixes 100% CPU usage when encountered by DLNA clients that issue a massive amount of seek requests (GNOME Bug#662125) Fixes the &#8230; <a href="http://jensge.org/2012/07/n9-pr1-3/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
				<content:encoded><![CDATA[<p>You might have noticed, there&#8217;s a new device update out; the changes relates to Rygel are rather small:</p>
<ul>
<li>It fixes 100% CPU usage when encountered by DLNA clients that issue a massive amount of seek requests (<a href="https://bugzilla.gnome.org/show_bug.cgi?id=662125">GNOME Bug#662125</a>)</li>
<li>Fixes the issue with XBox 360 that showed songs up to 5 times (<a href=" https://bugzilla.gnome.org/show_bug.cgi?id=664184">GNOME Bug#664184</a>)</li>
<li>A small memory leak when streaming transcoded audio</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://jensge.org/2012/07/n9-pr1-3/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Rygel split-up</title>
		<link>http://jensge.org/2012/07/rygel-split-up/</link>
		<comments>http://jensge.org/2012/07/rygel-split-up/#comments</comments>
		<pubDate>Tue, 03 Jul 2012 07:35:15 +0000</pubDate>
		<dc:creator>Jens</dc:creator>
				<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[DLNA]]></category>
		<category><![CDATA[English]]></category>
		<category><![CDATA[Gnome]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[rygel]]></category>
		<category><![CDATA[UPnP]]></category>

		<guid isPermaLink="false">http://jensge.org/?p=750</guid>
		<description><![CDATA[Following up on Murray&#8217;s &#8220;Rygel for a DLNA Player&#8221; proposal, I&#8217;ve made some of the suggested changes listed there which are now in master. These two new libraries have been added librygel-core: This has been a long-standing TODO item. It &#8230; <a href="http://jensge.org/2012/07/rygel-split-up/">Continue reading <span class="meta-nav">&#8594;</span></a>]]></description>
				<content:encoded><![CDATA[<p>Following up on <a href="http://www.murrayc.com/blog/permalink/2012/06/22/rygel-for-a-dlna-player/">Murray&#8217;s &#8220;Rygel for a DLNA Player&#8221; proposal</a>, I&#8217;ve made some of the suggested changes listed there which are now in master. These two new libraries have been added</p>
<ul>
<li>librygel-core: This has been a long-standing TODO item. It was necessary to allow in-process use of the DLNA and UPnP knowledge coded in Rygel, allowing the creation of librygel-renderer (see below). On top of this there are other benefits
<ul>
<li>It will allow a Rygel version running on Windows without ugly libtool hacks for the plug-ins.</li>
<li>It simplifies the reuse of other parts of Rygel&#8217;s code, such as the transcoding HTTP server, in programs like Korva.</li>
</ul>
</li>
<li>the new librygel-renderer: In essence this is the <a href="https://live.gnome.org/Rygel/Plugins#Playbin">playbin plugin</a> with a bit of API on top that simplifies the code necessary to create a renderer. It offers either a playbin element you can use in your code or wraps around an existing playbin.</li>
</ul>
<p>In future we can extend this family of libraries by &#8220;librygel-browse&#8221; for remote content access and &#8220;librygel-control&#8221; for remote control.</p>
<p>To demonstrate librygel-renderer&#8217;s capabilities of converting an arbitrary media player based on <a href="http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gst-plugins-base-plugins/html/gst-plugins-base-plugins-playbin2.html">GStreamer&#8217;s GstPlaybin2</a> into a proper UPnP/DLNA renderer, I have added librygel-renderer support to Totem. You can see the result in the following demo:</p>
<p><video width="320" height="240" controls="controls"><source src="/totem-as-upnp-renderer.mp4" type="video/mp4; codecs=&quot;avc1.4D401E&quot;" /><source src="/totem-as-upnp-renderer.webm" type="video/webm; codecs=&quot;vp8&quot;" /><source src="/totem-as-upnp-renderer.ogv" type="video/ogg; codecs=&quot;theora&quot;" /><object width="320" height="240" classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"><param name="src" value="http://jensge.org/wp-includes/js/tinymce/plugins/media/moxieplayer.swf" /><param name="flashvars" value="url=/totem-as-upnp-renderer.mp4&amp;poster=/wp-admin/" /><param name="allowfullscreen" value="true" /><param name="allowscriptaccess" value="true" /><embed width="320" height="240" type="application/x-shockwave-flash" src="http://jensge.org/wp-includes/js/tinymce/plugins/media/moxieplayer.swf" flashvars="url=/totem-as-upnp-renderer.mp4&amp;poster=/wp-admin/" allowfullscreen="true" allowscriptaccess="true" /></object></video></p>
<p>The first part of the video (using Sintel) shows how changes in local file playback are being reflected on the UPnP side. In the second part, I set a remote video (Big Buck Bunny) and control totem solely via UPnP, where play, pause, stop, controlling volume, seeking and getting the current playback position is working quite well.</p>
<p>This simple conversion is not a complete DLNA Player. It would need UPnP/DLNA server browsing capabilities for this, as stated in the proposal (In general. Totem can access these servers via its Grilo plug-in).</p>
<p>Of course, with Totem being a complex, mature piece of software, some things don&#8217;t work yet:</p>
<ul>
<li>Volume changes in Totem aren&#8217;t reflected via UPnP</li>
<li>It is not possible to initiate a remote play-back until Totem has an item in its playlist</li>
<li>The announced media format support is nowhere near what Totem actually supports</li>
</ul>
<p>Still, getting <a href="https://github.com/phako/Totem/commit/28c91907f5b63a2b7c84592d86e4102af9bba853">an UPnP/DLNA-compatible (and actually close to certifiable) renderer in three lines of code</a> is impressive, don&#8217;t you think?</p>
<p>There&#8217;s one draw-back that I realized while implementing this. My initial idea to sit on top of a GStreamer playbin2 might be flawed for already existing and mature software such as Totem. There might be much more code-paths dealing with control that happen outside of a playbin. We have an alternative for that as well and that would be implementing one of Rygel&#8217;s interfaces by the consuming party. The UPnP and DLNA compatibility that is already in the current code would need to be transferred to this, which is, of course, more work than just attaching to a playbin.</p>
<p>Why should I prefer this above the already available <a href="https://live.gnome.org/Rygel/Plugins#MPRIS">MPRIS Rygel plug-in</a>? There might be several reasons.</p>
<ul>
<li>You don&#8217;t want a whole separate Rygel process running just for adding UPnP renderer capabilities to your media player.</li>
<li>You aim for some kind of UPnP or DLNA certification &#8211; The additional layer of indirection can make that really hard while the presented approach is nearly ready.</li>
</ul>
<p>So are we going to abandon Rygel&#8217;s MPRIS renderer plugin now? No. Because we can&#8217;t expect every media player in the world a) use GStreamer and b) want to link against Rygel. MPRIS gives us a quick, ready-made access to a vast amount of players out there and the compatibility it offers is (most of the time) just enough for casual home use.</p>
]]></content:encoded>
			<wfw:commentRss>http://jensge.org/2012/07/rygel-split-up/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
	</channel>
</rss>
