<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://docs.linn.co.uk/wiki/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Davidd</id>
	<title>LinnDocs - User contributions [en]</title>
	<link rel="self" type="application/atom+xml" href="https://docs.linn.co.uk/wiki/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Davidd"/>
	<link rel="alternate" type="text/html" href="https://docs.linn.co.uk/wiki/index.php?title=Special:Contributions/Davidd"/>
	<updated>2026-10-23T02:38:34Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.46.2</generator>
	<entry>
		<id>https://docs.linn.co.uk/wiki/index.php?title=Unsupported:Home&amp;diff=20412</id>
		<title>Unsupported:Home</title>
		<link rel="alternate" type="text/html" href="https://docs.linn.co.uk/wiki/index.php?title=Unsupported:Home&amp;diff=20412"/>
		<updated>2019-08-21T11:22:08Z</updated>

		<summary type="html">&lt;p&gt;Davidd: /* Choose music and control your system */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[image:Retired-100px.png|100px|right]]&lt;br /&gt;
= Disclaimer =&lt;br /&gt;
&lt;br /&gt;
All software available for download on this page is unsupported by Linn.&lt;br /&gt;
&lt;br /&gt;
There is no guarantee that this software will operate as expected with your Linn system.&lt;br /&gt;
&lt;br /&gt;
= Songcast =&lt;br /&gt;
&lt;br /&gt;
=== Send sound from your computer ===&lt;br /&gt;
&lt;br /&gt;
Send any audio from your computer to your Linn system and get better sound from your music services and from web pages.&lt;br /&gt;
&lt;br /&gt;
==== Download Songcast ====&lt;br /&gt;
&lt;br /&gt;
[https://cloud.linn.co.uk/applications/songcast/releases/Davaar/songcast_latest_win.exe Windows]&lt;br /&gt;
&lt;br /&gt;
[https://cloud.linn.co.uk/applications/songcast/releases/Davaar/songcast_latest_osx.dmg Mac] (MacOS Catalina  or later is not supported)&lt;br /&gt;
&lt;br /&gt;
= Kinsky =&lt;br /&gt;
&lt;br /&gt;
=== Choose music and control your system ===&lt;br /&gt;
&lt;br /&gt;
Kinsky offers an alternative way to browse your music and control your Linn system.&lt;br /&gt;
&lt;br /&gt;
==== Download Kinsky ====&lt;br /&gt;
&lt;br /&gt;
[https://cloud.linn.co.uk/applications/kinsky/releases/Davaar/kinsky_latest_win.exe Windows]&lt;br /&gt;
&lt;br /&gt;
[https://cloud.linn.co.uk/applications/kinsky/releases/Davaar/kinsky_latest_osx.pkg Mac] (MacOS Catalina  or later is not supported)&lt;br /&gt;
&lt;br /&gt;
[http://itunes.apple.com/gb/app/kinsky/id449144980?mt=8 iPhone/iPad]&lt;/div&gt;</summary>
		<author><name>Davidd</name></author>
	</entry>
	<entry>
		<id>https://docs.linn.co.uk/wiki/index.php?title=Unsupported:Home&amp;diff=20352</id>
		<title>Unsupported:Home</title>
		<link rel="alternate" type="text/html" href="https://docs.linn.co.uk/wiki/index.php?title=Unsupported:Home&amp;diff=20352"/>
		<updated>2019-08-20T16:12:53Z</updated>

		<summary type="html">&lt;p&gt;Davidd: /* Choose music and control your system */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[image:Retired-100px.png|100px|right]]&lt;br /&gt;
= Disclaimer =&lt;br /&gt;
&lt;br /&gt;
All software available for download on this page is unsupported by Linn.&lt;br /&gt;
&lt;br /&gt;
There is no guarantee that this software will operate as expected with your Linn system.&lt;br /&gt;
&lt;br /&gt;
= Songcast =&lt;br /&gt;
&lt;br /&gt;
=== Send sound from your computer ===&lt;br /&gt;
&lt;br /&gt;
Send any audio from your computer to your Linn system and get better sound from your music services and from web pages.&lt;br /&gt;
&lt;br /&gt;
==== Download Songcast ====&lt;br /&gt;
&lt;br /&gt;
[https://cloud.linn.co.uk/applications/songcast/releases/Davaar/songcast_latest_win.exe Windows]&lt;br /&gt;
&lt;br /&gt;
[https://cloud.linn.co.uk/applications/songcast/releases/Davaar/songcast_latest_osx.dmg Mac] (MacOS Catalina  or later is not supported)&lt;br /&gt;
&lt;br /&gt;
= Kinsky =&lt;br /&gt;
&lt;br /&gt;
=== Choose music and control your system ===&lt;br /&gt;
&lt;br /&gt;
Kinsky offers an alternative way to browse your music and control your Linn system.&lt;br /&gt;
&lt;br /&gt;
Use Kinsky to control your system, save playlists and use the iTunes plug-in.&lt;br /&gt;
&lt;br /&gt;
==== Download Kinsky ====&lt;br /&gt;
&lt;br /&gt;
[https://cloud.linn.co.uk/applications/kinsky/releases/Davaar/kinsky_latest_win.exe Windows]&lt;br /&gt;
&lt;br /&gt;
[https://cloud.linn.co.uk/applications/kinsky/releases/Davaar/kinsky_latest_osx.pkg Mac] (MacOS Catalina  or later is not supported)&lt;br /&gt;
&lt;br /&gt;
[http://itunes.apple.com/gb/app/kinsky/id449144980?mt=8 iPhone/iPad]&lt;/div&gt;</summary>
		<author><name>Davidd</name></author>
	</entry>
	<entry>
		<id>https://docs.linn.co.uk/wiki/index.php?title=Unsupported:Home&amp;diff=20334</id>
		<title>Unsupported:Home</title>
		<link rel="alternate" type="text/html" href="https://docs.linn.co.uk/wiki/index.php?title=Unsupported:Home&amp;diff=20334"/>
		<updated>2019-08-20T12:02:05Z</updated>

		<summary type="html">&lt;p&gt;Davidd: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Disclaimer =&lt;br /&gt;
&lt;br /&gt;
All software available for download on this page is unsupported by Linn.&lt;br /&gt;
&lt;br /&gt;
There is no guarantee that this software will operate as expected with your Linn system.&lt;br /&gt;
&lt;br /&gt;
= Songcast =&lt;br /&gt;
&lt;br /&gt;
=== Send sound from your computer ===&lt;br /&gt;
&lt;br /&gt;
Send any audio from your computer to your Linn system and get better sound from your music services and from web pages.&lt;br /&gt;
&lt;br /&gt;
==== Download Songcast ====&lt;br /&gt;
&lt;br /&gt;
[https://cloud.linn.co.uk/applications/songcast/releases/Davaar/songcast_latest_win.exe Windows]&lt;br /&gt;
&lt;br /&gt;
[https://cloud.linn.co.uk/applications/songcast/releases/Davaar/songcast_latest_osx.dmg Mac] (MacOS Catalina  or later is not supported)&lt;br /&gt;
&lt;br /&gt;
= Kinsky =&lt;br /&gt;
&lt;br /&gt;
=== Choose music and control your system ===&lt;br /&gt;
&lt;br /&gt;
Kinsky offers an alternative way to browse your music and control your Linn system.&lt;br /&gt;
&lt;br /&gt;
Use Kinsky to control your system, save playlists and use the BBC and iTunes plug-ins.&lt;br /&gt;
&lt;br /&gt;
==== Download Kinsky ====&lt;br /&gt;
&lt;br /&gt;
[https://cloud.linn.co.uk/applications/kinsky/releases/Davaar/kinsky_latest_win.exe Windows]&lt;br /&gt;
&lt;br /&gt;
[https://cloud.linn.co.uk/applications/kinsky/releases/Davaar/kinsky_latest_osx.pkg Mac] (MacOS Catalina  or later is not supported)&lt;br /&gt;
&lt;br /&gt;
[http://itunes.apple.com/gb/app/kinsky/id449144980?mt=8 iPhone/iPad]&lt;/div&gt;</summary>
		<author><name>Davidd</name></author>
	</entry>
	<entry>
		<id>https://docs.linn.co.uk/wiki/index.php?title=Linn_DS/DSM_Software&amp;diff=20333</id>
		<title>Linn DS/DSM Software</title>
		<link rel="alternate" type="text/html" href="https://docs.linn.co.uk/wiki/index.php?title=Linn_DS/DSM_Software&amp;diff=20333"/>
		<updated>2019-08-20T12:01:41Z</updated>

		<summary type="html">&lt;p&gt;Davidd: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{| width=&amp;quot;100%&amp;quot; cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;10&amp;quot; border=&amp;quot;0&amp;quot; align=&amp;quot;center&amp;quot; class=&amp;quot;FCK__ShowTableBorders&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; width=&amp;quot;50%&amp;quot;| &lt;br /&gt;
{{Hidden Text Box Header|IndexText=&amp;lt;big&amp;gt;&amp;lt;b&amp;gt;Control Software user guides&amp;lt;/b&amp;gt;&amp;lt;/big&amp;gt;&amp;lt;br&amp;gt;Software to control the Linn DS/DSM running on iPads, PC&#039;s... }}&lt;br /&gt;
&lt;br /&gt;
{{Select:Control_Software_user_Guides}}&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;hr&amp;gt;&lt;br /&gt;
{{Hidden text end}}&lt;br /&gt;
&lt;br /&gt;
{{Hidden Text Box Header|IndexText=&amp;lt;big&amp;gt;&amp;lt;b&amp;gt;Product configuration&amp;lt;/b&amp;gt;&amp;lt;/big&amp;gt;&amp;lt;br&amp;gt;Guides on how the software to setup and configure you Linn DS/DSM }}&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
:[[image:ManageSysAndKonfig.png|300px|link=Setting up /configuring the Linn DS/DSM]]&lt;br /&gt;
&lt;br /&gt;
:{{Menu:Product Configuration guides}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;hr&amp;gt;&lt;br /&gt;
{{Hidden text end}}&lt;br /&gt;
&lt;br /&gt;
{{Hidden Text Box Header|IndexText=&amp;lt;big&amp;gt;&amp;lt;b&amp;gt;Software Updates&amp;lt;/b&amp;gt;&amp;lt;/big&amp;gt;&amp;lt;br&amp;gt;How to&#039;s, what software/firmware is there? What does this software add/remove... }}&lt;br /&gt;
&lt;br /&gt;
:[[image:Lightening_flash.jpg|50px|link=ReleaseNotes]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
:&amp;lt;li&amp;gt;&amp;lt;u&amp;gt;[[How_to_Upgrade_DS_Software|How to Upgrade Linn DS firmware..]]&amp;lt;/u&amp;gt; - This will show you upgrade solutions to bring you Linn DS/DSM up to the current version of firmware&amp;lt;/li&amp;gt;&lt;br /&gt;
:&amp;lt;li&amp;gt; &amp;lt;u&amp;gt;[http://www.linn.co.uk/ds_software DS control software]&amp;lt;/u&amp;gt; - link to the Linn Software downloads page&amp;lt;/li&amp;gt;&lt;br /&gt;
:&amp;lt;li&amp;gt;&amp;lt;u&amp;gt;[[ReleaseNotes|DS Firmware Version Notes]]&amp;lt;/u&amp;gt; - Summary of each firmware (Linn DS/DSM internal software) changes&amp;lt;/li&amp;gt;&lt;br /&gt;
:&amp;lt;li&amp;gt;&amp;lt;u&amp;gt;[[Exakt_Release_Notes|Exakt Release Notes]]&amp;lt;/u&amp;gt; - Summary of Exakt speakers and Exaktbox software changes&amp;lt;/li&amp;gt;&lt;br /&gt;
:&amp;lt;li&amp;gt; &amp;lt;u&amp;gt;[[Software Compatibility Families|Software Families]]&amp;lt;/u&amp;gt; - Details of major firmware changes on Linn DS/DSM firmware&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;hr&amp;gt;&lt;br /&gt;
{{Hidden text end}}&lt;br /&gt;
&lt;br /&gt;
| &lt;br /&gt;
&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; width=&amp;quot;50%&amp;quot;| &lt;br /&gt;
{{Hidden Text Box Header|IndexText=&amp;lt;big&amp;gt;&amp;lt;b&amp;gt;UPnP Media Server/Steaming&amp;lt;/b&amp;gt;&amp;lt;/big&amp;gt;&amp;lt;br&amp;gt;The UPnP Media server is your local source of Music... }}&lt;br /&gt;
:[[image:Media_Streaming.jpg|link=Media_Servers]]&lt;br /&gt;
&lt;br /&gt;
:The UPnP Media server is your local source of Music. This can be from Music you have downloaded and saved locally, from CD&#039;s you have ripped etc...&lt;br /&gt;
:Streaming is like a Radio station where the music feed has no start and no end, it just &amp;quot;keeps on flowing&amp;quot;..&lt;br /&gt;
&lt;br /&gt;
:This is a sample of UPnP Media servers available and ones that we have used:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;ul&amp;gt;&lt;br /&gt;
:&amp;lt;li&amp;gt;&amp;lt;u&amp;gt;[[Kazoo_Server_setup_Manual| Linn Kazoo Server]]&amp;lt;/u&amp;gt; - A simple setup Linn Products UPnP Media server to allow a fast setup &amp;lt;/li&amp;gt;&lt;br /&gt;
:&amp;lt;li&amp;gt;&amp;lt;u&amp;gt;[[Songcast|Linn Songcast]]&amp;lt;/u&amp;gt; - This &amp;quot;streaming&amp;quot; feed can be from another Linn DS or a PC/MAC sharing its audio. &amp;lt;/li&amp;gt;&lt;br /&gt;
:&amp;lt;li&amp;gt;&amp;lt;u&amp;gt;[[Media_Servers#Asset_UPnP|Asset UPnP]]&amp;lt;/u&amp;gt; - third-party UPnP Media server&amp;lt;/li&amp;gt;&lt;br /&gt;
:&amp;lt;li&amp;gt;&amp;lt;u&amp;gt;[[Media_Servers#ELyric|Elyric]]&amp;lt;/u&amp;gt; - third-party UPnP Media server&amp;lt;/li&amp;gt;&lt;br /&gt;
:&amp;lt;li&amp;gt;&amp;lt;u&amp;gt;[[Media_Servers#JAMCAST|Jamcast]]&amp;lt;/u&amp;gt; - third-party UPnP Media server&amp;lt;/li&amp;gt;&lt;br /&gt;
:&amp;lt;li&amp;gt;&amp;lt;u&amp;gt;[[Media_Servers#MinimServer|Minimserver]]&amp;lt;/u&amp;gt; - third-party UPnP Media server&amp;lt;/li&amp;gt;&lt;br /&gt;
:&amp;lt;li&amp;gt;&amp;lt;u&amp;gt;[[Media_Servers#QNAP_Media_Streaming_Add-on|QNAP]]&amp;lt;/u&amp;gt; - third-party UPnP Media server&amp;lt;/li&amp;gt;&lt;br /&gt;
:&amp;lt;li&amp;gt;&amp;lt;u&amp;gt;[[Media_Servers#Squeezebox_Server|Squeezebox]]&amp;lt;/u&amp;gt; - third-party UPnP Media server&amp;lt;/li&amp;gt;&lt;br /&gt;
:&amp;lt;li&amp;gt;&amp;lt;u&amp;gt;[[Media_Servers#SERVIIO|Serviio ]]&amp;lt;/u&amp;gt; - third-party UPnP Media server&amp;lt;/li&amp;gt;&lt;br /&gt;
:&amp;lt;li&amp;gt;&amp;lt;u&amp;gt;[[Media_Servers#TwonkyMedia|TwonkyMedia]]&amp;lt;/u&amp;gt; - third-party UPnP Media server&amp;lt;/li&amp;gt;&lt;br /&gt;
:&amp;lt;li&amp;gt;&amp;lt;u&amp;gt;[[Media_Servers#Xiva_Music_M8|Xiva Music M8 ]]&amp;lt;/u&amp;gt;  - third-party UPnP Media server&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt; &lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;hr&amp;gt;&lt;br /&gt;
{{Hidden text end}}&lt;br /&gt;
&lt;br /&gt;
{{Hidden Text Box Header|IndexText=&amp;lt;big&amp;gt;&amp;lt;b&amp;gt;Development software&amp;lt;/b&amp;gt;&amp;lt;/big&amp;gt;&amp;lt;br&amp;gt;Beta software and unsupported software. }}&lt;br /&gt;
&lt;br /&gt;
:[[image:beta.jpg|50px|link=Beta:Home]]&lt;br /&gt;
:This is pre-release test software. We give the end-users the ability to try this software, give Linn feedback and report any bugs within this software...&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
:&amp;lt;li&amp;gt;&amp;lt;u&amp;gt;[[Beta:Home|Beta Documentation]]&amp;lt;/u&amp;gt; - Shows the changes that have been implemented in the Beta software&amp;lt;/li&amp;gt;&lt;br /&gt;
:&amp;lt;li&amp;gt;&amp;lt;u&amp;gt;[[Developer:Documentation|Developer Documentation]]&amp;lt;/u&amp;gt; - Development code&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;!--:&amp;lt;li&amp;gt;&amp;lt;u&amp;gt;[http://oss.linn.co.uk/trac Open source software (Oss)]&amp;lt;/u&amp;gt; Linn Open Source Software site&amp;lt;/li&amp;gt;--&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt; &lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;hr&amp;gt;&lt;br /&gt;
{{Hidden text end}}&lt;br /&gt;
&lt;br /&gt;
{{Hidden Text Box Header|IndexText=&amp;lt;big&amp;gt;&amp;lt;b&amp;gt;Legacy software&amp;lt;/b&amp;gt;&amp;lt;/big&amp;gt; &amp;lt;br&amp;gt;&amp;lt;br&amp;gt; }}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
:&amp;lt;li&amp;gt;&amp;lt;u&amp;gt;[[Unsupported:Home|Unsupported software]]&amp;lt;/u&amp;gt; - Legacy software that is no longer supported. Use at your own risk.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;hr&amp;gt;&lt;br /&gt;
{{Hidden text end}}&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;hr&amp;gt;&lt;br /&gt;
&amp;lt;center&amp;gt;As with any information, questions etc on Linn products you can also contact the  &amp;lt;u&amp;gt;[https://www.linn.co.uk/support Linn Support]&amp;lt;/u&amp;gt; team&amp;lt;/center&amp;gt;&lt;br /&gt;
&amp;lt;hr&amp;gt;&lt;/div&gt;</summary>
		<author><name>Davidd</name></author>
	</entry>
	<entry>
		<id>https://docs.linn.co.uk/wiki/index.php?title=Unsupported:Home&amp;diff=20332</id>
		<title>Unsupported:Home</title>
		<link rel="alternate" type="text/html" href="https://docs.linn.co.uk/wiki/index.php?title=Unsupported:Home&amp;diff=20332"/>
		<updated>2019-08-20T11:35:41Z</updated>

		<summary type="html">&lt;p&gt;Davidd: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Disclaimer =&lt;br /&gt;
&lt;br /&gt;
All software available on this page for download is unsupported by Linn.&lt;br /&gt;
&lt;br /&gt;
There is no guarantee that this software will operate as expected with your Linn system.&lt;br /&gt;
&lt;br /&gt;
= Songcast =&lt;br /&gt;
&lt;br /&gt;
=== Send sound from your computer ===&lt;br /&gt;
&lt;br /&gt;
Send any audio from your computer to your Linn system and get better sound from your music services and from web pages.&lt;br /&gt;
&lt;br /&gt;
==== Download Songcast ====&lt;br /&gt;
&lt;br /&gt;
[https://cloud.linn.co.uk/applications/songcast/releases/Davaar/songcast_latest_win.exe Windows]&lt;br /&gt;
&lt;br /&gt;
[https://cloud.linn.co.uk/applications/songcast/releases/Davaar/songcast_latest_osx.dmg Mac] (MacOS Catalina  or later is not supported)&lt;br /&gt;
&lt;br /&gt;
= Kinsky =&lt;br /&gt;
&lt;br /&gt;
=== Choose music and control your system ===&lt;br /&gt;
&lt;br /&gt;
Kinsky offers an alternative way to browse your music and control your Linn system.&lt;br /&gt;
&lt;br /&gt;
Use Kinsky to control your system, save playlists and use the BBC and iTunes plug-ins.&lt;br /&gt;
&lt;br /&gt;
==== Download Kinsky ====&lt;br /&gt;
&lt;br /&gt;
[https://cloud.linn.co.uk/applications/kinsky/releases/Davaar/kinsky_latest_win.exe Windows]&lt;br /&gt;
&lt;br /&gt;
[https://cloud.linn.co.uk/applications/kinsky/releases/Davaar/kinsky_latest_osx.pkg Mac] (MacOS Catalina  or later is not supported)&lt;br /&gt;
&lt;br /&gt;
[http://itunes.apple.com/gb/app/kinsky/id449144980?mt=8 iPhone/iPad]&lt;/div&gt;</summary>
		<author><name>Davidd</name></author>
	</entry>
	<entry>
		<id>https://docs.linn.co.uk/wiki/index.php?title=Unsupported:Home&amp;diff=20331</id>
		<title>Unsupported:Home</title>
		<link rel="alternate" type="text/html" href="https://docs.linn.co.uk/wiki/index.php?title=Unsupported:Home&amp;diff=20331"/>
		<updated>2019-08-20T11:35:29Z</updated>

		<summary type="html">&lt;p&gt;Davidd: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Disclaimer =&lt;br /&gt;
&lt;br /&gt;
All software available on this page for download is unsupported by Linn. There is no guarantee that this software will operate as expected with your Linn system.&lt;br /&gt;
&lt;br /&gt;
= Songcast =&lt;br /&gt;
&lt;br /&gt;
=== Send sound from your computer ===&lt;br /&gt;
&lt;br /&gt;
Send any audio from your computer to your Linn system and get better sound from your music services and from web pages.&lt;br /&gt;
&lt;br /&gt;
==== Download Songcast ====&lt;br /&gt;
&lt;br /&gt;
[https://cloud.linn.co.uk/applications/songcast/releases/Davaar/songcast_latest_win.exe Windows]&lt;br /&gt;
&lt;br /&gt;
[https://cloud.linn.co.uk/applications/songcast/releases/Davaar/songcast_latest_osx.dmg Mac] (MacOS Catalina  or later is not supported)&lt;br /&gt;
&lt;br /&gt;
= Kinsky =&lt;br /&gt;
&lt;br /&gt;
=== Choose music and control your system ===&lt;br /&gt;
&lt;br /&gt;
Kinsky offers an alternative way to browse your music and control your Linn system.&lt;br /&gt;
&lt;br /&gt;
Use Kinsky to control your system, save playlists and use the BBC and iTunes plug-ins.&lt;br /&gt;
&lt;br /&gt;
==== Download Kinsky ====&lt;br /&gt;
&lt;br /&gt;
[https://cloud.linn.co.uk/applications/kinsky/releases/Davaar/kinsky_latest_win.exe Windows]&lt;br /&gt;
&lt;br /&gt;
[https://cloud.linn.co.uk/applications/kinsky/releases/Davaar/kinsky_latest_osx.pkg Mac] (MacOS Catalina  or later is not supported)&lt;br /&gt;
&lt;br /&gt;
[http://itunes.apple.com/gb/app/kinsky/id449144980?mt=8 iPhone/iPad]&lt;/div&gt;</summary>
		<author><name>Davidd</name></author>
	</entry>
	<entry>
		<id>https://docs.linn.co.uk/wiki/index.php?title=Unsupported:Home&amp;diff=20330</id>
		<title>Unsupported:Home</title>
		<link rel="alternate" type="text/html" href="https://docs.linn.co.uk/wiki/index.php?title=Unsupported:Home&amp;diff=20330"/>
		<updated>2019-08-20T11:30:40Z</updated>

		<summary type="html">&lt;p&gt;Davidd: Created page with &amp;quot;= Songcast =  === Send sound from your computer ===  Send any audio from your computer to your Linn system and get better sound from your music services and from web pages.  =...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Songcast =&lt;br /&gt;
&lt;br /&gt;
=== Send sound from your computer ===&lt;br /&gt;
&lt;br /&gt;
Send any audio from your computer to your Linn system and get better sound from your music services and from web pages.&lt;br /&gt;
&lt;br /&gt;
==== Download Songcast ====&lt;br /&gt;
&lt;br /&gt;
[https://cloud.linn.co.uk/applications/songcast/releases/Davaar/songcast_latest_win.exe Windows]&lt;br /&gt;
&lt;br /&gt;
[https://cloud.linn.co.uk/applications/songcast/releases/Davaar/songcast_latest_osx.dmg Mac]&lt;br /&gt;
&lt;br /&gt;
= Kinsky =&lt;br /&gt;
&lt;br /&gt;
=== Choose music and control your system ===&lt;br /&gt;
&lt;br /&gt;
Kinsky offers an alternative way to browse your music and control your Linn system.&lt;br /&gt;
&lt;br /&gt;
Use Kinsky to control your system, save playlists and use the BBC and iTunes plug-ins.&lt;br /&gt;
&lt;br /&gt;
==== Download Kinsky ====&lt;br /&gt;
&lt;br /&gt;
[https://cloud.linn.co.uk/applications/kinsky/releases/Davaar/kinsky_latest_win.exe Windows]&lt;br /&gt;
&lt;br /&gt;
[https://cloud.linn.co.uk/applications/kinsky/releases/Davaar/kinsky_latest_osx.pkg Mac]&lt;br /&gt;
&lt;br /&gt;
[http://itunes.apple.com/gb/app/kinsky/id449144980?mt=8 iPhone/iPad]&lt;/div&gt;</summary>
		<author><name>Davidd</name></author>
	</entry>
	<entry>
		<id>https://docs.linn.co.uk/wiki/index.php?title=Linn_DS/DSM_Software&amp;diff=20329</id>
		<title>Linn DS/DSM Software</title>
		<link rel="alternate" type="text/html" href="https://docs.linn.co.uk/wiki/index.php?title=Linn_DS/DSM_Software&amp;diff=20329"/>
		<updated>2019-08-20T11:23:37Z</updated>

		<summary type="html">&lt;p&gt;Davidd: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{| width=&amp;quot;100%&amp;quot; cellspacing=&amp;quot;0&amp;quot; cellpadding=&amp;quot;10&amp;quot; border=&amp;quot;0&amp;quot; align=&amp;quot;center&amp;quot; class=&amp;quot;FCK__ShowTableBorders&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; width=&amp;quot;50%&amp;quot;| &lt;br /&gt;
{{Hidden Text Box Header|IndexText=&amp;lt;big&amp;gt;&amp;lt;b&amp;gt;Control Software user guides&amp;lt;/b&amp;gt;&amp;lt;/big&amp;gt;&amp;lt;br&amp;gt;Software to control the Linn DS/DSM running on iPads, PC&#039;s... }}&lt;br /&gt;
&lt;br /&gt;
{{Select:Control_Software_user_Guides}}&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;hr&amp;gt;&lt;br /&gt;
{{Hidden text end}}&lt;br /&gt;
&lt;br /&gt;
{{Hidden Text Box Header|IndexText=&amp;lt;big&amp;gt;&amp;lt;b&amp;gt;Product configuration&amp;lt;/b&amp;gt;&amp;lt;/big&amp;gt;&amp;lt;br&amp;gt;Guides on how the software to setup and configure you Linn DS/DSM }}&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
:[[image:ManageSysAndKonfig.png|300px|link=Setting up /configuring the Linn DS/DSM]]&lt;br /&gt;
&lt;br /&gt;
:{{Menu:Product Configuration guides}}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;hr&amp;gt;&lt;br /&gt;
{{Hidden text end}}&lt;br /&gt;
&lt;br /&gt;
{{Hidden Text Box Header|IndexText=&amp;lt;big&amp;gt;&amp;lt;b&amp;gt;Software Updates&amp;lt;/b&amp;gt;&amp;lt;/big&amp;gt;&amp;lt;br&amp;gt;How to&#039;s, what software/firmware is there? What does this software add/remove... }}&lt;br /&gt;
&lt;br /&gt;
:[[image:Lightening_flash.jpg|50px|link=ReleaseNotes]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
:&amp;lt;li&amp;gt;&amp;lt;u&amp;gt;[[How_to_Upgrade_DS_Software|How to Upgrade Linn DS firmware..]]&amp;lt;/u&amp;gt; - This will show you upgrade solutions to bring you Linn DS/DSM up to the current version of firmware&amp;lt;/li&amp;gt;&lt;br /&gt;
:&amp;lt;li&amp;gt; &amp;lt;u&amp;gt;[http://www.linn.co.uk/ds_software DS control software]&amp;lt;/u&amp;gt; - link to the Linn Software downloads page&amp;lt;/li&amp;gt;&lt;br /&gt;
:&amp;lt;li&amp;gt;&amp;lt;u&amp;gt;[[ReleaseNotes|DS Firmware Version Notes]]&amp;lt;/u&amp;gt; - Summary of each firmware (Linn DS/DSM internal software) changes&amp;lt;/li&amp;gt;&lt;br /&gt;
:&amp;lt;li&amp;gt;&amp;lt;u&amp;gt;[[Exakt_Release_Notes|Exakt Release Notes]]&amp;lt;/u&amp;gt; - Summary of Exakt speakers and Exaktbox software changes&amp;lt;/li&amp;gt;&lt;br /&gt;
:&amp;lt;li&amp;gt; &amp;lt;u&amp;gt;[[Software Compatibility Families|Software Families]]&amp;lt;/u&amp;gt; - Details of major firmware changes on Linn DS/DSM firmware&amp;lt;/li&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;hr&amp;gt;&lt;br /&gt;
{{Hidden text end}}&lt;br /&gt;
&lt;br /&gt;
| &lt;br /&gt;
&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; width=&amp;quot;50%&amp;quot;| &lt;br /&gt;
{{Hidden Text Box Header|IndexText=&amp;lt;big&amp;gt;&amp;lt;b&amp;gt;UPnP Media Server/Steaming&amp;lt;/b&amp;gt;&amp;lt;/big&amp;gt;&amp;lt;br&amp;gt;The UPnP Media server is your local source of Music... }}&lt;br /&gt;
:[[image:Media_Streaming.jpg|link=Media_Servers]]&lt;br /&gt;
&lt;br /&gt;
:The UPnP Media server is your local source of Music. This can be from Music you have downloaded and saved locally, from CD&#039;s you have ripped etc...&lt;br /&gt;
:Streaming is like a Radio station where the music feed has no start and no end, it just &amp;quot;keeps on flowing&amp;quot;..&lt;br /&gt;
&lt;br /&gt;
:This is a sample of UPnP Media servers available and ones that we have used:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;ul&amp;gt;&lt;br /&gt;
:&amp;lt;li&amp;gt;&amp;lt;u&amp;gt;[[Kazoo_Server_setup_Manual| Linn Kazoo Server]]&amp;lt;/u&amp;gt; - A simple setup Linn Products UPnP Media server to allow a fast setup &amp;lt;/li&amp;gt;&lt;br /&gt;
:&amp;lt;li&amp;gt;&amp;lt;u&amp;gt;[[Songcast|Linn Songcast]]&amp;lt;/u&amp;gt; - This &amp;quot;streaming&amp;quot; feed can be from another Linn DS or a PC/MAC sharing its audio. &amp;lt;/li&amp;gt;&lt;br /&gt;
:&amp;lt;li&amp;gt;&amp;lt;u&amp;gt;[[Media_Servers#Asset_UPnP|Asset UPnP]]&amp;lt;/u&amp;gt; - third-party UPnP Media server&amp;lt;/li&amp;gt;&lt;br /&gt;
:&amp;lt;li&amp;gt;&amp;lt;u&amp;gt;[[Media_Servers#ELyric|Elyric]]&amp;lt;/u&amp;gt; - third-party UPnP Media server&amp;lt;/li&amp;gt;&lt;br /&gt;
:&amp;lt;li&amp;gt;&amp;lt;u&amp;gt;[[Media_Servers#JAMCAST|Jamcast]]&amp;lt;/u&amp;gt; - third-party UPnP Media server&amp;lt;/li&amp;gt;&lt;br /&gt;
:&amp;lt;li&amp;gt;&amp;lt;u&amp;gt;[[Media_Servers#MinimServer|Minimserver]]&amp;lt;/u&amp;gt; - third-party UPnP Media server&amp;lt;/li&amp;gt;&lt;br /&gt;
:&amp;lt;li&amp;gt;&amp;lt;u&amp;gt;[[Media_Servers#QNAP_Media_Streaming_Add-on|QNAP]]&amp;lt;/u&amp;gt; - third-party UPnP Media server&amp;lt;/li&amp;gt;&lt;br /&gt;
:&amp;lt;li&amp;gt;&amp;lt;u&amp;gt;[[Media_Servers#Squeezebox_Server|Squeezebox]]&amp;lt;/u&amp;gt; - third-party UPnP Media server&amp;lt;/li&amp;gt;&lt;br /&gt;
:&amp;lt;li&amp;gt;&amp;lt;u&amp;gt;[[Media_Servers#SERVIIO|Serviio ]]&amp;lt;/u&amp;gt; - third-party UPnP Media server&amp;lt;/li&amp;gt;&lt;br /&gt;
:&amp;lt;li&amp;gt;&amp;lt;u&amp;gt;[[Media_Servers#TwonkyMedia|TwonkyMedia]]&amp;lt;/u&amp;gt; - third-party UPnP Media server&amp;lt;/li&amp;gt;&lt;br /&gt;
:&amp;lt;li&amp;gt;&amp;lt;u&amp;gt;[[Media_Servers#Xiva_Music_M8|Xiva Music M8 ]]&amp;lt;/u&amp;gt;  - third-party UPnP Media server&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt; &lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;hr&amp;gt;&lt;br /&gt;
{{Hidden text end}}&lt;br /&gt;
&lt;br /&gt;
{{Hidden Text Box Header|IndexText=&amp;lt;big&amp;gt;&amp;lt;b&amp;gt;Development software&amp;lt;/b&amp;gt;&amp;lt;/big&amp;gt;&amp;lt;br&amp;gt;Beta software and unsupported software. }}&lt;br /&gt;
&lt;br /&gt;
:[[image:beta.jpg|50px|link=Beta:Home]]&lt;br /&gt;
:This is pre-release test software. We give the end-users the ability to try this software, give Linn feedback and report any bugs within this software...&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
:&amp;lt;li&amp;gt;&amp;lt;u&amp;gt;[[Beta:Home|Beta Documentation]]&amp;lt;/u&amp;gt; - Shows the changes that have been implemented in the Beta software&amp;lt;/li&amp;gt;&lt;br /&gt;
:&amp;lt;li&amp;gt;&amp;lt;u&amp;gt;[[Developer:Documentation|Developer Documentation]]&amp;lt;/u&amp;gt; - Development code&amp;lt;/li&amp;gt;&lt;br /&gt;
:&amp;lt;li&amp;gt;&amp;lt;u&amp;gt;[[Unsupported:Home|Unsupported software]]&amp;lt;/u&amp;gt; - Software that is no longer supported. Use at your own risk.&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;!--:&amp;lt;li&amp;gt;&amp;lt;u&amp;gt;[http://oss.linn.co.uk/trac Open source software (Oss)]&amp;lt;/u&amp;gt; Linn Open Source Software site&amp;lt;/li&amp;gt;--&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt; &lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;hr&amp;gt;&lt;br /&gt;
{{Hidden text end}}&lt;br /&gt;
|}&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;hr&amp;gt;&lt;br /&gt;
&amp;lt;center&amp;gt;As with any information, questions etc on Linn products you can also contact the  &amp;lt;u&amp;gt;[https://www.linn.co.uk/support Linn Support]&amp;lt;/u&amp;gt; team&amp;lt;/center&amp;gt;&lt;br /&gt;
&amp;lt;hr&amp;gt;&lt;/div&gt;</summary>
		<author><name>Davidd</name></author>
	</entry>
	<entry>
		<id>https://docs.linn.co.uk/wiki/index.php?title=Developer:Media_Server_Extensions&amp;diff=11472</id>
		<title>Developer:Media Server Extensions</title>
		<link rel="alternate" type="text/html" href="https://docs.linn.co.uk/wiki/index.php?title=Developer:Media_Server_Extensions&amp;diff=11472"/>
		<updated>2015-04-14T09:04:55Z</updated>

		<summary type="html">&lt;p&gt;Davidd: /* Index maps */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Introduction =&lt;br /&gt;
&lt;br /&gt;
The ContentDirectory service has various limitations which become apparent when implementing control points on different hardware platforms. This document aims to outline some ideas that address the various shortcomings of the ContentDirectory specification.&lt;br /&gt;
&lt;br /&gt;
== Container map ==&lt;br /&gt;
&lt;br /&gt;
The current ContentDirectory specification makes it tricky for a control point to display the returned contents in an appropriate, aesthetically pleasing, manner for the content being viewed. This is because the ContentDirectory specification does not allow for a control point to know in advanced what content to expect when browsing through any particular hierarchy.&lt;br /&gt;
&lt;br /&gt;
An example of this might be, at a particular point in the browse hierarchy the ContentDirectory will return a list of albums which in turn will contain a list of tracks. A UI might wish to represent this list of albums as a grid and the album&#039;s tracks as a header and a list of the tracks. Currently it is not possible for the UI to know when it gets to a point in a hierarchy where the hierarchy represents a list of albums followed by a list of tracks.&lt;br /&gt;
&lt;br /&gt;
The container map extension allows a media server to express its container hierarchy in advance of the control point navigating it. This is done using an OpenHome vendor extension to the device XML.&lt;br /&gt;
&lt;br /&gt;
Three types of mapped container are defined: browse, link, and search.&lt;br /&gt;
&lt;br /&gt;
The browse map defines named top level containers that represent significant starting points for browsing that can meaningfully be presented in top level tabs of a control point UI. The browse map is expressed within the X_MAP_BROWSE element of X_MAP.&lt;br /&gt;
&lt;br /&gt;
The link map defines containers that can be meaningfully linked to from track or album details. For instance a track will typically have an artist defined. If an entry for &amp;quot;artist&amp;quot; is defined in the link map then it will be possible for the user of a control point to quickly access this artist-related container by clicking on the track&#039;s artist text. Similar links might be offered for &amp;quot;genre&amp;quot;, &amp;quot;composer&amp;quot;, &amp;quot;conductor&amp;quot;, etc. The link map is expressed within the X_MAP_LINK element of X_MAP.&lt;br /&gt;
&lt;br /&gt;
The search map defines the different kinds of search containers and the type of results that they produce. The search map is expressed within the X_MAP_SEARCH element of X_MAP.&lt;br /&gt;
&lt;br /&gt;
=== Browse map ===&lt;br /&gt;
&lt;br /&gt;
The X_MAP_BROWSE element must contain 1 or more X_MAP_BROWSE_ENTRY elements.&lt;br /&gt;
&lt;br /&gt;
The X_MAP_BROWSE_ENTRY has three child elements.&lt;br /&gt;
&lt;br /&gt;
X_MAP_BROWSE_ENTRY_NAME is a string that can be used by a control point to label a tab containing this browse hierarchy.&lt;br /&gt;
&lt;br /&gt;
X_MAP_BROWSE_ENTRY_ID is the UPnP container id that contains the root of this browse hierarchy. This id is then submitted to the ContentDirectory service using the Browse action as usual. The returned contents are navigated using subsequent Browse request as usual. The difference is that the control point knows in advance what kind of results to expect at each level.&lt;br /&gt;
&lt;br /&gt;
X_MAP_BROWSE_ENTRY_TYPE is a space separated list of strings that maps out the kind of containers that are to be found at each level of this browse hierarchy. For instance, &amp;quot;artist album&amp;quot; represents a browse hierarchy giving a container containing only artist containers, each of which contains only album containers, each of which contains only tracks.&lt;br /&gt;
&lt;br /&gt;
There should be an X_MAP_BROWSE_ENTRY for each root browse hierarchy defined by the media server.&lt;br /&gt;
&lt;br /&gt;
For example:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;X_MAP_BROWSE_ENTRY&amp;gt;&lt;br /&gt;
     &amp;lt;X_MAP_BROWSE_ENTRY_NAME&amp;gt;Genre&amp;lt;/X_MAP_BROWSE_ENTRY_NAME&amp;gt;&lt;br /&gt;
     &amp;lt;X_MAP_BROWSE_ENTRY_ID&amp;gt;db/browse/genre&amp;lt;/X_MAP_BROWSE_ENTRY_ID&amp;gt;&lt;br /&gt;
     &amp;lt;X_MAP_BROWSE_ENTRY_TYPE&amp;gt;genre artist album&amp;lt;/X_MAP_BROWSE_ENTRY_TYPE&amp;gt;&lt;br /&gt;
 &amp;lt;/X_MAP_BROWSE_ENTRY&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Link map ===&lt;br /&gt;
&lt;br /&gt;
The X_MAP_LINK element must contain 1 or more X_MAP_LINK_ENTRY elements.&lt;br /&gt;
&lt;br /&gt;
The X_MAP_LINK_ENTRY has three child elements.&lt;br /&gt;
&lt;br /&gt;
X_MAP_LINK_ENTRY_TAG is a string that defines which type of metadata is the target for this link. e.g. &amp;quot;artist&amp;quot;, &amp;quot;genre&amp;quot;, &amp;quot;composer&amp;quot;, etc. See the type section below. &lt;br /&gt;
&lt;br /&gt;
X_MAP_LINK_ENTRY_ID_PREFIX is a string that is prefix for a UPnP container id. The link can be taken by browsing to the container whose id is the result of appending the associated metadata value to this prefix. For instance, if the prefix for an &amp;quot;artist&amp;quot; link is defined as db/link/artist/, and a track returned anywhere in the media server&#039;s library has &amp;quot;Pink Floyd&amp;quot; as its artist. Then the linked container will have an id of db/link/artist/Pink Floyd.&lt;br /&gt;
&lt;br /&gt;
X_MAP_LINK_ENTRY_TYPE represents the type of browse hierarchy returned when taking this type of link. See X_MAP_BROWSE_ENTRY_TYPE for details.&lt;br /&gt;
&lt;br /&gt;
There should be an X_MAP_LINK_ENTRY for each piece of metadata that the media server allows to be linked.&lt;br /&gt;
&lt;br /&gt;
For example:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;X_MAP_LINK_ENTRY&amp;gt;&lt;br /&gt;
     &amp;lt;X_MAP_LINK_ENTRY_TAG&amp;gt;artist&amp;lt;/X_MAP_LINK_ENTRY_TAG&amp;gt;&lt;br /&gt;
     &amp;lt;X_MAP_LINK_ENTRY_ID_PREFIX&amp;gt;db/link/artist/&amp;lt;/X_MAP_LINK_ENTRY_ID_PREFIX&amp;gt;&lt;br /&gt;
     &amp;lt;X_MAP_LINK_ENTRY_TYPE&amp;gt;album&amp;lt;/X_MAP_LINK_ENTRY_TYPE&amp;gt;&lt;br /&gt;
 &amp;lt;/X_MAP_LINK_ENTRY&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The example above defines a browse hierarchy that is created when linking from an artist name. The hierarchy created provides a list of linked artist albums which in turn provide a list of tracks.&lt;br /&gt;
&lt;br /&gt;
=== Search map ===&lt;br /&gt;
&lt;br /&gt;
The X_MAP_SEARCH element must contain 1 or more X_MAP_SEARCH_ENTRY elements.&lt;br /&gt;
&lt;br /&gt;
The X_MAP_SEARCH_ENTRY has three child elements.&lt;br /&gt;
&lt;br /&gt;
X_MAP_SEARCH_ENTRY_NAME  is a string that can be used by a control point to label a tab containing these search results.&lt;br /&gt;
&lt;br /&gt;
X_MAP_SEARCH_ENTRY_ID_PREFIX is a string that is a prefix for a UPnP container id. The search results can be found by browsing to the container whose id is the result of appending the search string to this prefix. For instance, if the prefix for an &amp;quot;album&amp;quot; search is defined as db/search/album/, and the search string is &amp;quot;blue&amp;quot;, then the search results container will have an id of db/search/album/blue.&lt;br /&gt;
&lt;br /&gt;
X_MAP_SEARCH_ENTRY_TYPE represents the type of browse hierarchy returned when taking this type of search. See X_MAP_BROWSE_ENTRY_TYPE for details.&lt;br /&gt;
&lt;br /&gt;
There should be an X_MAP_SEARCH_ENTRY for each type of search offered by the media server.&lt;br /&gt;
&lt;br /&gt;
For example:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;X_MAP_SEARCH_ENTRY&amp;gt;&lt;br /&gt;
     &amp;lt;X_MAP_SEARCH_ENTRY_NAME&amp;gt;Artist&amp;lt;/X_MAP_SEARCH_ENTRY_NAME&amp;gt;&lt;br /&gt;
     &amp;lt;X_MAP_SEARCH_ENTRY_ID_PREFIX&amp;gt;db/search/artist/&amp;lt;/X_MAP_SEARCH_ENTRY_ID_PREFIX&amp;gt;&lt;br /&gt;
     &amp;lt;X_MAP_SEARCH_ENTRY_TYPE&amp;gt;artist album&amp;lt;/X_MAP_SEARCH_ENTRY_TYPE&amp;gt;&lt;br /&gt;
 &amp;lt;/X_MAP_SEARCH_ENTRY&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The example above defines a browse hierarchy that is created when searching for an artist. The hierarchy created provides a list of artists, which in turn provide a list of albums, which in turn provide a list of tracks.&lt;br /&gt;
&lt;br /&gt;
=== Types ===&lt;br /&gt;
&lt;br /&gt;
The list of allowed types for X_BROWSE_ENTRY_TYPE, X_MAP_LINK_ENTRY_TAG, X_LINK_ENTRY_TYPE, and X_SEARCH_ENTRY_TYPE&lt;br /&gt;
&lt;br /&gt;
 genre&lt;br /&gt;
 artist&lt;br /&gt;
 composer&lt;br /&gt;
 conductor&lt;br /&gt;
 album&lt;br /&gt;
 year&lt;br /&gt;
 mixed&lt;br /&gt;
&lt;br /&gt;
mixed is a special value that represents a container that has mixed entries. It is not a valid type for the X_MAP_LINK_ENTRY_TAG element.&lt;br /&gt;
&lt;br /&gt;
=== Example device XML ===&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;root xmlns=&amp;quot;urn:schemas-upnp-org:device-1-0&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;specVersion&amp;gt;&lt;br /&gt;
        &amp;lt;major&amp;gt;1&amp;lt;/major&amp;gt;&lt;br /&gt;
        &amp;lt;minor&amp;gt;1&amp;lt;/minor&amp;gt;&lt;br /&gt;
    &amp;lt;/specVersion&amp;gt;&lt;br /&gt;
    &amp;lt;device&amp;gt;&lt;br /&gt;
        &amp;lt;deviceType&amp;gt;urn:schemas-upnp-org:device:MediaServer:1&amp;lt;/deviceType&amp;gt;&lt;br /&gt;
        &amp;lt;dlna:X_DLNADOC xmlns:dlna=&amp;quot;urn:schemas-dlna-org:device-1-0&amp;quot;&amp;gt;DMS-1.50&amp;lt;/dlna:X_DLNADOC&amp;gt;&lt;br /&gt;
        &amp;lt;dlna:X_DLNACAP xmlns:dlna=&amp;quot;urn:schemas-dlna-org:device-1-0&amp;quot;&amp;gt;av-upload,image-upload,audio-upload&amp;lt;/dlna:X_DLNACAP&amp;gt;&lt;br /&gt;
        &amp;lt;openhome:X_MAP xmlns:openhome=&amp;quot;http://www.openhome.org&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;X_MAP_BROWSE&amp;gt;&lt;br /&gt;
                &amp;lt;X_MAP_BROWSE_ENTRY&amp;gt;&lt;br /&gt;
                    &amp;lt;X_MAP_BROWSE_ENTRY_NAME&amp;gt;Albums&amp;lt;/X_MAP_BROWSE_ENTRY_NAME&amp;gt;&lt;br /&gt;
                    &amp;lt;X_MAP_BROWSE_ENTRY_ID&amp;gt;db/browse/albums&amp;lt;/X_MAP_BROWSE_ENTRY_ID&amp;gt;&lt;br /&gt;
                    &amp;lt;X_MAP_BROWSE_ENTRY_TYPE&amp;gt;album&amp;lt;/X_MAP_BROWSE_ENTRY_TYPE&amp;gt;&lt;br /&gt;
                &amp;lt;/X_MAP_BROWSE_ENTRY&amp;gt;&lt;br /&gt;
                &amp;lt;X_MAP_BROWSE_ENTRY&amp;gt;&lt;br /&gt;
                    &amp;lt;X_MAP_BROWSE_ENTRY_NAME&amp;gt;Artists&amp;lt;/X_MAP_BROWSE_ENTRY_NAME&amp;gt;&lt;br /&gt;
                    &amp;lt;X_MAP_BROWSE_ENTRY_ID&amp;gt;db/browse/artists&amp;lt;/X_MAP_BROWSE_ENTRY_ID&amp;gt;&lt;br /&gt;
                    &amp;lt;X_MAP_BROWSE_ENTRY_TYPE&amp;gt;artist album&amp;lt;/X_MAP_BROWSE_ENTRY_TYPE&amp;gt;&lt;br /&gt;
                &amp;lt;/X_MAP_BROWSE_ENTRY&amp;gt;&lt;br /&gt;
                &amp;lt;X_MAP_BROWSE_ENTRY&amp;gt;&lt;br /&gt;
                    &amp;lt;X_MAP_BROWSE_ENTRY_NAME&amp;gt;Folders&amp;lt;/X_MAP_BROWSE_ENTRY_NAME&amp;gt;&lt;br /&gt;
                    &amp;lt;X_MAP_BROWSE_ENTRY_ID&amp;gt;db/browse/folders&amp;lt;/X_MAP_BROWSE_ENTRY_ID&amp;gt;&lt;br /&gt;
                    &amp;lt;X_MAP_BROWSE_ENTRY_TYPE&amp;gt;mixed&amp;lt;/X_MAP_BROWSE_ENTRY_TYPE&amp;gt;&lt;br /&gt;
                &amp;lt;/X_MAP_BROWSE_ENTRY&amp;gt;&lt;br /&gt;
            &amp;lt;/X_MAP_BROWSE&amp;gt;&lt;br /&gt;
            &amp;lt;X_MAP_LINK&amp;gt;&lt;br /&gt;
                &amp;lt;X_MAP_LINK_ENTRY&amp;gt;&lt;br /&gt;
                    &amp;lt;X_MAP_LINK_ENTRY_TAG&amp;gt;artist&amp;lt;/X_MAP_LINK_ENTRY_TAG&amp;gt;&lt;br /&gt;
                    &amp;lt;X_MAP_LINK_ENTRY_ID_PREFIX&amp;gt;db/link/artist/&amp;lt;/X_MAP_LINK_ENTRY_ID_PREFIX&amp;gt;&lt;br /&gt;
                    &amp;lt;X_MAP_LINK_ENTRY_TYPE&amp;gt;album&amp;lt;/X_MAP_LINK_ENTRY_TYPE&amp;gt;&lt;br /&gt;
                &amp;lt;/X_MAP_LINK_ENTRY&amp;gt;&lt;br /&gt;
                &amp;lt;X_MAP_LINK_ENTRY&amp;gt;&lt;br /&gt;
                    &amp;lt;X_MAP_LINK_ENTRY_TAG&amp;gt;composer&amp;lt;/X_MAP_LINK_ENTRY_TAG&amp;gt;&lt;br /&gt;
                    &amp;lt;X_MAP_LINK_ENTRY_ID_PREFIX&amp;gt;db/link/composer/&amp;lt;/X_MAP_LINK_ENTRY_ID_PREFIX&amp;gt;&lt;br /&gt;
                    &amp;lt;X_MAP_LINK_ENTRY_TYPE&amp;gt;album&amp;lt;/X_MAP_LINK_ENTRY_TYPE&amp;gt;&lt;br /&gt;
                &amp;lt;/X_MAP_LINK_ENTRY&amp;gt;&lt;br /&gt;
            &amp;lt;/X_MAP_LINK&amp;gt;&lt;br /&gt;
            &amp;lt;X_MAP_SEARCH&amp;gt;&lt;br /&gt;
                &amp;lt;X_MAP_SEARCH_ENTRY&amp;gt;&lt;br /&gt;
                    &amp;lt;X_MAP_SEARCH_ENTRY_NAME&amp;gt;Artist&amp;lt;/X_MAP_SEARCH_ENTRY_NAME&amp;gt;&lt;br /&gt;
                    &amp;lt;X_MAP_SEARCH_ENTRY_ID_PREFIX&amp;gt;db/search/artist/&amp;lt;/X_MAP_SEARCH_ENTRY_ID_PREFIX&amp;gt;&lt;br /&gt;
                    &amp;lt;X_MAP_SEARCH_ENTRY_TYPE&amp;gt;artist album&amp;lt;/X_MAP_SEARCH_ENTRY_TYPE&amp;gt;&lt;br /&gt;
                &amp;lt;/X_MAP_SEARCH_ENTRY&amp;gt;&lt;br /&gt;
                &amp;lt;X_MAP_SEARCH_ENTRY&amp;gt;&lt;br /&gt;
                    &amp;lt;X_MAP_SEARCH_ENTRY_NAME&amp;gt;Tracks&amp;lt;/X_MAP_SEARCH_ENTRY_NAME&amp;gt;&lt;br /&gt;
                    &amp;lt;X_MAP_SEARCH_ENTRY_ID_PREFIX&amp;gt;db/search/all/&amp;lt;/X_MAP_SEARCH_ENTRY_ID_PREFIX&amp;gt;&lt;br /&gt;
                    &amp;lt;X_MAP_SEARCH_ENTRY_TYPE&amp;gt;&amp;lt;/X_MAP_SEARCH_ENTRY_TYPE&amp;gt;&lt;br /&gt;
                &amp;lt;/X_MAP_SEARCH_ENTRY&amp;gt;&lt;br /&gt;
            &amp;lt;/X_MAP_SEARCH&amp;gt;&lt;br /&gt;
        &amp;lt;/openhome:X_MAP&amp;gt;&lt;br /&gt;
        &amp;lt;presentationURL&amp;gt;http://10.2.1.170:4000/res/linn.co.uk.kazooserver/index.html&amp;lt;/presentationURL&amp;gt;&lt;br /&gt;
        &amp;lt;friendlyName&amp;gt;Linn Kazoo Server [R&amp;amp;D Mac Mini]&amp;lt;/friendlyName&amp;gt;&lt;br /&gt;
        &amp;lt;manufacturer&amp;gt;Linn&amp;lt;/manufacturer&amp;gt;&lt;br /&gt;
        &amp;lt;manufacturerURL&amp;gt;http://www.linn.co.uk&amp;lt;/manufacturerURL&amp;gt;&lt;br /&gt;
        &amp;lt;modelName&amp;gt;Kazoo Server&amp;lt;/modelName&amp;gt;&lt;br /&gt;
        &amp;lt;modelURL&amp;gt;http://oss.linn.co.uk/trac/wiki/KazooServer&amp;lt;/modelURL&amp;gt;&lt;br /&gt;
        &amp;lt;UDN&amp;gt;uuid:ac3d630e37b5f11ff5cdd23c0f5a7400&amp;lt;/UDN&amp;gt;&lt;br /&gt;
        &amp;lt;iconList&amp;gt;&lt;br /&gt;
            &amp;lt;icon&amp;gt;&lt;br /&gt;
                &amp;lt;mimetype&amp;gt;image/png&amp;lt;/mimetype&amp;gt;&lt;br /&gt;
                &amp;lt;width&amp;gt;65&amp;lt;/width&amp;gt;&lt;br /&gt;
                &amp;lt;height&amp;gt;65&amp;lt;/height&amp;gt;&lt;br /&gt;
                &amp;lt;depth&amp;gt;32&amp;lt;/depth&amp;gt;&lt;br /&gt;
                &amp;lt;url&amp;gt;ac3d630e37b5f11ff5cdd23c0f5a7400/resource/icon/icon&amp;lt;/url&amp;gt;&lt;br /&gt;
            &amp;lt;/icon&amp;gt;&lt;br /&gt;
        &amp;lt;/iconList&amp;gt;&lt;br /&gt;
        &amp;lt;serviceList&amp;gt;&lt;br /&gt;
            &amp;lt;service&amp;gt;&lt;br /&gt;
                &amp;lt;serviceType&amp;gt;urn:av-openhome-org:service:PlaylistManager:1&amp;lt;/serviceType&amp;gt;&lt;br /&gt;
                &amp;lt;serviceId&amp;gt;urn:av-openhome-org:serviceId:PlaylistManager&amp;lt;/serviceId&amp;gt;&lt;br /&gt;
                &amp;lt;SCPDURL&amp;gt;/ac3d630e37b5f11ff5cdd23c0f5a7400/Upnp/av.openhome.org-PlaylistManager-1/service.xml&amp;lt;/SCPDURL&amp;gt;&lt;br /&gt;
                &amp;lt;controlURL&amp;gt;/ac3d630e37b5f11ff5cdd23c0f5a7400/av.openhome.org-PlaylistManager-1/control&amp;lt;/controlURL&amp;gt;&lt;br /&gt;
                &amp;lt;eventSubURL&amp;gt;/ac3d630e37b5f11ff5cdd23c0f5a7400/av.openhome.org-PlaylistManager-1/event&amp;lt;/eventSubURL&amp;gt;&lt;br /&gt;
            &amp;lt;/service&amp;gt;&lt;br /&gt;
            &amp;lt;service&amp;gt;&lt;br /&gt;
                &amp;lt;serviceType&amp;gt;urn:schemas-upnp-org:service:ContentDirectory:1&amp;lt;/serviceType&amp;gt;&lt;br /&gt;
                &amp;lt;serviceId&amp;gt;urn:upnp-org:serviceId:ContentDirectory&amp;lt;/serviceId&amp;gt;&lt;br /&gt;
                &amp;lt;SCPDURL&amp;gt;/ac3d630e37b5f11ff5cdd23c0f5a7400/Upnp/upnp.org-ContentDirectory-1/service.xml&amp;lt;/SCPDURL&amp;gt;&lt;br /&gt;
                &amp;lt;controlURL&amp;gt;/ac3d630e37b5f11ff5cdd23c0f5a7400/upnp.org-ContentDirectory-1/control&amp;lt;/controlURL&amp;gt;&lt;br /&gt;
                &amp;lt;eventSubURL&amp;gt;/ac3d630e37b5f11ff5cdd23c0f5a7400/upnp.org-ContentDirectory-1/event&amp;lt;/eventSubURL&amp;gt;&lt;br /&gt;
            &amp;lt;/service&amp;gt;&lt;br /&gt;
            &amp;lt;service&amp;gt;&lt;br /&gt;
                &amp;lt;serviceType&amp;gt;urn:schemas-upnp-org:service:ConnectionManager:1&amp;lt;/serviceType&amp;gt;&lt;br /&gt;
                &amp;lt;serviceId&amp;gt;urn:upnp-org:serviceId:ConnectionManager&amp;lt;/serviceId&amp;gt;&lt;br /&gt;
                &amp;lt;SCPDURL&amp;gt;/ac3d630e37b5f11ff5cdd23c0f5a7400/Upnp/upnp.org-ConnectionManager-1/service.xml&amp;lt;/SCPDURL&amp;gt;&lt;br /&gt;
                &amp;lt;controlURL&amp;gt;/ac3d630e37b5f11ff5cdd23c0f5a7400/upnp.org-ConnectionManager-1/control&amp;lt;/controlURL&amp;gt;&lt;br /&gt;
                &amp;lt;eventSubURL&amp;gt;/ac3d630e37b5f11ff5cdd23c0f5a7400/upnp.org-ConnectionManager-1/event&amp;lt;/eventSubURL&amp;gt;&lt;br /&gt;
            &amp;lt;/service&amp;gt;&lt;br /&gt;
        &amp;lt;/serviceList&amp;gt;&lt;br /&gt;
    &amp;lt;/device&amp;gt;&lt;br /&gt;
 &amp;lt;/root&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Index maps ==&lt;br /&gt;
&lt;br /&gt;
Large lists are difficult to navigate, especially on mobile devices. Mobile devices added the idea of an index map to improve this situation. The index map allows a users to jump to different sections in a large list, similar to what is possible with a scrollbar on desktops.&lt;br /&gt;
&lt;br /&gt;
In order for a control point to generate an index map for any particular level in a ContentDirectory&#039;s hierarchy it first needs to download all the objects in the container, figure out if they are sorted and then calculate the index map. This means that a user will need to wait, perhaps minutes, before an index map is able to be presented on the UI. &lt;br /&gt;
&lt;br /&gt;
The media server can optionally return an index map for container that are in alphabetical order. This implemented through a OpenHome vendor extension of the DIDL-Lite XML. Below shows an example DIDL-Lite with an index map included.&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;DIDL-Lite xmlns=&amp;quot;urn:schemas-upnp-org:metadata-1-0/DIDL-Lite/&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;container id=&amp;quot;db/ba37a2ac24efa676c8676aab71a6cdf074&amp;quot; parentID=&amp;quot;0&amp;quot; restricted=&amp;quot;true&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;dc:title xmlns:dc=&amp;quot;http://purl.org/dc/elements/1.1/&amp;quot;&amp;gt;Worlds Apart [Deluxe Edition]&amp;lt;/dc:title&amp;gt;&lt;br /&gt;
        &amp;lt;upnp:udn xmlns:upnp=&amp;quot;urn:schemas-upnp-org:metadata-1-0/upnp/&amp;quot;&amp;gt;ac3d630e37b5f11ff5cdd23c0f5a7400&amp;lt;/upnp:udn&amp;gt;&lt;br /&gt;
        &amp;lt;upnp:class xmlns:upnp=&amp;quot;urn:schemas-upnp-org:metadata-1-0/upnp/&amp;quot;&amp;gt;object.container.album.musicAlbum&amp;lt;/upnp:class&amp;gt;&lt;br /&gt;
        &amp;lt;upnp:artist xmlns:upnp=&amp;quot;urn:schemas-upnp-org:metadata-1-0/upnp/&amp;quot;&amp;gt;...And You Will Know Us by the Trail of Dead&amp;lt;/upnp:artist&amp;gt;&lt;br /&gt;
        &amp;lt;upnp:albumArtURI&amp;gt;http://10.2.1.170:4000/linn.co.uk.kazooserver/ms/artwork/37a2ac2?size=0&amp;lt;/upnp:albumArtURI&amp;gt;&lt;br /&gt;
    &amp;lt;/container&amp;gt;&lt;br /&gt;
    &amp;lt;desc nameSpace=&amp;quot;openhome.org&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;openhome.org:indexmap&amp;gt;0 10 10 10 10 10 0 0 0 0 10 12 1 10 10 10 12 17 18 1 0 20 0 20 20 2 2 24&amp;lt;/indexmap&amp;gt;&lt;br /&gt;
    &amp;lt;/desc&amp;gt;&lt;br /&gt;
 &amp;lt;/DIDL-Lite&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The index map contains a space separated list of 28 number representing the total number of items that begin with that letter. #, represents everything below A, largely digits and punctuation and + represents everything above Z, largely international characters not collatable within the roman alphabet.&lt;br /&gt;
&lt;br /&gt;
 # A B C D E F G H I J K L M N O P Q R S T U V W X Y Z +&lt;br /&gt;
&lt;br /&gt;
== Image Resolution ==&lt;br /&gt;
&lt;br /&gt;
Control points running on different platforms have different memory limits and display technologies. This means that a control point on a PC might want to display artwork at a high resolution, while a control point on a PDA might want to display artwork at a much lower resolution.&lt;br /&gt;
&lt;br /&gt;
Media servers often try to solve this problem using one of the following two methods:&lt;br /&gt;
&lt;br /&gt;
# A configurable parameter that scales all artwork to a user defined size&lt;br /&gt;
# A profile system where a user can create profiles for each class of control point they have and configure a parameter that scales all artwork to a user defined size per profile&lt;br /&gt;
&lt;br /&gt;
The first solution is highly problematic because it limits the resolution of artwork across the whole network. But a single network very often contains control points that can display high resolution images AND control points that can&#039;t.&lt;br /&gt;
&lt;br /&gt;
The second solution is just architecturally poor, turning the relationship between a control point and a media server on its head. Why should the media server try to infer what a control point needs through configuration when the control point is perfectly capable of telling the media server its exact requirements in every single circumstance.&lt;br /&gt;
&lt;br /&gt;
Compliant media servers should include a &#039;&#039;&#039;size&#039;&#039;&#039; element in their artwork URIs, where the size is the image&#039;s largest dimension. This allows a control point to ask for an image at a specified size.&lt;br /&gt;
&lt;br /&gt;
The size requested by a control point is a hint for the media server and it does not imply that the media server will satisfy the request. For example a control point might request size=160 but the media server returns size=256 as it is the closest match in its cache.&lt;br /&gt;
&lt;br /&gt;
=== Example ===&lt;br /&gt;
&lt;br /&gt;
If the original artwork was 400x512, then a media server would provide the following albumArtURI: &amp;lt;uri&amp;gt;?size=512. If it is not possible for the media server to obtain the original resolution then the media server would provide the following albumArtURI: &amp;lt;uri&amp;gt;?size=0.&lt;br /&gt;
&lt;br /&gt;
The presence of the size element tells the control point:&lt;br /&gt;
&lt;br /&gt;
# the media server implements the image scaling extension&lt;br /&gt;
# the original size of the image.&lt;br /&gt;
&lt;br /&gt;
Now the control point can request the image at any resolution by using &amp;lt;uri&amp;gt;?size=x, where x is the size it wants.&lt;br /&gt;
&lt;br /&gt;
So, in this example, &amp;lt;uri&amp;gt;?size=1024 gets an 800x1024 image, and &amp;lt;uri&amp;gt;?size=200 gets a 156x200 image.&lt;br /&gt;
&lt;br /&gt;
== Group Information ==&lt;br /&gt;
&lt;br /&gt;
Classical music has the concept of a &amp;quot;work&amp;quot; or &amp;quot;composition&amp;quot; consisting of a group of tracks. This concept is not easily represented in a control point using DidlLite.&lt;br /&gt;
&lt;br /&gt;
A new property has been added to the musicTrack item called &#039;&#039;&#039;group&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
A media server would set the the group property of a musicTrack with the value defined by the GROUP tag contained in the metadata of the audio file.&lt;br /&gt;
&lt;br /&gt;
== Disc Information ==&lt;br /&gt;
&lt;br /&gt;
A new property has been added to the musicTrack item called &#039;&#039;&#039;originalDiscNumber&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
A new property has been added to the musicAlbum item called &#039;&#039;&#039;originalDiscCount&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
== Replay Gain Information ==&lt;br /&gt;
&lt;br /&gt;
Four new properties have been added to the musicTrack item called &#039;&#039;&#039;replayGainAlbum&#039;&#039;&#039;, &#039;&#039;&#039;replayGainAlbumPeak&#039;&#039;&#039;, &#039;&#039;&#039;replayGainTrack&#039;&#039;&#039;, and &#039;&#039;&#039;replayGainTrackPeak&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
== Dynamic IP Addresses ==&lt;br /&gt;
&lt;br /&gt;
At present all media servers return URIs that contain a reference to their IP address, e.g. http://172.20.1.1/music.flac etc. This means that if the media server&#039;s IP address were to change across reboots, then any control point or media renderer with URIs that referenced the media server before the reboot will become invalid.&lt;br /&gt;
&lt;br /&gt;
If a user wants to ensure a URI provided by the media server is long lived the host machine running the media server must be assigned a static or dynamic reserved IP address.&lt;/div&gt;</summary>
		<author><name>Davidd</name></author>
	</entry>
	<entry>
		<id>https://docs.linn.co.uk/wiki/index.php?title=Konfig_Manual&amp;diff=11352</id>
		<title>Konfig Manual</title>
		<link rel="alternate" type="text/html" href="https://docs.linn.co.uk/wiki/index.php?title=Konfig_Manual&amp;diff=11352"/>
		<updated>2015-03-25T11:50:26Z</updated>

		<summary type="html">&lt;p&gt;Davidd: /* Space Optimisation */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Introduction =&lt;br /&gt;
&lt;br /&gt;
Konfig provides advanced configuration of a Linn DS, notification and updating of a Linn DS to the latest firmware, restoring Linn DS settings back to factory defaults and manual updating of a Linn DS firmware.&lt;br /&gt;
&lt;br /&gt;
Konfig can also be run from a web-browser with all functions except the software update. Get the IP address of the Linn DS/DSM from the front panel using either the:&amp;lt;br&amp;gt;&lt;br /&gt;
:[http://docs.linn.co.uk/wiki/index.php/REM_020 REM 020 Remote control] by pressing and holding the # button &amp;lt;br&amp;gt;or with the &amp;lt;br&amp;gt;&lt;br /&gt;
:[http://docs.linn.co.uk/wiki/index.php/DS_%26_REM_019 REM 019 Remote control] by pressing DVD then the INFO buttons.&lt;br /&gt;
&lt;br /&gt;
When you are in DS web page select Control, this will give you the same options (except Software update) as below&lt;br /&gt;
&lt;br /&gt;
= Installation =&lt;br /&gt;
== System Requirements ==&lt;br /&gt;
=== Windows ===&lt;br /&gt;
* Windows Vista or later version of Windows&lt;br /&gt;
* IE9 or later&lt;br /&gt;
* 32 or 64-bit hardware&lt;br /&gt;
* Internet connection when using Exakt Systems&lt;br /&gt;
&lt;br /&gt;
=== Mac ===&lt;br /&gt;
* Mac OS X Snow Leopard 10.6.8 or later&lt;br /&gt;
* 32 or 64-bit hardware&lt;br /&gt;
* Internet connection when using Exakt Systems&lt;br /&gt;
&lt;br /&gt;
== Installing ==&lt;br /&gt;
=== Windows ===&lt;br /&gt;
* Download the installer from the [http://www.linn.co.uk/support/software#konfig download] page&lt;br /&gt;
* Double click the downloaded .exe file&lt;br /&gt;
* Follow the on screen instructions in the installer program&lt;br /&gt;
&lt;br /&gt;
=== Mac ===&lt;br /&gt;
* Download the .pkg file from the [http://www.linn.co.uk/support/software#konfig download] page&lt;br /&gt;
* Double click the downloaded .pkg file&lt;br /&gt;
* Follow the on screen instructions in the installer program&lt;br /&gt;
&lt;br /&gt;
== Uninstalling ==&lt;br /&gt;
=== Windows ===&lt;br /&gt;
* Open the Windows Control Panel and double click &amp;quot;Programs and Features&amp;quot;&lt;br /&gt;
* Select &amp;quot;Konfig&amp;quot; in the list of programs and click the &amp;quot;Uninstall&amp;quot; button&lt;br /&gt;
* Follow the on screen instructions in the uninstall window&lt;br /&gt;
&lt;br /&gt;
=== Mac ===&lt;br /&gt;
* Using Finder drag the Konfig icon from Applications/Konfig to the waste bin&lt;br /&gt;
&lt;br /&gt;
== Updating ==&lt;br /&gt;
&lt;br /&gt;
Konfig for Mac and Windows will automatically check for new software updates. Checking for available updates can also be performed manually as described below. Alternatively, Konfig can be updated by manually downloading the installation packages from the [http://www.linn.co.uk/support/software#konfig download] page and installing them using the method described in the [[#Installing| Installing]] section above.&lt;br /&gt;
&lt;br /&gt;
= Operation =&lt;br /&gt;
&lt;br /&gt;
Konfig has four main views, [[#Configuration| Configuration]], [[#Updates| Updates]], [[#Diagnostics| Diagnostics]], and [[#Advanced| Advanced]]&lt;br /&gt;
&lt;br /&gt;
[[File:Header.png|740px|Header]]&lt;br /&gt;
&lt;br /&gt;
== Configuration ==&lt;br /&gt;
&lt;br /&gt;
[[File:Configuration.png|740px|Configuration Page]]&lt;br /&gt;
&lt;br /&gt;
Click the &#039;&#039;&#039;Show Devices&#039;&#039;&#039; button to slide a list of available devices in from the left. Selecting a device from the list will show it&#039;s configuration page in the right hand pane.&lt;br /&gt;
&lt;br /&gt;
A Linn device&#039;s configuration page will only show in the right hand pane if the device is running firmware version Davaar 9 (4.9.4) or later. If your Linn device is running firmware version less that Davaar 9 (4.9.4), Konfig will provide a link to allow you to open the configuration page in your default browser.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- === DEVICES ===&lt;br /&gt;
[[Linn_DS-DSM_Konfig Devices|&amp;lt;big&amp;gt;Click here for Devices configuration page&amp;lt;/big&amp;gt;]] &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--=== DISPLAY ===&lt;br /&gt;
[[Linn_DS-DSM_Konfig_Display|&amp;lt;big&amp;gt;Click here for Display configuration page&amp;lt;/big&amp;gt;]] &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Linn Preamplifier, Volume, Delay modes, Songcast, Net-Aux and HDMI settings ===&lt;br /&gt;
[[file:771px-DS_Name_10.jpg|300px|center]]&lt;br /&gt;
&lt;br /&gt;
== DS Volume control &amp;amp; Proxy RS232 control ==&lt;br /&gt;
There are two way to control the Volume on a Linn DS system:&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Internal Volume&#039;&#039;&#039; control that will directly control the analogue audio level coming out of the Linn DS. This is good for directly connecting to a Power amplifier on your speakers.&lt;br /&gt;
[[file:635px-Internal_Vol_ctrl_10.jpg|400px|center]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Proxy RS232 control ===&lt;br /&gt;
* Or use an external preamplifier, this means that the Linn DS will always output Line-level audio.&lt;br /&gt;
:If you have a Linn Pre-amplifier this can be set to be controlled by the Kinsky control software. &lt;br /&gt;
&lt;br /&gt;
[[file:771px-DS_Name_10.jpg|300px|right]]&lt;br /&gt;
: &#039;&#039;1.&#039;&#039; Wire up the Linn DS and Linn preamplifiers/CD players &#039;&#039;&#039;RS232&#039;&#039;&#039; and audio connections as shown [http://docs.linn.co.uk/wiki/index.php/Systems Here] &#039;&#039;&#039;(Ignore this if you are using an Akurate Kontrol/1)&#039;&#039;&#039;&lt;br /&gt;
:&#039;&#039;2.&#039;&#039; Select the Linn DS and go into the Linn DS &#039;&#039;&#039;Device&#039;&#039; screen&lt;br /&gt;
:&#039;&#039;3.&#039;&#039; Take note of the text in &#039;&#039;&#039;Name&#039;&#039;&#039; field&lt;br /&gt;
:&#039;&#039;4.&#039;&#039; Go into the Linn DS &#039;&#039;&#039;RS232 connections&#039;&#039; screen&lt;br /&gt;
:&#039;&#039;5.&#039;&#039; Under Linn Preamplifier/CD player select the Linn product and Linn DS com port it is wired to.&lt;br /&gt;
:&#039;&#039;6.&#039;&#039; Press the Circle arrow to Reboot the Linn DS&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[file:824px-DS_Ktrl_Name_10.jpg|300px|right|thumb|DS Name in Kontrol - click to enlarge]]&lt;br /&gt;
:&#039;&#039;7.&#039;&#039; Click on &amp;quot;Show Devices&amp;quot; and&lt;br /&gt;
:&#039;&#039;8.&#039;&#039; Select the Linn Kontrol (preamplifier) and go into the Linn Kontrol &#039;&#039;&#039;Sources&#039;&#039;&#039; screen &lt;br /&gt;
:&#039;&#039;9.&#039;&#039; Select the Input that the Linn DS is connected to and enter the &#039;&#039;&#039;Name&#039;&#039;&#039; of the Linn DS that was take from the Linn DS - Devices screen Name field (taken in point 3)&lt;br /&gt;
:&#039;&#039;10.&#039;&#039; If a Linn CD player was also enabled enter the &#039;&#039;&#039;Name&#039;&#039;&#039; of the Linn CD device that was take from the Linn CD player - Devices screen&lt;br /&gt;
&lt;br /&gt;
===Ethernet controlled Linn Pre-Amplifier (Akurate Kontrol/1)===&lt;br /&gt;
:&#039;&#039;1.&#039;&#039; Select the Linn DS and go into the Linn DS &#039;&#039;&#039;Device&#039;&#039; screen&lt;br /&gt;
:&#039;&#039;2.&#039;&#039; Take note of the text in &#039;&#039;&#039;Name&#039;&#039;&#039; and the &#039;&#039;&#039;Room&#039;&#039;&#039; fields&lt;br /&gt;
:&#039;&#039;3.&#039;&#039; Click on &amp;quot;Show Devices&amp;quot; and&lt;br /&gt;
:&#039;&#039;4.&#039;&#039; Select the Linn Kontrol (preamplifier) and go into the Linn Kontrol &#039;&#039;&#039;Sources&#039;&#039;&#039; screen &lt;br /&gt;
:&#039;&#039;5.&#039;&#039; Change the Akurate Kontrol &#039;&#039;&#039;Device - Room&#039;&#039;&#039; name matches the Linn DS Room field taken in point 2.&lt;br /&gt;
:&#039;&#039;6.&#039;&#039; Select the Input that the Linn DS is connected to and enter the &#039;&#039;&#039;Name&#039;&#039;&#039; of the Linn DS that was take from the Linn DS Name field taken in point 2.&lt;br /&gt;
&lt;br /&gt;
I would suggest a &amp;quot;cut and paste&amp;quot; of the Room field and DS name field as this is case-senative (&amp;quot;lounge&amp;quot; is not the same as &amp;quot;Lounge&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
==Sources==&lt;br /&gt;
&lt;br /&gt;
===Name===&lt;br /&gt;
This is the source name that will appear in the DS user control software (Kinksy, Kazoo etc)&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Visible===&lt;br /&gt;
This allows you to hide sources. &lt;br /&gt;
If you set Visible-NO, then this input is hidden from selection in the Front panel and the user control software selection list.&amp;lt;br&amp;gt;&lt;br /&gt;
This does not mean that you have disabled the input, it only means that you cannot see it.&lt;br /&gt;
&lt;br /&gt;
===Delay Mode===&lt;br /&gt;
[[file:584px-DSM_delays.jpg|400px|right|thumb|Source delays - click to enlarge]]&lt;br /&gt;
&lt;br /&gt;
There are 3 different delays modes with the Linn DSI/DSM/Exakt for external sources (Analogue, Toslink, SPDIF &amp;amp; HDMI)&lt;br /&gt;
:&#039;&#039;&#039;Direct&#039;&#039;&#039; - This will feed the audio in real-time to the local Linn DSI/DSM, but the audio fed to the other Linn DS products will be delayed by 150mS. If this is setup and the other Linn DS products are fairly close, the music will sound like an echo&amp;lt;br&amp;gt;&lt;br /&gt;
:&#039;&#039;&#039;Fixed&#039;&#039;&#039; - This will delay the audio to ALL Linn DS/DSI/DSM products (including Exakt products) to keep the audio in perfect sync. This common delay is 150mS&amp;lt;br&amp;gt;&lt;br /&gt;
:&#039;&#039;&#039;Variable&#039;&#039;&#039; - This is a lipsync delay from 20ms-1999ms on this local DS. However the Songcast listening rooms will ONLY be in perfect sync for Lip-sync delays of =&amp;gt;150mS. &lt;br /&gt;
:If the lip-sync is less than 150ms, the listening rooms will always have a 150mS from original source, this means that the audio will be out of sync by 150ms minus the lip sync value. (eg Lipsync delay 90mS, then the delay from the sender DS audio to the listening room DS is 60mS)&lt;br /&gt;
:Lipsync delay time is variable from from 20mS-2S either from the Konfig app or the IR handset.&amp;lt;br&amp;gt;&lt;br /&gt;
For operation detail check [[DSM Audio Latencies Explained]]&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Input level, Unity Gain, Volume offset===&lt;br /&gt;
[[file:808px-Sources-setup.jpg|404px|right|thumb|Source settings - click to enlarge]]&lt;br /&gt;
:&#039;&#039;&#039;Input level (Vrms)&#039;&#039;&#039; - This is to allow you to change that input profile for the specific sources. This may be due to input adapters,  such as RCA-XLR, XLR-RCA etc, being used giving different output levels.&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Transformer&#039;&#039;&#039; - This is only on some of the Linn DSM&#039;s and enables the input to electrically isolated via an audio transformer on this input. This should &#039;&#039;&#039;NOT&#039;&#039;&#039; be enabled if you are connecting to another product with an audio transformer on it output, such as a &#039;&#039;&#039;URIKA&#039;&#039;&#039; or &#039;&#039;&#039;Klimax DS/1&#039;&#039;&#039;. &lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Unity Gain&#039;&#039;&#039; -This will turn off the DSM volume control whenever that input/source is selected. This is a pass-through state&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Volume Offset&#039;&#039;&#039; - this is an trim adjustment. Some audio sources have a higher or lower output than normal.  This trim/offset will allow you to you to switch between source and keep the same DSM volume.&lt;br /&gt;
&lt;br /&gt;
==Songcast / Net Aux inputs==&lt;br /&gt;
[[file:669px-Net_Aux_10.jpg|300px|right|thumb|Sources - click to enlarge]]&lt;br /&gt;
* To show the Linn DS sources you need to make these visible. This allows you to hide source that you are not going to use, such as UpnpAV that is only used with some media controllers.&lt;br /&gt;
* &#039;&#039;&#039;Songcast&#039;&#039;&#039; listen to Music playing on your [http://oss.linn.co.uk/trac/wiki/SongcastWindowsDavaarManual#KnownIssues PC SONGCAST] software or listen to another  DS, &lt;br /&gt;
** &#039;&#039;&#039;Visible&#039;&#039;&#039;&lt;br /&gt;
*** Set Visible to &#039;&#039;&#039;NO&#039;&#039;&#039; will hide this on the inputs listing within the control software Kinsky.&lt;br /&gt;
*** Set Visible to &#039;&#039;&#039;YES&#039;&#039;&#039; will make this a visible source in Kinsky&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
* &#039;&#039;&#039;Net-Aux&#039;&#039;&#039; To have 3rd party Media streamers to play on your Linn DS&lt;br /&gt;
** &#039;&#039;&#039;Visible&#039;&#039;&#039;&lt;br /&gt;
*** Set Visible to &#039;&#039;&#039;NO&#039;&#039;&#039; will hide this on the inputs listing within the control software Kinsky.&lt;br /&gt;
*** Set Visible to &#039;&#039;&#039;YES&#039;&#039;&#039; will make this a visible source in Kinsky&lt;br /&gt;
** &#039;&#039;&#039;Auto Select&#039;&#039;&#039;&lt;br /&gt;
*** Set Auto Select to &#039;&#039;&#039;ON&#039;&#039;&#039; will get have the Linn DS to automatically switch to the Net-Aux input on receipt of a third party media stream.&lt;br /&gt;
*** Set Auto Select to &#039;&#039;&#039;OFF&#039;&#039;&#039; if you do &#039;&#039;&#039;NOT&#039;&#039;&#039; want the Linn DS to automatically switch to the Net-Aux input on receipt of a third party media stream&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== HDMI ==&lt;br /&gt;
[[file:764px-HDMI_Konfig_10.jpg|400px|right|thumb| HDMI - click to enlarge]]&lt;br /&gt;
* The HDMI connection can be shutdown whilst the product is in Sleep mode&lt;br /&gt;
* Usage of the Audio mode etc are explained [http://docs.linn.co.uk/wiki/index.php/HDMI_Setup#Audio_Mode  here]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Songcast Sender ==&lt;br /&gt;
&lt;br /&gt;
[[File:809px-Songcast_sender.jpg‎| 400px | centre]]&lt;br /&gt;
&lt;br /&gt;
[[Songcast_Sender|&amp;lt;big&amp;gt;Click here for Songcast Sender page&amp;lt;/big&amp;gt;]] &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Tidal ==&lt;br /&gt;
[[file:795px-Konfig-Tidal.jpg‎ |298px | centre]]&lt;br /&gt;
&lt;br /&gt;
This allows you to control the quality of the next Tidal radio stream tracks.&lt;br /&gt;
This tell tell Tidal that the music stream will now be in the Low, High or top level - FLAC quality audio. That is, the next Tidal track will be played in the newly set quality of audio.&lt;br /&gt;
&lt;br /&gt;
The change in Tidal audio quality will also control the amount of broadband capacity you are using. &lt;br /&gt;
* &amp;quot;Low (AAC 96kbps)&amp;quot; will use the least amount of broadband&lt;br /&gt;
* &amp;quot;High (AAC 320kbps)&amp;quot; will use a resonable amount of broadband&lt;br /&gt;
* &amp;quot;FLAC (lossless)&amp;quot; will use the most amount of broadband.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div id=&amp;quot;Exakt_Optimisation&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Space Optimisation ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;An Internet connection is required when using Exakt Systems and Space Optimisation&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
If you have selected an Exakt system, you will see the following three configuration tabs.&lt;br /&gt;
&lt;br /&gt;
[[File:KonfigExaktTabs.png|740px|Exakt Tabs]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Exakt&#039;&#039;&#039; allows you to assign an audio channel (i.e. Left or Right) to an Exakt speaker.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Space Optimisation+&#039;&#039;&#039; provides a listener focused way of applying room optimisation.&lt;br /&gt;
&lt;br /&gt;
If you have selected a DS system, you will see the following three configuration tabs.&lt;br /&gt;
&lt;br /&gt;
[[File:KonfigNonExaktTabs.png|740px|Exakt Tabs]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Speakers&#039;&#039;&#039; allows you to assign which speakers are connected to the DS system.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Space Optimisation&#039;&#039;&#039; provides a listener focused way of applying room optimisation.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
For help with this, please see the [[Space Optimisation|Space Optimisation]] article.&lt;br /&gt;
&lt;br /&gt;
== Updates ==&lt;br /&gt;
&lt;br /&gt;
[[File:Updates.png|740px|Updates Page]]&lt;br /&gt;
&lt;br /&gt;
The Updates tab indicates the number of Linn devices that currently have a newer software version available, as shown in the screenshot above.&lt;br /&gt;
&lt;br /&gt;
Each device that has an update available will be in the list of updatable devices. Each device has information about the update version available as well as a link to the release notes.&lt;br /&gt;
&lt;br /&gt;
To update a device click the &#039;Update&#039; button. If you have more than one devices to update you can click the &#039;Update All&#039; button to update all the devices at the same time.&lt;br /&gt;
&lt;br /&gt;
If you updated a device to beta software and then decide you want to go back to the latest stable release you just need to un-click the [[#Participate_in_beta_program_2| Participate in beta program]] option, return to the Updates page and update the desired device.&lt;br /&gt;
&lt;br /&gt;
== Diagnostics ==&lt;br /&gt;
&lt;br /&gt;
[[File:Diagnostics.png|740px|Diagnostics Page]]&lt;br /&gt;
&lt;br /&gt;
The Diagnostics tab indicates the number of Linn devices that currently have crash data available to send to Linn, as shown in the screenshot above.&lt;br /&gt;
&lt;br /&gt;
To send the crash data from a device to Linn click the &#039;Send&#039; button. If you have more than one device with crash data you can click the &#039;Send All&#039; button.&lt;br /&gt;
&lt;br /&gt;
If you do not wish to send the crash data for a device you can click the &#039;Ignore&#039; button and you will not be notified about crash data until the device crashes again. If you want to ignore crash data from all the listed devices you can click the &#039;Ignore All&#039; button.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;NOTE: No personal information is sent to Linn as a result of sending crash data to Linn.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== Advanced ==&lt;br /&gt;
&lt;br /&gt;
[[File:Advanced.png|740px|Advanced Page]]&lt;br /&gt;
&lt;br /&gt;
The Advanced page allows a user to restore a Linn device back to the original factory settings. It also allows a user to manually updating a Linn device&#039;s firmware to a locally stored firmware bundle.&lt;br /&gt;
&lt;br /&gt;
=== Restore Factory Settings ===&lt;br /&gt;
&lt;br /&gt;
Click the &#039;Restore&#039; button associated with the desired Linn device to start the process of restoring the Linn device to its factory default settings.&lt;br /&gt;
&lt;br /&gt;
=== Updating Linn Device Firmware ===&lt;br /&gt;
&lt;br /&gt;
First download the desired firmware from [http://products.linn.co.uk/VersionInfo/Downloads/Releases/ here].&lt;br /&gt;
&lt;br /&gt;
[[File:992px-Advanced-update.jpg|740px|Advanced Page]]&lt;br /&gt;
&lt;br /&gt;
Next enter the firmware&#039;s downloaded location into the text field associated with the desired Linn device, e.g. On Windows, C:\Users\&amp;lt;username&amp;gt;\Desktop\KlimaxDsm_4.7.5.zip and on Mac, /Users/&amp;lt;username&amp;gt;/Desktop/S08500116.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;NOTE: On Mac the downloaded firmware is automatically unzipped by the OS and so the location is a directory unlike on Windows where the location is the downloaded zip file.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
After entering the firmware&#039;s location click the &#039;Update&#039; button to start the process of updating the Linn device&#039;s firmware.&lt;br /&gt;
&lt;br /&gt;
=== Device Recovery ===&lt;br /&gt;
&lt;br /&gt;
This option should only be used if your are having problems updating your Linn DS through the standard methods, i.e. automatically through the Update page or manually as described in the previous section.&lt;br /&gt;
&lt;br /&gt;
After a &#039;Device Recovery&#039; update has been performed any Linn device settings changed by the user will be set back to factory defaults.&lt;br /&gt;
&lt;br /&gt;
== Settings ==&lt;br /&gt;
&lt;br /&gt;
[[File:Settings.png|740px|Settings Page]]&lt;br /&gt;
&lt;br /&gt;
=== Application Updates ===&lt;br /&gt;
==== Automatic update checks ====&lt;br /&gt;
Whether Konfig automatically checks for newer versions of Konfig.&lt;br /&gt;
==== Participate in beta program ====&lt;br /&gt;
Whether Konfig automatically checks for beta releases of Konfig.&lt;br /&gt;
==== Check For Updates ====&lt;br /&gt;
Force Konfig to check for newer versions of Konfig, taking into account whether &#039;Participate in beta program&#039; is checked.&lt;br /&gt;
&lt;br /&gt;
=== Device Updates ===&lt;br /&gt;
==== Participate in beta program ====&lt;br /&gt;
Whether Konfig automatically checks for beta releases of firmware for available Linn devices.&lt;br /&gt;
&lt;br /&gt;
=== Diagnostics ===&lt;br /&gt;
==== Automatically send DS crash information to Linn ====&lt;br /&gt;
Whether to automatically send Linn device crash information to Linn for analysis (recommended to be checked).&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;NOTE: No personal information is sent to Linn as a result of this option being checked.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== Privacy ===&lt;br /&gt;
==== Send anonymous usage data to Linn ====&lt;br /&gt;
&lt;br /&gt;
Whether to allow Konfig to send anonymous usage data to Linn for analysis (recommended to be checked).&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;NOTE: No personal information is sent to Linn as a result of this option being checked.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== Network ===&lt;br /&gt;
&lt;br /&gt;
Which network to use to locate Linn DSs.&lt;br /&gt;
&lt;br /&gt;
= Troubleshooting =&lt;br /&gt;
=== Konfig cannot see any of my DS ===&lt;br /&gt;
&lt;br /&gt;
Check within Settings that the Network connection is correct.&amp;lt;br&amp;gt;&lt;br /&gt;
In older versions of Konfig you only had to select the network card, (wired, wireless etc). Now Konfig asks you for the Network IP range, this is to simplify the connection as this can use BOTH the wired and wireless connections if they are connected to the same Network.&amp;lt;br&amp;gt;&lt;br /&gt;
If your PC/MAC has changed Ethernet networks (for installation, Home-Work etc), the Konfig may be setup for a different address range and not see any DS products. So if your Konfig cannot see your Linn DS products, go into Settings and check that the correct Network address has been selected (click on the drop down box to see what is available)&lt;br /&gt;
&lt;br /&gt;
Some Anti-virus Suites also have additional Firewalls that will block a lot of communications. If Konfig used to work and now does not find any products then check if your Anti-Virus suite has recently had a major update. This update may require the Konfig for have &amp;quot;firewall exceptions&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
=== After the software update the Linn DS is not working correctly or losing settings ===&lt;br /&gt;
&lt;br /&gt;
This can be due to a configuration conflict with the last software version:&lt;br /&gt;
* From Konfig, under the Advanced page, select your DS&lt;br /&gt;
* Select the &#039;&#039;&#039;RESTORE&#039;&#039;&#039; button, this will reset the Linn DS back its factory defaults&lt;br /&gt;
* Reconfigure your DS to your preferred setting. (As this is configuration is performed in the same software version this should remove any previous conflicts).&lt;br /&gt;
&lt;br /&gt;
=== Where is the manual for the previous releases of Konfig? ===&lt;br /&gt;
&lt;br /&gt;
The old Konfig manual has moved to [[Konfig_Manual_Old| here]]&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
=== Konfig just doesn&#039;t run on my Mac. The icon bounces in the dock and then goes away.===&lt;br /&gt;
* Open Finder&lt;br /&gt;
* From the Menu bar at the top select &#039;Go&#039; the &#039;Go to Folder&#039;&lt;br /&gt;
* Type in ~/Library/Konfig and click Go&lt;br /&gt;
* Select &#039;Options.xml&#039; file and delete&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== What if I have problems updating? ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Don&#039;t panic, the update process is safe, so you should always be able to recover your device&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* Restart Konfig. If your device reports the expected version, the update was successful and you are done&lt;br /&gt;
* If your device does not report the expected version, retry the update process (if you were updating over wireless, try updating over a wired connection)&lt;br /&gt;
* If this fails, power cycle your device and try again&lt;br /&gt;
* If this fails, download the latest version of software from [http://products.linn.co.uk/VersionInfo/Downloads/Releases/ here]&lt;br /&gt;
* Save this zip file to a known location on your hard drive, preferably in C:\&lt;br /&gt;
* Open Linn Konfig&lt;br /&gt;
* Go to the ‘Advanced’ tab&lt;br /&gt;
* Press the fallback button on the DS&lt;br /&gt;
* The DS should appear in Konfig with a lightning symbol beside it&lt;br /&gt;
* Enter the full location of the .zip file that you saved in the text box for the DS (e.g. “C:\MajikDs_4.12.357.zip”)&lt;br /&gt;
* Select the ‘Device Recovery’ option below the text box&lt;br /&gt;
* Click on ‘Update’&lt;br /&gt;
* The unit should update successfully&lt;br /&gt;
* If the update fails then contact your retailer for further support&lt;br /&gt;
&#039;&#039;&#039;NOTE: If there is no text box to enter the file location, ensure that you have the latest version of Internet Explorer installed. If there is still no text box, ensure that the security settings for Local Intranet are set to medium-low.&lt;br /&gt;
&lt;br /&gt;
=== What if I want to revert to older versions of firmware? ===&lt;br /&gt;
&lt;br /&gt;
We only support the latest firmware release and do not recommend running old firmware on any Linn DS.&lt;br /&gt;
&lt;br /&gt;
We only archive released versions of firmware.&lt;br /&gt;
&lt;br /&gt;
* Put your device into fallback mode from the button on the back of the device&lt;br /&gt;
* Download and install the compatible version of Konfig from the release download site (i.e. Cara Konfig if you are reverting to Cara firmware, Davaar for Davaar, etc)&lt;br /&gt;
* Download the version of firmware (zip file) you wish to use from the release download site (only firmware for your device model will work)&lt;br /&gt;
* From Konfig, under the Advanced page, enter the downloaded firmware location for your Linn device&lt;br /&gt;
&lt;br /&gt;
Keep in mind, only compatible control points will work with your device (i.e. Cara with Cara, Davaar with Davaar, etc)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== What if I have problems updating my Exakt devices? ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Don&#039;t panic, the update process is safe, so you will always be able to recover your device&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* Normally your Exakt devices will update seemlessly as part of the standard DS/DSM update process.&lt;br /&gt;
*  Restart Konfig. If your Exakt device appears under Exakt Setup and there is no Update button, the update was successful and you are done.&lt;br /&gt;
* Restart Konfig. If your Exakt device appears under Exakt Setup and there IS an Update button, the update was unsuccessful, click Update to try again.&lt;br /&gt;
* If this fails, power cycle your Exakt device and the connected DS/DSM device and try again.&lt;br /&gt;
* If this fails, follow the device recovery process below:&lt;br /&gt;
* Put both your Exakt device and connected DS/DSM into fallback (from the buttons on the back of the devices).&lt;br /&gt;
* Find the connected DS/DSM in the Update tab and click Update.&lt;br /&gt;
* If you have an integrated Exakt speaker, this will fully update your Exakt device as well.&lt;br /&gt;
* If you have an Exakt tunebox, you will be prompted at the end of the update to enter your speaker serial number from the Exakt Setup tab to complete the update.&lt;br /&gt;
&lt;br /&gt;
If you have difficulty programming an Exakt speaker or Tunebox, but the Exakt DSM is OK (require Konfig 4.12.2 onwards)&lt;br /&gt;
&lt;br /&gt;
* Put the speaker or Tunebox into FALLBACK&lt;br /&gt;
:* Make sure the Exakt DSM is Out of Standby&lt;br /&gt;
:* Press the Fallback button on the Exakt Speaker/Exakt Tunboks&lt;br /&gt;
* In Konfig in the DS - &amp;quot;Exakt setup&amp;quot; tab, this speaker should now show up with a RESTORE button, press the RESTORE button and wait for this to complete. If this is a Exakt Tunebox then enter the serial number of the speaker then do the UPDATE button&lt;br /&gt;
* Complete&lt;br /&gt;
&lt;br /&gt;
=== Why does Konfig not show Space Optimisation for my DS? ===&lt;br /&gt;
&lt;br /&gt;
Space Optimisation for DS was introduced in Davaar 25.&lt;br /&gt;
&lt;br /&gt;
To enable Space Optimisation on your DS you will need to install Davaar 25 or later firmware on your DS. &lt;br /&gt;
&lt;br /&gt;
== Known Issues ==&lt;br /&gt;
If you start Konfig and only get a white screen or only shows toolbar with no &amp;quot;Show devices&amp;quot; button:&lt;br /&gt;
:1. Go into Internet Explorer - &#039;&#039;Tools&#039;&#039; - &#039;&#039;Internet options&#039;&#039;&lt;br /&gt;
:2. Select Security &lt;br /&gt;
::a) If &#039;&#039;&#039;&amp;quot;Internet&amp;quot;&#039;&#039;&#039; Security is High, reduce this to Medium High&lt;br /&gt;
::b) now select &#039;&#039;&#039;&amp;quot;Local Internet&amp;quot;&#039;&#039;&#039; icon&lt;br /&gt;
::c) If &#039;&#039;&#039;&amp;quot;Local Internet&amp;quot;&#039;&#039;&#039; Security is High, reduce this to Medium High&lt;br /&gt;
:3. OK out of this &amp;amp; restart Konfig&lt;br /&gt;
&lt;br /&gt;
If this does not cure the issue then&lt;br /&gt;
:1. Run Konfig&lt;br /&gt;
:2. Open Internet Explorer&lt;br /&gt;
:3.  Type in [http://localhost:5000 http://localhost:5000] into the IE address bar&lt;br /&gt;
::(If Songbox is running then type [http://localhost:5001 http://localhost:5001]&lt;br /&gt;
:4. What appears in the window?&lt;br /&gt;
:5. If Internet Explorer shown the Konfig windows OK then retry steps 3/4/5 using Chrome or another web browser.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;After the update some PC/MAC cannot find any Linn DS/DSM products:&lt;br /&gt;
Do the following procedure:&lt;br /&gt;
:1. If you are using Norton Anti-virus, make sure that the new Konfig is added an exception&lt;br /&gt;
:2. Restart your PC/MAC and retry Konfig 10 &lt;br /&gt;
::a) Press the &#039;&#039;&#039;SHOW DEVICES&#039;&#039;&#039; button&lt;br /&gt;
::b) If a number appears beside the Updates tab (top of Konfig screen,&lt;br /&gt;
:::i) Press the Updates tab and press &#039;&#039;&#039;UPDATE&#039;&#039;&#039; beside your Linn DS/DSM name &lt;br /&gt;
:::ii) Wait until he update is finished and Press the &#039;&#039;&#039;SHOW DEVICES&#039;&#039;&#039; button. Your DS should now appear.&lt;br /&gt;
If your Linn DS/DSM is not listed&lt;br /&gt;
:3. Press the &#039;&#039;&#039;ADVANCED&#039;&#039;&#039; tab and see if your Linn DS/DSM is listed here&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
;If neither of these two options work:Follow the  [http://docs.linn.co.uk/wiki/index.php/Troubleshooting#Konfig_diagnostics Konfig 10 diagnostics]&lt;br /&gt;
&lt;br /&gt;
;If doing a Advanced download Konfig reports &amp;quot;cannot find directory..&amp;quot;;&lt;br /&gt;
:Check that &lt;br /&gt;
:1. You can typed the correct file location and file name in to the download field&lt;br /&gt;
:2. Konfig 4.10.5-4.11.2 needs internet access before doing the file update. Make sure that you have an Internet link BEFORE opening Konfig&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;/div&gt;</summary>
		<author><name>Davidd</name></author>
	</entry>
	<entry>
		<id>https://docs.linn.co.uk/wiki/index.php?title=Space_Optimsation&amp;diff=11351</id>
		<title>Space Optimsation</title>
		<link rel="alternate" type="text/html" href="https://docs.linn.co.uk/wiki/index.php?title=Space_Optimsation&amp;diff=11351"/>
		<updated>2015-03-25T11:49:48Z</updated>

		<summary type="html">&lt;p&gt;Davidd: moved Space Optimsation to Space Optimisation:&amp;amp;#32;corrected spelling mistake in page title&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;#REDIRECT [[Space Optimisation]]&lt;/div&gt;</summary>
		<author><name>Davidd</name></author>
	</entry>
	<entry>
		<id>https://docs.linn.co.uk/wiki/index.php?title=Space_Optimisation&amp;diff=11350</id>
		<title>Space Optimisation</title>
		<link rel="alternate" type="text/html" href="https://docs.linn.co.uk/wiki/index.php?title=Space_Optimisation&amp;diff=11350"/>
		<updated>2015-03-25T11:49:48Z</updated>

		<summary type="html">&lt;p&gt;Davidd: moved Space Optimsation to Space Optimisation:&amp;amp;#32;corrected spelling mistake in page title&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Introduction =&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Space Optimisation&#039;&#039;&#039; provides a listener focused view of room optimisation for analogue. This means that Linn DS/DSM products give the listener an opportunity to greatly improve the listening experience by providing these products with information about the listening environment. The software inside the these products can then account for the listening environment and compensate accordingly.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Space Optimisation+&#039;&#039;&#039; has the added functionality of &#039;&#039;&#039;Exakt&#039;&#039;&#039; products incorporating the measured response of every individual drive unit as well as Space Optimisation. It enables even more advanced speaker modelling that’s specific, not just to the model of speaker, but to the unique pair of speakers in your home. This will further enhance your Music experience.&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Space Optimisation/Space Optimisation+ works on all music playback sources except external source(s) with DIRECT Delay Mode.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The SPDIF/TOSLINK &amp;amp; HDMI Outputs will NOT have the Space Optimisated audio, these outputs pass the unprocessed audio feed. &amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Overview =&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Internet connection is required for Konfig and Linn Exakt Products when using Exakt Systems&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Konfig can optimise for the following acoustic phenomena:&lt;br /&gt;
&lt;br /&gt;
=== Room Modes ===&lt;br /&gt;
Every room is different, and can therefore be optimised to sound as good as possible. You will need to use the [http://www.linn.co.uk/tunedem TuneDem] method to find the ideal location for your speakers.&lt;br /&gt;
&lt;br /&gt;
=== Speaker Placement ===&lt;br /&gt;
In practice, the ideal [http://www.linn.co.uk/tunedem TuneDem] location for your speakers is rarely the practical location as well. Not to worry, optimisation will allow the ideal Tune Dem sound to be applied wherever your speakers are located.&lt;br /&gt;
&lt;br /&gt;
=== High Frequency Response ===&lt;br /&gt;
Each room responds to high frequency (a.k.a. treble) differently. An empty room with marble walls will respond much differently to a room with plasterboard walls and lots of soft furnishings. This stage allows you to optimise according to the high frequency response of your room.&lt;br /&gt;
&lt;br /&gt;
= Optimisation Process =&lt;br /&gt;
== Stage 1: TuneDem ==&lt;br /&gt;
This is assuming if you have an Exakt speaker/ExaktBox system this has been configured using the Konfig manual&lt;br /&gt;
: 1. Using the [http://www.linn.co.uk/tunedem TuneDem] method, determine the ideal speaker location for your room&lt;br /&gt;
: 2. Select your Linn DS/DSM device in Konfig&lt;br /&gt;
: 3. For non Exakt systems, select the &amp;quot;Speakers&amp;quot; tab, select your speakers and press the Apply button&lt;br /&gt;
:: NOTE: With &#039;&#039;&#039;Space Optimisation&#039;&#039;&#039; turned &#039;&#039;&#039;OFF&#039;&#039;&#039; this speaker selected in this tab is ignored and has no effect in Music playback.&lt;br /&gt;
: 4. This will show &#039;&#039;&#039;Space Optimisation+&#039;&#039;&#039;  or &#039;&#039;&#039;Space Optimisation&#039;&#039;&#039; Click on this tab&lt;br /&gt;
::  &#039;&#039;&#039;Space Optimisation+&#039;&#039;&#039; is for &#039;&#039;&#039;Exakt&#039;&#039;&#039; Speakers/ExaktBoxes &lt;br /&gt;
::  &#039;&#039;&#039;Space Optimisation&#039;&#039;&#039; is for &#039;&#039;&#039;Non-Exakt&#039;&#039;&#039; system&lt;br /&gt;
: 5. TURN ON Space Optimisation if turned off&lt;br /&gt;
[[File:KonfigSpaceTabs.jpg|740px|Space Tabs]]&lt;br /&gt;
&lt;br /&gt;
== Stage 2: Optimise for Room Modes ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;TURNING OFF THE Space Optimisation WILL IGNORE ANY SPEAKER SELECTION AND WILL NOT PERFORM ANY Space Optimisation&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== Room dimensions ===&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Click in the &#039;&#039;&#039;CHANGE ROOM SETTINGS...&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Measure the length, width and height of the listening room and note them down.  All measurement must be taken in meters.&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:KonfigSpaceOptimisationRoomModesDimensions.jpg|740px]]&lt;br /&gt;
&lt;br /&gt;
[[File:ExaktRoomMeasurement.png|700px]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The Space optimisation algorithms are based on the assumption of a largely rectangular room.  If the room is slightly non-rectangular (e.g. it has a chimney breast or a bay window) you must decide upon the pertinent dimensions.  In general the room dimension should be taken as the distance corresponding to the largest surface area on any given wall.  Taking the examples cited above; in the case of the bay window, if the window covers more than half of the wall then measure into the bay window.  For the case of the chimney breast, if the chimney covers less than half of the wall surface then measure to the wall either side of the chimney.&amp;lt;br&amp;gt;&lt;br /&gt;
If a room is rectangular but has one corner taken up by a partitioned corridor or small anteroom then the larger dimensions should be used.&amp;lt;br&amp;gt;&lt;br /&gt;
In the example below, the length will be entered as 6.15m, the width as 4.3m.  The inset door and chimney breast (fireplace) account for less than 50% of the side walls so they are ignored and the measurement taken is to the most distant surfaces.  The bay window covers more than 50% of the end wall so the length of the room is measured into the window.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:Exakt Opt dim1.jpg]]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Further discussion of room dimensions, including more complicated room layouts, can be found on the [[Advanced_Space_optimisation | Advanced ]] Information page&lt;br /&gt;
&lt;br /&gt;
To enter the Room Dimensions:-&amp;lt;br&amp;gt;&lt;br /&gt;
: 1. Click on the &#039;&#039;&#039;SPACE Optimiation&#039;&#039;&#039; optimisation tab.&lt;br /&gt;
&lt;br /&gt;
: 2. Click on &#039;&#039;&#039;Change Room Settings...&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
: 3. Enter values for &#039;&#039;&#039;Room Dimensions&#039;&#039;&#039; (in Metres)&lt;br /&gt;
&lt;br /&gt;
:: a. Each wall/floor/Ceiling construction type, (Unknown, Concrete or Partition)&lt;br /&gt;
:: b. Add any other features in that particulat wall such as Windows and Doors. (with Dimensions in Metres)&lt;br /&gt;
&lt;br /&gt;
: 4. Enter values for &#039;&#039;&#039;Listening Position&#039;&#039;&#039; (in Metres ), &lt;br /&gt;
&lt;br /&gt;
: 5. Enter values for &#039;&#039;&#039;Ideal TuneDem Speaker Position&#039;&#039;&#039;&lt;br /&gt;
:: a. The bottom area of the plinth to floor does not include the &#039;&#039;&#039;spikes&#039;&#039;&#039;, &#039;&#039;&#039;Skeets&#039;&#039;&#039; height on floor standing speakers. With desktop speakers this is from the base of the speakers.&lt;br /&gt;
:: b. Speaker measurements should be made from the outside front corner.&lt;br /&gt;
[[File:KonfigSpaceWallConstruction.jpg|740px]]&lt;br /&gt;
&lt;br /&gt;
: 6. Click &#039;&#039;&#039;Optimise&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
: N.B. To remove any Room Mode optimisation from your setup click &#039;&#039;&#039;Disable&#039;&#039;&#039; .&lt;br /&gt;
&lt;br /&gt;
=== Room Modes ===&lt;br /&gt;
The &#039;&#039;&#039;Room Modes&#039;&#039;&#039; graph now displayed shows the audio notch filters/Room Modes that are applied to the audio stream before being played back from the speakers.&amp;lt;br&amp;gt;&lt;br /&gt;
All of these filters are applied in unison, they are not individual filters that you select to be operation one at a time.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The fresh graph shows &#039;&#039;&#039;BLUE&#039;&#039;&#039; lines, these are the user adjusted, (the &#039;&#039;&#039;Black&#039;&#039;&#039; calulated lines are hidden behind the blue lines)&lt;br /&gt;
&lt;br /&gt;
These Space Optimisation &amp;quot;Room Modes&amp;quot;/Notch filters are used to correct room audio reflections from the wall, ceiling, floor and furnishings. These reflections can cause highs and lows in the frequency response, these &#039;&#039;&#039;Room Modes&#039;&#039;&#039; filters correct these distortions.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A large room will have more optimisation filters than a small room.  Selecting an individual optimisation filter allows you to modify the centre frequency of the filter, its bandwidth and its gain.&lt;br /&gt;
&lt;br /&gt;
For regular shaped rectangular rooms it is likely that the room mode optimisation is quite accurate and will require little further improvement.&lt;br /&gt;
&lt;br /&gt;
=== Custom Filter ===&lt;br /&gt;
This will allow you to add your own filters, but should be resticted to very advanced users.&lt;br /&gt;
&lt;br /&gt;
==== Room mode validity ====&lt;br /&gt;
&lt;br /&gt;
As a first step it is recommended that the installer check the validity of each room mode filter.  Filter redundancy may occur if a room surface is particularly irregular, for example a pitched roof.  In this instance no strong standing waves will occur between the floor and ceiling and unnecessary optimisation filters may be produced.  &lt;br /&gt;
&lt;br /&gt;
Press the &#039;&#039;&#039;SET ALL TO 0dB&#039;&#039;&#039; then using the tune-dem re-instate each filter by pressing &#039;&#039;&#039;SET TO CALCULATED&#039;&#039;&#039;, starting with the lowest frequency, and ensure that each optimisation filter improves the musicality of the system.   If re-instating a filter has no audible effect then return the filter’s gain to zero and move to the next filter.&lt;br /&gt;
&lt;br /&gt;
==== Adjusting Room mode for best sonic performance ====&lt;br /&gt;
&lt;br /&gt;
Once all required room mode optimisation filters have been established some further optimisation may be achieved by altering the gain of the room mode filters (frequency and bandwidth adjustment are covered in Advanced Information)&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Use a piece of music with an even, melodic bass line.  Starting with the lowest frequency room mode filter, increase the gain by 6dB and listen again.  Using tune-dem decide if the result is an improvement.  If the base line sounds more even, try increasing the gain again.  If the bass line sounds less even, then reduce the gain.  Increase and decrease the gain in progressively smaller steps until the best result is achieved.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Move on to the next room mode and repeat.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Always start with the lowest frequency room mode filter.  Low frequencies mask higher frequencies so it will be easier to judge the accuracy of the higher frequency mode filters if the lower frequency filters are correct.&lt;br /&gt;
&lt;br /&gt;
Pressing the &#039;&#039;&#039;SET TO CALCULATED&#039;&#039;&#039; will ONLY change the current node back to the calcuated value.&lt;br /&gt;
&lt;br /&gt;
Pressing the &#039;&#039;&#039;SET ALL TO CALCULATED&#039;&#039;&#039; will return ALL nodes to their calculated value.&lt;br /&gt;
&lt;br /&gt;
E.g. Take the difference between the Gain value and zero then half it. Listen to at centre gain plus half value and then minus half value to find the best Gain setting for the tune. Half the value between the two best sound gains and vary this by half again.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
::: Original value -20dB&lt;br /&gt;
::: Try Gain -14dB&lt;br /&gt;
:::: If -14dB sounds better try Gain -8db ... If better try Gain -2dB, if worse try Gain -5dB etc&lt;br /&gt;
:::: If -14dB sounds worse try Gain -17dB...if better try  Gain -18.5dB, if worse try Gain -15.5dB etc&lt;br /&gt;
::: Also try Gain -26dB....&lt;br /&gt;
:::::etc....&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
[[File:KonfigSpaceNodeAdj.jpg|700px]]&lt;br /&gt;
&lt;br /&gt;
== Stage 3: Optimise for Speaker Placement ==&lt;br /&gt;
&lt;br /&gt;
You may not be happy with the speakers setup in the Tune-Dem locations setup above.  If for reasons of practicality, interior design or aesthetics requirements, the loudspeakers to be placed elsewhere then move the loudspeakers as required and measure the new ‘practical’ loudspeaker positions.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:KonfigSpaceOptPracSprPOS.jpg|740px|Speaker Placement Dimensions]]&lt;br /&gt;
&lt;br /&gt;
: 1. Click on the &#039;&#039;&#039;CHANGE ROOM SETTINGS&#039;&#039;&#039; button.&lt;br /&gt;
&lt;br /&gt;
: 2. Enter values for &#039;&#039;&#039;Practical Speaker Position&#039;&#039;&#039; for each speaker. (Do &#039;&#039;&#039;NOT&#039;&#039;&#039; change the &#039;ideal&#039; loudspeaker positions.)&lt;br /&gt;
&lt;br /&gt;
:: a. All dimensions must be measured in meters.&lt;br /&gt;
:: b. Speaker measurements should be made from the outside front corner.&lt;br /&gt;
&lt;br /&gt;
: 3. Click &#039;&#039;&#039;Optimise&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
: N.B. To remove any Speaker Placement optimisation from your setup click &#039;&#039;&#039;Disable&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
When Konfig calculates the placement optimisation filters it will disregard any changes you have made to the room mode optimisation and re-calculate the room modes for the new loudspeaker positions.  You will need to go back to room mode optimisation and re-apply any previous changes.  Use the gain offset values you have written in the room mode adjustment table to re-adjust the room modes.&lt;br /&gt;
&lt;br /&gt;
Remember and record the settings on the [[Media:Konfig Exakt Room Mode Adjustment.pdf]] sheet&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- [[File:ExaktSpeakerPlacement.png|700px|RoomMeasurement]] --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Stage 4: Optimise for High Frequency Response ==&lt;br /&gt;
&lt;br /&gt;
[[File:KonfigSpaceOptimisationHighFrequencyResponse.jpg|740px|High Frequency Response]]&lt;br /&gt;
&lt;br /&gt;
: 1. Click on the Room Mode selection and select Treble shelf&lt;br /&gt;
: 2. Enter frequency and gain values as required. (gain limits -2dB to + 2dB)&lt;br /&gt;
: N.B. To disable any high frequency response set the gain to 0.&lt;br /&gt;
: You will have to click on the magnifying glass in the top left of the graph to see the result.&lt;br /&gt;
&lt;br /&gt;
== Stage 5: Optimise for bass response ==&lt;br /&gt;
&lt;br /&gt;
[[File:Konfig_Space_Bass_shelf.jpg|740px|Bass Response]]&lt;br /&gt;
&lt;br /&gt;
: 1. Click on the Room Mode selection and select Bass shelf&lt;br /&gt;
: 2. Enter frequency and gain values as required. &lt;br /&gt;
:: Typical value range: 20Hz-200Hz corner, -6dB &amp;gt; +3dB gain (Keltik -6dB &amp;gt; +9dB)&lt;br /&gt;
: N.B. To disable any bass response set the gain to 0.&lt;br /&gt;
&lt;br /&gt;
== Stage 6: Fine Tune Filter Parameters to Improve Audio Performance ==&lt;br /&gt;
&lt;br /&gt;
: 1. Select the &#039;&#039;&#039;Room Modes&#039;&#039;&#039; optimisation tab&lt;br /&gt;
: 2. Each notch filter in the room optimisation graph is represented by a Room Mode (i.e. Room Mode 1, Room Mode 2, etc).&lt;br /&gt;
: 3. You can modify a notch filter by selecting it from the drop down box and entering new values.&lt;br /&gt;
: 4. Room mode optimisation is based on an idealised rectangular room, so some modifications to these values may be required&lt;br /&gt;
: 5. Speaker Placement optimisation is less prone to error, so modifying these values is not recommended&lt;br /&gt;
&lt;br /&gt;
[[File:ExaktFilter.png|700px|RoomMeasurement]]&lt;br /&gt;
&lt;br /&gt;
::* Changing the &#039;&#039;&#039;Frequency&#039;&#039;&#039; value will shift the notch filter left or right along the x-axis.&lt;br /&gt;
::* Changing the &#039;&#039;&#039;Gain&#039;&#039;&#039; value will change the height of the notch filter.&lt;br /&gt;
::* Changing the &#039;&#039;&#039;Bandwidth&#039;&#039;&#039; value with change the width of the notch filter.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Stage 7: Saving and Loading Space Optimisation setting ==&lt;br /&gt;
&lt;br /&gt;
You can now save and reload previous Space Optimisation settings using the &#039;&#039;&#039;&amp;quot;LOAD..&amp;quot;&#039;&#039;&#039; &amp;amp; &#039;&#039;&#039;&amp;quot;SAVE..&amp;quot;&#039;&#039;&#039; button on the &#039;&#039;&#039;Space Optimisation&#039;&#039;&#039; tab&lt;br /&gt;
&lt;br /&gt;
These buttons will save and load the settings on you local PC/MAC and recalled at a later date.&lt;br /&gt;
:&#039;&#039;&#039;SAVE..&#039;&#039;&#039; will ask for a description of the changes and add the Room name with date &amp;amp; time of the save.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;LOAD..&#039;&#039;&#039; Shows the date, Room and description of previous SAVE.. and allow you to reload these settings.&amp;lt;br&amp;gt;&lt;br /&gt;
::  You can &#039;&#039;&#039;EXPORT&#039;&#039;&#039; these files that you can save, then copy/back to a different PC/MAC&lt;br /&gt;
::  You can &#039;&#039;&#039;IMPORT&#039;&#039;&#039; these exported files from a different machine&lt;br /&gt;
&lt;br /&gt;
Note: &lt;br /&gt;
These same settings can be used with BOTH Exakt and Non-Exakt systems.&lt;br /&gt;
&lt;br /&gt;
= Known Restrictions =&lt;br /&gt;
Room optimisation graphs will not be visible if you are running Konfig on Windows XP. This is because Konfig requires IE9 or higher and Windows XP is not compatible with IE9 or higher.&lt;br /&gt;
&lt;br /&gt;
Internet access of required for KONFIG AND the Linn Exakt products to allow any loudspeaker measurements, crossover settings and software updates to be downloaded to the system.&lt;br /&gt;
&lt;br /&gt;
= &#039;&#039;&#039;Advanced&#039;&#039;&#039; Space optimisation=&lt;br /&gt;
[[Advanced Space optimisation| Advanced Space optimisation]]&lt;/div&gt;</summary>
		<author><name>Davidd</name></author>
	</entry>
	<entry>
		<id>https://docs.linn.co.uk/wiki/index.php?title=Konfig_Manual&amp;diff=11335</id>
		<title>Konfig Manual</title>
		<link rel="alternate" type="text/html" href="https://docs.linn.co.uk/wiki/index.php?title=Konfig_Manual&amp;diff=11335"/>
		<updated>2015-03-18T09:33:11Z</updated>

		<summary type="html">&lt;p&gt;Davidd: /* Tidal */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Introduction =&lt;br /&gt;
&lt;br /&gt;
Konfig provides advanced configuration of a Linn DS, notification and updating of a Linn DS to the latest firmware, restoring Linn DS settings back to factory defaults and manual updating of a Linn DS firmware.&lt;br /&gt;
&lt;br /&gt;
Konfig can also be run from a web-browser with all functions except the software update. Get the IP address of the Linn DS/DSM from the front panel using either the:&amp;lt;br&amp;gt;&lt;br /&gt;
:[http://docs.linn.co.uk/wiki/index.php/REM_020 REM 020 Remote control] by pressing and holding the # button &amp;lt;br&amp;gt;or with the &amp;lt;br&amp;gt;&lt;br /&gt;
:[http://docs.linn.co.uk/wiki/index.php/DS_%26_REM_019 REM 019 Remote control] by pressing DVD then the INFO buttons.&lt;br /&gt;
&lt;br /&gt;
When you are in DS web page select Control, this will give you the same options (except Software update) as below&lt;br /&gt;
&lt;br /&gt;
= Installation =&lt;br /&gt;
== System Requirements ==&lt;br /&gt;
=== Windows ===&lt;br /&gt;
* Windows Vista or later version of Windows&lt;br /&gt;
* IE9 or later&lt;br /&gt;
* 32 or 64-bit hardware&lt;br /&gt;
* Internet connection when using Exakt Systems&lt;br /&gt;
&lt;br /&gt;
=== Mac ===&lt;br /&gt;
* Mac OS X Snow Leopard 10.6.8 or later&lt;br /&gt;
* 32 or 64-bit hardware&lt;br /&gt;
* Internet connection when using Exakt Systems&lt;br /&gt;
&lt;br /&gt;
== Installing ==&lt;br /&gt;
=== Windows ===&lt;br /&gt;
* Download the installer from the [http://www.linn.co.uk/support/software#konfig download] page&lt;br /&gt;
* Double click the downloaded .exe file&lt;br /&gt;
* Follow the on screen instructions in the installer program&lt;br /&gt;
&lt;br /&gt;
=== Mac ===&lt;br /&gt;
* Download the .pkg file from the [http://www.linn.co.uk/support/software#konfig download] page&lt;br /&gt;
* Double click the downloaded .pkg file&lt;br /&gt;
* Follow the on screen instructions in the installer program&lt;br /&gt;
&lt;br /&gt;
== Uninstalling ==&lt;br /&gt;
=== Windows ===&lt;br /&gt;
* Open the Windows Control Panel and double click &amp;quot;Programs and Features&amp;quot;&lt;br /&gt;
* Select &amp;quot;Konfig&amp;quot; in the list of programs and click the &amp;quot;Uninstall&amp;quot; button&lt;br /&gt;
* Follow the on screen instructions in the uninstall window&lt;br /&gt;
&lt;br /&gt;
=== Mac ===&lt;br /&gt;
* Using Finder drag the Konfig icon from Applications/Konfig to the waste bin&lt;br /&gt;
&lt;br /&gt;
== Updating ==&lt;br /&gt;
&lt;br /&gt;
Konfig for Mac and Windows will automatically check for new software updates. Checking for available updates can also be performed manually as described below. Alternatively, Konfig can be updated by manually downloading the installation packages from the [http://www.linn.co.uk/support/software#konfig download] page and installing them using the method described in the [[#Installing| Installing]] section above.&lt;br /&gt;
&lt;br /&gt;
= Operation =&lt;br /&gt;
&lt;br /&gt;
Konfig has four main views, [[#Configuration| Configuration]], [[#Updates| Updates]], [[#Diagnostics| Diagnostics]], and [[#Advanced| Advanced]]&lt;br /&gt;
&lt;br /&gt;
[[File:Header.png|740px|Header]]&lt;br /&gt;
&lt;br /&gt;
== Configuration ==&lt;br /&gt;
&lt;br /&gt;
[[File:Configuration.png|740px|Configuration Page]]&lt;br /&gt;
&lt;br /&gt;
Click the &#039;&#039;&#039;Show Devices&#039;&#039;&#039; button to slide a list of available devices in from the left. Selecting a device from the list will show it&#039;s configuration page in the right hand pane.&lt;br /&gt;
&lt;br /&gt;
A Linn device&#039;s configuration page will only show in the right hand pane if the device is running firmware version Davaar 9 (4.9.4) or later. If your Linn device is running firmware version less that Davaar 9 (4.9.4), Konfig will provide a link to allow you to open the configuration page in your default browser.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- === DEVICES ===&lt;br /&gt;
[[Linn_DS-DSM_Konfig Devices|&amp;lt;big&amp;gt;Click here for Devices configuration page&amp;lt;/big&amp;gt;]] &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--=== DISPLAY ===&lt;br /&gt;
[[Linn_DS-DSM_Konfig_Display|&amp;lt;big&amp;gt;Click here for Display configuration page&amp;lt;/big&amp;gt;]] &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Linn Preamplifier, Volume, Delay modes, Songcast, Net-Aux and HDMI settings ===&lt;br /&gt;
[[file:771px-DS_Name_10.jpg|300px|center]]&lt;br /&gt;
&lt;br /&gt;
== DS Volume control &amp;amp; Proxy RS232 control ==&lt;br /&gt;
There are two way to control the Volume on a Linn DS system:&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Internal Volume&#039;&#039;&#039; control that will directly control the analogue audio level coming out of the Linn DS. This is good for directly connecting to a Power amplifier on your speakers.&lt;br /&gt;
[[file:635px-Internal_Vol_ctrl_10.jpg|400px|center]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Proxy RS232 control ===&lt;br /&gt;
* Or use an external preamplifier, this means that the Linn DS will always output Line-level audio.&lt;br /&gt;
:If you have a Linn Pre-amplifier this can be set to be controlled by the Kinsky control software. &lt;br /&gt;
&lt;br /&gt;
[[file:771px-DS_Name_10.jpg|300px|right]]&lt;br /&gt;
: &#039;&#039;1.&#039;&#039; Wire up the Linn DS and Linn preamplifiers/CD players &#039;&#039;&#039;RS232&#039;&#039;&#039; and audio connections as shown [http://docs.linn.co.uk/wiki/index.php/Systems Here] &#039;&#039;&#039;(Ignore this if you are using an Akurate Kontrol/1)&#039;&#039;&#039;&lt;br /&gt;
:&#039;&#039;2.&#039;&#039; Select the Linn DS and go into the Linn DS &#039;&#039;&#039;Device&#039;&#039; screen&lt;br /&gt;
:&#039;&#039;3.&#039;&#039; Take note of the text in &#039;&#039;&#039;Name&#039;&#039;&#039; field&lt;br /&gt;
:&#039;&#039;4.&#039;&#039; Go into the Linn DS &#039;&#039;&#039;RS232 connections&#039;&#039; screen&lt;br /&gt;
:&#039;&#039;5.&#039;&#039; Under Linn Preamplifier/CD player select the Linn product and Linn DS com port it is wired to.&lt;br /&gt;
:&#039;&#039;6.&#039;&#039; Press the Circle arrow to Reboot the Linn DS&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[file:824px-DS_Ktrl_Name_10.jpg|300px|right|thumb|DS Name in Kontrol - click to enlarge]]&lt;br /&gt;
:&#039;&#039;7.&#039;&#039; Click on &amp;quot;Show Devices&amp;quot; and&lt;br /&gt;
:&#039;&#039;8.&#039;&#039; Select the Linn Kontrol (preamplifier) and go into the Linn Kontrol &#039;&#039;&#039;Sources&#039;&#039;&#039; screen &lt;br /&gt;
:&#039;&#039;9.&#039;&#039; Select the Input that the Linn DS is connected to and enter the &#039;&#039;&#039;Name&#039;&#039;&#039; of the Linn DS that was take from the Linn DS - Devices screen Name field (taken in point 3)&lt;br /&gt;
:&#039;&#039;10.&#039;&#039; If a Linn CD player was also enabled enter the &#039;&#039;&#039;Name&#039;&#039;&#039; of the Linn CD device that was take from the Linn CD player - Devices screen&lt;br /&gt;
&lt;br /&gt;
===Ethernet controlled Linn Pre-Amplifier (Akurate Kontrol/1)===&lt;br /&gt;
:&#039;&#039;1.&#039;&#039; Select the Linn DS and go into the Linn DS &#039;&#039;&#039;Device&#039;&#039; screen&lt;br /&gt;
:&#039;&#039;2.&#039;&#039; Take note of the text in &#039;&#039;&#039;Name&#039;&#039;&#039; and the &#039;&#039;&#039;Room&#039;&#039;&#039; fields&lt;br /&gt;
:&#039;&#039;3.&#039;&#039; Click on &amp;quot;Show Devices&amp;quot; and&lt;br /&gt;
:&#039;&#039;4.&#039;&#039; Select the Linn Kontrol (preamplifier) and go into the Linn Kontrol &#039;&#039;&#039;Sources&#039;&#039;&#039; screen &lt;br /&gt;
:&#039;&#039;5.&#039;&#039; Change the Akurate Kontrol &#039;&#039;&#039;Device - Room&#039;&#039;&#039; name matches the Linn DS Room field taken in point 2.&lt;br /&gt;
:&#039;&#039;6.&#039;&#039; Select the Input that the Linn DS is connected to and enter the &#039;&#039;&#039;Name&#039;&#039;&#039; of the Linn DS that was take from the Linn DS Name field taken in point 2.&lt;br /&gt;
&lt;br /&gt;
I would suggest a &amp;quot;cut and paste&amp;quot; of the Room field and DS name field as this is case-senative (&amp;quot;lounge&amp;quot; is not the same as &amp;quot;Lounge&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
==Sources==&lt;br /&gt;
&lt;br /&gt;
===Name===&lt;br /&gt;
This is the source name that will appear in the DS user control software (Kinksy, Kazoo etc)&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Visible===&lt;br /&gt;
This allows you to hide sources. &lt;br /&gt;
If you set Visible-NO, then this input is hidden from selection in the Front panel and the user control software selection list.&amp;lt;br&amp;gt;&lt;br /&gt;
This does not mean that you have disabled the input, it only means that you cannot see it.&lt;br /&gt;
&lt;br /&gt;
===Delay Mode===&lt;br /&gt;
[[file:584px-DSM_delays.jpg|400px|right|thumb|Source delays - click to enlarge]]&lt;br /&gt;
&lt;br /&gt;
There are 3 different delays modes with the Linn DSI/DSM/Exakt for external sources (Analogue, Toslink, SPDIF &amp;amp; HDMI)&lt;br /&gt;
:&#039;&#039;&#039;Direct&#039;&#039;&#039; - This will feed the audio in real-time to the local Linn DSI/DSM, but the audio fed to the other Linn DS products will be delayed by 150mS. If this is setup and the other Linn DS products are fairly close, the music will sound like an echo&amp;lt;br&amp;gt;&lt;br /&gt;
:&#039;&#039;&#039;Fixed&#039;&#039;&#039; - This will delay the audio to ALL Linn DS/DSI/DSM products (including Exakt products) to keep the audio in perfect sync. This common delay is 150mS&amp;lt;br&amp;gt;&lt;br /&gt;
:&#039;&#039;&#039;Variable&#039;&#039;&#039; - This is a lipsync delay from 20ms-1999ms on this local DS. However the Songcast listening rooms will ONLY be in perfect sync for Lip-sync delays of =&amp;gt;150mS. &lt;br /&gt;
:If the lip-sync is less than 150ms, the listening rooms will always have a 150mS from original source, this means that the audio will be out of sync by 150ms minus the lip sync value. (eg Lipsync delay 90mS, then the delay from the sender DS audio to the listening room DS is 60mS)&lt;br /&gt;
:Lipsync delay time is variable from from 20mS-2S either from the Konfig app or the IR handset.&amp;lt;br&amp;gt;&lt;br /&gt;
For operation detail check [[DSM Audio Latencies Explained]]&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Input level, Unity Gain, Volume offset===&lt;br /&gt;
[[file:808px-Sources-setup.jpg|404px|right|thumb|Source settings - click to enlarge]]&lt;br /&gt;
:&#039;&#039;&#039;Input level (Vrms)&#039;&#039;&#039; - This is to allow you to change that input profile for the specific sources. This may be due to input adapters,  such as RCA-XLR, XLR-RCA etc, being used giving different output levels.&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Transformer&#039;&#039;&#039; - This is only on some of the Linn DSM&#039;s and enables the input to electrically isolated via an audio transformer on this input. This should &#039;&#039;&#039;NOT&#039;&#039;&#039; be enabled if you are connecting to another product with an audio transformer on it output, such as a &#039;&#039;&#039;URIKA&#039;&#039;&#039; or &#039;&#039;&#039;Klimax DS/1&#039;&#039;&#039;. &lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Unity Gain&#039;&#039;&#039; -This will turn off the DSM volume control whenever that input/source is selected. This is a pass-through state&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Volume Offset&#039;&#039;&#039; - this is an trim adjustment. Some audio sources have a higher or lower output than normal.  This trim/offset will allow you to you to switch between source and keep the same DSM volume.&lt;br /&gt;
&lt;br /&gt;
==Songcast / Net Aux inputs==&lt;br /&gt;
[[file:669px-Net_Aux_10.jpg|300px|right|thumb|Sources - click to enlarge]]&lt;br /&gt;
* To show the Linn DS sources you need to make these visible. This allows you to hide source that you are not going to use, such as UpnpAV that is only used with some media controllers.&lt;br /&gt;
* &#039;&#039;&#039;Songcast&#039;&#039;&#039; listen to Music playing on your [http://oss.linn.co.uk/trac/wiki/SongcastWindowsDavaarManual#KnownIssues PC SONGCAST] software or listen to another  DS, &lt;br /&gt;
** &#039;&#039;&#039;Visible&#039;&#039;&#039;&lt;br /&gt;
*** Set Visible to &#039;&#039;&#039;NO&#039;&#039;&#039; will hide this on the inputs listing within the control software Kinsky.&lt;br /&gt;
*** Set Visible to &#039;&#039;&#039;YES&#039;&#039;&#039; will make this a visible source in Kinsky&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
* &#039;&#039;&#039;Net-Aux&#039;&#039;&#039; To have 3rd party Media streamers to play on your Linn DS&lt;br /&gt;
** &#039;&#039;&#039;Visible&#039;&#039;&#039;&lt;br /&gt;
*** Set Visible to &#039;&#039;&#039;NO&#039;&#039;&#039; will hide this on the inputs listing within the control software Kinsky.&lt;br /&gt;
*** Set Visible to &#039;&#039;&#039;YES&#039;&#039;&#039; will make this a visible source in Kinsky&lt;br /&gt;
** &#039;&#039;&#039;Auto Select&#039;&#039;&#039;&lt;br /&gt;
*** Set Auto Select to &#039;&#039;&#039;ON&#039;&#039;&#039; will get have the Linn DS to automatically switch to the Net-Aux input on receipt of a third party media stream.&lt;br /&gt;
*** Set Auto Select to &#039;&#039;&#039;OFF&#039;&#039;&#039; if you do &#039;&#039;&#039;NOT&#039;&#039;&#039; want the Linn DS to automatically switch to the Net-Aux input on receipt of a third party media stream&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== HDMI ==&lt;br /&gt;
[[file:764px-HDMI_Konfig_10.jpg|400px|right|thumb| HDMI - click to enlarge]]&lt;br /&gt;
* The HDMI connection can be shutdown whilst the product is in Sleep mode&lt;br /&gt;
* Usage of the Audio mode etc are explained [http://docs.linn.co.uk/wiki/index.php/HDMI_Setup#Audio_Mode  here]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Songcast Sender ==&lt;br /&gt;
&lt;br /&gt;
[[File:809px-Songcast_sender.jpg‎| 400px | centre]]&lt;br /&gt;
&lt;br /&gt;
[[Songcast_Sender|&amp;lt;big&amp;gt;Click here for Songcast Sender page&amp;lt;/big&amp;gt;]] &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Tidal ==&lt;br /&gt;
[[file:795px-Konfig-Tidal.jpg‎ |298px | centre]]&lt;br /&gt;
&lt;br /&gt;
This allows you to control the quality of the next Tidal radio stream tracks.&lt;br /&gt;
This tell tell Tidal that the music stream will now be in the Low, High or top level - FLAC quality audio. That is, the next Tidal track will be played in the newly set quality of audio.&lt;br /&gt;
&lt;br /&gt;
The change in Tidal audio quality will also control the amount of broadband capacity you are using. &lt;br /&gt;
* &amp;quot;Low (AAC 96kbps)&amp;quot; will use the least amount of broadband&lt;br /&gt;
* &amp;quot;High (AAC 320kbps)&amp;quot; will use a resonable amount of broadband&lt;br /&gt;
* &amp;quot;FLAC (lossless)&amp;quot; will use the most amount of broadband.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div id=&amp;quot;Exakt_Optimisation&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Space Optimisation ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;An Internet connection is required when using Exakt Systems and Space Optimisation&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
If you have selected an Exakt system, you will see the following three configuration tabs.&lt;br /&gt;
&lt;br /&gt;
[[File:KonfigExaktTabs.png|740px|Exakt Tabs]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Exakt&#039;&#039;&#039; allows you to assign an audio channel (i.e. Left or Right) to an Exakt speaker.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Space Optimisation+&#039;&#039;&#039; provides a listener focused way of applying room optimisation.&lt;br /&gt;
&lt;br /&gt;
If you have selected a DS system, you will see the following three configuration tabs.&lt;br /&gt;
&lt;br /&gt;
[[File:KonfigNonExaktTabs.png|740px|Exakt Tabs]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Speakers&#039;&#039;&#039; allows you to assign which speakers are connected to the DS system.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Space Optimisation&#039;&#039;&#039; provides a listener focused way of applying room optimisation.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
For help with this, please see the [[Space Optimsation|Space Optimisation]] article.&lt;br /&gt;
&lt;br /&gt;
== Updates ==&lt;br /&gt;
&lt;br /&gt;
[[File:Updates.png|740px|Updates Page]]&lt;br /&gt;
&lt;br /&gt;
The Updates tab indicates the number of Linn devices that currently have a newer software version available, as shown in the screenshot above.&lt;br /&gt;
&lt;br /&gt;
Each device that has an update available will be in the list of updatable devices. Each device has information about the update version available as well as a link to the release notes.&lt;br /&gt;
&lt;br /&gt;
To update a device click the &#039;Update&#039; button. If you have more than one devices to update you can click the &#039;Update All&#039; button to update all the devices at the same time.&lt;br /&gt;
&lt;br /&gt;
If you updated a device to beta software and then decide you want to go back to the latest stable release you just need to un-click the [[#Participate_in_beta_program_2| Participate in beta program]] option, return to the Updates page and update the desired device.&lt;br /&gt;
&lt;br /&gt;
== Diagnostics ==&lt;br /&gt;
&lt;br /&gt;
[[File:Diagnostics.png|740px|Diagnostics Page]]&lt;br /&gt;
&lt;br /&gt;
The Diagnostics tab indicates the number of Linn devices that currently have crash data available to send to Linn, as shown in the screenshot above.&lt;br /&gt;
&lt;br /&gt;
To send the crash data from a device to Linn click the &#039;Send&#039; button. If you have more than one device with crash data you can click the &#039;Send All&#039; button.&lt;br /&gt;
&lt;br /&gt;
If you do not wish to send the crash data for a device you can click the &#039;Ignore&#039; button and you will not be notified about crash data until the device crashes again. If you want to ignore crash data from all the listed devices you can click the &#039;Ignore All&#039; button.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;NOTE: No personal information is sent to Linn as a result of sending crash data to Linn.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== Advanced ==&lt;br /&gt;
&lt;br /&gt;
[[File:Advanced.png|740px|Advanced Page]]&lt;br /&gt;
&lt;br /&gt;
The Advanced page allows a user to restore a Linn device back to the original factory settings. It also allows a user to manually updating a Linn device&#039;s firmware to a locally stored firmware bundle.&lt;br /&gt;
&lt;br /&gt;
=== Restore Factory Settings ===&lt;br /&gt;
&lt;br /&gt;
Click the &#039;Restore&#039; button associated with the desired Linn device to start the process of restoring the Linn device to its factory default settings.&lt;br /&gt;
&lt;br /&gt;
=== Updating Linn Device Firmware ===&lt;br /&gt;
&lt;br /&gt;
First download the desired firmware from [http://products.linn.co.uk/VersionInfo/Downloads/Releases/ here].&lt;br /&gt;
&lt;br /&gt;
[[File:992px-Advanced-update.jpg|740px|Advanced Page]]&lt;br /&gt;
&lt;br /&gt;
Next enter the firmware&#039;s downloaded location into the text field associated with the desired Linn device, e.g. On Windows, C:\Users\&amp;lt;username&amp;gt;\Desktop\KlimaxDsm_4.7.5.zip and on Mac, /Users/&amp;lt;username&amp;gt;/Desktop/S08500116.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;NOTE: On Mac the downloaded firmware is automatically unzipped by the OS and so the location is a directory unlike on Windows where the location is the downloaded zip file.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
After entering the firmware&#039;s location click the &#039;Update&#039; button to start the process of updating the Linn device&#039;s firmware.&lt;br /&gt;
&lt;br /&gt;
=== Device Recovery ===&lt;br /&gt;
&lt;br /&gt;
This option should only be used if your are having problems updating your Linn DS through the standard methods, i.e. automatically through the Update page or manually as described in the previous section.&lt;br /&gt;
&lt;br /&gt;
After a &#039;Device Recovery&#039; update has been performed any Linn device settings changed by the user will be set back to factory defaults.&lt;br /&gt;
&lt;br /&gt;
== Settings ==&lt;br /&gt;
&lt;br /&gt;
[[File:Settings.png|740px|Settings Page]]&lt;br /&gt;
&lt;br /&gt;
=== Application Updates ===&lt;br /&gt;
==== Automatic update checks ====&lt;br /&gt;
Whether Konfig automatically checks for newer versions of Konfig.&lt;br /&gt;
==== Participate in beta program ====&lt;br /&gt;
Whether Konfig automatically checks for beta releases of Konfig.&lt;br /&gt;
==== Check For Updates ====&lt;br /&gt;
Force Konfig to check for newer versions of Konfig, taking into account whether &#039;Participate in beta program&#039; is checked.&lt;br /&gt;
&lt;br /&gt;
=== Device Updates ===&lt;br /&gt;
==== Participate in beta program ====&lt;br /&gt;
Whether Konfig automatically checks for beta releases of firmware for available Linn devices.&lt;br /&gt;
&lt;br /&gt;
=== Diagnostics ===&lt;br /&gt;
==== Automatically send DS crash information to Linn ====&lt;br /&gt;
Whether to automatically send Linn device crash information to Linn for analysis (recommended to be checked).&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;NOTE: No personal information is sent to Linn as a result of this option being checked.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== Privacy ===&lt;br /&gt;
==== Send anonymous usage data to Linn ====&lt;br /&gt;
&lt;br /&gt;
Whether to allow Konfig to send anonymous usage data to Linn for analysis (recommended to be checked).&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;NOTE: No personal information is sent to Linn as a result of this option being checked.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== Network ===&lt;br /&gt;
&lt;br /&gt;
Which network to use to locate Linn DSs.&lt;br /&gt;
&lt;br /&gt;
= Troubleshooting =&lt;br /&gt;
=== Konfig cannot see any of my DS ===&lt;br /&gt;
&lt;br /&gt;
Check within Settings that the Network connection is correct.&amp;lt;br&amp;gt;&lt;br /&gt;
In older versions of Konfig you only had to select the network card, (wired, wireless etc). Now Konfig asks you for the Network IP range, this is to simplify the connection as this can use BOTH the wired and wireless connections if they are connected to the same Network.&amp;lt;br&amp;gt;&lt;br /&gt;
If your PC/MAC has changed Ethernet networks (for installation, Home-Work etc), the Konfig may be setup for a different address range and not see any DS products. So if your Konfig cannot see your Linn DS products, go into Settings and check that the correct Network address has been selected (click on the drop down box to see what is available)&lt;br /&gt;
&lt;br /&gt;
Some Anti-virus Suites also have additional Firewalls that will block a lot of communications. If Konfig used to work and now does not find any products then check if your Anti-Virus suite has recently had a major update. This update may require the Konfig for have &amp;quot;firewall exceptions&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
=== After the software update the Linn DS is not working correctly or losing settings ===&lt;br /&gt;
&lt;br /&gt;
This can be due to a configuration conflict with the last software version:&lt;br /&gt;
* From Konfig, under the Advanced page, select your DS&lt;br /&gt;
* Select the &#039;&#039;&#039;RESTORE&#039;&#039;&#039; button, this will reset the Linn DS back its factory defaults&lt;br /&gt;
* Reconfigure your DS to your preferred setting. (As this is configuration is performed in the same software version this should remove any previous conflicts).&lt;br /&gt;
&lt;br /&gt;
=== Where is the manual for the previous releases of Konfig? ===&lt;br /&gt;
&lt;br /&gt;
The old Konfig manual has moved to [[Konfig_Manual_Old| here]]&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
=== Konfig just doesn&#039;t run on my Mac. The icon bounces in the dock and then goes away.===&lt;br /&gt;
* Open Finder&lt;br /&gt;
* From the Menu bar at the top select &#039;Go&#039; the &#039;Go to Folder&#039;&lt;br /&gt;
* Type in ~/Library/Konfig and click Go&lt;br /&gt;
* Select &#039;Options.xml&#039; file and delete&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== What if I have problems updating? ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Don&#039;t panic, the update process is safe, so you should always be able to recover your device&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* Restart Konfig. If your device reports the expected version, the update was successful and you are done&lt;br /&gt;
* If your device does not report the expected version, retry the update process (if you were updating over wireless, try updating over a wired connection)&lt;br /&gt;
* If this fails, power cycle your device and try again&lt;br /&gt;
* If this fails, download the latest version of software from [http://products.linn.co.uk/VersionInfo/Downloads/Releases/ here]&lt;br /&gt;
* Save this zip file to a known location on your hard drive, preferably in C:\&lt;br /&gt;
* Open Linn Konfig&lt;br /&gt;
* Go to the ‘Advanced’ tab&lt;br /&gt;
* Press the fallback button on the DS&lt;br /&gt;
* The DS should appear in Konfig with a lightning symbol beside it&lt;br /&gt;
* Enter the full location of the .zip file that you saved in the text box for the DS (e.g. “C:\MajikDs_4.12.357.zip”)&lt;br /&gt;
* Select the ‘Device Recovery’ option below the text box&lt;br /&gt;
* Click on ‘Update’&lt;br /&gt;
* The unit should update successfully&lt;br /&gt;
* If the update fails then contact your retailer for further support&lt;br /&gt;
&#039;&#039;&#039;NOTE: If there is no text box to enter the file location, ensure that you have the latest version of Internet Explorer installed. If there is still no text box, ensure that the security settings for Local Intranet are set to medium-low.&lt;br /&gt;
&lt;br /&gt;
=== What if I want to revert to older versions of firmware? ===&lt;br /&gt;
&lt;br /&gt;
We only support the latest firmware release and do not recommend running old firmware on any Linn DS.&lt;br /&gt;
&lt;br /&gt;
We only archive released versions of firmware.&lt;br /&gt;
&lt;br /&gt;
* Put your device into fallback mode from the button on the back of the device&lt;br /&gt;
* Download and install the compatible version of Konfig from the release download site (i.e. Cara Konfig if you are reverting to Cara firmware, Davaar for Davaar, etc)&lt;br /&gt;
* Download the version of firmware (zip file) you wish to use from the release download site (only firmware for your device model will work)&lt;br /&gt;
* From Konfig, under the Advanced page, enter the downloaded firmware location for your Linn device&lt;br /&gt;
&lt;br /&gt;
Keep in mind, only compatible control points will work with your device (i.e. Cara with Cara, Davaar with Davaar, etc)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== What if I have problems updating my Exakt devices? ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Don&#039;t panic, the update process is safe, so you will always be able to recover your device&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* Normally your Exakt devices will update seemlessly as part of the standard DS/DSM update process.&lt;br /&gt;
*  Restart Konfig. If your Exakt device appears under Exakt Setup and there is no Update button, the update was successful and you are done.&lt;br /&gt;
* Restart Konfig. If your Exakt device appears under Exakt Setup and there IS an Update button, the update was unsuccessful, click Update to try again.&lt;br /&gt;
* If this fails, power cycle your Exakt device and the connected DS/DSM device and try again.&lt;br /&gt;
* If this fails, follow the device recovery process below:&lt;br /&gt;
* Put both your Exakt device and connected DS/DSM into fallback (from the buttons on the back of the devices).&lt;br /&gt;
* Find the connected DS/DSM in the Update tab and click Update.&lt;br /&gt;
* If you have an integrated Exakt speaker, this will fully update your Exakt device as well.&lt;br /&gt;
* If you have an Exakt tunebox, you will be prompted at the end of the update to enter your speaker serial number from the Exakt Setup tab to complete the update.&lt;br /&gt;
&lt;br /&gt;
If you have difficulty programming an Exakt speaker or Tunebox, but the Exakt DSM is OK (require Konfig 4.12.2 onwards)&lt;br /&gt;
&lt;br /&gt;
* Put the speaker or Tunebox into FALLBACK&lt;br /&gt;
:* Make sure the Exakt DSM is Out of Standby&lt;br /&gt;
:* Press the Fallback button on the Exakt Speaker/Exakt Tunboks&lt;br /&gt;
* In Konfig in the DS - &amp;quot;Exakt setup&amp;quot; tab, this speaker should now show up with a RESTORE button, press the RESTORE button and wait for this to complete. If this is a Exakt Tunebox then enter the serial number of the speaker then do the UPDATE button&lt;br /&gt;
* Complete&lt;br /&gt;
&lt;br /&gt;
=== Why does Konfig not show Space Optimisation for my DS? ===&lt;br /&gt;
&lt;br /&gt;
Space Optimisation for DS was introduced in Davaar 25.&lt;br /&gt;
&lt;br /&gt;
To enable Space Optimisation on your DS you will need to install Davaar 25 or later firmware on your DS. &lt;br /&gt;
&lt;br /&gt;
== Known Issues ==&lt;br /&gt;
If you start Konfig and only get a white screen or only shows toolbar with no &amp;quot;Show devices&amp;quot; button:&lt;br /&gt;
:1. Go into Internet Explorer - &#039;&#039;Tools&#039;&#039; - &#039;&#039;Internet options&#039;&#039;&lt;br /&gt;
:2. Select Security &lt;br /&gt;
::a) If &#039;&#039;&#039;&amp;quot;Internet&amp;quot;&#039;&#039;&#039; Security is High, reduce this to Medium High&lt;br /&gt;
::b) now select &#039;&#039;&#039;&amp;quot;Local Internet&amp;quot;&#039;&#039;&#039; icon&lt;br /&gt;
::c) If &#039;&#039;&#039;&amp;quot;Local Internet&amp;quot;&#039;&#039;&#039; Security is High, reduce this to Medium High&lt;br /&gt;
:3. OK out of this &amp;amp; restart Konfig&lt;br /&gt;
&lt;br /&gt;
If this does not cure the issue then&lt;br /&gt;
:1. Run Konfig&lt;br /&gt;
:2. Open Internet Explorer&lt;br /&gt;
:3.  Type in [http://localhost:5000 http://localhost:5000] into the IE address bar&lt;br /&gt;
::(If Songbox is running then type [http://localhost:5001 http://localhost:5001]&lt;br /&gt;
:4. What appears in the window?&lt;br /&gt;
:5. If Internet Explorer shown the Konfig windows OK then retry steps 3/4/5 using Chrome or another web browser.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;After the update some PC/MAC cannot find any Linn DS/DSM products:&lt;br /&gt;
Do the following procedure:&lt;br /&gt;
:1. If you are using Norton Anti-virus, make sure that the new Konfig is added an exception&lt;br /&gt;
:2. Restart your PC/MAC and retry Konfig 10 &lt;br /&gt;
::a) Press the &#039;&#039;&#039;SHOW DEVICES&#039;&#039;&#039; button&lt;br /&gt;
::b) If a number appears beside the Updates tab (top of Konfig screen,&lt;br /&gt;
:::i) Press the Updates tab and press &#039;&#039;&#039;UPDATE&#039;&#039;&#039; beside your Linn DS/DSM name &lt;br /&gt;
:::ii) Wait until he update is finished and Press the &#039;&#039;&#039;SHOW DEVICES&#039;&#039;&#039; button. Your DS should now appear.&lt;br /&gt;
If your Linn DS/DSM is not listed&lt;br /&gt;
:3. Press the &#039;&#039;&#039;ADVANCED&#039;&#039;&#039; tab and see if your Linn DS/DSM is listed here&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
;If neither of these two options work:Follow the  [http://docs.linn.co.uk/wiki/index.php/Troubleshooting#Konfig_diagnostics Konfig 10 diagnostics]&lt;br /&gt;
&lt;br /&gt;
;If doing a Advanced download Konfig reports &amp;quot;cannot find directory..&amp;quot;;&lt;br /&gt;
:Check that &lt;br /&gt;
:1. You can typed the correct file location and file name in to the download field&lt;br /&gt;
:2. Konfig 4.10.5-4.11.2 needs internet access before doing the file update. Make sure that you have an Internet link BEFORE opening Konfig&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;/div&gt;</summary>
		<author><name>Davidd</name></author>
	</entry>
	<entry>
		<id>https://docs.linn.co.uk/wiki/index.php?title=Konfig_Manual&amp;diff=11334</id>
		<title>Konfig Manual</title>
		<link rel="alternate" type="text/html" href="https://docs.linn.co.uk/wiki/index.php?title=Konfig_Manual&amp;diff=11334"/>
		<updated>2015-03-18T09:14:12Z</updated>

		<summary type="html">&lt;p&gt;Davidd: /* Space Optimisation */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Introduction =&lt;br /&gt;
&lt;br /&gt;
Konfig provides advanced configuration of a Linn DS, notification and updating of a Linn DS to the latest firmware, restoring Linn DS settings back to factory defaults and manual updating of a Linn DS firmware.&lt;br /&gt;
&lt;br /&gt;
Konfig can also be run from a web-browser with all functions except the software update. Get the IP address of the Linn DS/DSM from the front panel using either the:&amp;lt;br&amp;gt;&lt;br /&gt;
:[http://docs.linn.co.uk/wiki/index.php/REM_020 REM 020 Remote control] by pressing and holding the # button &amp;lt;br&amp;gt;or with the &amp;lt;br&amp;gt;&lt;br /&gt;
:[http://docs.linn.co.uk/wiki/index.php/DS_%26_REM_019 REM 019 Remote control] by pressing DVD then the INFO buttons.&lt;br /&gt;
&lt;br /&gt;
When you are in DS web page select Control, this will give you the same options (except Software update) as below&lt;br /&gt;
&lt;br /&gt;
= Installation =&lt;br /&gt;
== System Requirements ==&lt;br /&gt;
=== Windows ===&lt;br /&gt;
* Windows Vista or later version of Windows&lt;br /&gt;
* IE9 or later&lt;br /&gt;
* 32 or 64-bit hardware&lt;br /&gt;
* Internet connection when using Exakt Systems&lt;br /&gt;
&lt;br /&gt;
=== Mac ===&lt;br /&gt;
* Mac OS X Snow Leopard 10.6.8 or later&lt;br /&gt;
* 32 or 64-bit hardware&lt;br /&gt;
* Internet connection when using Exakt Systems&lt;br /&gt;
&lt;br /&gt;
== Installing ==&lt;br /&gt;
=== Windows ===&lt;br /&gt;
* Download the installer from the [http://www.linn.co.uk/support/software#konfig download] page&lt;br /&gt;
* Double click the downloaded .exe file&lt;br /&gt;
* Follow the on screen instructions in the installer program&lt;br /&gt;
&lt;br /&gt;
=== Mac ===&lt;br /&gt;
* Download the .pkg file from the [http://www.linn.co.uk/support/software#konfig download] page&lt;br /&gt;
* Double click the downloaded .pkg file&lt;br /&gt;
* Follow the on screen instructions in the installer program&lt;br /&gt;
&lt;br /&gt;
== Uninstalling ==&lt;br /&gt;
=== Windows ===&lt;br /&gt;
* Open the Windows Control Panel and double click &amp;quot;Programs and Features&amp;quot;&lt;br /&gt;
* Select &amp;quot;Konfig&amp;quot; in the list of programs and click the &amp;quot;Uninstall&amp;quot; button&lt;br /&gt;
* Follow the on screen instructions in the uninstall window&lt;br /&gt;
&lt;br /&gt;
=== Mac ===&lt;br /&gt;
* Using Finder drag the Konfig icon from Applications/Konfig to the waste bin&lt;br /&gt;
&lt;br /&gt;
== Updating ==&lt;br /&gt;
&lt;br /&gt;
Konfig for Mac and Windows will automatically check for new software updates. Checking for available updates can also be performed manually as described below. Alternatively, Konfig can be updated by manually downloading the installation packages from the [http://www.linn.co.uk/support/software#konfig download] page and installing them using the method described in the [[#Installing| Installing]] section above.&lt;br /&gt;
&lt;br /&gt;
= Operation =&lt;br /&gt;
&lt;br /&gt;
Konfig has four main views, [[#Configuration| Configuration]], [[#Updates| Updates]], [[#Diagnostics| Diagnostics]], and [[#Advanced| Advanced]]&lt;br /&gt;
&lt;br /&gt;
[[File:Header.png|740px|Header]]&lt;br /&gt;
&lt;br /&gt;
== Configuration ==&lt;br /&gt;
&lt;br /&gt;
[[File:Configuration.png|740px|Configuration Page]]&lt;br /&gt;
&lt;br /&gt;
Click the &#039;&#039;&#039;Show Devices&#039;&#039;&#039; button to slide a list of available devices in from the left. Selecting a device from the list will show it&#039;s configuration page in the right hand pane.&lt;br /&gt;
&lt;br /&gt;
A Linn device&#039;s configuration page will only show in the right hand pane if the device is running firmware version Davaar 9 (4.9.4) or later. If your Linn device is running firmware version less that Davaar 9 (4.9.4), Konfig will provide a link to allow you to open the configuration page in your default browser.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- === DEVICES ===&lt;br /&gt;
[[Linn_DS-DSM_Konfig Devices|&amp;lt;big&amp;gt;Click here for Devices configuration page&amp;lt;/big&amp;gt;]] &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--=== DISPLAY ===&lt;br /&gt;
[[Linn_DS-DSM_Konfig_Display|&amp;lt;big&amp;gt;Click here for Display configuration page&amp;lt;/big&amp;gt;]] &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Linn Preamplifier, Volume, Delay modes, Songcast, Net-Aux and HDMI settings ===&lt;br /&gt;
[[file:771px-DS_Name_10.jpg|300px|center]]&lt;br /&gt;
&lt;br /&gt;
== DS Volume control &amp;amp; Proxy RS232 control ==&lt;br /&gt;
There are two way to control the Volume on a Linn DS system:&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Internal Volume&#039;&#039;&#039; control that will directly control the analogue audio level coming out of the Linn DS. This is good for directly connecting to a Power amplifier on your speakers.&lt;br /&gt;
[[file:635px-Internal_Vol_ctrl_10.jpg|400px|center]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Proxy RS232 control ===&lt;br /&gt;
* Or use an external preamplifier, this means that the Linn DS will always output Line-level audio.&lt;br /&gt;
:If you have a Linn Pre-amplifier this can be set to be controlled by the Kinsky control software. &lt;br /&gt;
&lt;br /&gt;
[[file:771px-DS_Name_10.jpg|300px|right]]&lt;br /&gt;
: &#039;&#039;1.&#039;&#039; Wire up the Linn DS and Linn preamplifiers/CD players &#039;&#039;&#039;RS232&#039;&#039;&#039; and audio connections as shown [http://docs.linn.co.uk/wiki/index.php/Systems Here] &#039;&#039;&#039;(Ignore this if you are using an Akurate Kontrol/1)&#039;&#039;&#039;&lt;br /&gt;
:&#039;&#039;2.&#039;&#039; Select the Linn DS and go into the Linn DS &#039;&#039;&#039;Device&#039;&#039; screen&lt;br /&gt;
:&#039;&#039;3.&#039;&#039; Take note of the text in &#039;&#039;&#039;Name&#039;&#039;&#039; field&lt;br /&gt;
:&#039;&#039;4.&#039;&#039; Go into the Linn DS &#039;&#039;&#039;RS232 connections&#039;&#039; screen&lt;br /&gt;
:&#039;&#039;5.&#039;&#039; Under Linn Preamplifier/CD player select the Linn product and Linn DS com port it is wired to.&lt;br /&gt;
:&#039;&#039;6.&#039;&#039; Press the Circle arrow to Reboot the Linn DS&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[file:824px-DS_Ktrl_Name_10.jpg|300px|right|thumb|DS Name in Kontrol - click to enlarge]]&lt;br /&gt;
:&#039;&#039;7.&#039;&#039; Click on &amp;quot;Show Devices&amp;quot; and&lt;br /&gt;
:&#039;&#039;8.&#039;&#039; Select the Linn Kontrol (preamplifier) and go into the Linn Kontrol &#039;&#039;&#039;Sources&#039;&#039;&#039; screen &lt;br /&gt;
:&#039;&#039;9.&#039;&#039; Select the Input that the Linn DS is connected to and enter the &#039;&#039;&#039;Name&#039;&#039;&#039; of the Linn DS that was take from the Linn DS - Devices screen Name field (taken in point 3)&lt;br /&gt;
:&#039;&#039;10.&#039;&#039; If a Linn CD player was also enabled enter the &#039;&#039;&#039;Name&#039;&#039;&#039; of the Linn CD device that was take from the Linn CD player - Devices screen&lt;br /&gt;
&lt;br /&gt;
===Ethernet controlled Linn Pre-Amplifier (Akurate Kontrol/1)===&lt;br /&gt;
:&#039;&#039;1.&#039;&#039; Select the Linn DS and go into the Linn DS &#039;&#039;&#039;Device&#039;&#039; screen&lt;br /&gt;
:&#039;&#039;2.&#039;&#039; Take note of the text in &#039;&#039;&#039;Name&#039;&#039;&#039; and the &#039;&#039;&#039;Room&#039;&#039;&#039; fields&lt;br /&gt;
:&#039;&#039;3.&#039;&#039; Click on &amp;quot;Show Devices&amp;quot; and&lt;br /&gt;
:&#039;&#039;4.&#039;&#039; Select the Linn Kontrol (preamplifier) and go into the Linn Kontrol &#039;&#039;&#039;Sources&#039;&#039;&#039; screen &lt;br /&gt;
:&#039;&#039;5.&#039;&#039; Change the Akurate Kontrol &#039;&#039;&#039;Device - Room&#039;&#039;&#039; name matches the Linn DS Room field taken in point 2.&lt;br /&gt;
:&#039;&#039;6.&#039;&#039; Select the Input that the Linn DS is connected to and enter the &#039;&#039;&#039;Name&#039;&#039;&#039; of the Linn DS that was take from the Linn DS Name field taken in point 2.&lt;br /&gt;
&lt;br /&gt;
I would suggest a &amp;quot;cut and paste&amp;quot; of the Room field and DS name field as this is case-senative (&amp;quot;lounge&amp;quot; is not the same as &amp;quot;Lounge&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
==Sources==&lt;br /&gt;
&lt;br /&gt;
===Name===&lt;br /&gt;
This is the source name that will appear in the DS user control software (Kinksy, Kazoo etc)&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Visible===&lt;br /&gt;
This allows you to hide sources. &lt;br /&gt;
If you set Visible-NO, then this input is hidden from selection in the Front panel and the user control software selection list.&amp;lt;br&amp;gt;&lt;br /&gt;
This does not mean that you have disabled the input, it only means that you cannot see it.&lt;br /&gt;
&lt;br /&gt;
===Delay Mode===&lt;br /&gt;
[[file:584px-DSM_delays.jpg|400px|right|thumb|Source delays - click to enlarge]]&lt;br /&gt;
&lt;br /&gt;
There are 3 different delays modes with the Linn DSI/DSM/Exakt for external sources (Analogue, Toslink, SPDIF &amp;amp; HDMI)&lt;br /&gt;
:&#039;&#039;&#039;Direct&#039;&#039;&#039; - This will feed the audio in real-time to the local Linn DSI/DSM, but the audio fed to the other Linn DS products will be delayed by 150mS. If this is setup and the other Linn DS products are fairly close, the music will sound like an echo&amp;lt;br&amp;gt;&lt;br /&gt;
:&#039;&#039;&#039;Fixed&#039;&#039;&#039; - This will delay the audio to ALL Linn DS/DSI/DSM products (including Exakt products) to keep the audio in perfect sync. This common delay is 150mS&amp;lt;br&amp;gt;&lt;br /&gt;
:&#039;&#039;&#039;Variable&#039;&#039;&#039; - This is a lipsync delay from 20ms-1999ms on this local DS. However the Songcast listening rooms will ONLY be in perfect sync for Lip-sync delays of =&amp;gt;150mS. &lt;br /&gt;
:If the lip-sync is less than 150ms, the listening rooms will always have a 150mS from original source, this means that the audio will be out of sync by 150ms minus the lip sync value. (eg Lipsync delay 90mS, then the delay from the sender DS audio to the listening room DS is 60mS)&lt;br /&gt;
:Lipsync delay time is variable from from 20mS-2S either from the Konfig app or the IR handset.&amp;lt;br&amp;gt;&lt;br /&gt;
For operation detail check [[DSM Audio Latencies Explained]]&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Input level, Unity Gain, Volume offset===&lt;br /&gt;
[[file:808px-Sources-setup.jpg|404px|right|thumb|Source settings - click to enlarge]]&lt;br /&gt;
:&#039;&#039;&#039;Input level (Vrms)&#039;&#039;&#039; - This is to allow you to change that input profile for the specific sources. This may be due to input adapters,  such as RCA-XLR, XLR-RCA etc, being used giving different output levels.&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Transformer&#039;&#039;&#039; - This is only on some of the Linn DSM&#039;s and enables the input to electrically isolated via an audio transformer on this input. This should &#039;&#039;&#039;NOT&#039;&#039;&#039; be enabled if you are connecting to another product with an audio transformer on it output, such as a &#039;&#039;&#039;URIKA&#039;&#039;&#039; or &#039;&#039;&#039;Klimax DS/1&#039;&#039;&#039;. &lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Unity Gain&#039;&#039;&#039; -This will turn off the DSM volume control whenever that input/source is selected. This is a pass-through state&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Volume Offset&#039;&#039;&#039; - this is an trim adjustment. Some audio sources have a higher or lower output than normal.  This trim/offset will allow you to you to switch between source and keep the same DSM volume.&lt;br /&gt;
&lt;br /&gt;
==Songcast / Net Aux inputs==&lt;br /&gt;
[[file:669px-Net_Aux_10.jpg|300px|right|thumb|Sources - click to enlarge]]&lt;br /&gt;
* To show the Linn DS sources you need to make these visible. This allows you to hide source that you are not going to use, such as UpnpAV that is only used with some media controllers.&lt;br /&gt;
* &#039;&#039;&#039;Songcast&#039;&#039;&#039; listen to Music playing on your [http://oss.linn.co.uk/trac/wiki/SongcastWindowsDavaarManual#KnownIssues PC SONGCAST] software or listen to another  DS, &lt;br /&gt;
** &#039;&#039;&#039;Visible&#039;&#039;&#039;&lt;br /&gt;
*** Set Visible to &#039;&#039;&#039;NO&#039;&#039;&#039; will hide this on the inputs listing within the control software Kinsky.&lt;br /&gt;
*** Set Visible to &#039;&#039;&#039;YES&#039;&#039;&#039; will make this a visible source in Kinsky&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
* &#039;&#039;&#039;Net-Aux&#039;&#039;&#039; To have 3rd party Media streamers to play on your Linn DS&lt;br /&gt;
** &#039;&#039;&#039;Visible&#039;&#039;&#039;&lt;br /&gt;
*** Set Visible to &#039;&#039;&#039;NO&#039;&#039;&#039; will hide this on the inputs listing within the control software Kinsky.&lt;br /&gt;
*** Set Visible to &#039;&#039;&#039;YES&#039;&#039;&#039; will make this a visible source in Kinsky&lt;br /&gt;
** &#039;&#039;&#039;Auto Select&#039;&#039;&#039;&lt;br /&gt;
*** Set Auto Select to &#039;&#039;&#039;ON&#039;&#039;&#039; will get have the Linn DS to automatically switch to the Net-Aux input on receipt of a third party media stream.&lt;br /&gt;
*** Set Auto Select to &#039;&#039;&#039;OFF&#039;&#039;&#039; if you do &#039;&#039;&#039;NOT&#039;&#039;&#039; want the Linn DS to automatically switch to the Net-Aux input on receipt of a third party media stream&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== HDMI ==&lt;br /&gt;
[[file:764px-HDMI_Konfig_10.jpg|400px|right|thumb| HDMI - click to enlarge]]&lt;br /&gt;
* The HDMI connection can be shutdown whilst the product is in Sleep mode&lt;br /&gt;
* Usage of the Audio mode etc are explained [http://docs.linn.co.uk/wiki/index.php/HDMI_Setup#Audio_Mode  here]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Songcast Sender ==&lt;br /&gt;
&lt;br /&gt;
[[File:809px-Songcast_sender.jpg‎| 400px | centre]]&lt;br /&gt;
&lt;br /&gt;
[[Songcast_Sender|&amp;lt;big&amp;gt;Click here for Songcast Sender page&amp;lt;/big&amp;gt;]] &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Tidal ==&lt;br /&gt;
[[file:795px-Konfig-Tidal.jpg‎ |298px | centre]]&lt;br /&gt;
&lt;br /&gt;
This allows you to control the quality of the next Tidal radio stream tracks.&lt;br /&gt;
This tell tell Tidal that the music stream will now be in the Low, High or top level - FLAC quality audio. That is, the next Tidal track will be played in the newly set quality of audio.&lt;br /&gt;
&lt;br /&gt;
The change in Tidal audio quality will also control the amount of broadband capacity you are using. &lt;br /&gt;
* &amp;quot;Low (AAC 96kbps)&amp;quot; will use the least amount of broadband&lt;br /&gt;
* &amp;quot;High (AAC 320kbps)&amp;quot; will use a resonable amount of broadband&lt;br /&gt;
* &amp;quot;FLAC (lossless)&amp;quot; will use the most amount of broadband.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div id=&amp;quot;Exkat_Optimisation&amp;quot;&amp;gt;&amp;lt;/div&amp;gt;&lt;br /&gt;
== Space Optimisation ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;An Internet connection is required when using Exakt Systems and Space Optimisation&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
If you have selected an Exakt system, you will see the following three configuration tabs.&lt;br /&gt;
&lt;br /&gt;
[[File:KonfigExaktTabs.png|740px|Exakt Tabs]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Exakt&#039;&#039;&#039; allows you to assign an audio channel (i.e. Left or Right) to an Exakt speaker.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Space Optimisation+&#039;&#039;&#039; provides a listener focused way of applying room optimisation.&lt;br /&gt;
&lt;br /&gt;
If you have selected a DS system, you will see the following three configuration tabs.&lt;br /&gt;
&lt;br /&gt;
[[File:KonfigNonExaktTabs.png|740px|Exakt Tabs]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Speakers&#039;&#039;&#039; allows you to assign which speakers are connected to the DS system.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Space Optimisation&#039;&#039;&#039; provides a listener focused way of applying room optimisation.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
For help with this, please see the [[Space Optimsation|Space Optimisation]] article.&lt;br /&gt;
&lt;br /&gt;
== Updates ==&lt;br /&gt;
&lt;br /&gt;
[[File:Updates.png|740px|Updates Page]]&lt;br /&gt;
&lt;br /&gt;
The Updates tab indicates the number of Linn devices that currently have a newer software version available, as shown in the screenshot above.&lt;br /&gt;
&lt;br /&gt;
Each device that has an update available will be in the list of updatable devices. Each device has information about the update version available as well as a link to the release notes.&lt;br /&gt;
&lt;br /&gt;
To update a device click the &#039;Update&#039; button. If you have more than one devices to update you can click the &#039;Update All&#039; button to update all the devices at the same time.&lt;br /&gt;
&lt;br /&gt;
If you updated a device to beta software and then decide you want to go back to the latest stable release you just need to un-click the [[#Participate_in_beta_program_2| Participate in beta program]] option, return to the Updates page and update the desired device.&lt;br /&gt;
&lt;br /&gt;
== Diagnostics ==&lt;br /&gt;
&lt;br /&gt;
[[File:Diagnostics.png|740px|Diagnostics Page]]&lt;br /&gt;
&lt;br /&gt;
The Diagnostics tab indicates the number of Linn devices that currently have crash data available to send to Linn, as shown in the screenshot above.&lt;br /&gt;
&lt;br /&gt;
To send the crash data from a device to Linn click the &#039;Send&#039; button. If you have more than one device with crash data you can click the &#039;Send All&#039; button.&lt;br /&gt;
&lt;br /&gt;
If you do not wish to send the crash data for a device you can click the &#039;Ignore&#039; button and you will not be notified about crash data until the device crashes again. If you want to ignore crash data from all the listed devices you can click the &#039;Ignore All&#039; button.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;NOTE: No personal information is sent to Linn as a result of sending crash data to Linn.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== Advanced ==&lt;br /&gt;
&lt;br /&gt;
[[File:Advanced.png|740px|Advanced Page]]&lt;br /&gt;
&lt;br /&gt;
The Advanced page allows a user to restore a Linn device back to the original factory settings. It also allows a user to manually updating a Linn device&#039;s firmware to a locally stored firmware bundle.&lt;br /&gt;
&lt;br /&gt;
=== Restore Factory Settings ===&lt;br /&gt;
&lt;br /&gt;
Click the &#039;Restore&#039; button associated with the desired Linn device to start the process of restoring the Linn device to its factory default settings.&lt;br /&gt;
&lt;br /&gt;
=== Updating Linn Device Firmware ===&lt;br /&gt;
&lt;br /&gt;
First download the desired firmware from [http://products.linn.co.uk/VersionInfo/Downloads/Releases/ here].&lt;br /&gt;
&lt;br /&gt;
[[File:992px-Advanced-update.jpg|740px|Advanced Page]]&lt;br /&gt;
&lt;br /&gt;
Next enter the firmware&#039;s downloaded location into the text field associated with the desired Linn device, e.g. On Windows, C:\Users\&amp;lt;username&amp;gt;\Desktop\KlimaxDsm_4.7.5.zip and on Mac, /Users/&amp;lt;username&amp;gt;/Desktop/S08500116.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;NOTE: On Mac the downloaded firmware is automatically unzipped by the OS and so the location is a directory unlike on Windows where the location is the downloaded zip file.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
After entering the firmware&#039;s location click the &#039;Update&#039; button to start the process of updating the Linn device&#039;s firmware.&lt;br /&gt;
&lt;br /&gt;
=== Device Recovery ===&lt;br /&gt;
&lt;br /&gt;
This option should only be used if your are having problems updating your Linn DS through the standard methods, i.e. automatically through the Update page or manually as described in the previous section.&lt;br /&gt;
&lt;br /&gt;
After a &#039;Device Recovery&#039; update has been performed any Linn device settings changed by the user will be set back to factory defaults.&lt;br /&gt;
&lt;br /&gt;
== Settings ==&lt;br /&gt;
&lt;br /&gt;
[[File:Settings.png|740px|Settings Page]]&lt;br /&gt;
&lt;br /&gt;
=== Application Updates ===&lt;br /&gt;
==== Automatic update checks ====&lt;br /&gt;
Whether Konfig automatically checks for newer versions of Konfig.&lt;br /&gt;
==== Participate in beta program ====&lt;br /&gt;
Whether Konfig automatically checks for beta releases of Konfig.&lt;br /&gt;
==== Check For Updates ====&lt;br /&gt;
Force Konfig to check for newer versions of Konfig, taking into account whether &#039;Participate in beta program&#039; is checked.&lt;br /&gt;
&lt;br /&gt;
=== Device Updates ===&lt;br /&gt;
==== Participate in beta program ====&lt;br /&gt;
Whether Konfig automatically checks for beta releases of firmware for available Linn devices.&lt;br /&gt;
&lt;br /&gt;
=== Diagnostics ===&lt;br /&gt;
==== Automatically send DS crash information to Linn ====&lt;br /&gt;
Whether to automatically send Linn device crash information to Linn for analysis (recommended to be checked).&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;NOTE: No personal information is sent to Linn as a result of this option being checked.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== Privacy ===&lt;br /&gt;
==== Send anonymous usage data to Linn ====&lt;br /&gt;
&lt;br /&gt;
Whether to allow Konfig to send anonymous usage data to Linn for analysis (recommended to be checked).&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;NOTE: No personal information is sent to Linn as a result of this option being checked.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== Network ===&lt;br /&gt;
&lt;br /&gt;
Which network to use to locate Linn DSs.&lt;br /&gt;
&lt;br /&gt;
= Troubleshooting =&lt;br /&gt;
=== Konfig cannot see any of my DS ===&lt;br /&gt;
&lt;br /&gt;
Check within Settings that the Network connection is correct.&amp;lt;br&amp;gt;&lt;br /&gt;
In older versions of Konfig you only had to select the network card, (wired, wireless etc). Now Konfig asks you for the Network IP range, this is to simplify the connection as this can use BOTH the wired and wireless connections if they are connected to the same Network.&amp;lt;br&amp;gt;&lt;br /&gt;
If your PC/MAC has changed Ethernet networks (for installation, Home-Work etc), the Konfig may be setup for a different address range and not see any DS products. So if your Konfig cannot see your Linn DS products, go into Settings and check that the correct Network address has been selected (click on the drop down box to see what is available)&lt;br /&gt;
&lt;br /&gt;
Some Anti-virus Suites also have additional Firewalls that will block a lot of communications. If Konfig used to work and now does not find any products then check if your Anti-Virus suite has recently had a major update. This update may require the Konfig for have &amp;quot;firewall exceptions&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
=== After the software update the Linn DS is not working correctly or losing settings ===&lt;br /&gt;
&lt;br /&gt;
This can be due to a configuration conflict with the last software version:&lt;br /&gt;
* From Konfig, under the Advanced page, select your DS&lt;br /&gt;
* Select the &#039;&#039;&#039;RESTORE&#039;&#039;&#039; button, this will reset the Linn DS back its factory defaults&lt;br /&gt;
* Reconfigure your DS to your preferred setting. (As this is configuration is performed in the same software version this should remove any previous conflicts).&lt;br /&gt;
&lt;br /&gt;
=== Where is the manual for the previous releases of Konfig? ===&lt;br /&gt;
&lt;br /&gt;
The old Konfig manual has moved to [[Konfig_Manual_Old| here]]&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
=== Konfig just doesn&#039;t run on my Mac. The icon bounces in the dock and then goes away.===&lt;br /&gt;
* Open Finder&lt;br /&gt;
* From the Menu bar at the top select &#039;Go&#039; the &#039;Go to Folder&#039;&lt;br /&gt;
* Type in ~/Library/Konfig and click Go&lt;br /&gt;
* Select &#039;Options.xml&#039; file and delete&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== What if I have problems updating? ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Don&#039;t panic, the update process is safe, so you should always be able to recover your device&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* Restart Konfig. If your device reports the expected version, the update was successful and you are done&lt;br /&gt;
* If your device does not report the expected version, retry the update process (if you were updating over wireless, try updating over a wired connection)&lt;br /&gt;
* If this fails, power cycle your device and try again&lt;br /&gt;
* If this fails, download the latest version of software from [http://products.linn.co.uk/VersionInfo/Downloads/Releases/ here]&lt;br /&gt;
* Save this zip file to a known location on your hard drive, preferably in C:\&lt;br /&gt;
* Open Linn Konfig&lt;br /&gt;
* Go to the ‘Advanced’ tab&lt;br /&gt;
* Press the fallback button on the DS&lt;br /&gt;
* The DS should appear in Konfig with a lightning symbol beside it&lt;br /&gt;
* Enter the full location of the .zip file that you saved in the text box for the DS (e.g. “C:\MajikDs_4.12.357.zip”)&lt;br /&gt;
* Select the ‘Device Recovery’ option below the text box&lt;br /&gt;
* Click on ‘Update’&lt;br /&gt;
* The unit should update successfully&lt;br /&gt;
* If the update fails then contact your retailer for further support&lt;br /&gt;
&#039;&#039;&#039;NOTE: If there is no text box to enter the file location, ensure that you have the latest version of Internet Explorer installed. If there is still no text box, ensure that the security settings for Local Intranet are set to medium-low.&lt;br /&gt;
&lt;br /&gt;
=== What if I want to revert to older versions of firmware? ===&lt;br /&gt;
&lt;br /&gt;
We only support the latest firmware release and do not recommend running old firmware on any Linn DS.&lt;br /&gt;
&lt;br /&gt;
We only archive released versions of firmware.&lt;br /&gt;
&lt;br /&gt;
* Put your device into fallback mode from the button on the back of the device&lt;br /&gt;
* Download and install the compatible version of Konfig from the release download site (i.e. Cara Konfig if you are reverting to Cara firmware, Davaar for Davaar, etc)&lt;br /&gt;
* Download the version of firmware (zip file) you wish to use from the release download site (only firmware for your device model will work)&lt;br /&gt;
* From Konfig, under the Advanced page, enter the downloaded firmware location for your Linn device&lt;br /&gt;
&lt;br /&gt;
Keep in mind, only compatible control points will work with your device (i.e. Cara with Cara, Davaar with Davaar, etc)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== What if I have problems updating my Exakt devices? ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Don&#039;t panic, the update process is safe, so you will always be able to recover your device&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* Normally your Exakt devices will update seemlessly as part of the standard DS/DSM update process.&lt;br /&gt;
*  Restart Konfig. If your Exakt device appears under Exakt Setup and there is no Update button, the update was successful and you are done.&lt;br /&gt;
* Restart Konfig. If your Exakt device appears under Exakt Setup and there IS an Update button, the update was unsuccessful, click Update to try again.&lt;br /&gt;
* If this fails, power cycle your Exakt device and the connected DS/DSM device and try again.&lt;br /&gt;
* If this fails, follow the device recovery process below:&lt;br /&gt;
* Put both your Exakt device and connected DS/DSM into fallback (from the buttons on the back of the devices).&lt;br /&gt;
* Find the connected DS/DSM in the Update tab and click Update.&lt;br /&gt;
* If you have an integrated Exakt speaker, this will fully update your Exakt device as well.&lt;br /&gt;
* If you have an Exakt tunebox, you will be prompted at the end of the update to enter your speaker serial number from the Exakt Setup tab to complete the update.&lt;br /&gt;
&lt;br /&gt;
If you have difficulty programming an Exakt speaker or Tunebox, but the Exakt DSM is OK (require Konfig 4.12.2 onwards)&lt;br /&gt;
&lt;br /&gt;
* Put the speaker or Tunebox into FALLBACK&lt;br /&gt;
:* Make sure the Exakt DSM is Out of Standby&lt;br /&gt;
:* Press the Fallback button on the Exakt Speaker/Exakt Tunboks&lt;br /&gt;
* In Konfig in the DS - &amp;quot;Exakt setup&amp;quot; tab, this speaker should now show up with a RESTORE button, press the RESTORE button and wait for this to complete. If this is a Exakt Tunebox then enter the serial number of the speaker then do the UPDATE button&lt;br /&gt;
* Complete&lt;br /&gt;
&lt;br /&gt;
=== Why does Konfig not show Space Optimisation for my DS? ===&lt;br /&gt;
&lt;br /&gt;
Space Optimisation for DS was introduced in Davaar 25.&lt;br /&gt;
&lt;br /&gt;
To enable Space Optimisation on your DS you will need to install Davaar 25 or later firmware on your DS. &lt;br /&gt;
&lt;br /&gt;
== Known Issues ==&lt;br /&gt;
If you start Konfig and only get a white screen or only shows toolbar with no &amp;quot;Show devices&amp;quot; button:&lt;br /&gt;
:1. Go into Internet Explorer - &#039;&#039;Tools&#039;&#039; - &#039;&#039;Internet options&#039;&#039;&lt;br /&gt;
:2. Select Security &lt;br /&gt;
::a) If &#039;&#039;&#039;&amp;quot;Internet&amp;quot;&#039;&#039;&#039; Security is High, reduce this to Medium High&lt;br /&gt;
::b) now select &#039;&#039;&#039;&amp;quot;Local Internet&amp;quot;&#039;&#039;&#039; icon&lt;br /&gt;
::c) If &#039;&#039;&#039;&amp;quot;Local Internet&amp;quot;&#039;&#039;&#039; Security is High, reduce this to Medium High&lt;br /&gt;
:3. OK out of this &amp;amp; restart Konfig&lt;br /&gt;
&lt;br /&gt;
If this does not cure the issue then&lt;br /&gt;
:1. Run Konfig&lt;br /&gt;
:2. Open Internet Explorer&lt;br /&gt;
:3.  Type in [http://localhost:5000 http://localhost:5000] into the IE address bar&lt;br /&gt;
::(If Songbox is running then type [http://localhost:5001 http://localhost:5001]&lt;br /&gt;
:4. What appears in the window?&lt;br /&gt;
:5. If Internet Explorer shown the Konfig windows OK then retry steps 3/4/5 using Chrome or another web browser.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;After the update some PC/MAC cannot find any Linn DS/DSM products:&lt;br /&gt;
Do the following procedure:&lt;br /&gt;
:1. If you are using Norton Anti-virus, make sure that the new Konfig is added an exception&lt;br /&gt;
:2. Restart your PC/MAC and retry Konfig 10 &lt;br /&gt;
::a) Press the &#039;&#039;&#039;SHOW DEVICES&#039;&#039;&#039; button&lt;br /&gt;
::b) If a number appears beside the Updates tab (top of Konfig screen,&lt;br /&gt;
:::i) Press the Updates tab and press &#039;&#039;&#039;UPDATE&#039;&#039;&#039; beside your Linn DS/DSM name &lt;br /&gt;
:::ii) Wait until he update is finished and Press the &#039;&#039;&#039;SHOW DEVICES&#039;&#039;&#039; button. Your DS should now appear.&lt;br /&gt;
If your Linn DS/DSM is not listed&lt;br /&gt;
:3. Press the &#039;&#039;&#039;ADVANCED&#039;&#039;&#039; tab and see if your Linn DS/DSM is listed here&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
;If neither of these two options work:Follow the  [http://docs.linn.co.uk/wiki/index.php/Troubleshooting#Konfig_diagnostics Konfig 10 diagnostics]&lt;br /&gt;
&lt;br /&gt;
;If doing a Advanced download Konfig reports &amp;quot;cannot find directory..&amp;quot;;&lt;br /&gt;
:Check that &lt;br /&gt;
:1. You can typed the correct file location and file name in to the download field&lt;br /&gt;
:2. Konfig 4.10.5-4.11.2 needs internet access before doing the file update. Make sure that you have an Internet link BEFORE opening Konfig&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;/div&gt;</summary>
		<author><name>Davidd</name></author>
	</entry>
	<entry>
		<id>https://docs.linn.co.uk/wiki/index.php?title=Konfig_Manual&amp;diff=11263</id>
		<title>Konfig Manual</title>
		<link rel="alternate" type="text/html" href="https://docs.linn.co.uk/wiki/index.php?title=Konfig_Manual&amp;diff=11263"/>
		<updated>2015-03-17T12:20:50Z</updated>

		<summary type="html">&lt;p&gt;Davidd: /* Space Optimisation */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Introduction =&lt;br /&gt;
&lt;br /&gt;
Konfig provides advanced configuration of a Linn DS, notification and updating of a Linn DS to the latest firmware, restoring Linn DS settings back to factory defaults and manual updating of a Linn DS firmware.&lt;br /&gt;
&lt;br /&gt;
Konfig can also be run from a web-browser with all functions except the software update. Get the IP address of the Linn DS/DSM from the front panel using either the:&amp;lt;br&amp;gt;&lt;br /&gt;
:[http://docs.linn.co.uk/wiki/index.php/REM_020 REM 020 Remote control] by pressing and holding the # button &amp;lt;br&amp;gt;or with the &amp;lt;br&amp;gt;&lt;br /&gt;
:[http://docs.linn.co.uk/wiki/index.php/DS_%26_REM_019 REM 019 Remote control] by pressing DVD then the INFO buttons.&lt;br /&gt;
&lt;br /&gt;
When you are in DS web page select Control, this will give you the same options (except Software update) as below&lt;br /&gt;
&lt;br /&gt;
= Installation =&lt;br /&gt;
== System Requirements ==&lt;br /&gt;
=== Windows ===&lt;br /&gt;
* Windows Vista or later version of Windows&lt;br /&gt;
* IE9 or later&lt;br /&gt;
* 32 or 64-bit hardware&lt;br /&gt;
* Internet connection when using Exakt Systems&lt;br /&gt;
&lt;br /&gt;
=== Mac ===&lt;br /&gt;
* Mac OS X Snow Leopard 10.6.8 or later&lt;br /&gt;
* 32 or 64-bit hardware&lt;br /&gt;
* Internet connection when using Exakt Systems&lt;br /&gt;
&lt;br /&gt;
== Installing ==&lt;br /&gt;
=== Windows ===&lt;br /&gt;
* Download the installer from the [http://www.linn.co.uk/support/software#konfig download] page&lt;br /&gt;
* Double click the downloaded .exe file&lt;br /&gt;
* Follow the on screen instructions in the installer program&lt;br /&gt;
&lt;br /&gt;
=== Mac ===&lt;br /&gt;
* Download the .pkg file from the [http://www.linn.co.uk/support/software#konfig download] page&lt;br /&gt;
* Double click the downloaded .pkg file&lt;br /&gt;
* Follow the on screen instructions in the installer program&lt;br /&gt;
&lt;br /&gt;
== Uninstalling ==&lt;br /&gt;
=== Windows ===&lt;br /&gt;
* Open the Windows Control Panel and double click &amp;quot;Programs and Features&amp;quot;&lt;br /&gt;
* Select &amp;quot;Konfig&amp;quot; in the list of programs and click the &amp;quot;Uninstall&amp;quot; button&lt;br /&gt;
* Follow the on screen instructions in the uninstall window&lt;br /&gt;
&lt;br /&gt;
=== Mac ===&lt;br /&gt;
* Using Finder drag the Konfig icon from Applications/Konfig to the waste bin&lt;br /&gt;
&lt;br /&gt;
== Updating ==&lt;br /&gt;
&lt;br /&gt;
Konfig for Mac and Windows will automatically check for new software updates. Checking for available updates can also be performed manually as described below. Alternatively, Konfig can be updated by manually downloading the installation packages from the [http://www.linn.co.uk/support/software#konfig download] page and installing them using the method described in the [[#Installing| Installing]] section above.&lt;br /&gt;
&lt;br /&gt;
= Operation =&lt;br /&gt;
&lt;br /&gt;
Konfig has four main views, [[#Configuration| Configuration]], [[#Updates| Updates]], [[#Diagnostics| Diagnostics]], and [[#Advanced| Advanced]]&lt;br /&gt;
&lt;br /&gt;
[[File:Header.png|740px|Header]]&lt;br /&gt;
&lt;br /&gt;
== Configuration ==&lt;br /&gt;
&lt;br /&gt;
[[File:Configuration.png|740px|Configuration Page]]&lt;br /&gt;
&lt;br /&gt;
Click the &#039;&#039;&#039;Show Devices&#039;&#039;&#039; button to slide a list of available devices in from the left. Selecting a device from the list will show it&#039;s configuration page in the right hand pane.&lt;br /&gt;
&lt;br /&gt;
A Linn device&#039;s configuration page will only show in the right hand pane if the device is running firmware version Davaar 9 (4.9.4) or later. If your Linn device is running firmware version less that Davaar 9 (4.9.4), Konfig will provide a link to allow you to open the configuration page in your default browser.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- === DEVICES ===&lt;br /&gt;
[[Linn_DS-DSM_Konfig Devices|&amp;lt;big&amp;gt;Click here for Devices configuration page&amp;lt;/big&amp;gt;]] &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--=== DISPLAY ===&lt;br /&gt;
[[Linn_DS-DSM_Konfig_Display|&amp;lt;big&amp;gt;Click here for Display configuration page&amp;lt;/big&amp;gt;]] &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Linn Preamplifier, Volume, Delay modes, Songcast, Net-Aux and HDMI settings ===&lt;br /&gt;
[[file:771px-DS_Name_10.jpg|300px|center]]&lt;br /&gt;
&lt;br /&gt;
== DS Volume control &amp;amp; Proxy RS232 control ==&lt;br /&gt;
There are two way to control the Volume on a Linn DS system:&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Internal Volume&#039;&#039;&#039; control that will directly control the analogue audio level coming out of the Linn DS. This is good for directly connecting to a Power amplifier on your speakers.&lt;br /&gt;
[[file:635px-Internal_Vol_ctrl_10.jpg|400px|center]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Proxy RS232 control ===&lt;br /&gt;
* Or use an external preamplifier, this means that the Linn DS will always output Line-level audio.&lt;br /&gt;
:If you have a Linn Pre-amplifier this can be set to be controlled by the Kinsky control software. &lt;br /&gt;
&lt;br /&gt;
[[file:771px-DS_Name_10.jpg|300px|right]]&lt;br /&gt;
: &#039;&#039;1.&#039;&#039; Wire up the Linn DS and Linn preamplifiers/CD players &#039;&#039;&#039;RS232&#039;&#039;&#039; and audio connections as shown [http://docs.linn.co.uk/wiki/index.php/Systems Here] &#039;&#039;&#039;(Ignore this if you are using an Akurate Kontrol/1)&#039;&#039;&#039;&lt;br /&gt;
:&#039;&#039;2.&#039;&#039; Select the Linn DS and go into the Linn DS &#039;&#039;&#039;Device&#039;&#039; screen&lt;br /&gt;
:&#039;&#039;3.&#039;&#039; Take note of the text in &#039;&#039;&#039;Name&#039;&#039;&#039; field&lt;br /&gt;
:&#039;&#039;4.&#039;&#039; Go into the Linn DS &#039;&#039;&#039;RS232 connections&#039;&#039; screen&lt;br /&gt;
:&#039;&#039;5.&#039;&#039; Under Linn Preamplifier/CD player select the Linn product and Linn DS com port it is wired to.&lt;br /&gt;
:&#039;&#039;6.&#039;&#039; Press the Circle arrow to Reboot the Linn DS&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[file:824px-DS_Ktrl_Name_10.jpg|300px|right|thumb|DS Name in Kontrol - click to enlarge]]&lt;br /&gt;
:&#039;&#039;7.&#039;&#039; Click on &amp;quot;Show Devices&amp;quot; and&lt;br /&gt;
:&#039;&#039;8.&#039;&#039; Select the Linn Kontrol (preamplifier) and go into the Linn Kontrol &#039;&#039;&#039;Sources&#039;&#039;&#039; screen &lt;br /&gt;
:&#039;&#039;9.&#039;&#039; Select the Input that the Linn DS is connected to and enter the &#039;&#039;&#039;Name&#039;&#039;&#039; of the Linn DS that was take from the Linn DS - Devices screen Name field (taken in point 3)&lt;br /&gt;
:&#039;&#039;10.&#039;&#039; If a Linn CD player was also enabled enter the &#039;&#039;&#039;Name&#039;&#039;&#039; of the Linn CD device that was take from the Linn CD player - Devices screen&lt;br /&gt;
&lt;br /&gt;
===Ethernet controlled Linn Pre-Amplifier (Akurate Kontrol/1)===&lt;br /&gt;
:&#039;&#039;1.&#039;&#039; Select the Linn DS and go into the Linn DS &#039;&#039;&#039;Device&#039;&#039; screen&lt;br /&gt;
:&#039;&#039;2.&#039;&#039; Take note of the text in &#039;&#039;&#039;Name&#039;&#039;&#039; and the &#039;&#039;&#039;Room&#039;&#039;&#039; fields&lt;br /&gt;
:&#039;&#039;3.&#039;&#039; Click on &amp;quot;Show Devices&amp;quot; and&lt;br /&gt;
:&#039;&#039;4.&#039;&#039; Select the Linn Kontrol (preamplifier) and go into the Linn Kontrol &#039;&#039;&#039;Sources&#039;&#039;&#039; screen &lt;br /&gt;
:&#039;&#039;5.&#039;&#039; Change the Akurate Kontrol &#039;&#039;&#039;Device - Room&#039;&#039;&#039; name matches the Linn DS Room field taken in point 2.&lt;br /&gt;
:&#039;&#039;6.&#039;&#039; Select the Input that the Linn DS is connected to and enter the &#039;&#039;&#039;Name&#039;&#039;&#039; of the Linn DS that was take from the Linn DS Name field taken in point 2.&lt;br /&gt;
&lt;br /&gt;
I would suggest a &amp;quot;cut and paste&amp;quot; of the Room field and DS name field as this is case-senative (&amp;quot;lounge&amp;quot; is not the same as &amp;quot;Lounge&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
==Sources==&lt;br /&gt;
&lt;br /&gt;
===Name===&lt;br /&gt;
This is the source name that will appear in the DS user control software (Kinksy, Kazoo etc)&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Visible===&lt;br /&gt;
This allows you to hide sources. &lt;br /&gt;
If you set Visible-NO, then this input is hidden from selection in the Front panel and the user control software selection list.&amp;lt;br&amp;gt;&lt;br /&gt;
This does not mean that you have disabled the input, it only means that you cannot see it.&lt;br /&gt;
&lt;br /&gt;
===Delay Mode===&lt;br /&gt;
[[file:584px-DSM_delays.jpg|400px|right|thumb|Source delays - click to enlarge]]&lt;br /&gt;
&lt;br /&gt;
There are 3 different delays modes with the Linn DSI/DSM/Exakt for external sources (Analogue, Toslink, SPDIF &amp;amp; HDMI)&lt;br /&gt;
:&#039;&#039;&#039;Direct&#039;&#039;&#039; - This will feed the audio in real-time to the local Linn DSI/DSM, but the audio fed to the other Linn DS products will be delayed by 150mS. If this is setup and the other Linn DS products are fairly close, the music will sound like an echo&amp;lt;br&amp;gt;&lt;br /&gt;
:&#039;&#039;&#039;Fixed&#039;&#039;&#039; - This will delay the audio to ALL Linn DS/DSI/DSM products (including Exakt products) to keep the audio in perfect sync. This common delay is 150mS&amp;lt;br&amp;gt;&lt;br /&gt;
:&#039;&#039;&#039;Variable&#039;&#039;&#039; - This is a lipsync delay from 20ms-1999ms on this local DS. However the Songcast listening rooms will ONLY be in perfect sync for Lip-sync delays of =&amp;gt;150mS. &lt;br /&gt;
:If the lip-sync is less than 150ms, the listening rooms will always have a 150mS from original source, this means that the audio will be out of sync by 150ms minus the lip sync value. (eg Lipsync delay 90mS, then the delay from the sender DS audio to the listening room DS is 60mS)&lt;br /&gt;
:Lipsync delay time is variable from from 20mS-2S either from the Konfig app or the IR handset.&amp;lt;br&amp;gt;&lt;br /&gt;
For operation detail check [[DSM Audio Latencies Explained]]&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Input level, Unity Gain, Volume offset===&lt;br /&gt;
[[file:808px-Sources-setup.jpg|404px|right|thumb|Source settings - click to enlarge]]&lt;br /&gt;
:&#039;&#039;&#039;Input level (Vrms)&#039;&#039;&#039; - This is to allow you to change that input profile for the specific sources. This may be due to input adapters,  such as RCA-XLR, XLR-RCA etc, being used giving different output levels.&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Transformer&#039;&#039;&#039; - This is only on some of the Linn DSM&#039;s and enables the input to electrically isolated via an audio transformer on this input. This should &#039;&#039;&#039;NOT&#039;&#039;&#039; be enabled if you are connecting to another product with an audio transformer on it output, such as a &#039;&#039;&#039;URIKA&#039;&#039;&#039; or &#039;&#039;&#039;Klimax DS/1&#039;&#039;&#039;. &lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Unity Gain&#039;&#039;&#039; -This will turn off the DSM volume control whenever that input/source is selected. This is a pass-through state&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Volume Offset&#039;&#039;&#039; - this is an trim adjustment. Some audio sources have a higher or lower output than normal.  This trim/offset will allow you to you to switch between source and keep the same DSM volume.&lt;br /&gt;
&lt;br /&gt;
==Songcast / Net Aux inputs==&lt;br /&gt;
[[file:669px-Net_Aux_10.jpg|300px|right|thumb|Sources - click to enlarge]]&lt;br /&gt;
* To show the Linn DS sources you need to make these visible. This allows you to hide source that you are not going to use, such as UpnpAV that is only used with some media controllers.&lt;br /&gt;
* &#039;&#039;&#039;Songcast&#039;&#039;&#039; listen to Music playing on your [http://oss.linn.co.uk/trac/wiki/SongcastWindowsDavaarManual#KnownIssues PC SONGCAST] software or listen to another  DS, &lt;br /&gt;
** &#039;&#039;&#039;Visible&#039;&#039;&#039;&lt;br /&gt;
*** Set Visible to &#039;&#039;&#039;NO&#039;&#039;&#039; will hide this on the inputs listing within the control software Kinsky.&lt;br /&gt;
*** Set Visible to &#039;&#039;&#039;YES&#039;&#039;&#039; will make this a visible source in Kinsky&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
* &#039;&#039;&#039;Net-Aux&#039;&#039;&#039; To have 3rd party Media streamers to play on your Linn DS&lt;br /&gt;
** &#039;&#039;&#039;Visible&#039;&#039;&#039;&lt;br /&gt;
*** Set Visible to &#039;&#039;&#039;NO&#039;&#039;&#039; will hide this on the inputs listing within the control software Kinsky.&lt;br /&gt;
*** Set Visible to &#039;&#039;&#039;YES&#039;&#039;&#039; will make this a visible source in Kinsky&lt;br /&gt;
** &#039;&#039;&#039;Auto Select&#039;&#039;&#039;&lt;br /&gt;
*** Set Auto Select to &#039;&#039;&#039;ON&#039;&#039;&#039; will get have the Linn DS to automatically switch to the Net-Aux input on receipt of a third party media stream.&lt;br /&gt;
*** Set Auto Select to &#039;&#039;&#039;OFF&#039;&#039;&#039; if you do &#039;&#039;&#039;NOT&#039;&#039;&#039; want the Linn DS to automatically switch to the Net-Aux input on receipt of a third party media stream&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== HDMI ==&lt;br /&gt;
[[file:764px-HDMI_Konfig_10.jpg|400px|right|thumb| HDMI - click to enlarge]]&lt;br /&gt;
* The HDMI connection can be shutdown whilst the product is in Sleep mode&lt;br /&gt;
* Usage of the Audio mode etc are explained [http://docs.linn.co.uk/wiki/index.php/HDMI_Setup#Audio_Mode  here]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Songcast Sender ==&lt;br /&gt;
&lt;br /&gt;
[[File:809px-Songcast_sender.jpg‎| 400px | centre]]&lt;br /&gt;
&lt;br /&gt;
[[Songcast_Sender|&amp;lt;big&amp;gt;Click here for Songcast Sender page&amp;lt;/big&amp;gt;]] &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Tidal ==&lt;br /&gt;
[[file:795px-Konfig-Tidal.jpg‎ |298px | centre]]&lt;br /&gt;
&lt;br /&gt;
This allows you to control the quality of the next Tidal radio stream tracks.&lt;br /&gt;
This tell tell Tidal that the music stream will now be in the Low, High or top level - FLAC quality audio. That is, the next Tidal track will be played in the newly set quality of audio.&lt;br /&gt;
&lt;br /&gt;
The change in Tidal audio quality will also control the amount of broadband capacity you are using. &lt;br /&gt;
* &amp;quot;Low (AAC 96kbps)&amp;quot; will use the least amount of broadband&lt;br /&gt;
* &amp;quot;High (AAC 320kbps)&amp;quot; will use a resonable amount of broadband&lt;br /&gt;
* &amp;quot;FLAC (lossless)&amp;quot; will use the most amount of broadband.&lt;br /&gt;
&lt;br /&gt;
== Space Optimisation ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;An Internet connection is required when using Exakt Systems and Space Optimisation&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
If you have selected an Exakt system, you will see the following three configuration tabs.&lt;br /&gt;
&lt;br /&gt;
[[File:KonfigExaktTabs.png|740px|Exakt Tabs]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Exakt&#039;&#039;&#039; allows you to assign an audio channel (i.e. Left or Right) to an Exakt speaker.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Space Optimisation+&#039;&#039;&#039; provides a listener focused way of applying room optimisation.&lt;br /&gt;
&lt;br /&gt;
If you have selected a DS system, you will see the following three configuration tabs.&lt;br /&gt;
&lt;br /&gt;
[[File:KonfigNonExaktTabs.png|740px|Exakt Tabs]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Speakers&#039;&#039;&#039; allows you to assign which speakers are connected to the DS system.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Space Optimisation&#039;&#039;&#039; provides a listener focused way of applying room optimisation.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
For help with this, please see the [[Exakt Optimsation|Space Optimisation]] article.&lt;br /&gt;
&lt;br /&gt;
== Updates ==&lt;br /&gt;
&lt;br /&gt;
[[File:Updates.png|740px|Updates Page]]&lt;br /&gt;
&lt;br /&gt;
The Updates tab indicates the number of Linn devices that currently have a newer software version available, as shown in the screenshot above.&lt;br /&gt;
&lt;br /&gt;
Each device that has an update available will be in the list of updatable devices. Each device has information about the update version available as well as a link to the release notes.&lt;br /&gt;
&lt;br /&gt;
To update a device click the &#039;Update&#039; button. If you have more than one devices to update you can click the &#039;Update All&#039; button to update all the devices at the same time.&lt;br /&gt;
&lt;br /&gt;
If you updated a device to beta software and then decide you want to go back to the latest stable release you just need to un-click the [[#Participate_in_beta_program_2| Participate in beta program]] option, return to the Updates page and update the desired device.&lt;br /&gt;
&lt;br /&gt;
== Diagnostics ==&lt;br /&gt;
&lt;br /&gt;
[[File:Diagnostics.png|740px|Diagnostics Page]]&lt;br /&gt;
&lt;br /&gt;
The Diagnostics tab indicates the number of Linn devices that currently have crash data available to send to Linn, as shown in the screenshot above.&lt;br /&gt;
&lt;br /&gt;
To send the crash data from a device to Linn click the &#039;Send&#039; button. If you have more than one device with crash data you can click the &#039;Send All&#039; button.&lt;br /&gt;
&lt;br /&gt;
If you do not wish to send the crash data for a device you can click the &#039;Ignore&#039; button and you will not be notified about crash data until the device crashes again. If you want to ignore crash data from all the listed devices you can click the &#039;Ignore All&#039; button.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;NOTE: No personal information is sent to Linn as a result of sending crash data to Linn.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== Advanced ==&lt;br /&gt;
&lt;br /&gt;
[[File:Advanced.png|740px|Advanced Page]]&lt;br /&gt;
&lt;br /&gt;
The Advanced page allows a user to restore a Linn device back to the original factory settings. It also allows a user to manually updating a Linn device&#039;s firmware to a locally stored firmware bundle.&lt;br /&gt;
&lt;br /&gt;
=== Restore Factory Settings ===&lt;br /&gt;
&lt;br /&gt;
Click the &#039;Restore&#039; button associated with the desired Linn device to start the process of restoring the Linn device to its factory default settings.&lt;br /&gt;
&lt;br /&gt;
=== Updating Linn Device Firmware ===&lt;br /&gt;
&lt;br /&gt;
First download the desired firmware from [http://products.linn.co.uk/VersionInfo/Downloads/Releases/ here].&lt;br /&gt;
&lt;br /&gt;
[[File:992px-Advanced-update.jpg|740px|Advanced Page]]&lt;br /&gt;
&lt;br /&gt;
Next enter the firmware&#039;s downloaded location into the text field associated with the desired Linn device, e.g. On Windows, C:\Users\&amp;lt;username&amp;gt;\Desktop\KlimaxDsm_4.7.5.zip and on Mac, /Users/&amp;lt;username&amp;gt;/Desktop/S08500116.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;NOTE: On Mac the downloaded firmware is automatically unzipped by the OS and so the location is a directory unlike on Windows where the location is the downloaded zip file.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
After entering the firmware&#039;s location click the &#039;Update&#039; button to start the process of updating the Linn device&#039;s firmware.&lt;br /&gt;
&lt;br /&gt;
=== Device Recovery ===&lt;br /&gt;
&lt;br /&gt;
This option should only be used if your are having problems updating your Linn DS through the standard methods, i.e. automatically through the Update page or manually as described in the previous section.&lt;br /&gt;
&lt;br /&gt;
After a &#039;Device Recovery&#039; update has been performed any Linn device settings changed by the user will be set back to factory defaults.&lt;br /&gt;
&lt;br /&gt;
== Settings ==&lt;br /&gt;
&lt;br /&gt;
[[File:Settings.png|740px|Settings Page]]&lt;br /&gt;
&lt;br /&gt;
=== Application Updates ===&lt;br /&gt;
==== Automatic update checks ====&lt;br /&gt;
Whether Konfig automatically checks for newer versions of Konfig.&lt;br /&gt;
==== Participate in beta program ====&lt;br /&gt;
Whether Konfig automatically checks for beta releases of Konfig.&lt;br /&gt;
==== Check For Updates ====&lt;br /&gt;
Force Konfig to check for newer versions of Konfig, taking into account whether &#039;Participate in beta program&#039; is checked.&lt;br /&gt;
&lt;br /&gt;
=== Device Updates ===&lt;br /&gt;
==== Participate in beta program ====&lt;br /&gt;
Whether Konfig automatically checks for beta releases of firmware for available Linn devices.&lt;br /&gt;
&lt;br /&gt;
=== Diagnostics ===&lt;br /&gt;
==== Automatically send DS crash information to Linn ====&lt;br /&gt;
Whether to automatically send Linn device crash information to Linn for analysis (recommended to be checked).&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;NOTE: No personal information is sent to Linn as a result of this option being checked.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== Privacy ===&lt;br /&gt;
==== Send anonymous usage data to Linn ====&lt;br /&gt;
&lt;br /&gt;
Whether to allow Konfig to send anonymous usage data to Linn for analysis (recommended to be checked).&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;NOTE: No personal information is sent to Linn as a result of this option being checked.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== Network ===&lt;br /&gt;
&lt;br /&gt;
Which network to use to locate Linn DSs.&lt;br /&gt;
&lt;br /&gt;
= Troubleshooting =&lt;br /&gt;
=== Konfig cannot see any of my DS ===&lt;br /&gt;
&lt;br /&gt;
Check within Settings that the Network connection is correct.&amp;lt;br&amp;gt;&lt;br /&gt;
In older versions of Konfig you only had to select the network card, (wired, wireless etc). Now Konfig asks you for the Network IP range, this is to simplify the connection as this can use BOTH the wired and wireless connections if they are connected to the same Network.&amp;lt;br&amp;gt;&lt;br /&gt;
If your PC/MAC has changed Ethernet networks (for installation, Home-Work etc), the Konfig may be setup for a different address range and not see any DS products. So if your Konfig cannot see your Linn DS products, go into Settings and check that the correct Network address has been selected (click on the drop down box to see what is available)&lt;br /&gt;
&lt;br /&gt;
Some Anti-virus Suites also have additional Firewalls that will block a lot of communications. If Konfig used to work and now does not find any products then check if your Anti-Virus suite has recently had a major update. This update may require the Konfig for have &amp;quot;firewall exceptions&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
=== After the software update the Linn DS is not working correctly or losing settings ===&lt;br /&gt;
&lt;br /&gt;
This can be due to a configuration conflict with the last software version:&lt;br /&gt;
* From Konfig, under the Advanced page, select your DS&lt;br /&gt;
* Select the &#039;&#039;&#039;RESTORE&#039;&#039;&#039; button, this will reset the Linn DS back its factory defaults&lt;br /&gt;
* Reconfigure your DS to your preferred setting. (As this is configuration is performed in the same software version this should remove any previous conflicts).&lt;br /&gt;
&lt;br /&gt;
=== Where is the manual for the previous releases of Konfig? ===&lt;br /&gt;
&lt;br /&gt;
The old Konfig manual has moved to [[Konfig_Manual_Old| here]]&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
=== Konfig just doesn&#039;t run on my Mac. The icon bounces in the dock and then goes away.===&lt;br /&gt;
* Open Finder&lt;br /&gt;
* From the Menu bar at the top select &#039;Go&#039; the &#039;Go to Folder&#039;&lt;br /&gt;
* Type in ~/Library/Konfig and click Go&lt;br /&gt;
* Select &#039;Options.xml&#039; file and delete&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== What if I have problems updating? ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Don&#039;t panic, the update process is safe, so you should always be able to recover your device&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* Restart Konfig. If your device reports the expected version, the update was successful and you are done&lt;br /&gt;
* If your device does not report the expected version, retry the update process (if you were updating over wireless, try updating over a wired connection)&lt;br /&gt;
* If this fails, power cycle your device and try again&lt;br /&gt;
* If this fails, download the latest version of software from [http://products.linn.co.uk/VersionInfo/Downloads/Releases/ here]&lt;br /&gt;
* Save this zip file to a known location on your hard drive, preferably in C:\&lt;br /&gt;
* Open Linn Konfig&lt;br /&gt;
* Go to the ‘Advanced’ tab&lt;br /&gt;
* Press the fallback button on the DS&lt;br /&gt;
* The DS should appear in Konfig with a lightning symbol beside it&lt;br /&gt;
* Enter the full location of the .zip file that you saved in the text box for the DS (e.g. “C:\MajikDs_4.12.357.zip”)&lt;br /&gt;
* Select the ‘Device Recovery’ option below the text box&lt;br /&gt;
* Click on ‘Update’&lt;br /&gt;
* The unit should update successfully&lt;br /&gt;
* If the update fails then contact your retailer for further support&lt;br /&gt;
&#039;&#039;&#039;NOTE: If there is no text box to enter the file location, ensure that you have the latest version of Internet Explorer installed. If there is still no text box, ensure that the security settings for Local Intranet are set to medium-low.&lt;br /&gt;
&lt;br /&gt;
=== What if I want to revert to older versions of firmware? ===&lt;br /&gt;
&lt;br /&gt;
We only support the latest firmware release and do not recommend running old firmware on any Linn DS.&lt;br /&gt;
&lt;br /&gt;
We only archive released versions of firmware.&lt;br /&gt;
&lt;br /&gt;
* Put your device into fallback mode from the button on the back of the device&lt;br /&gt;
* Download and install the compatible version of Konfig from the release download site (i.e. Cara Konfig if you are reverting to Cara firmware, Davaar for Davaar, etc)&lt;br /&gt;
* Download the version of firmware (zip file) you wish to use from the release download site (only firmware for your device model will work)&lt;br /&gt;
* From Konfig, under the Advanced page, enter the downloaded firmware location for your Linn device&lt;br /&gt;
&lt;br /&gt;
Keep in mind, only compatible control points will work with your device (i.e. Cara with Cara, Davaar with Davaar, etc)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== What if I have problems updating my Exakt devices? ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Don&#039;t panic, the update process is safe, so you will always be able to recover your device&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* Normally your Exakt devices will update seemlessly as part of the standard DS/DSM update process.&lt;br /&gt;
*  Restart Konfig. If your Exakt device appears under Exakt Setup and there is no Update button, the update was successful and you are done.&lt;br /&gt;
* Restart Konfig. If your Exakt device appears under Exakt Setup and there IS an Update button, the update was unsuccessful, click Update to try again.&lt;br /&gt;
* If this fails, power cycle your Exakt device and the connected DS/DSM device and try again.&lt;br /&gt;
* If this fails, follow the device recovery process below:&lt;br /&gt;
* Put both your Exakt device and connected DS/DSM into fallback (from the buttons on the back of the devices).&lt;br /&gt;
* Find the connected DS/DSM in the Update tab and click Update.&lt;br /&gt;
* If you have an integrated Exakt speaker, this will fully update your Exakt device as well.&lt;br /&gt;
* If you have an Exakt tunebox, you will be prompted at the end of the update to enter your speaker serial number from the Exakt Setup tab to complete the update.&lt;br /&gt;
&lt;br /&gt;
If you have difficulty programming an Exakt speaker or Tunebox, but the Exakt DSM is OK (require Konfig 4.12.2 onwards)&lt;br /&gt;
&lt;br /&gt;
* Put the speaker or Tunebox into FALLBACK&lt;br /&gt;
:* Make sure the Exakt DSM is Out of Standby&lt;br /&gt;
:* Press the Fallback button on the Exakt Speaker/Exakt Tunboks&lt;br /&gt;
* In Konfig in the DS - &amp;quot;Exakt setup&amp;quot; tab, this speaker should now show up with a RESTORE button, press the RESTORE button and wait for this to complete. If this is a Exakt Tunebox then enter the serial number of the speaker then do the UPDATE button&lt;br /&gt;
* Complete&lt;br /&gt;
&lt;br /&gt;
=== Why does Konfig not show Space Optimisation for my DS? ===&lt;br /&gt;
&lt;br /&gt;
Space Optimisation for DS was introduced in Davaar 25.&lt;br /&gt;
&lt;br /&gt;
To enable Space Optimisation on your DS you will need to install Davaar 25 or later firmware on your DS. &lt;br /&gt;
&lt;br /&gt;
== Known Issues ==&lt;br /&gt;
If you start Konfig and only get a white screen or only shows toolbar with no &amp;quot;Show devices&amp;quot; button:&lt;br /&gt;
:1. Go into Internet Explorer - &#039;&#039;Tools&#039;&#039; - &#039;&#039;Internet options&#039;&#039;&lt;br /&gt;
:2. Select Security &lt;br /&gt;
::a) If &#039;&#039;&#039;&amp;quot;Internet&amp;quot;&#039;&#039;&#039; Security is High, reduce this to Medium High&lt;br /&gt;
::b) now select &#039;&#039;&#039;&amp;quot;Local Internet&amp;quot;&#039;&#039;&#039; icon&lt;br /&gt;
::c) If &#039;&#039;&#039;&amp;quot;Local Internet&amp;quot;&#039;&#039;&#039; Security is High, reduce this to Medium High&lt;br /&gt;
:3. OK out of this &amp;amp; restart Konfig&lt;br /&gt;
&lt;br /&gt;
If this does not cure the issue then&lt;br /&gt;
:1. Run Konfig&lt;br /&gt;
:2. Open Internet Explorer&lt;br /&gt;
:3.  Type in [http://localhost:5000 http://localhost:5000] into the IE address bar&lt;br /&gt;
::(If Songbox is running then type [http://localhost:5001 http://localhost:5001]&lt;br /&gt;
:4. What appears in the window?&lt;br /&gt;
:5. If Internet Explorer shown the Konfig windows OK then retry steps 3/4/5 using Chrome or another web browser.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;After the update some PC/MAC cannot find any Linn DS/DSM products:&lt;br /&gt;
Do the following procedure:&lt;br /&gt;
:1. If you are using Norton Anti-virus, make sure that the new Konfig is added an exception&lt;br /&gt;
:2. Restart your PC/MAC and retry Konfig 10 &lt;br /&gt;
::a) Press the &#039;&#039;&#039;SHOW DEVICES&#039;&#039;&#039; button&lt;br /&gt;
::b) If a number appears beside the Updates tab (top of Konfig screen,&lt;br /&gt;
:::i) Press the Updates tab and press &#039;&#039;&#039;UPDATE&#039;&#039;&#039; beside your Linn DS/DSM name &lt;br /&gt;
:::ii) Wait until he update is finished and Press the &#039;&#039;&#039;SHOW DEVICES&#039;&#039;&#039; button. Your DS should now appear.&lt;br /&gt;
If your Linn DS/DSM is not listed&lt;br /&gt;
:3. Press the &#039;&#039;&#039;ADVANCED&#039;&#039;&#039; tab and see if your Linn DS/DSM is listed here&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
;If neither of these two options work:Follow the  [http://docs.linn.co.uk/wiki/index.php/Troubleshooting#Konfig_diagnostics Konfig 10 diagnostics]&lt;br /&gt;
&lt;br /&gt;
;If doing a Advanced download Konfig reports &amp;quot;cannot find directory..&amp;quot;;&lt;br /&gt;
:Check that &lt;br /&gt;
:1. You can typed the correct file location and file name in to the download field&lt;br /&gt;
:2. Konfig 4.10.5-4.11.2 needs internet access before doing the file update. Make sure that you have an Internet link BEFORE opening Konfig&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;/div&gt;</summary>
		<author><name>Davidd</name></author>
	</entry>
	<entry>
		<id>https://docs.linn.co.uk/wiki/index.php?title=Konfig_Manual&amp;diff=11261</id>
		<title>Konfig Manual</title>
		<link rel="alternate" type="text/html" href="https://docs.linn.co.uk/wiki/index.php?title=Konfig_Manual&amp;diff=11261"/>
		<updated>2015-03-17T11:55:16Z</updated>

		<summary type="html">&lt;p&gt;Davidd: /* Space Optimisation and Space Optimisation+ */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Introduction =&lt;br /&gt;
&lt;br /&gt;
Konfig provides advanced configuration of a Linn DS, notification and updating of a Linn DS to the latest firmware, restoring Linn DS settings back to factory defaults and manual updating of a Linn DS firmware.&lt;br /&gt;
&lt;br /&gt;
Konfig can also be run from a web-browser with all functions except the software update. Get the IP address of the Linn DS/DSM from the front panel using either the:&amp;lt;br&amp;gt;&lt;br /&gt;
:[http://docs.linn.co.uk/wiki/index.php/REM_020 REM 020 Remote control] by pressing and holding the # button &amp;lt;br&amp;gt;or with the &amp;lt;br&amp;gt;&lt;br /&gt;
:[http://docs.linn.co.uk/wiki/index.php/DS_%26_REM_019 REM 019 Remote control] by pressing DVD then the INFO buttons.&lt;br /&gt;
&lt;br /&gt;
When you are in DS web page select Control, this will give you the same options (except Software update) as below&lt;br /&gt;
&lt;br /&gt;
= Installation =&lt;br /&gt;
== System Requirements ==&lt;br /&gt;
=== Windows ===&lt;br /&gt;
* Windows Vista or later version of Windows&lt;br /&gt;
* IE9 or later&lt;br /&gt;
* 32 or 64-bit hardware&lt;br /&gt;
* Internet connection when using Exakt Systems&lt;br /&gt;
&lt;br /&gt;
=== Mac ===&lt;br /&gt;
* Mac OS X Snow Leopard 10.6.8 or later&lt;br /&gt;
* 32 or 64-bit hardware&lt;br /&gt;
* Internet connection when using Exakt Systems&lt;br /&gt;
&lt;br /&gt;
== Installing ==&lt;br /&gt;
=== Windows ===&lt;br /&gt;
* Download the installer from the [http://www.linn.co.uk/support/software#konfig download] page&lt;br /&gt;
* Double click the downloaded .exe file&lt;br /&gt;
* Follow the on screen instructions in the installer program&lt;br /&gt;
&lt;br /&gt;
=== Mac ===&lt;br /&gt;
* Download the .pkg file from the [http://www.linn.co.uk/support/software#konfig download] page&lt;br /&gt;
* Double click the downloaded .pkg file&lt;br /&gt;
* Follow the on screen instructions in the installer program&lt;br /&gt;
&lt;br /&gt;
== Uninstalling ==&lt;br /&gt;
=== Windows ===&lt;br /&gt;
* Open the Windows Control Panel and double click &amp;quot;Programs and Features&amp;quot;&lt;br /&gt;
* Select &amp;quot;Konfig&amp;quot; in the list of programs and click the &amp;quot;Uninstall&amp;quot; button&lt;br /&gt;
* Follow the on screen instructions in the uninstall window&lt;br /&gt;
&lt;br /&gt;
=== Mac ===&lt;br /&gt;
* Using Finder drag the Konfig icon from Applications/Konfig to the waste bin&lt;br /&gt;
&lt;br /&gt;
== Updating ==&lt;br /&gt;
&lt;br /&gt;
Konfig for Mac and Windows will automatically check for new software updates. Checking for available updates can also be performed manually as described below. Alternatively, Konfig can be updated by manually downloading the installation packages from the [http://www.linn.co.uk/support/software#konfig download] page and installing them using the method described in the [[#Installing| Installing]] section above.&lt;br /&gt;
&lt;br /&gt;
= Operation =&lt;br /&gt;
&lt;br /&gt;
Konfig has four main views, [[#Configuration| Configuration]], [[#Updates| Updates]], [[#Diagnostics| Diagnostics]], and [[#Advanced| Advanced]]&lt;br /&gt;
&lt;br /&gt;
[[File:Header.png|740px|Header]]&lt;br /&gt;
&lt;br /&gt;
== Configuration ==&lt;br /&gt;
&lt;br /&gt;
[[File:Configuration.png|740px|Configuration Page]]&lt;br /&gt;
&lt;br /&gt;
Click the &#039;&#039;&#039;Show Devices&#039;&#039;&#039; button to slide a list of available devices in from the left. Selecting a device from the list will show it&#039;s configuration page in the right hand pane.&lt;br /&gt;
&lt;br /&gt;
A Linn device&#039;s configuration page will only show in the right hand pane if the device is running firmware version Davaar 9 (4.9.4) or later. If your Linn device is running firmware version less that Davaar 9 (4.9.4), Konfig will provide a link to allow you to open the configuration page in your default browser.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- === DEVICES ===&lt;br /&gt;
[[Linn_DS-DSM_Konfig Devices|&amp;lt;big&amp;gt;Click here for Devices configuration page&amp;lt;/big&amp;gt;]] &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--=== DISPLAY ===&lt;br /&gt;
[[Linn_DS-DSM_Konfig_Display|&amp;lt;big&amp;gt;Click here for Display configuration page&amp;lt;/big&amp;gt;]] &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Linn Preamplifier, Volume, Delay modes, Songcast, Net-Aux and HDMI settings ===&lt;br /&gt;
[[file:771px-DS_Name_10.jpg|300px|center]]&lt;br /&gt;
&lt;br /&gt;
== DS Volume control &amp;amp; Proxy RS232 control ==&lt;br /&gt;
There are two way to control the Volume on a Linn DS system:&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Internal Volume&#039;&#039;&#039; control that will directly control the analogue audio level coming out of the Linn DS. This is good for directly connecting to a Power amplifier on your speakers.&lt;br /&gt;
[[file:635px-Internal_Vol_ctrl_10.jpg|400px|center]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Proxy RS232 control ===&lt;br /&gt;
* Or use an external preamplifier, this means that the Linn DS will always output Line-level audio.&lt;br /&gt;
:If you have a Linn Pre-amplifier this can be set to be controlled by the Kinsky control software. &lt;br /&gt;
&lt;br /&gt;
[[file:771px-DS_Name_10.jpg|300px|right]]&lt;br /&gt;
: &#039;&#039;1.&#039;&#039; Wire up the Linn DS and Linn preamplifiers/CD players &#039;&#039;&#039;RS232&#039;&#039;&#039; and audio connections as shown [http://docs.linn.co.uk/wiki/index.php/Systems Here] &#039;&#039;&#039;(Ignore this if you are using an Akurate Kontrol/1)&#039;&#039;&#039;&lt;br /&gt;
:&#039;&#039;2.&#039;&#039; Select the Linn DS and go into the Linn DS &#039;&#039;&#039;Device&#039;&#039; screen&lt;br /&gt;
:&#039;&#039;3.&#039;&#039; Take note of the text in &#039;&#039;&#039;Name&#039;&#039;&#039; field&lt;br /&gt;
:&#039;&#039;4.&#039;&#039; Go into the Linn DS &#039;&#039;&#039;RS232 connections&#039;&#039; screen&lt;br /&gt;
:&#039;&#039;5.&#039;&#039; Under Linn Preamplifier/CD player select the Linn product and Linn DS com port it is wired to.&lt;br /&gt;
:&#039;&#039;6.&#039;&#039; Press the Circle arrow to Reboot the Linn DS&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[file:824px-DS_Ktrl_Name_10.jpg|300px|right|thumb|DS Name in Kontrol - click to enlarge]]&lt;br /&gt;
:&#039;&#039;7.&#039;&#039; Click on &amp;quot;Show Devices&amp;quot; and&lt;br /&gt;
:&#039;&#039;8.&#039;&#039; Select the Linn Kontrol (preamplifier) and go into the Linn Kontrol &#039;&#039;&#039;Sources&#039;&#039;&#039; screen &lt;br /&gt;
:&#039;&#039;9.&#039;&#039; Select the Input that the Linn DS is connected to and enter the &#039;&#039;&#039;Name&#039;&#039;&#039; of the Linn DS that was take from the Linn DS - Devices screen Name field (taken in point 3)&lt;br /&gt;
:&#039;&#039;10.&#039;&#039; If a Linn CD player was also enabled enter the &#039;&#039;&#039;Name&#039;&#039;&#039; of the Linn CD device that was take from the Linn CD player - Devices screen&lt;br /&gt;
&lt;br /&gt;
===Ethernet controlled Linn Pre-Amplifier (Akurate Kontrol/1)===&lt;br /&gt;
:&#039;&#039;1.&#039;&#039; Select the Linn DS and go into the Linn DS &#039;&#039;&#039;Device&#039;&#039; screen&lt;br /&gt;
:&#039;&#039;2.&#039;&#039; Take note of the text in &#039;&#039;&#039;Name&#039;&#039;&#039; and the &#039;&#039;&#039;Room&#039;&#039;&#039; fields&lt;br /&gt;
:&#039;&#039;3.&#039;&#039; Click on &amp;quot;Show Devices&amp;quot; and&lt;br /&gt;
:&#039;&#039;4.&#039;&#039; Select the Linn Kontrol (preamplifier) and go into the Linn Kontrol &#039;&#039;&#039;Sources&#039;&#039;&#039; screen &lt;br /&gt;
:&#039;&#039;5.&#039;&#039; Change the Akurate Kontrol &#039;&#039;&#039;Device - Room&#039;&#039;&#039; name matches the Linn DS Room field taken in point 2.&lt;br /&gt;
:&#039;&#039;6.&#039;&#039; Select the Input that the Linn DS is connected to and enter the &#039;&#039;&#039;Name&#039;&#039;&#039; of the Linn DS that was take from the Linn DS Name field taken in point 2.&lt;br /&gt;
&lt;br /&gt;
I would suggest a &amp;quot;cut and paste&amp;quot; of the Room field and DS name field as this is case-senative (&amp;quot;lounge&amp;quot; is not the same as &amp;quot;Lounge&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
==Sources==&lt;br /&gt;
&lt;br /&gt;
===Name===&lt;br /&gt;
This is the source name that will appear in the DS user control software (Kinksy, Kazoo etc)&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Visible===&lt;br /&gt;
This allows you to hide sources. &lt;br /&gt;
If you set Visible-NO, then this input is hidden from selection in the Front panel and the user control software selection list.&amp;lt;br&amp;gt;&lt;br /&gt;
This does not mean that you have disabled the input, it only means that you cannot see it.&lt;br /&gt;
&lt;br /&gt;
===Delay Mode===&lt;br /&gt;
[[file:584px-DSM_delays.jpg|400px|right|thumb|Source delays - click to enlarge]]&lt;br /&gt;
&lt;br /&gt;
There are 3 different delays modes with the Linn DSI/DSM/Exakt for external sources (Analogue, Toslink, SPDIF &amp;amp; HDMI)&lt;br /&gt;
:&#039;&#039;&#039;Direct&#039;&#039;&#039; - This will feed the audio in real-time to the local Linn DSI/DSM, but the audio fed to the other Linn DS products will be delayed by 150mS. If this is setup and the other Linn DS products are fairly close, the music will sound like an echo&amp;lt;br&amp;gt;&lt;br /&gt;
:&#039;&#039;&#039;Fixed&#039;&#039;&#039; - This will delay the audio to ALL Linn DS/DSI/DSM products (including Exakt products) to keep the audio in perfect sync. This common delay is 150mS&amp;lt;br&amp;gt;&lt;br /&gt;
:&#039;&#039;&#039;Variable&#039;&#039;&#039; - This is a lipsync delay from 20ms-1999ms on this local DS. However the Songcast listening rooms will ONLY be in perfect sync for Lip-sync delays of =&amp;gt;150mS. &lt;br /&gt;
:If the lip-sync is less than 150ms, the listening rooms will always have a 150mS from original source, this means that the audio will be out of sync by 150ms minus the lip sync value. (eg Lipsync delay 90mS, then the delay from the sender DS audio to the listening room DS is 60mS)&lt;br /&gt;
:Lipsync delay time is variable from from 20mS-2S either from the Konfig app or the IR handset.&amp;lt;br&amp;gt;&lt;br /&gt;
For operation detail check [[DSM Audio Latencies Explained]]&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Input level, Unity Gain, Volume offset===&lt;br /&gt;
[[file:808px-Sources-setup.jpg|404px|right|thumb|Source settings - click to enlarge]]&lt;br /&gt;
:&#039;&#039;&#039;Input level (Vrms)&#039;&#039;&#039; - This is to allow you to change that input profile for the specific sources. This may be due to input adapters,  such as RCA-XLR, XLR-RCA etc, being used giving different output levels.&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Transformer&#039;&#039;&#039; - This is only on some of the Linn DSM&#039;s and enables the input to electrically isolated via an audio transformer on this input. This should &#039;&#039;&#039;NOT&#039;&#039;&#039; be enabled if you are connecting to another product with an audio transformer on it output, such as a &#039;&#039;&#039;URIKA&#039;&#039;&#039; or &#039;&#039;&#039;Klimax DS/1&#039;&#039;&#039;. &lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Unity Gain&#039;&#039;&#039; -This will turn off the DSM volume control whenever that input/source is selected. This is a pass-through state&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Volume Offset&#039;&#039;&#039; - this is an trim adjustment. Some audio sources have a higher or lower output than normal.  This trim/offset will allow you to you to switch between source and keep the same DSM volume.&lt;br /&gt;
&lt;br /&gt;
==Songcast / Net Aux inputs==&lt;br /&gt;
[[file:669px-Net_Aux_10.jpg|300px|right|thumb|Sources - click to enlarge]]&lt;br /&gt;
* To show the Linn DS sources you need to make these visible. This allows you to hide source that you are not going to use, such as UpnpAV that is only used with some media controllers.&lt;br /&gt;
* &#039;&#039;&#039;Songcast&#039;&#039;&#039; listen to Music playing on your [http://oss.linn.co.uk/trac/wiki/SongcastWindowsDavaarManual#KnownIssues PC SONGCAST] software or listen to another  DS, &lt;br /&gt;
** &#039;&#039;&#039;Visible&#039;&#039;&#039;&lt;br /&gt;
*** Set Visible to &#039;&#039;&#039;NO&#039;&#039;&#039; will hide this on the inputs listing within the control software Kinsky.&lt;br /&gt;
*** Set Visible to &#039;&#039;&#039;YES&#039;&#039;&#039; will make this a visible source in Kinsky&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
* &#039;&#039;&#039;Net-Aux&#039;&#039;&#039; To have 3rd party Media streamers to play on your Linn DS&lt;br /&gt;
** &#039;&#039;&#039;Visible&#039;&#039;&#039;&lt;br /&gt;
*** Set Visible to &#039;&#039;&#039;NO&#039;&#039;&#039; will hide this on the inputs listing within the control software Kinsky.&lt;br /&gt;
*** Set Visible to &#039;&#039;&#039;YES&#039;&#039;&#039; will make this a visible source in Kinsky&lt;br /&gt;
** &#039;&#039;&#039;Auto Select&#039;&#039;&#039;&lt;br /&gt;
*** Set Auto Select to &#039;&#039;&#039;ON&#039;&#039;&#039; will get have the Linn DS to automatically switch to the Net-Aux input on receipt of a third party media stream.&lt;br /&gt;
*** Set Auto Select to &#039;&#039;&#039;OFF&#039;&#039;&#039; if you do &#039;&#039;&#039;NOT&#039;&#039;&#039; want the Linn DS to automatically switch to the Net-Aux input on receipt of a third party media stream&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== HDMI ==&lt;br /&gt;
[[file:764px-HDMI_Konfig_10.jpg|400px|right|thumb| HDMI - click to enlarge]]&lt;br /&gt;
* The HDMI connection can be shutdown whilst the product is in Sleep mode&lt;br /&gt;
* Usage of the Audio mode etc are explained [http://docs.linn.co.uk/wiki/index.php/HDMI_Setup#Audio_Mode  here]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Songcast Sender ==&lt;br /&gt;
&lt;br /&gt;
[[File:809px-Songcast_sender.jpg‎| 400px | centre]]&lt;br /&gt;
&lt;br /&gt;
[[Songcast_Sender|&amp;lt;big&amp;gt;Click here for Songcast Sender page&amp;lt;/big&amp;gt;]] &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Tidal ==&lt;br /&gt;
[[file:795px-Konfig-Tidal.jpg‎ |298px | centre]]&lt;br /&gt;
&lt;br /&gt;
This allows you to control the quality of the next Tidal radio stream tracks.&lt;br /&gt;
This tell tell Tidal that the music stream will now be in the Low, High or top level - FLAC quality audio. That is, the next Tidal track will be played in the newly set quality of audio.&lt;br /&gt;
&lt;br /&gt;
The change in Tidal audio quality will also control the amount of broadband capacity you are using. &lt;br /&gt;
* &amp;quot;Low (AAC 96kbps)&amp;quot; will use the least amount of broadband&lt;br /&gt;
* &amp;quot;High (AAC 320kbps)&amp;quot; will use a resonable amount of broadband&lt;br /&gt;
* &amp;quot;FLAC (lossless)&amp;quot; will use the most amount of broadband.&lt;br /&gt;
&lt;br /&gt;
== Space Optimisation ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;An Internet connection is required when using Exakt Systems&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
If you have selected an Exakt system, you will see the following three configuration tabs.&lt;br /&gt;
&lt;br /&gt;
[[File:KonfigExaktTabs.png|740px|Exakt Tabs]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Exakt&#039;&#039;&#039; allows you to assign an audio channel (i.e. Left or Right) to an Exakt speaker.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Space Optimisation+&#039;&#039;&#039; provides a listener focused way of applying room optimisation.&lt;br /&gt;
&lt;br /&gt;
If you have selected a DS system, you will see the following three configuration tabs.&lt;br /&gt;
&lt;br /&gt;
[[File:KonfigNonExaktTabs.png|740px|Exakt Tabs]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Speakers&#039;&#039;&#039; allows you to assign which speakers are connected to the DS system.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Space Optimisation&#039;&#039;&#039; provides a listener focused way of applying room optimisation.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
For help with this, please see the [[Exakt Optimsation|Space Optimisation]] article.&lt;br /&gt;
&lt;br /&gt;
== Updates ==&lt;br /&gt;
&lt;br /&gt;
[[File:Updates.png|740px|Updates Page]]&lt;br /&gt;
&lt;br /&gt;
The Updates tab indicates the number of Linn devices that currently have a newer software version available, as shown in the screenshot above.&lt;br /&gt;
&lt;br /&gt;
Each device that has an update available will be in the list of updatable devices. Each device has information about the update version available as well as a link to the release notes.&lt;br /&gt;
&lt;br /&gt;
To update a device click the &#039;Update&#039; button. If you have more than one devices to update you can click the &#039;Update All&#039; button to update all the devices at the same time.&lt;br /&gt;
&lt;br /&gt;
If you updated a device to beta software and then decide you want to go back to the latest stable release you just need to un-click the [[#Participate_in_beta_program_2| Participate in beta program]] option, return to the Updates page and update the desired device.&lt;br /&gt;
&lt;br /&gt;
== Diagnostics ==&lt;br /&gt;
&lt;br /&gt;
[[File:Diagnostics.png|740px|Diagnostics Page]]&lt;br /&gt;
&lt;br /&gt;
The Diagnostics tab indicates the number of Linn devices that currently have crash data available to send to Linn, as shown in the screenshot above.&lt;br /&gt;
&lt;br /&gt;
To send the crash data from a device to Linn click the &#039;Send&#039; button. If you have more than one device with crash data you can click the &#039;Send All&#039; button.&lt;br /&gt;
&lt;br /&gt;
If you do not wish to send the crash data for a device you can click the &#039;Ignore&#039; button and you will not be notified about crash data until the device crashes again. If you want to ignore crash data from all the listed devices you can click the &#039;Ignore All&#039; button.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;NOTE: No personal information is sent to Linn as a result of sending crash data to Linn.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== Advanced ==&lt;br /&gt;
&lt;br /&gt;
[[File:Advanced.png|740px|Advanced Page]]&lt;br /&gt;
&lt;br /&gt;
The Advanced page allows a user to restore a Linn device back to the original factory settings. It also allows a user to manually updating a Linn device&#039;s firmware to a locally stored firmware bundle.&lt;br /&gt;
&lt;br /&gt;
=== Restore Factory Settings ===&lt;br /&gt;
&lt;br /&gt;
Click the &#039;Restore&#039; button associated with the desired Linn device to start the process of restoring the Linn device to its factory default settings.&lt;br /&gt;
&lt;br /&gt;
=== Updating Linn Device Firmware ===&lt;br /&gt;
&lt;br /&gt;
First download the desired firmware from [http://products.linn.co.uk/VersionInfo/Downloads/Releases/ here].&lt;br /&gt;
&lt;br /&gt;
[[File:992px-Advanced-update.jpg|740px|Advanced Page]]&lt;br /&gt;
&lt;br /&gt;
Next enter the firmware&#039;s downloaded location into the text field associated with the desired Linn device, e.g. On Windows, C:\Users\&amp;lt;username&amp;gt;\Desktop\KlimaxDsm_4.7.5.zip and on Mac, /Users/&amp;lt;username&amp;gt;/Desktop/S08500116.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;NOTE: On Mac the downloaded firmware is automatically unzipped by the OS and so the location is a directory unlike on Windows where the location is the downloaded zip file.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
After entering the firmware&#039;s location click the &#039;Update&#039; button to start the process of updating the Linn device&#039;s firmware.&lt;br /&gt;
&lt;br /&gt;
=== Device Recovery ===&lt;br /&gt;
&lt;br /&gt;
This option should only be used if your are having problems updating your Linn DS through the standard methods, i.e. automatically through the Update page or manually as described in the previous section.&lt;br /&gt;
&lt;br /&gt;
After a &#039;Device Recovery&#039; update has been performed any Linn device settings changed by the user will be set back to factory defaults.&lt;br /&gt;
&lt;br /&gt;
== Settings ==&lt;br /&gt;
&lt;br /&gt;
[[File:Settings.png|740px|Settings Page]]&lt;br /&gt;
&lt;br /&gt;
=== Application Updates ===&lt;br /&gt;
==== Automatic update checks ====&lt;br /&gt;
Whether Konfig automatically checks for newer versions of Konfig.&lt;br /&gt;
==== Participate in beta program ====&lt;br /&gt;
Whether Konfig automatically checks for beta releases of Konfig.&lt;br /&gt;
==== Check For Updates ====&lt;br /&gt;
Force Konfig to check for newer versions of Konfig, taking into account whether &#039;Participate in beta program&#039; is checked.&lt;br /&gt;
&lt;br /&gt;
=== Device Updates ===&lt;br /&gt;
==== Participate in beta program ====&lt;br /&gt;
Whether Konfig automatically checks for beta releases of firmware for available Linn devices.&lt;br /&gt;
&lt;br /&gt;
=== Diagnostics ===&lt;br /&gt;
==== Automatically send DS crash information to Linn ====&lt;br /&gt;
Whether to automatically send Linn device crash information to Linn for analysis (recommended to be checked).&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;NOTE: No personal information is sent to Linn as a result of this option being checked.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== Privacy ===&lt;br /&gt;
==== Send anonymous usage data to Linn ====&lt;br /&gt;
&lt;br /&gt;
Whether to allow Konfig to send anonymous usage data to Linn for analysis (recommended to be checked).&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;NOTE: No personal information is sent to Linn as a result of this option being checked.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== Network ===&lt;br /&gt;
&lt;br /&gt;
Which network to use to locate Linn DSs.&lt;br /&gt;
&lt;br /&gt;
= Troubleshooting =&lt;br /&gt;
=== Konfig cannot see any of my DS ===&lt;br /&gt;
&lt;br /&gt;
Check within Settings that the Network connection is correct.&amp;lt;br&amp;gt;&lt;br /&gt;
In older versions of Konfig you only had to select the network card, (wired, wireless etc). Now Konfig asks you for the Network IP range, this is to simplify the connection as this can use BOTH the wired and wireless connections if they are connected to the same Network.&amp;lt;br&amp;gt;&lt;br /&gt;
If your PC/MAC has changed Ethernet networks (for installation, Home-Work etc), the Konfig may be setup for a different address range and not see any DS products. So if your Konfig cannot see your Linn DS products, go into Settings and check that the correct Network address has been selected (click on the drop down box to see what is available)&lt;br /&gt;
&lt;br /&gt;
Some Anti-virus Suites also have additional Firewalls that will block a lot of communications. If Konfig used to work and now does not find any products then check if your Anti-Virus suite has recently had a major update. This update may require the Konfig for have &amp;quot;firewall exceptions&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
=== After the software update the Linn DS is not working correctly or losing settings ===&lt;br /&gt;
&lt;br /&gt;
This can be due to a configuration conflict with the last software version:&lt;br /&gt;
* From Konfig, under the Advanced page, select your DS&lt;br /&gt;
* Select the &#039;&#039;&#039;RESTORE&#039;&#039;&#039; button, this will reset the Linn DS back its factory defaults&lt;br /&gt;
* Reconfigure your DS to your preferred setting. (As this is configuration is performed in the same software version this should remove any previous conflicts).&lt;br /&gt;
&lt;br /&gt;
=== Where is the manual for the previous releases of Konfig? ===&lt;br /&gt;
&lt;br /&gt;
The old Konfig manual has moved to [[Konfig_Manual_Old| here]]&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
=== Konfig just doesn&#039;t run on my Mac. The icon bounces in the dock and then goes away.===&lt;br /&gt;
* Open Finder&lt;br /&gt;
* From the Menu bar at the top select &#039;Go&#039; the &#039;Go to Folder&#039;&lt;br /&gt;
* Type in ~/Library/Konfig and click Go&lt;br /&gt;
* Select &#039;Options.xml&#039; file and delete&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== What if I have problems updating? ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Don&#039;t panic, the update process is safe, so you should always be able to recover your device&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* Restart Konfig. If your device reports the expected version, the update was successful and you are done&lt;br /&gt;
* If your device does not report the expected version, retry the update process (if you were updating over wireless, try updating over a wired connection)&lt;br /&gt;
* If this fails, power cycle your device and try again&lt;br /&gt;
* If this fails, download the latest version of software from [http://products.linn.co.uk/VersionInfo/Downloads/Releases/ here]&lt;br /&gt;
* Save this zip file to a known location on your hard drive, preferably in C:\&lt;br /&gt;
* Open Linn Konfig&lt;br /&gt;
* Go to the ‘Advanced’ tab&lt;br /&gt;
* Press the fallback button on the DS&lt;br /&gt;
* The DS should appear in Konfig with a lightning symbol beside it&lt;br /&gt;
* Enter the full location of the .zip file that you saved in the text box for the DS (e.g. “C:\MajikDs_4.12.357.zip”)&lt;br /&gt;
* Select the ‘Device Recovery’ option below the text box&lt;br /&gt;
* Click on ‘Update’&lt;br /&gt;
* The unit should update successfully&lt;br /&gt;
* If the update fails then contact your retailer for further support&lt;br /&gt;
&#039;&#039;&#039;NOTE: If there is no text box to enter the file location, ensure that you have the latest version of Internet Explorer installed. If there is still no text box, ensure that the security settings for Local Intranet are set to medium-low.&lt;br /&gt;
&lt;br /&gt;
=== What if I want to revert to older versions of firmware? ===&lt;br /&gt;
&lt;br /&gt;
We only support the latest firmware release and do not recommend running old firmware on any Linn DS.&lt;br /&gt;
&lt;br /&gt;
We only archive released versions of firmware.&lt;br /&gt;
&lt;br /&gt;
* Put your device into fallback mode from the button on the back of the device&lt;br /&gt;
* Download and install the compatible version of Konfig from the release download site (i.e. Cara Konfig if you are reverting to Cara firmware, Davaar for Davaar, etc)&lt;br /&gt;
* Download the version of firmware (zip file) you wish to use from the release download site (only firmware for your device model will work)&lt;br /&gt;
* From Konfig, under the Advanced page, enter the downloaded firmware location for your Linn device&lt;br /&gt;
&lt;br /&gt;
Keep in mind, only compatible control points will work with your device (i.e. Cara with Cara, Davaar with Davaar, etc)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== What if I have problems updating my Exakt devices? ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Don&#039;t panic, the update process is safe, so you will always be able to recover your device&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* Normally your Exakt devices will update seemlessly as part of the standard DS/DSM update process.&lt;br /&gt;
*  Restart Konfig. If your Exakt device appears under Exakt Setup and there is no Update button, the update was successful and you are done.&lt;br /&gt;
* Restart Konfig. If your Exakt device appears under Exakt Setup and there IS an Update button, the update was unsuccessful, click Update to try again.&lt;br /&gt;
* If this fails, power cycle your Exakt device and the connected DS/DSM device and try again.&lt;br /&gt;
* If this fails, follow the device recovery process below:&lt;br /&gt;
* Put both your Exakt device and connected DS/DSM into fallback (from the buttons on the back of the devices).&lt;br /&gt;
* Find the connected DS/DSM in the Update tab and click Update.&lt;br /&gt;
* If you have an integrated Exakt speaker, this will fully update your Exakt device as well.&lt;br /&gt;
* If you have an Exakt tunebox, you will be prompted at the end of the update to enter your speaker serial number from the Exakt Setup tab to complete the update.&lt;br /&gt;
&lt;br /&gt;
If you have difficulty programming an Exakt speaker or Tunebox, but the Exakt DSM is OK (require Konfig 4.12.2 onwards)&lt;br /&gt;
&lt;br /&gt;
* Put the speaker or Tunebox into FALLBACK&lt;br /&gt;
:* Make sure the Exakt DSM is Out of Standby&lt;br /&gt;
:* Press the Fallback button on the Exakt Speaker/Exakt Tunboks&lt;br /&gt;
* In Konfig in the DS - &amp;quot;Exakt setup&amp;quot; tab, this speaker should now show up with a RESTORE button, press the RESTORE button and wait for this to complete. If this is a Exakt Tunebox then enter the serial number of the speaker then do the UPDATE button&lt;br /&gt;
* Complete&lt;br /&gt;
&lt;br /&gt;
=== Why does Konfig not show Space Optimisation for my DS? ===&lt;br /&gt;
&lt;br /&gt;
Space Optimisation for DS was introduced in Davaar 25.&lt;br /&gt;
&lt;br /&gt;
To enable Space Optimisation on your DS you will need to install Davaar 25 or later firmware on your DS. &lt;br /&gt;
&lt;br /&gt;
== Known Issues ==&lt;br /&gt;
If you start Konfig and only get a white screen or only shows toolbar with no &amp;quot;Show devices&amp;quot; button:&lt;br /&gt;
:1. Go into Internet Explorer - &#039;&#039;Tools&#039;&#039; - &#039;&#039;Internet options&#039;&#039;&lt;br /&gt;
:2. Select Security &lt;br /&gt;
::a) If &#039;&#039;&#039;&amp;quot;Internet&amp;quot;&#039;&#039;&#039; Security is High, reduce this to Medium High&lt;br /&gt;
::b) now select &#039;&#039;&#039;&amp;quot;Local Internet&amp;quot;&#039;&#039;&#039; icon&lt;br /&gt;
::c) If &#039;&#039;&#039;&amp;quot;Local Internet&amp;quot;&#039;&#039;&#039; Security is High, reduce this to Medium High&lt;br /&gt;
:3. OK out of this &amp;amp; restart Konfig&lt;br /&gt;
&lt;br /&gt;
If this does not cure the issue then&lt;br /&gt;
:1. Run Konfig&lt;br /&gt;
:2. Open Internet Explorer&lt;br /&gt;
:3.  Type in [http://localhost:5000 http://localhost:5000] into the IE address bar&lt;br /&gt;
::(If Songbox is running then type [http://localhost:5001 http://localhost:5001]&lt;br /&gt;
:4. What appears in the window?&lt;br /&gt;
:5. If Internet Explorer shown the Konfig windows OK then retry steps 3/4/5 using Chrome or another web browser.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;After the update some PC/MAC cannot find any Linn DS/DSM products:&lt;br /&gt;
Do the following procedure:&lt;br /&gt;
:1. If you are using Norton Anti-virus, make sure that the new Konfig is added an exception&lt;br /&gt;
:2. Restart your PC/MAC and retry Konfig 10 &lt;br /&gt;
::a) Press the &#039;&#039;&#039;SHOW DEVICES&#039;&#039;&#039; button&lt;br /&gt;
::b) If a number appears beside the Updates tab (top of Konfig screen,&lt;br /&gt;
:::i) Press the Updates tab and press &#039;&#039;&#039;UPDATE&#039;&#039;&#039; beside your Linn DS/DSM name &lt;br /&gt;
:::ii) Wait until he update is finished and Press the &#039;&#039;&#039;SHOW DEVICES&#039;&#039;&#039; button. Your DS should now appear.&lt;br /&gt;
If your Linn DS/DSM is not listed&lt;br /&gt;
:3. Press the &#039;&#039;&#039;ADVANCED&#039;&#039;&#039; tab and see if your Linn DS/DSM is listed here&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
;If neither of these two options work:Follow the  [http://docs.linn.co.uk/wiki/index.php/Troubleshooting#Konfig_diagnostics Konfig 10 diagnostics]&lt;br /&gt;
&lt;br /&gt;
;If doing a Advanced download Konfig reports &amp;quot;cannot find directory..&amp;quot;;&lt;br /&gt;
:Check that &lt;br /&gt;
:1. You can typed the correct file location and file name in to the download field&lt;br /&gt;
:2. Konfig 4.10.5-4.11.2 needs internet access before doing the file update. Make sure that you have an Internet link BEFORE opening Konfig&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;/div&gt;</summary>
		<author><name>Davidd</name></author>
	</entry>
	<entry>
		<id>https://docs.linn.co.uk/wiki/index.php?title=File:KonfigNonExaktTabs.png&amp;diff=11260</id>
		<title>File:KonfigNonExaktTabs.png</title>
		<link rel="alternate" type="text/html" href="https://docs.linn.co.uk/wiki/index.php?title=File:KonfigNonExaktTabs.png&amp;diff=11260"/>
		<updated>2015-03-17T11:54:56Z</updated>

		<summary type="html">&lt;p&gt;Davidd: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Davidd</name></author>
	</entry>
	<entry>
		<id>https://docs.linn.co.uk/wiki/index.php?title=Konfig_Manual&amp;diff=11259</id>
		<title>Konfig Manual</title>
		<link rel="alternate" type="text/html" href="https://docs.linn.co.uk/wiki/index.php?title=Konfig_Manual&amp;diff=11259"/>
		<updated>2015-03-17T11:51:16Z</updated>

		<summary type="html">&lt;p&gt;Davidd: /* Space Optimisation and Space Optimisation+ */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Introduction =&lt;br /&gt;
&lt;br /&gt;
Konfig provides advanced configuration of a Linn DS, notification and updating of a Linn DS to the latest firmware, restoring Linn DS settings back to factory defaults and manual updating of a Linn DS firmware.&lt;br /&gt;
&lt;br /&gt;
Konfig can also be run from a web-browser with all functions except the software update. Get the IP address of the Linn DS/DSM from the front panel using either the:&amp;lt;br&amp;gt;&lt;br /&gt;
:[http://docs.linn.co.uk/wiki/index.php/REM_020 REM 020 Remote control] by pressing and holding the # button &amp;lt;br&amp;gt;or with the &amp;lt;br&amp;gt;&lt;br /&gt;
:[http://docs.linn.co.uk/wiki/index.php/DS_%26_REM_019 REM 019 Remote control] by pressing DVD then the INFO buttons.&lt;br /&gt;
&lt;br /&gt;
When you are in DS web page select Control, this will give you the same options (except Software update) as below&lt;br /&gt;
&lt;br /&gt;
= Installation =&lt;br /&gt;
== System Requirements ==&lt;br /&gt;
=== Windows ===&lt;br /&gt;
* Windows Vista or later version of Windows&lt;br /&gt;
* IE9 or later&lt;br /&gt;
* 32 or 64-bit hardware&lt;br /&gt;
* Internet connection when using Exakt Systems&lt;br /&gt;
&lt;br /&gt;
=== Mac ===&lt;br /&gt;
* Mac OS X Snow Leopard 10.6.8 or later&lt;br /&gt;
* 32 or 64-bit hardware&lt;br /&gt;
* Internet connection when using Exakt Systems&lt;br /&gt;
&lt;br /&gt;
== Installing ==&lt;br /&gt;
=== Windows ===&lt;br /&gt;
* Download the installer from the [http://www.linn.co.uk/support/software#konfig download] page&lt;br /&gt;
* Double click the downloaded .exe file&lt;br /&gt;
* Follow the on screen instructions in the installer program&lt;br /&gt;
&lt;br /&gt;
=== Mac ===&lt;br /&gt;
* Download the .pkg file from the [http://www.linn.co.uk/support/software#konfig download] page&lt;br /&gt;
* Double click the downloaded .pkg file&lt;br /&gt;
* Follow the on screen instructions in the installer program&lt;br /&gt;
&lt;br /&gt;
== Uninstalling ==&lt;br /&gt;
=== Windows ===&lt;br /&gt;
* Open the Windows Control Panel and double click &amp;quot;Programs and Features&amp;quot;&lt;br /&gt;
* Select &amp;quot;Konfig&amp;quot; in the list of programs and click the &amp;quot;Uninstall&amp;quot; button&lt;br /&gt;
* Follow the on screen instructions in the uninstall window&lt;br /&gt;
&lt;br /&gt;
=== Mac ===&lt;br /&gt;
* Using Finder drag the Konfig icon from Applications/Konfig to the waste bin&lt;br /&gt;
&lt;br /&gt;
== Updating ==&lt;br /&gt;
&lt;br /&gt;
Konfig for Mac and Windows will automatically check for new software updates. Checking for available updates can also be performed manually as described below. Alternatively, Konfig can be updated by manually downloading the installation packages from the [http://www.linn.co.uk/support/software#konfig download] page and installing them using the method described in the [[#Installing| Installing]] section above.&lt;br /&gt;
&lt;br /&gt;
= Operation =&lt;br /&gt;
&lt;br /&gt;
Konfig has four main views, [[#Configuration| Configuration]], [[#Updates| Updates]], [[#Diagnostics| Diagnostics]], and [[#Advanced| Advanced]]&lt;br /&gt;
&lt;br /&gt;
[[File:Header.png|740px|Header]]&lt;br /&gt;
&lt;br /&gt;
== Configuration ==&lt;br /&gt;
&lt;br /&gt;
[[File:Configuration.png|740px|Configuration Page]]&lt;br /&gt;
&lt;br /&gt;
Click the &#039;&#039;&#039;Show Devices&#039;&#039;&#039; button to slide a list of available devices in from the left. Selecting a device from the list will show it&#039;s configuration page in the right hand pane.&lt;br /&gt;
&lt;br /&gt;
A Linn device&#039;s configuration page will only show in the right hand pane if the device is running firmware version Davaar 9 (4.9.4) or later. If your Linn device is running firmware version less that Davaar 9 (4.9.4), Konfig will provide a link to allow you to open the configuration page in your default browser.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- === DEVICES ===&lt;br /&gt;
[[Linn_DS-DSM_Konfig Devices|&amp;lt;big&amp;gt;Click here for Devices configuration page&amp;lt;/big&amp;gt;]] &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--=== DISPLAY ===&lt;br /&gt;
[[Linn_DS-DSM_Konfig_Display|&amp;lt;big&amp;gt;Click here for Display configuration page&amp;lt;/big&amp;gt;]] &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Linn Preamplifier, Volume, Delay modes, Songcast, Net-Aux and HDMI settings ===&lt;br /&gt;
[[file:771px-DS_Name_10.jpg|300px|center]]&lt;br /&gt;
&lt;br /&gt;
== DS Volume control &amp;amp; Proxy RS232 control ==&lt;br /&gt;
There are two way to control the Volume on a Linn DS system:&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Internal Volume&#039;&#039;&#039; control that will directly control the analogue audio level coming out of the Linn DS. This is good for directly connecting to a Power amplifier on your speakers.&lt;br /&gt;
[[file:635px-Internal_Vol_ctrl_10.jpg|400px|center]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Proxy RS232 control ===&lt;br /&gt;
* Or use an external preamplifier, this means that the Linn DS will always output Line-level audio.&lt;br /&gt;
:If you have a Linn Pre-amplifier this can be set to be controlled by the Kinsky control software. &lt;br /&gt;
&lt;br /&gt;
[[file:771px-DS_Name_10.jpg|300px|right]]&lt;br /&gt;
: &#039;&#039;1.&#039;&#039; Wire up the Linn DS and Linn preamplifiers/CD players &#039;&#039;&#039;RS232&#039;&#039;&#039; and audio connections as shown [http://docs.linn.co.uk/wiki/index.php/Systems Here] &#039;&#039;&#039;(Ignore this if you are using an Akurate Kontrol/1)&#039;&#039;&#039;&lt;br /&gt;
:&#039;&#039;2.&#039;&#039; Select the Linn DS and go into the Linn DS &#039;&#039;&#039;Device&#039;&#039; screen&lt;br /&gt;
:&#039;&#039;3.&#039;&#039; Take note of the text in &#039;&#039;&#039;Name&#039;&#039;&#039; field&lt;br /&gt;
:&#039;&#039;4.&#039;&#039; Go into the Linn DS &#039;&#039;&#039;RS232 connections&#039;&#039; screen&lt;br /&gt;
:&#039;&#039;5.&#039;&#039; Under Linn Preamplifier/CD player select the Linn product and Linn DS com port it is wired to.&lt;br /&gt;
:&#039;&#039;6.&#039;&#039; Press the Circle arrow to Reboot the Linn DS&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[file:824px-DS_Ktrl_Name_10.jpg|300px|right|thumb|DS Name in Kontrol - click to enlarge]]&lt;br /&gt;
:&#039;&#039;7.&#039;&#039; Click on &amp;quot;Show Devices&amp;quot; and&lt;br /&gt;
:&#039;&#039;8.&#039;&#039; Select the Linn Kontrol (preamplifier) and go into the Linn Kontrol &#039;&#039;&#039;Sources&#039;&#039;&#039; screen &lt;br /&gt;
:&#039;&#039;9.&#039;&#039; Select the Input that the Linn DS is connected to and enter the &#039;&#039;&#039;Name&#039;&#039;&#039; of the Linn DS that was take from the Linn DS - Devices screen Name field (taken in point 3)&lt;br /&gt;
:&#039;&#039;10.&#039;&#039; If a Linn CD player was also enabled enter the &#039;&#039;&#039;Name&#039;&#039;&#039; of the Linn CD device that was take from the Linn CD player - Devices screen&lt;br /&gt;
&lt;br /&gt;
===Ethernet controlled Linn Pre-Amplifier (Akurate Kontrol/1)===&lt;br /&gt;
:&#039;&#039;1.&#039;&#039; Select the Linn DS and go into the Linn DS &#039;&#039;&#039;Device&#039;&#039; screen&lt;br /&gt;
:&#039;&#039;2.&#039;&#039; Take note of the text in &#039;&#039;&#039;Name&#039;&#039;&#039; and the &#039;&#039;&#039;Room&#039;&#039;&#039; fields&lt;br /&gt;
:&#039;&#039;3.&#039;&#039; Click on &amp;quot;Show Devices&amp;quot; and&lt;br /&gt;
:&#039;&#039;4.&#039;&#039; Select the Linn Kontrol (preamplifier) and go into the Linn Kontrol &#039;&#039;&#039;Sources&#039;&#039;&#039; screen &lt;br /&gt;
:&#039;&#039;5.&#039;&#039; Change the Akurate Kontrol &#039;&#039;&#039;Device - Room&#039;&#039;&#039; name matches the Linn DS Room field taken in point 2.&lt;br /&gt;
:&#039;&#039;6.&#039;&#039; Select the Input that the Linn DS is connected to and enter the &#039;&#039;&#039;Name&#039;&#039;&#039; of the Linn DS that was take from the Linn DS Name field taken in point 2.&lt;br /&gt;
&lt;br /&gt;
I would suggest a &amp;quot;cut and paste&amp;quot; of the Room field and DS name field as this is case-senative (&amp;quot;lounge&amp;quot; is not the same as &amp;quot;Lounge&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
==Sources==&lt;br /&gt;
&lt;br /&gt;
===Name===&lt;br /&gt;
This is the source name that will appear in the DS user control software (Kinksy, Kazoo etc)&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Visible===&lt;br /&gt;
This allows you to hide sources. &lt;br /&gt;
If you set Visible-NO, then this input is hidden from selection in the Front panel and the user control software selection list.&amp;lt;br&amp;gt;&lt;br /&gt;
This does not mean that you have disabled the input, it only means that you cannot see it.&lt;br /&gt;
&lt;br /&gt;
===Delay Mode===&lt;br /&gt;
[[file:584px-DSM_delays.jpg|400px|right|thumb|Source delays - click to enlarge]]&lt;br /&gt;
&lt;br /&gt;
There are 3 different delays modes with the Linn DSI/DSM/Exakt for external sources (Analogue, Toslink, SPDIF &amp;amp; HDMI)&lt;br /&gt;
:&#039;&#039;&#039;Direct&#039;&#039;&#039; - This will feed the audio in real-time to the local Linn DSI/DSM, but the audio fed to the other Linn DS products will be delayed by 150mS. If this is setup and the other Linn DS products are fairly close, the music will sound like an echo&amp;lt;br&amp;gt;&lt;br /&gt;
:&#039;&#039;&#039;Fixed&#039;&#039;&#039; - This will delay the audio to ALL Linn DS/DSI/DSM products (including Exakt products) to keep the audio in perfect sync. This common delay is 150mS&amp;lt;br&amp;gt;&lt;br /&gt;
:&#039;&#039;&#039;Variable&#039;&#039;&#039; - This is a lipsync delay from 20ms-1999ms on this local DS. However the Songcast listening rooms will ONLY be in perfect sync for Lip-sync delays of =&amp;gt;150mS. &lt;br /&gt;
:If the lip-sync is less than 150ms, the listening rooms will always have a 150mS from original source, this means that the audio will be out of sync by 150ms minus the lip sync value. (eg Lipsync delay 90mS, then the delay from the sender DS audio to the listening room DS is 60mS)&lt;br /&gt;
:Lipsync delay time is variable from from 20mS-2S either from the Konfig app or the IR handset.&amp;lt;br&amp;gt;&lt;br /&gt;
For operation detail check [[DSM Audio Latencies Explained]]&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Input level, Unity Gain, Volume offset===&lt;br /&gt;
[[file:808px-Sources-setup.jpg|404px|right|thumb|Source settings - click to enlarge]]&lt;br /&gt;
:&#039;&#039;&#039;Input level (Vrms)&#039;&#039;&#039; - This is to allow you to change that input profile for the specific sources. This may be due to input adapters,  such as RCA-XLR, XLR-RCA etc, being used giving different output levels.&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Transformer&#039;&#039;&#039; - This is only on some of the Linn DSM&#039;s and enables the input to electrically isolated via an audio transformer on this input. This should &#039;&#039;&#039;NOT&#039;&#039;&#039; be enabled if you are connecting to another product with an audio transformer on it output, such as a &#039;&#039;&#039;URIKA&#039;&#039;&#039; or &#039;&#039;&#039;Klimax DS/1&#039;&#039;&#039;. &lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Unity Gain&#039;&#039;&#039; -This will turn off the DSM volume control whenever that input/source is selected. This is a pass-through state&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Volume Offset&#039;&#039;&#039; - this is an trim adjustment. Some audio sources have a higher or lower output than normal.  This trim/offset will allow you to you to switch between source and keep the same DSM volume.&lt;br /&gt;
&lt;br /&gt;
==Songcast / Net Aux inputs==&lt;br /&gt;
[[file:669px-Net_Aux_10.jpg|300px|right|thumb|Sources - click to enlarge]]&lt;br /&gt;
* To show the Linn DS sources you need to make these visible. This allows you to hide source that you are not going to use, such as UpnpAV that is only used with some media controllers.&lt;br /&gt;
* &#039;&#039;&#039;Songcast&#039;&#039;&#039; listen to Music playing on your [http://oss.linn.co.uk/trac/wiki/SongcastWindowsDavaarManual#KnownIssues PC SONGCAST] software or listen to another  DS, &lt;br /&gt;
** &#039;&#039;&#039;Visible&#039;&#039;&#039;&lt;br /&gt;
*** Set Visible to &#039;&#039;&#039;NO&#039;&#039;&#039; will hide this on the inputs listing within the control software Kinsky.&lt;br /&gt;
*** Set Visible to &#039;&#039;&#039;YES&#039;&#039;&#039; will make this a visible source in Kinsky&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
* &#039;&#039;&#039;Net-Aux&#039;&#039;&#039; To have 3rd party Media streamers to play on your Linn DS&lt;br /&gt;
** &#039;&#039;&#039;Visible&#039;&#039;&#039;&lt;br /&gt;
*** Set Visible to &#039;&#039;&#039;NO&#039;&#039;&#039; will hide this on the inputs listing within the control software Kinsky.&lt;br /&gt;
*** Set Visible to &#039;&#039;&#039;YES&#039;&#039;&#039; will make this a visible source in Kinsky&lt;br /&gt;
** &#039;&#039;&#039;Auto Select&#039;&#039;&#039;&lt;br /&gt;
*** Set Auto Select to &#039;&#039;&#039;ON&#039;&#039;&#039; will get have the Linn DS to automatically switch to the Net-Aux input on receipt of a third party media stream.&lt;br /&gt;
*** Set Auto Select to &#039;&#039;&#039;OFF&#039;&#039;&#039; if you do &#039;&#039;&#039;NOT&#039;&#039;&#039; want the Linn DS to automatically switch to the Net-Aux input on receipt of a third party media stream&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== HDMI ==&lt;br /&gt;
[[file:764px-HDMI_Konfig_10.jpg|400px|right|thumb| HDMI - click to enlarge]]&lt;br /&gt;
* The HDMI connection can be shutdown whilst the product is in Sleep mode&lt;br /&gt;
* Usage of the Audio mode etc are explained [http://docs.linn.co.uk/wiki/index.php/HDMI_Setup#Audio_Mode  here]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Songcast Sender ==&lt;br /&gt;
&lt;br /&gt;
[[File:809px-Songcast_sender.jpg‎| 400px | centre]]&lt;br /&gt;
&lt;br /&gt;
[[Songcast_Sender|&amp;lt;big&amp;gt;Click here for Songcast Sender page&amp;lt;/big&amp;gt;]] &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Tidal ==&lt;br /&gt;
[[file:795px-Konfig-Tidal.jpg‎ |298px | centre]]&lt;br /&gt;
&lt;br /&gt;
This allows you to control the quality of the next Tidal radio stream tracks.&lt;br /&gt;
This tell tell Tidal that the music stream will now be in the Low, High or top level - FLAC quality audio. That is, the next Tidal track will be played in the newly set quality of audio.&lt;br /&gt;
&lt;br /&gt;
The change in Tidal audio quality will also control the amount of broadband capacity you are using. &lt;br /&gt;
* &amp;quot;Low (AAC 96kbps)&amp;quot; will use the least amount of broadband&lt;br /&gt;
* &amp;quot;High (AAC 320kbps)&amp;quot; will use a resonable amount of broadband&lt;br /&gt;
* &amp;quot;FLAC (lossless)&amp;quot; will use the most amount of broadband.&lt;br /&gt;
&lt;br /&gt;
== Space Optimisation and Space Optimisation+ ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;An Internet connection is required when using Exakt Systems&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
If you have selected an Exakt system, you will see the following three configuration tabs.&lt;br /&gt;
&lt;br /&gt;
[[File:KonfigExaktTabs.png|740px|Exakt Tabs]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Exakt&#039;&#039;&#039; allows you to assign an audio channel (i.e. Left or Right) to an Exakt speaker.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Space Optimisation+&#039;&#039;&#039; provides a listener focused way of applying room optimisation.&lt;br /&gt;
&lt;br /&gt;
If you have selected a DS system, you will see the following three configuration tabs.&lt;br /&gt;
&lt;br /&gt;
[[File:KonfigNonExaktTabs.png|740px|Exakt Tabs]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Speakers&#039;&#039;&#039; allows you to assign which speakers are connected to the DS system.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Space Optimisation&#039;&#039;&#039; provides a listener focused way of applying room optimisation.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
For help with this, please see the [[Exakt Optimsation|Space Optimisation]] article.&lt;br /&gt;
&lt;br /&gt;
== Updates ==&lt;br /&gt;
&lt;br /&gt;
[[File:Updates.png|740px|Updates Page]]&lt;br /&gt;
&lt;br /&gt;
The Updates tab indicates the number of Linn devices that currently have a newer software version available, as shown in the screenshot above.&lt;br /&gt;
&lt;br /&gt;
Each device that has an update available will be in the list of updatable devices. Each device has information about the update version available as well as a link to the release notes.&lt;br /&gt;
&lt;br /&gt;
To update a device click the &#039;Update&#039; button. If you have more than one devices to update you can click the &#039;Update All&#039; button to update all the devices at the same time.&lt;br /&gt;
&lt;br /&gt;
If you updated a device to beta software and then decide you want to go back to the latest stable release you just need to un-click the [[#Participate_in_beta_program_2| Participate in beta program]] option, return to the Updates page and update the desired device.&lt;br /&gt;
&lt;br /&gt;
== Diagnostics ==&lt;br /&gt;
&lt;br /&gt;
[[File:Diagnostics.png|740px|Diagnostics Page]]&lt;br /&gt;
&lt;br /&gt;
The Diagnostics tab indicates the number of Linn devices that currently have crash data available to send to Linn, as shown in the screenshot above.&lt;br /&gt;
&lt;br /&gt;
To send the crash data from a device to Linn click the &#039;Send&#039; button. If you have more than one device with crash data you can click the &#039;Send All&#039; button.&lt;br /&gt;
&lt;br /&gt;
If you do not wish to send the crash data for a device you can click the &#039;Ignore&#039; button and you will not be notified about crash data until the device crashes again. If you want to ignore crash data from all the listed devices you can click the &#039;Ignore All&#039; button.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;NOTE: No personal information is sent to Linn as a result of sending crash data to Linn.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== Advanced ==&lt;br /&gt;
&lt;br /&gt;
[[File:Advanced.png|740px|Advanced Page]]&lt;br /&gt;
&lt;br /&gt;
The Advanced page allows a user to restore a Linn device back to the original factory settings. It also allows a user to manually updating a Linn device&#039;s firmware to a locally stored firmware bundle.&lt;br /&gt;
&lt;br /&gt;
=== Restore Factory Settings ===&lt;br /&gt;
&lt;br /&gt;
Click the &#039;Restore&#039; button associated with the desired Linn device to start the process of restoring the Linn device to its factory default settings.&lt;br /&gt;
&lt;br /&gt;
=== Updating Linn Device Firmware ===&lt;br /&gt;
&lt;br /&gt;
First download the desired firmware from [http://products.linn.co.uk/VersionInfo/Downloads/Releases/ here].&lt;br /&gt;
&lt;br /&gt;
[[File:992px-Advanced-update.jpg|740px|Advanced Page]]&lt;br /&gt;
&lt;br /&gt;
Next enter the firmware&#039;s downloaded location into the text field associated with the desired Linn device, e.g. On Windows, C:\Users\&amp;lt;username&amp;gt;\Desktop\KlimaxDsm_4.7.5.zip and on Mac, /Users/&amp;lt;username&amp;gt;/Desktop/S08500116.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;NOTE: On Mac the downloaded firmware is automatically unzipped by the OS and so the location is a directory unlike on Windows where the location is the downloaded zip file.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
After entering the firmware&#039;s location click the &#039;Update&#039; button to start the process of updating the Linn device&#039;s firmware.&lt;br /&gt;
&lt;br /&gt;
=== Device Recovery ===&lt;br /&gt;
&lt;br /&gt;
This option should only be used if your are having problems updating your Linn DS through the standard methods, i.e. automatically through the Update page or manually as described in the previous section.&lt;br /&gt;
&lt;br /&gt;
After a &#039;Device Recovery&#039; update has been performed any Linn device settings changed by the user will be set back to factory defaults.&lt;br /&gt;
&lt;br /&gt;
== Settings ==&lt;br /&gt;
&lt;br /&gt;
[[File:Settings.png|740px|Settings Page]]&lt;br /&gt;
&lt;br /&gt;
=== Application Updates ===&lt;br /&gt;
==== Automatic update checks ====&lt;br /&gt;
Whether Konfig automatically checks for newer versions of Konfig.&lt;br /&gt;
==== Participate in beta program ====&lt;br /&gt;
Whether Konfig automatically checks for beta releases of Konfig.&lt;br /&gt;
==== Check For Updates ====&lt;br /&gt;
Force Konfig to check for newer versions of Konfig, taking into account whether &#039;Participate in beta program&#039; is checked.&lt;br /&gt;
&lt;br /&gt;
=== Device Updates ===&lt;br /&gt;
==== Participate in beta program ====&lt;br /&gt;
Whether Konfig automatically checks for beta releases of firmware for available Linn devices.&lt;br /&gt;
&lt;br /&gt;
=== Diagnostics ===&lt;br /&gt;
==== Automatically send DS crash information to Linn ====&lt;br /&gt;
Whether to automatically send Linn device crash information to Linn for analysis (recommended to be checked).&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;NOTE: No personal information is sent to Linn as a result of this option being checked.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== Privacy ===&lt;br /&gt;
==== Send anonymous usage data to Linn ====&lt;br /&gt;
&lt;br /&gt;
Whether to allow Konfig to send anonymous usage data to Linn for analysis (recommended to be checked).&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;NOTE: No personal information is sent to Linn as a result of this option being checked.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== Network ===&lt;br /&gt;
&lt;br /&gt;
Which network to use to locate Linn DSs.&lt;br /&gt;
&lt;br /&gt;
= Troubleshooting =&lt;br /&gt;
=== Konfig cannot see any of my DS ===&lt;br /&gt;
&lt;br /&gt;
Check within Settings that the Network connection is correct.&amp;lt;br&amp;gt;&lt;br /&gt;
In older versions of Konfig you only had to select the network card, (wired, wireless etc). Now Konfig asks you for the Network IP range, this is to simplify the connection as this can use BOTH the wired and wireless connections if they are connected to the same Network.&amp;lt;br&amp;gt;&lt;br /&gt;
If your PC/MAC has changed Ethernet networks (for installation, Home-Work etc), the Konfig may be setup for a different address range and not see any DS products. So if your Konfig cannot see your Linn DS products, go into Settings and check that the correct Network address has been selected (click on the drop down box to see what is available)&lt;br /&gt;
&lt;br /&gt;
Some Anti-virus Suites also have additional Firewalls that will block a lot of communications. If Konfig used to work and now does not find any products then check if your Anti-Virus suite has recently had a major update. This update may require the Konfig for have &amp;quot;firewall exceptions&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
=== After the software update the Linn DS is not working correctly or losing settings ===&lt;br /&gt;
&lt;br /&gt;
This can be due to a configuration conflict with the last software version:&lt;br /&gt;
* From Konfig, under the Advanced page, select your DS&lt;br /&gt;
* Select the &#039;&#039;&#039;RESTORE&#039;&#039;&#039; button, this will reset the Linn DS back its factory defaults&lt;br /&gt;
* Reconfigure your DS to your preferred setting. (As this is configuration is performed in the same software version this should remove any previous conflicts).&lt;br /&gt;
&lt;br /&gt;
=== Where is the manual for the previous releases of Konfig? ===&lt;br /&gt;
&lt;br /&gt;
The old Konfig manual has moved to [[Konfig_Manual_Old| here]]&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
=== Konfig just doesn&#039;t run on my Mac. The icon bounces in the dock and then goes away.===&lt;br /&gt;
* Open Finder&lt;br /&gt;
* From the Menu bar at the top select &#039;Go&#039; the &#039;Go to Folder&#039;&lt;br /&gt;
* Type in ~/Library/Konfig and click Go&lt;br /&gt;
* Select &#039;Options.xml&#039; file and delete&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== What if I have problems updating? ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Don&#039;t panic, the update process is safe, so you should always be able to recover your device&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* Restart Konfig. If your device reports the expected version, the update was successful and you are done&lt;br /&gt;
* If your device does not report the expected version, retry the update process (if you were updating over wireless, try updating over a wired connection)&lt;br /&gt;
* If this fails, power cycle your device and try again&lt;br /&gt;
* If this fails, download the latest version of software from [http://products.linn.co.uk/VersionInfo/Downloads/Releases/ here]&lt;br /&gt;
* Save this zip file to a known location on your hard drive, preferably in C:\&lt;br /&gt;
* Open Linn Konfig&lt;br /&gt;
* Go to the ‘Advanced’ tab&lt;br /&gt;
* Press the fallback button on the DS&lt;br /&gt;
* The DS should appear in Konfig with a lightning symbol beside it&lt;br /&gt;
* Enter the full location of the .zip file that you saved in the text box for the DS (e.g. “C:\MajikDs_4.12.357.zip”)&lt;br /&gt;
* Select the ‘Device Recovery’ option below the text box&lt;br /&gt;
* Click on ‘Update’&lt;br /&gt;
* The unit should update successfully&lt;br /&gt;
* If the update fails then contact your retailer for further support&lt;br /&gt;
&#039;&#039;&#039;NOTE: If there is no text box to enter the file location, ensure that you have the latest version of Internet Explorer installed. If there is still no text box, ensure that the security settings for Local Intranet are set to medium-low.&lt;br /&gt;
&lt;br /&gt;
=== What if I want to revert to older versions of firmware? ===&lt;br /&gt;
&lt;br /&gt;
We only support the latest firmware release and do not recommend running old firmware on any Linn DS.&lt;br /&gt;
&lt;br /&gt;
We only archive released versions of firmware.&lt;br /&gt;
&lt;br /&gt;
* Put your device into fallback mode from the button on the back of the device&lt;br /&gt;
* Download and install the compatible version of Konfig from the release download site (i.e. Cara Konfig if you are reverting to Cara firmware, Davaar for Davaar, etc)&lt;br /&gt;
* Download the version of firmware (zip file) you wish to use from the release download site (only firmware for your device model will work)&lt;br /&gt;
* From Konfig, under the Advanced page, enter the downloaded firmware location for your Linn device&lt;br /&gt;
&lt;br /&gt;
Keep in mind, only compatible control points will work with your device (i.e. Cara with Cara, Davaar with Davaar, etc)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== What if I have problems updating my Exakt devices? ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Don&#039;t panic, the update process is safe, so you will always be able to recover your device&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* Normally your Exakt devices will update seemlessly as part of the standard DS/DSM update process.&lt;br /&gt;
*  Restart Konfig. If your Exakt device appears under Exakt Setup and there is no Update button, the update was successful and you are done.&lt;br /&gt;
* Restart Konfig. If your Exakt device appears under Exakt Setup and there IS an Update button, the update was unsuccessful, click Update to try again.&lt;br /&gt;
* If this fails, power cycle your Exakt device and the connected DS/DSM device and try again.&lt;br /&gt;
* If this fails, follow the device recovery process below:&lt;br /&gt;
* Put both your Exakt device and connected DS/DSM into fallback (from the buttons on the back of the devices).&lt;br /&gt;
* Find the connected DS/DSM in the Update tab and click Update.&lt;br /&gt;
* If you have an integrated Exakt speaker, this will fully update your Exakt device as well.&lt;br /&gt;
* If you have an Exakt tunebox, you will be prompted at the end of the update to enter your speaker serial number from the Exakt Setup tab to complete the update.&lt;br /&gt;
&lt;br /&gt;
If you have difficulty programming an Exakt speaker or Tunebox, but the Exakt DSM is OK (require Konfig 4.12.2 onwards)&lt;br /&gt;
&lt;br /&gt;
* Put the speaker or Tunebox into FALLBACK&lt;br /&gt;
:* Make sure the Exakt DSM is Out of Standby&lt;br /&gt;
:* Press the Fallback button on the Exakt Speaker/Exakt Tunboks&lt;br /&gt;
* In Konfig in the DS - &amp;quot;Exakt setup&amp;quot; tab, this speaker should now show up with a RESTORE button, press the RESTORE button and wait for this to complete. If this is a Exakt Tunebox then enter the serial number of the speaker then do the UPDATE button&lt;br /&gt;
* Complete&lt;br /&gt;
&lt;br /&gt;
=== Why does Konfig not show Space Optimisation for my DS? ===&lt;br /&gt;
&lt;br /&gt;
Space Optimisation for DS was introduced in Davaar 25.&lt;br /&gt;
&lt;br /&gt;
To enable Space Optimisation on your DS you will need to install Davaar 25 or later firmware on your DS. &lt;br /&gt;
&lt;br /&gt;
== Known Issues ==&lt;br /&gt;
If you start Konfig and only get a white screen or only shows toolbar with no &amp;quot;Show devices&amp;quot; button:&lt;br /&gt;
:1. Go into Internet Explorer - &#039;&#039;Tools&#039;&#039; - &#039;&#039;Internet options&#039;&#039;&lt;br /&gt;
:2. Select Security &lt;br /&gt;
::a) If &#039;&#039;&#039;&amp;quot;Internet&amp;quot;&#039;&#039;&#039; Security is High, reduce this to Medium High&lt;br /&gt;
::b) now select &#039;&#039;&#039;&amp;quot;Local Internet&amp;quot;&#039;&#039;&#039; icon&lt;br /&gt;
::c) If &#039;&#039;&#039;&amp;quot;Local Internet&amp;quot;&#039;&#039;&#039; Security is High, reduce this to Medium High&lt;br /&gt;
:3. OK out of this &amp;amp; restart Konfig&lt;br /&gt;
&lt;br /&gt;
If this does not cure the issue then&lt;br /&gt;
:1. Run Konfig&lt;br /&gt;
:2. Open Internet Explorer&lt;br /&gt;
:3.  Type in [http://localhost:5000 http://localhost:5000] into the IE address bar&lt;br /&gt;
::(If Songbox is running then type [http://localhost:5001 http://localhost:5001]&lt;br /&gt;
:4. What appears in the window?&lt;br /&gt;
:5. If Internet Explorer shown the Konfig windows OK then retry steps 3/4/5 using Chrome or another web browser.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;After the update some PC/MAC cannot find any Linn DS/DSM products:&lt;br /&gt;
Do the following procedure:&lt;br /&gt;
:1. If you are using Norton Anti-virus, make sure that the new Konfig is added an exception&lt;br /&gt;
:2. Restart your PC/MAC and retry Konfig 10 &lt;br /&gt;
::a) Press the &#039;&#039;&#039;SHOW DEVICES&#039;&#039;&#039; button&lt;br /&gt;
::b) If a number appears beside the Updates tab (top of Konfig screen,&lt;br /&gt;
:::i) Press the Updates tab and press &#039;&#039;&#039;UPDATE&#039;&#039;&#039; beside your Linn DS/DSM name &lt;br /&gt;
:::ii) Wait until he update is finished and Press the &#039;&#039;&#039;SHOW DEVICES&#039;&#039;&#039; button. Your DS should now appear.&lt;br /&gt;
If your Linn DS/DSM is not listed&lt;br /&gt;
:3. Press the &#039;&#039;&#039;ADVANCED&#039;&#039;&#039; tab and see if your Linn DS/DSM is listed here&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
;If neither of these two options work:Follow the  [http://docs.linn.co.uk/wiki/index.php/Troubleshooting#Konfig_diagnostics Konfig 10 diagnostics]&lt;br /&gt;
&lt;br /&gt;
;If doing a Advanced download Konfig reports &amp;quot;cannot find directory..&amp;quot;;&lt;br /&gt;
:Check that &lt;br /&gt;
:1. You can typed the correct file location and file name in to the download field&lt;br /&gt;
:2. Konfig 4.10.5-4.11.2 needs internet access before doing the file update. Make sure that you have an Internet link BEFORE opening Konfig&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;/div&gt;</summary>
		<author><name>Davidd</name></author>
	</entry>
	<entry>
		<id>https://docs.linn.co.uk/wiki/index.php?title=File:KonfigExaktTabs.png&amp;diff=11258</id>
		<title>File:KonfigExaktTabs.png</title>
		<link rel="alternate" type="text/html" href="https://docs.linn.co.uk/wiki/index.php?title=File:KonfigExaktTabs.png&amp;diff=11258"/>
		<updated>2015-03-17T11:49:57Z</updated>

		<summary type="html">&lt;p&gt;Davidd: uploaded a new version of &amp;quot;File:KonfigExaktTabs.png&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Davidd</name></author>
	</entry>
	<entry>
		<id>https://docs.linn.co.uk/wiki/index.php?title=Konfig_Manual&amp;diff=11257</id>
		<title>Konfig Manual</title>
		<link rel="alternate" type="text/html" href="https://docs.linn.co.uk/wiki/index.php?title=Konfig_Manual&amp;diff=11257"/>
		<updated>2015-03-17T11:40:37Z</updated>

		<summary type="html">&lt;p&gt;Davidd: /* Space Optimisation and Space Optimisation+ */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Introduction =&lt;br /&gt;
&lt;br /&gt;
Konfig provides advanced configuration of a Linn DS, notification and updating of a Linn DS to the latest firmware, restoring Linn DS settings back to factory defaults and manual updating of a Linn DS firmware.&lt;br /&gt;
&lt;br /&gt;
Konfig can also be run from a web-browser with all functions except the software update. Get the IP address of the Linn DS/DSM from the front panel using either the:&amp;lt;br&amp;gt;&lt;br /&gt;
:[http://docs.linn.co.uk/wiki/index.php/REM_020 REM 020 Remote control] by pressing and holding the # button &amp;lt;br&amp;gt;or with the &amp;lt;br&amp;gt;&lt;br /&gt;
:[http://docs.linn.co.uk/wiki/index.php/DS_%26_REM_019 REM 019 Remote control] by pressing DVD then the INFO buttons.&lt;br /&gt;
&lt;br /&gt;
When you are in DS web page select Control, this will give you the same options (except Software update) as below&lt;br /&gt;
&lt;br /&gt;
= Installation =&lt;br /&gt;
== System Requirements ==&lt;br /&gt;
=== Windows ===&lt;br /&gt;
* Windows Vista or later version of Windows&lt;br /&gt;
* IE9 or later&lt;br /&gt;
* 32 or 64-bit hardware&lt;br /&gt;
* Internet connection when using Exakt Systems&lt;br /&gt;
&lt;br /&gt;
=== Mac ===&lt;br /&gt;
* Mac OS X Snow Leopard 10.6.8 or later&lt;br /&gt;
* 32 or 64-bit hardware&lt;br /&gt;
* Internet connection when using Exakt Systems&lt;br /&gt;
&lt;br /&gt;
== Installing ==&lt;br /&gt;
=== Windows ===&lt;br /&gt;
* Download the installer from the [http://www.linn.co.uk/support/software#konfig download] page&lt;br /&gt;
* Double click the downloaded .exe file&lt;br /&gt;
* Follow the on screen instructions in the installer program&lt;br /&gt;
&lt;br /&gt;
=== Mac ===&lt;br /&gt;
* Download the .pkg file from the [http://www.linn.co.uk/support/software#konfig download] page&lt;br /&gt;
* Double click the downloaded .pkg file&lt;br /&gt;
* Follow the on screen instructions in the installer program&lt;br /&gt;
&lt;br /&gt;
== Uninstalling ==&lt;br /&gt;
=== Windows ===&lt;br /&gt;
* Open the Windows Control Panel and double click &amp;quot;Programs and Features&amp;quot;&lt;br /&gt;
* Select &amp;quot;Konfig&amp;quot; in the list of programs and click the &amp;quot;Uninstall&amp;quot; button&lt;br /&gt;
* Follow the on screen instructions in the uninstall window&lt;br /&gt;
&lt;br /&gt;
=== Mac ===&lt;br /&gt;
* Using Finder drag the Konfig icon from Applications/Konfig to the waste bin&lt;br /&gt;
&lt;br /&gt;
== Updating ==&lt;br /&gt;
&lt;br /&gt;
Konfig for Mac and Windows will automatically check for new software updates. Checking for available updates can also be performed manually as described below. Alternatively, Konfig can be updated by manually downloading the installation packages from the [http://www.linn.co.uk/support/software#konfig download] page and installing them using the method described in the [[#Installing| Installing]] section above.&lt;br /&gt;
&lt;br /&gt;
= Operation =&lt;br /&gt;
&lt;br /&gt;
Konfig has four main views, [[#Configuration| Configuration]], [[#Updates| Updates]], [[#Diagnostics| Diagnostics]], and [[#Advanced| Advanced]]&lt;br /&gt;
&lt;br /&gt;
[[File:Header.png|740px|Header]]&lt;br /&gt;
&lt;br /&gt;
== Configuration ==&lt;br /&gt;
&lt;br /&gt;
[[File:Configuration.png|740px|Configuration Page]]&lt;br /&gt;
&lt;br /&gt;
Click the &#039;&#039;&#039;Show Devices&#039;&#039;&#039; button to slide a list of available devices in from the left. Selecting a device from the list will show it&#039;s configuration page in the right hand pane.&lt;br /&gt;
&lt;br /&gt;
A Linn device&#039;s configuration page will only show in the right hand pane if the device is running firmware version Davaar 9 (4.9.4) or later. If your Linn device is running firmware version less that Davaar 9 (4.9.4), Konfig will provide a link to allow you to open the configuration page in your default browser.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- === DEVICES ===&lt;br /&gt;
[[Linn_DS-DSM_Konfig Devices|&amp;lt;big&amp;gt;Click here for Devices configuration page&amp;lt;/big&amp;gt;]] &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--=== DISPLAY ===&lt;br /&gt;
[[Linn_DS-DSM_Konfig_Display|&amp;lt;big&amp;gt;Click here for Display configuration page&amp;lt;/big&amp;gt;]] &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Linn Preamplifier, Volume, Delay modes, Songcast, Net-Aux and HDMI settings ===&lt;br /&gt;
[[file:771px-DS_Name_10.jpg|300px|center]]&lt;br /&gt;
&lt;br /&gt;
== DS Volume control &amp;amp; Proxy RS232 control ==&lt;br /&gt;
There are two way to control the Volume on a Linn DS system:&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Internal Volume&#039;&#039;&#039; control that will directly control the analogue audio level coming out of the Linn DS. This is good for directly connecting to a Power amplifier on your speakers.&lt;br /&gt;
[[file:635px-Internal_Vol_ctrl_10.jpg|400px|center]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Proxy RS232 control ===&lt;br /&gt;
* Or use an external preamplifier, this means that the Linn DS will always output Line-level audio.&lt;br /&gt;
:If you have a Linn Pre-amplifier this can be set to be controlled by the Kinsky control software. &lt;br /&gt;
&lt;br /&gt;
[[file:771px-DS_Name_10.jpg|300px|right]]&lt;br /&gt;
: &#039;&#039;1.&#039;&#039; Wire up the Linn DS and Linn preamplifiers/CD players &#039;&#039;&#039;RS232&#039;&#039;&#039; and audio connections as shown [http://docs.linn.co.uk/wiki/index.php/Systems Here] &#039;&#039;&#039;(Ignore this if you are using an Akurate Kontrol/1)&#039;&#039;&#039;&lt;br /&gt;
:&#039;&#039;2.&#039;&#039; Select the Linn DS and go into the Linn DS &#039;&#039;&#039;Device&#039;&#039; screen&lt;br /&gt;
:&#039;&#039;3.&#039;&#039; Take note of the text in &#039;&#039;&#039;Name&#039;&#039;&#039; field&lt;br /&gt;
:&#039;&#039;4.&#039;&#039; Go into the Linn DS &#039;&#039;&#039;RS232 connections&#039;&#039; screen&lt;br /&gt;
:&#039;&#039;5.&#039;&#039; Under Linn Preamplifier/CD player select the Linn product and Linn DS com port it is wired to.&lt;br /&gt;
:&#039;&#039;6.&#039;&#039; Press the Circle arrow to Reboot the Linn DS&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[file:824px-DS_Ktrl_Name_10.jpg|300px|right|thumb|DS Name in Kontrol - click to enlarge]]&lt;br /&gt;
:&#039;&#039;7.&#039;&#039; Click on &amp;quot;Show Devices&amp;quot; and&lt;br /&gt;
:&#039;&#039;8.&#039;&#039; Select the Linn Kontrol (preamplifier) and go into the Linn Kontrol &#039;&#039;&#039;Sources&#039;&#039;&#039; screen &lt;br /&gt;
:&#039;&#039;9.&#039;&#039; Select the Input that the Linn DS is connected to and enter the &#039;&#039;&#039;Name&#039;&#039;&#039; of the Linn DS that was take from the Linn DS - Devices screen Name field (taken in point 3)&lt;br /&gt;
:&#039;&#039;10.&#039;&#039; If a Linn CD player was also enabled enter the &#039;&#039;&#039;Name&#039;&#039;&#039; of the Linn CD device that was take from the Linn CD player - Devices screen&lt;br /&gt;
&lt;br /&gt;
===Ethernet controlled Linn Pre-Amplifier (Akurate Kontrol/1)===&lt;br /&gt;
:&#039;&#039;1.&#039;&#039; Select the Linn DS and go into the Linn DS &#039;&#039;&#039;Device&#039;&#039; screen&lt;br /&gt;
:&#039;&#039;2.&#039;&#039; Take note of the text in &#039;&#039;&#039;Name&#039;&#039;&#039; and the &#039;&#039;&#039;Room&#039;&#039;&#039; fields&lt;br /&gt;
:&#039;&#039;3.&#039;&#039; Click on &amp;quot;Show Devices&amp;quot; and&lt;br /&gt;
:&#039;&#039;4.&#039;&#039; Select the Linn Kontrol (preamplifier) and go into the Linn Kontrol &#039;&#039;&#039;Sources&#039;&#039;&#039; screen &lt;br /&gt;
:&#039;&#039;5.&#039;&#039; Change the Akurate Kontrol &#039;&#039;&#039;Device - Room&#039;&#039;&#039; name matches the Linn DS Room field taken in point 2.&lt;br /&gt;
:&#039;&#039;6.&#039;&#039; Select the Input that the Linn DS is connected to and enter the &#039;&#039;&#039;Name&#039;&#039;&#039; of the Linn DS that was take from the Linn DS Name field taken in point 2.&lt;br /&gt;
&lt;br /&gt;
I would suggest a &amp;quot;cut and paste&amp;quot; of the Room field and DS name field as this is case-senative (&amp;quot;lounge&amp;quot; is not the same as &amp;quot;Lounge&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
==Sources==&lt;br /&gt;
&lt;br /&gt;
===Name===&lt;br /&gt;
This is the source name that will appear in the DS user control software (Kinksy, Kazoo etc)&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Visible===&lt;br /&gt;
This allows you to hide sources. &lt;br /&gt;
If you set Visible-NO, then this input is hidden from selection in the Front panel and the user control software selection list.&amp;lt;br&amp;gt;&lt;br /&gt;
This does not mean that you have disabled the input, it only means that you cannot see it.&lt;br /&gt;
&lt;br /&gt;
===Delay Mode===&lt;br /&gt;
[[file:584px-DSM_delays.jpg|400px|right|thumb|Source delays - click to enlarge]]&lt;br /&gt;
&lt;br /&gt;
There are 3 different delays modes with the Linn DSI/DSM/Exakt for external sources (Analogue, Toslink, SPDIF &amp;amp; HDMI)&lt;br /&gt;
:&#039;&#039;&#039;Direct&#039;&#039;&#039; - This will feed the audio in real-time to the local Linn DSI/DSM, but the audio fed to the other Linn DS products will be delayed by 150mS. If this is setup and the other Linn DS products are fairly close, the music will sound like an echo&amp;lt;br&amp;gt;&lt;br /&gt;
:&#039;&#039;&#039;Fixed&#039;&#039;&#039; - This will delay the audio to ALL Linn DS/DSI/DSM products (including Exakt products) to keep the audio in perfect sync. This common delay is 150mS&amp;lt;br&amp;gt;&lt;br /&gt;
:&#039;&#039;&#039;Variable&#039;&#039;&#039; - This is a lipsync delay from 20ms-1999ms on this local DS. However the Songcast listening rooms will ONLY be in perfect sync for Lip-sync delays of =&amp;gt;150mS. &lt;br /&gt;
:If the lip-sync is less than 150ms, the listening rooms will always have a 150mS from original source, this means that the audio will be out of sync by 150ms minus the lip sync value. (eg Lipsync delay 90mS, then the delay from the sender DS audio to the listening room DS is 60mS)&lt;br /&gt;
:Lipsync delay time is variable from from 20mS-2S either from the Konfig app or the IR handset.&amp;lt;br&amp;gt;&lt;br /&gt;
For operation detail check [[DSM Audio Latencies Explained]]&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Input level, Unity Gain, Volume offset===&lt;br /&gt;
[[file:808px-Sources-setup.jpg|404px|right|thumb|Source settings - click to enlarge]]&lt;br /&gt;
:&#039;&#039;&#039;Input level (Vrms)&#039;&#039;&#039; - This is to allow you to change that input profile for the specific sources. This may be due to input adapters,  such as RCA-XLR, XLR-RCA etc, being used giving different output levels.&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Transformer&#039;&#039;&#039; - This is only on some of the Linn DSM&#039;s and enables the input to electrically isolated via an audio transformer on this input. This should &#039;&#039;&#039;NOT&#039;&#039;&#039; be enabled if you are connecting to another product with an audio transformer on it output, such as a &#039;&#039;&#039;URIKA&#039;&#039;&#039; or &#039;&#039;&#039;Klimax DS/1&#039;&#039;&#039;. &lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Unity Gain&#039;&#039;&#039; -This will turn off the DSM volume control whenever that input/source is selected. This is a pass-through state&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Volume Offset&#039;&#039;&#039; - this is an trim adjustment. Some audio sources have a higher or lower output than normal.  This trim/offset will allow you to you to switch between source and keep the same DSM volume.&lt;br /&gt;
&lt;br /&gt;
==Songcast / Net Aux inputs==&lt;br /&gt;
[[file:669px-Net_Aux_10.jpg|300px|right|thumb|Sources - click to enlarge]]&lt;br /&gt;
* To show the Linn DS sources you need to make these visible. This allows you to hide source that you are not going to use, such as UpnpAV that is only used with some media controllers.&lt;br /&gt;
* &#039;&#039;&#039;Songcast&#039;&#039;&#039; listen to Music playing on your [http://oss.linn.co.uk/trac/wiki/SongcastWindowsDavaarManual#KnownIssues PC SONGCAST] software or listen to another  DS, &lt;br /&gt;
** &#039;&#039;&#039;Visible&#039;&#039;&#039;&lt;br /&gt;
*** Set Visible to &#039;&#039;&#039;NO&#039;&#039;&#039; will hide this on the inputs listing within the control software Kinsky.&lt;br /&gt;
*** Set Visible to &#039;&#039;&#039;YES&#039;&#039;&#039; will make this a visible source in Kinsky&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
* &#039;&#039;&#039;Net-Aux&#039;&#039;&#039; To have 3rd party Media streamers to play on your Linn DS&lt;br /&gt;
** &#039;&#039;&#039;Visible&#039;&#039;&#039;&lt;br /&gt;
*** Set Visible to &#039;&#039;&#039;NO&#039;&#039;&#039; will hide this on the inputs listing within the control software Kinsky.&lt;br /&gt;
*** Set Visible to &#039;&#039;&#039;YES&#039;&#039;&#039; will make this a visible source in Kinsky&lt;br /&gt;
** &#039;&#039;&#039;Auto Select&#039;&#039;&#039;&lt;br /&gt;
*** Set Auto Select to &#039;&#039;&#039;ON&#039;&#039;&#039; will get have the Linn DS to automatically switch to the Net-Aux input on receipt of a third party media stream.&lt;br /&gt;
*** Set Auto Select to &#039;&#039;&#039;OFF&#039;&#039;&#039; if you do &#039;&#039;&#039;NOT&#039;&#039;&#039; want the Linn DS to automatically switch to the Net-Aux input on receipt of a third party media stream&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== HDMI ==&lt;br /&gt;
[[file:764px-HDMI_Konfig_10.jpg|400px|right|thumb| HDMI - click to enlarge]]&lt;br /&gt;
* The HDMI connection can be shutdown whilst the product is in Sleep mode&lt;br /&gt;
* Usage of the Audio mode etc are explained [http://docs.linn.co.uk/wiki/index.php/HDMI_Setup#Audio_Mode  here]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Songcast Sender ==&lt;br /&gt;
&lt;br /&gt;
[[File:809px-Songcast_sender.jpg‎| 400px | centre]]&lt;br /&gt;
&lt;br /&gt;
[[Songcast_Sender|&amp;lt;big&amp;gt;Click here for Songcast Sender page&amp;lt;/big&amp;gt;]] &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Tidal ==&lt;br /&gt;
[[file:795px-Konfig-Tidal.jpg‎ |298px | centre]]&lt;br /&gt;
&lt;br /&gt;
This allows you to control the quality of the next Tidal radio stream tracks.&lt;br /&gt;
This tell tell Tidal that the music stream will now be in the Low, High or top level - FLAC quality audio. That is, the next Tidal track will be played in the newly set quality of audio.&lt;br /&gt;
&lt;br /&gt;
The change in Tidal audio quality will also control the amount of broadband capacity you are using. &lt;br /&gt;
* &amp;quot;Low (AAC 96kbps)&amp;quot; will use the least amount of broadband&lt;br /&gt;
* &amp;quot;High (AAC 320kbps)&amp;quot; will use a resonable amount of broadband&lt;br /&gt;
* &amp;quot;FLAC (lossless)&amp;quot; will use the most amount of broadband.&lt;br /&gt;
&lt;br /&gt;
== Space Optimisation and Space Optimisation+ ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;An Internet connection is required when using Exakt Systems&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
If you have selected an Exakt system, you will see the following three configuration tabs.&lt;br /&gt;
&lt;br /&gt;
[[File:KonfigExaktTabs.png|740px|Exakt Tabs]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Exakt&#039;&#039;&#039; allows you to assign an audio channel (i.e. Left or Right) to an Exakt speaker.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Space Optimisation+&#039;&#039;&#039; provides a listener focused way of applying room optimisation.&lt;br /&gt;
&lt;br /&gt;
If you have selected a DS system, you will see the following three configuration tabs.&lt;br /&gt;
&lt;br /&gt;
[[File:KonfigExaktTabs.png|740px|Exakt Tabs]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Speakers&#039;&#039;&#039; allows you to assign which speakers are connected to the DS system.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Space Optimisation&#039;&#039;&#039; provides a listener focused way of applying room optimisation.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
For help with this, please see the [[Exakt Optimsation|Space Optimisation]] article.&lt;br /&gt;
&lt;br /&gt;
== Updates ==&lt;br /&gt;
&lt;br /&gt;
[[File:Updates.png|740px|Updates Page]]&lt;br /&gt;
&lt;br /&gt;
The Updates tab indicates the number of Linn devices that currently have a newer software version available, as shown in the screenshot above.&lt;br /&gt;
&lt;br /&gt;
Each device that has an update available will be in the list of updatable devices. Each device has information about the update version available as well as a link to the release notes.&lt;br /&gt;
&lt;br /&gt;
To update a device click the &#039;Update&#039; button. If you have more than one devices to update you can click the &#039;Update All&#039; button to update all the devices at the same time.&lt;br /&gt;
&lt;br /&gt;
If you updated a device to beta software and then decide you want to go back to the latest stable release you just need to un-click the [[#Participate_in_beta_program_2| Participate in beta program]] option, return to the Updates page and update the desired device.&lt;br /&gt;
&lt;br /&gt;
== Diagnostics ==&lt;br /&gt;
&lt;br /&gt;
[[File:Diagnostics.png|740px|Diagnostics Page]]&lt;br /&gt;
&lt;br /&gt;
The Diagnostics tab indicates the number of Linn devices that currently have crash data available to send to Linn, as shown in the screenshot above.&lt;br /&gt;
&lt;br /&gt;
To send the crash data from a device to Linn click the &#039;Send&#039; button. If you have more than one device with crash data you can click the &#039;Send All&#039; button.&lt;br /&gt;
&lt;br /&gt;
If you do not wish to send the crash data for a device you can click the &#039;Ignore&#039; button and you will not be notified about crash data until the device crashes again. If you want to ignore crash data from all the listed devices you can click the &#039;Ignore All&#039; button.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;NOTE: No personal information is sent to Linn as a result of sending crash data to Linn.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== Advanced ==&lt;br /&gt;
&lt;br /&gt;
[[File:Advanced.png|740px|Advanced Page]]&lt;br /&gt;
&lt;br /&gt;
The Advanced page allows a user to restore a Linn device back to the original factory settings. It also allows a user to manually updating a Linn device&#039;s firmware to a locally stored firmware bundle.&lt;br /&gt;
&lt;br /&gt;
=== Restore Factory Settings ===&lt;br /&gt;
&lt;br /&gt;
Click the &#039;Restore&#039; button associated with the desired Linn device to start the process of restoring the Linn device to its factory default settings.&lt;br /&gt;
&lt;br /&gt;
=== Updating Linn Device Firmware ===&lt;br /&gt;
&lt;br /&gt;
First download the desired firmware from [http://products.linn.co.uk/VersionInfo/Downloads/Releases/ here].&lt;br /&gt;
&lt;br /&gt;
[[File:992px-Advanced-update.jpg|740px|Advanced Page]]&lt;br /&gt;
&lt;br /&gt;
Next enter the firmware&#039;s downloaded location into the text field associated with the desired Linn device, e.g. On Windows, C:\Users\&amp;lt;username&amp;gt;\Desktop\KlimaxDsm_4.7.5.zip and on Mac, /Users/&amp;lt;username&amp;gt;/Desktop/S08500116.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;NOTE: On Mac the downloaded firmware is automatically unzipped by the OS and so the location is a directory unlike on Windows where the location is the downloaded zip file.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
After entering the firmware&#039;s location click the &#039;Update&#039; button to start the process of updating the Linn device&#039;s firmware.&lt;br /&gt;
&lt;br /&gt;
=== Device Recovery ===&lt;br /&gt;
&lt;br /&gt;
This option should only be used if your are having problems updating your Linn DS through the standard methods, i.e. automatically through the Update page or manually as described in the previous section.&lt;br /&gt;
&lt;br /&gt;
After a &#039;Device Recovery&#039; update has been performed any Linn device settings changed by the user will be set back to factory defaults.&lt;br /&gt;
&lt;br /&gt;
== Settings ==&lt;br /&gt;
&lt;br /&gt;
[[File:Settings.png|740px|Settings Page]]&lt;br /&gt;
&lt;br /&gt;
=== Application Updates ===&lt;br /&gt;
==== Automatic update checks ====&lt;br /&gt;
Whether Konfig automatically checks for newer versions of Konfig.&lt;br /&gt;
==== Participate in beta program ====&lt;br /&gt;
Whether Konfig automatically checks for beta releases of Konfig.&lt;br /&gt;
==== Check For Updates ====&lt;br /&gt;
Force Konfig to check for newer versions of Konfig, taking into account whether &#039;Participate in beta program&#039; is checked.&lt;br /&gt;
&lt;br /&gt;
=== Device Updates ===&lt;br /&gt;
==== Participate in beta program ====&lt;br /&gt;
Whether Konfig automatically checks for beta releases of firmware for available Linn devices.&lt;br /&gt;
&lt;br /&gt;
=== Diagnostics ===&lt;br /&gt;
==== Automatically send DS crash information to Linn ====&lt;br /&gt;
Whether to automatically send Linn device crash information to Linn for analysis (recommended to be checked).&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;NOTE: No personal information is sent to Linn as a result of this option being checked.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== Privacy ===&lt;br /&gt;
==== Send anonymous usage data to Linn ====&lt;br /&gt;
&lt;br /&gt;
Whether to allow Konfig to send anonymous usage data to Linn for analysis (recommended to be checked).&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;NOTE: No personal information is sent to Linn as a result of this option being checked.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== Network ===&lt;br /&gt;
&lt;br /&gt;
Which network to use to locate Linn DSs.&lt;br /&gt;
&lt;br /&gt;
= Troubleshooting =&lt;br /&gt;
=== Konfig cannot see any of my DS ===&lt;br /&gt;
&lt;br /&gt;
Check within Settings that the Network connection is correct.&amp;lt;br&amp;gt;&lt;br /&gt;
In older versions of Konfig you only had to select the network card, (wired, wireless etc). Now Konfig asks you for the Network IP range, this is to simplify the connection as this can use BOTH the wired and wireless connections if they are connected to the same Network.&amp;lt;br&amp;gt;&lt;br /&gt;
If your PC/MAC has changed Ethernet networks (for installation, Home-Work etc), the Konfig may be setup for a different address range and not see any DS products. So if your Konfig cannot see your Linn DS products, go into Settings and check that the correct Network address has been selected (click on the drop down box to see what is available)&lt;br /&gt;
&lt;br /&gt;
Some Anti-virus Suites also have additional Firewalls that will block a lot of communications. If Konfig used to work and now does not find any products then check if your Anti-Virus suite has recently had a major update. This update may require the Konfig for have &amp;quot;firewall exceptions&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
=== After the software update the Linn DS is not working correctly or losing settings ===&lt;br /&gt;
&lt;br /&gt;
This can be due to a configuration conflict with the last software version:&lt;br /&gt;
* From Konfig, under the Advanced page, select your DS&lt;br /&gt;
* Select the &#039;&#039;&#039;RESTORE&#039;&#039;&#039; button, this will reset the Linn DS back its factory defaults&lt;br /&gt;
* Reconfigure your DS to your preferred setting. (As this is configuration is performed in the same software version this should remove any previous conflicts).&lt;br /&gt;
&lt;br /&gt;
=== Where is the manual for the previous releases of Konfig? ===&lt;br /&gt;
&lt;br /&gt;
The old Konfig manual has moved to [[Konfig_Manual_Old| here]]&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
=== Konfig just doesn&#039;t run on my Mac. The icon bounces in the dock and then goes away.===&lt;br /&gt;
* Open Finder&lt;br /&gt;
* From the Menu bar at the top select &#039;Go&#039; the &#039;Go to Folder&#039;&lt;br /&gt;
* Type in ~/Library/Konfig and click Go&lt;br /&gt;
* Select &#039;Options.xml&#039; file and delete&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== What if I have problems updating? ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Don&#039;t panic, the update process is safe, so you should always be able to recover your device&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* Restart Konfig. If your device reports the expected version, the update was successful and you are done&lt;br /&gt;
* If your device does not report the expected version, retry the update process (if you were updating over wireless, try updating over a wired connection)&lt;br /&gt;
* If this fails, power cycle your device and try again&lt;br /&gt;
* If this fails, download the latest version of software from [http://products.linn.co.uk/VersionInfo/Downloads/Releases/ here]&lt;br /&gt;
* Save this zip file to a known location on your hard drive, preferably in C:\&lt;br /&gt;
* Open Linn Konfig&lt;br /&gt;
* Go to the ‘Advanced’ tab&lt;br /&gt;
* Press the fallback button on the DS&lt;br /&gt;
* The DS should appear in Konfig with a lightning symbol beside it&lt;br /&gt;
* Enter the full location of the .zip file that you saved in the text box for the DS (e.g. “C:\MajikDs_4.12.357.zip”)&lt;br /&gt;
* Select the ‘Device Recovery’ option below the text box&lt;br /&gt;
* Click on ‘Update’&lt;br /&gt;
* The unit should update successfully&lt;br /&gt;
* If the update fails then contact your retailer for further support&lt;br /&gt;
&#039;&#039;&#039;NOTE: If there is no text box to enter the file location, ensure that you have the latest version of Internet Explorer installed. If there is still no text box, ensure that the security settings for Local Intranet are set to medium-low.&lt;br /&gt;
&lt;br /&gt;
=== What if I want to revert to older versions of firmware? ===&lt;br /&gt;
&lt;br /&gt;
We only support the latest firmware release and do not recommend running old firmware on any Linn DS.&lt;br /&gt;
&lt;br /&gt;
We only archive released versions of firmware.&lt;br /&gt;
&lt;br /&gt;
* Put your device into fallback mode from the button on the back of the device&lt;br /&gt;
* Download and install the compatible version of Konfig from the release download site (i.e. Cara Konfig if you are reverting to Cara firmware, Davaar for Davaar, etc)&lt;br /&gt;
* Download the version of firmware (zip file) you wish to use from the release download site (only firmware for your device model will work)&lt;br /&gt;
* From Konfig, under the Advanced page, enter the downloaded firmware location for your Linn device&lt;br /&gt;
&lt;br /&gt;
Keep in mind, only compatible control points will work with your device (i.e. Cara with Cara, Davaar with Davaar, etc)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== What if I have problems updating my Exakt devices? ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Don&#039;t panic, the update process is safe, so you will always be able to recover your device&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* Normally your Exakt devices will update seemlessly as part of the standard DS/DSM update process.&lt;br /&gt;
*  Restart Konfig. If your Exakt device appears under Exakt Setup and there is no Update button, the update was successful and you are done.&lt;br /&gt;
* Restart Konfig. If your Exakt device appears under Exakt Setup and there IS an Update button, the update was unsuccessful, click Update to try again.&lt;br /&gt;
* If this fails, power cycle your Exakt device and the connected DS/DSM device and try again.&lt;br /&gt;
* If this fails, follow the device recovery process below:&lt;br /&gt;
* Put both your Exakt device and connected DS/DSM into fallback (from the buttons on the back of the devices).&lt;br /&gt;
* Find the connected DS/DSM in the Update tab and click Update.&lt;br /&gt;
* If you have an integrated Exakt speaker, this will fully update your Exakt device as well.&lt;br /&gt;
* If you have an Exakt tunebox, you will be prompted at the end of the update to enter your speaker serial number from the Exakt Setup tab to complete the update.&lt;br /&gt;
&lt;br /&gt;
If you have difficulty programming an Exakt speaker or Tunebox, but the Exakt DSM is OK (require Konfig 4.12.2 onwards)&lt;br /&gt;
&lt;br /&gt;
* Put the speaker or Tunebox into FALLBACK&lt;br /&gt;
:* Make sure the Exakt DSM is Out of Standby&lt;br /&gt;
:* Press the Fallback button on the Exakt Speaker/Exakt Tunboks&lt;br /&gt;
* In Konfig in the DS - &amp;quot;Exakt setup&amp;quot; tab, this speaker should now show up with a RESTORE button, press the RESTORE button and wait for this to complete. If this is a Exakt Tunebox then enter the serial number of the speaker then do the UPDATE button&lt;br /&gt;
* Complete&lt;br /&gt;
&lt;br /&gt;
=== Why does Konfig not show Space Optimisation for my DS? ===&lt;br /&gt;
&lt;br /&gt;
Space Optimisation for DS was introduced in Davaar 25.&lt;br /&gt;
&lt;br /&gt;
To enable Space Optimisation on your DS you will need to install Davaar 25 or later firmware on your DS. &lt;br /&gt;
&lt;br /&gt;
== Known Issues ==&lt;br /&gt;
If you start Konfig and only get a white screen or only shows toolbar with no &amp;quot;Show devices&amp;quot; button:&lt;br /&gt;
:1. Go into Internet Explorer - &#039;&#039;Tools&#039;&#039; - &#039;&#039;Internet options&#039;&#039;&lt;br /&gt;
:2. Select Security &lt;br /&gt;
::a) If &#039;&#039;&#039;&amp;quot;Internet&amp;quot;&#039;&#039;&#039; Security is High, reduce this to Medium High&lt;br /&gt;
::b) now select &#039;&#039;&#039;&amp;quot;Local Internet&amp;quot;&#039;&#039;&#039; icon&lt;br /&gt;
::c) If &#039;&#039;&#039;&amp;quot;Local Internet&amp;quot;&#039;&#039;&#039; Security is High, reduce this to Medium High&lt;br /&gt;
:3. OK out of this &amp;amp; restart Konfig&lt;br /&gt;
&lt;br /&gt;
If this does not cure the issue then&lt;br /&gt;
:1. Run Konfig&lt;br /&gt;
:2. Open Internet Explorer&lt;br /&gt;
:3.  Type in [http://localhost:5000 http://localhost:5000] into the IE address bar&lt;br /&gt;
::(If Songbox is running then type [http://localhost:5001 http://localhost:5001]&lt;br /&gt;
:4. What appears in the window?&lt;br /&gt;
:5. If Internet Explorer shown the Konfig windows OK then retry steps 3/4/5 using Chrome or another web browser.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;After the update some PC/MAC cannot find any Linn DS/DSM products:&lt;br /&gt;
Do the following procedure:&lt;br /&gt;
:1. If you are using Norton Anti-virus, make sure that the new Konfig is added an exception&lt;br /&gt;
:2. Restart your PC/MAC and retry Konfig 10 &lt;br /&gt;
::a) Press the &#039;&#039;&#039;SHOW DEVICES&#039;&#039;&#039; button&lt;br /&gt;
::b) If a number appears beside the Updates tab (top of Konfig screen,&lt;br /&gt;
:::i) Press the Updates tab and press &#039;&#039;&#039;UPDATE&#039;&#039;&#039; beside your Linn DS/DSM name &lt;br /&gt;
:::ii) Wait until he update is finished and Press the &#039;&#039;&#039;SHOW DEVICES&#039;&#039;&#039; button. Your DS should now appear.&lt;br /&gt;
If your Linn DS/DSM is not listed&lt;br /&gt;
:3. Press the &#039;&#039;&#039;ADVANCED&#039;&#039;&#039; tab and see if your Linn DS/DSM is listed here&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
;If neither of these two options work:Follow the  [http://docs.linn.co.uk/wiki/index.php/Troubleshooting#Konfig_diagnostics Konfig 10 diagnostics]&lt;br /&gt;
&lt;br /&gt;
;If doing a Advanced download Konfig reports &amp;quot;cannot find directory..&amp;quot;;&lt;br /&gt;
:Check that &lt;br /&gt;
:1. You can typed the correct file location and file name in to the download field&lt;br /&gt;
:2. Konfig 4.10.5-4.11.2 needs internet access before doing the file update. Make sure that you have an Internet link BEFORE opening Konfig&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;/div&gt;</summary>
		<author><name>Davidd</name></author>
	</entry>
	<entry>
		<id>https://docs.linn.co.uk/wiki/index.php?title=Konfig_Manual&amp;diff=11256</id>
		<title>Konfig Manual</title>
		<link rel="alternate" type="text/html" href="https://docs.linn.co.uk/wiki/index.php?title=Konfig_Manual&amp;diff=11256"/>
		<updated>2015-03-17T11:37:34Z</updated>

		<summary type="html">&lt;p&gt;Davidd: /* Troubleshooting */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Introduction =&lt;br /&gt;
&lt;br /&gt;
Konfig provides advanced configuration of a Linn DS, notification and updating of a Linn DS to the latest firmware, restoring Linn DS settings back to factory defaults and manual updating of a Linn DS firmware.&lt;br /&gt;
&lt;br /&gt;
Konfig can also be run from a web-browser with all functions except the software update. Get the IP address of the Linn DS/DSM from the front panel using either the:&amp;lt;br&amp;gt;&lt;br /&gt;
:[http://docs.linn.co.uk/wiki/index.php/REM_020 REM 020 Remote control] by pressing and holding the # button &amp;lt;br&amp;gt;or with the &amp;lt;br&amp;gt;&lt;br /&gt;
:[http://docs.linn.co.uk/wiki/index.php/DS_%26_REM_019 REM 019 Remote control] by pressing DVD then the INFO buttons.&lt;br /&gt;
&lt;br /&gt;
When you are in DS web page select Control, this will give you the same options (except Software update) as below&lt;br /&gt;
&lt;br /&gt;
= Installation =&lt;br /&gt;
== System Requirements ==&lt;br /&gt;
=== Windows ===&lt;br /&gt;
* Windows Vista or later version of Windows&lt;br /&gt;
* IE9 or later&lt;br /&gt;
* 32 or 64-bit hardware&lt;br /&gt;
* Internet connection when using Exakt Systems&lt;br /&gt;
&lt;br /&gt;
=== Mac ===&lt;br /&gt;
* Mac OS X Snow Leopard 10.6.8 or later&lt;br /&gt;
* 32 or 64-bit hardware&lt;br /&gt;
* Internet connection when using Exakt Systems&lt;br /&gt;
&lt;br /&gt;
== Installing ==&lt;br /&gt;
=== Windows ===&lt;br /&gt;
* Download the installer from the [http://www.linn.co.uk/support/software#konfig download] page&lt;br /&gt;
* Double click the downloaded .exe file&lt;br /&gt;
* Follow the on screen instructions in the installer program&lt;br /&gt;
&lt;br /&gt;
=== Mac ===&lt;br /&gt;
* Download the .pkg file from the [http://www.linn.co.uk/support/software#konfig download] page&lt;br /&gt;
* Double click the downloaded .pkg file&lt;br /&gt;
* Follow the on screen instructions in the installer program&lt;br /&gt;
&lt;br /&gt;
== Uninstalling ==&lt;br /&gt;
=== Windows ===&lt;br /&gt;
* Open the Windows Control Panel and double click &amp;quot;Programs and Features&amp;quot;&lt;br /&gt;
* Select &amp;quot;Konfig&amp;quot; in the list of programs and click the &amp;quot;Uninstall&amp;quot; button&lt;br /&gt;
* Follow the on screen instructions in the uninstall window&lt;br /&gt;
&lt;br /&gt;
=== Mac ===&lt;br /&gt;
* Using Finder drag the Konfig icon from Applications/Konfig to the waste bin&lt;br /&gt;
&lt;br /&gt;
== Updating ==&lt;br /&gt;
&lt;br /&gt;
Konfig for Mac and Windows will automatically check for new software updates. Checking for available updates can also be performed manually as described below. Alternatively, Konfig can be updated by manually downloading the installation packages from the [http://www.linn.co.uk/support/software#konfig download] page and installing them using the method described in the [[#Installing| Installing]] section above.&lt;br /&gt;
&lt;br /&gt;
= Operation =&lt;br /&gt;
&lt;br /&gt;
Konfig has four main views, [[#Configuration| Configuration]], [[#Updates| Updates]], [[#Diagnostics| Diagnostics]], and [[#Advanced| Advanced]]&lt;br /&gt;
&lt;br /&gt;
[[File:Header.png|740px|Header]]&lt;br /&gt;
&lt;br /&gt;
== Configuration ==&lt;br /&gt;
&lt;br /&gt;
[[File:Configuration.png|740px|Configuration Page]]&lt;br /&gt;
&lt;br /&gt;
Click the &#039;&#039;&#039;Show Devices&#039;&#039;&#039; button to slide a list of available devices in from the left. Selecting a device from the list will show it&#039;s configuration page in the right hand pane.&lt;br /&gt;
&lt;br /&gt;
A Linn device&#039;s configuration page will only show in the right hand pane if the device is running firmware version Davaar 9 (4.9.4) or later. If your Linn device is running firmware version less that Davaar 9 (4.9.4), Konfig will provide a link to allow you to open the configuration page in your default browser.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- === DEVICES ===&lt;br /&gt;
[[Linn_DS-DSM_Konfig Devices|&amp;lt;big&amp;gt;Click here for Devices configuration page&amp;lt;/big&amp;gt;]] &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--=== DISPLAY ===&lt;br /&gt;
[[Linn_DS-DSM_Konfig_Display|&amp;lt;big&amp;gt;Click here for Display configuration page&amp;lt;/big&amp;gt;]] &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Linn Preamplifier, Volume, Delay modes, Songcast, Net-Aux and HDMI settings ===&lt;br /&gt;
[[file:771px-DS_Name_10.jpg|300px|center]]&lt;br /&gt;
&lt;br /&gt;
== DS Volume control &amp;amp; Proxy RS232 control ==&lt;br /&gt;
There are two way to control the Volume on a Linn DS system:&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Internal Volume&#039;&#039;&#039; control that will directly control the analogue audio level coming out of the Linn DS. This is good for directly connecting to a Power amplifier on your speakers.&lt;br /&gt;
[[file:635px-Internal_Vol_ctrl_10.jpg|400px|center]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Proxy RS232 control ===&lt;br /&gt;
* Or use an external preamplifier, this means that the Linn DS will always output Line-level audio.&lt;br /&gt;
:If you have a Linn Pre-amplifier this can be set to be controlled by the Kinsky control software. &lt;br /&gt;
&lt;br /&gt;
[[file:771px-DS_Name_10.jpg|300px|right]]&lt;br /&gt;
: &#039;&#039;1.&#039;&#039; Wire up the Linn DS and Linn preamplifiers/CD players &#039;&#039;&#039;RS232&#039;&#039;&#039; and audio connections as shown [http://docs.linn.co.uk/wiki/index.php/Systems Here] &#039;&#039;&#039;(Ignore this if you are using an Akurate Kontrol/1)&#039;&#039;&#039;&lt;br /&gt;
:&#039;&#039;2.&#039;&#039; Select the Linn DS and go into the Linn DS &#039;&#039;&#039;Device&#039;&#039; screen&lt;br /&gt;
:&#039;&#039;3.&#039;&#039; Take note of the text in &#039;&#039;&#039;Name&#039;&#039;&#039; field&lt;br /&gt;
:&#039;&#039;4.&#039;&#039; Go into the Linn DS &#039;&#039;&#039;RS232 connections&#039;&#039; screen&lt;br /&gt;
:&#039;&#039;5.&#039;&#039; Under Linn Preamplifier/CD player select the Linn product and Linn DS com port it is wired to.&lt;br /&gt;
:&#039;&#039;6.&#039;&#039; Press the Circle arrow to Reboot the Linn DS&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[file:824px-DS_Ktrl_Name_10.jpg|300px|right|thumb|DS Name in Kontrol - click to enlarge]]&lt;br /&gt;
:&#039;&#039;7.&#039;&#039; Click on &amp;quot;Show Devices&amp;quot; and&lt;br /&gt;
:&#039;&#039;8.&#039;&#039; Select the Linn Kontrol (preamplifier) and go into the Linn Kontrol &#039;&#039;&#039;Sources&#039;&#039;&#039; screen &lt;br /&gt;
:&#039;&#039;9.&#039;&#039; Select the Input that the Linn DS is connected to and enter the &#039;&#039;&#039;Name&#039;&#039;&#039; of the Linn DS that was take from the Linn DS - Devices screen Name field (taken in point 3)&lt;br /&gt;
:&#039;&#039;10.&#039;&#039; If a Linn CD player was also enabled enter the &#039;&#039;&#039;Name&#039;&#039;&#039; of the Linn CD device that was take from the Linn CD player - Devices screen&lt;br /&gt;
&lt;br /&gt;
===Ethernet controlled Linn Pre-Amplifier (Akurate Kontrol/1)===&lt;br /&gt;
:&#039;&#039;1.&#039;&#039; Select the Linn DS and go into the Linn DS &#039;&#039;&#039;Device&#039;&#039; screen&lt;br /&gt;
:&#039;&#039;2.&#039;&#039; Take note of the text in &#039;&#039;&#039;Name&#039;&#039;&#039; and the &#039;&#039;&#039;Room&#039;&#039;&#039; fields&lt;br /&gt;
:&#039;&#039;3.&#039;&#039; Click on &amp;quot;Show Devices&amp;quot; and&lt;br /&gt;
:&#039;&#039;4.&#039;&#039; Select the Linn Kontrol (preamplifier) and go into the Linn Kontrol &#039;&#039;&#039;Sources&#039;&#039;&#039; screen &lt;br /&gt;
:&#039;&#039;5.&#039;&#039; Change the Akurate Kontrol &#039;&#039;&#039;Device - Room&#039;&#039;&#039; name matches the Linn DS Room field taken in point 2.&lt;br /&gt;
:&#039;&#039;6.&#039;&#039; Select the Input that the Linn DS is connected to and enter the &#039;&#039;&#039;Name&#039;&#039;&#039; of the Linn DS that was take from the Linn DS Name field taken in point 2.&lt;br /&gt;
&lt;br /&gt;
I would suggest a &amp;quot;cut and paste&amp;quot; of the Room field and DS name field as this is case-senative (&amp;quot;lounge&amp;quot; is not the same as &amp;quot;Lounge&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
==Sources==&lt;br /&gt;
&lt;br /&gt;
===Name===&lt;br /&gt;
This is the source name that will appear in the DS user control software (Kinksy, Kazoo etc)&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Visible===&lt;br /&gt;
This allows you to hide sources. &lt;br /&gt;
If you set Visible-NO, then this input is hidden from selection in the Front panel and the user control software selection list.&amp;lt;br&amp;gt;&lt;br /&gt;
This does not mean that you have disabled the input, it only means that you cannot see it.&lt;br /&gt;
&lt;br /&gt;
===Delay Mode===&lt;br /&gt;
[[file:584px-DSM_delays.jpg|400px|right|thumb|Source delays - click to enlarge]]&lt;br /&gt;
&lt;br /&gt;
There are 3 different delays modes with the Linn DSI/DSM/Exakt for external sources (Analogue, Toslink, SPDIF &amp;amp; HDMI)&lt;br /&gt;
:&#039;&#039;&#039;Direct&#039;&#039;&#039; - This will feed the audio in real-time to the local Linn DSI/DSM, but the audio fed to the other Linn DS products will be delayed by 150mS. If this is setup and the other Linn DS products are fairly close, the music will sound like an echo&amp;lt;br&amp;gt;&lt;br /&gt;
:&#039;&#039;&#039;Fixed&#039;&#039;&#039; - This will delay the audio to ALL Linn DS/DSI/DSM products (including Exakt products) to keep the audio in perfect sync. This common delay is 150mS&amp;lt;br&amp;gt;&lt;br /&gt;
:&#039;&#039;&#039;Variable&#039;&#039;&#039; - This is a lipsync delay from 20ms-1999ms on this local DS. However the Songcast listening rooms will ONLY be in perfect sync for Lip-sync delays of =&amp;gt;150mS. &lt;br /&gt;
:If the lip-sync is less than 150ms, the listening rooms will always have a 150mS from original source, this means that the audio will be out of sync by 150ms minus the lip sync value. (eg Lipsync delay 90mS, then the delay from the sender DS audio to the listening room DS is 60mS)&lt;br /&gt;
:Lipsync delay time is variable from from 20mS-2S either from the Konfig app or the IR handset.&amp;lt;br&amp;gt;&lt;br /&gt;
For operation detail check [[DSM Audio Latencies Explained]]&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Input level, Unity Gain, Volume offset===&lt;br /&gt;
[[file:808px-Sources-setup.jpg|404px|right|thumb|Source settings - click to enlarge]]&lt;br /&gt;
:&#039;&#039;&#039;Input level (Vrms)&#039;&#039;&#039; - This is to allow you to change that input profile for the specific sources. This may be due to input adapters,  such as RCA-XLR, XLR-RCA etc, being used giving different output levels.&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Transformer&#039;&#039;&#039; - This is only on some of the Linn DSM&#039;s and enables the input to electrically isolated via an audio transformer on this input. This should &#039;&#039;&#039;NOT&#039;&#039;&#039; be enabled if you are connecting to another product with an audio transformer on it output, such as a &#039;&#039;&#039;URIKA&#039;&#039;&#039; or &#039;&#039;&#039;Klimax DS/1&#039;&#039;&#039;. &lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Unity Gain&#039;&#039;&#039; -This will turn off the DSM volume control whenever that input/source is selected. This is a pass-through state&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Volume Offset&#039;&#039;&#039; - this is an trim adjustment. Some audio sources have a higher or lower output than normal.  This trim/offset will allow you to you to switch between source and keep the same DSM volume.&lt;br /&gt;
&lt;br /&gt;
==Songcast / Net Aux inputs==&lt;br /&gt;
[[file:669px-Net_Aux_10.jpg|300px|right|thumb|Sources - click to enlarge]]&lt;br /&gt;
* To show the Linn DS sources you need to make these visible. This allows you to hide source that you are not going to use, such as UpnpAV that is only used with some media controllers.&lt;br /&gt;
* &#039;&#039;&#039;Songcast&#039;&#039;&#039; listen to Music playing on your [http://oss.linn.co.uk/trac/wiki/SongcastWindowsDavaarManual#KnownIssues PC SONGCAST] software or listen to another  DS, &lt;br /&gt;
** &#039;&#039;&#039;Visible&#039;&#039;&#039;&lt;br /&gt;
*** Set Visible to &#039;&#039;&#039;NO&#039;&#039;&#039; will hide this on the inputs listing within the control software Kinsky.&lt;br /&gt;
*** Set Visible to &#039;&#039;&#039;YES&#039;&#039;&#039; will make this a visible source in Kinsky&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
* &#039;&#039;&#039;Net-Aux&#039;&#039;&#039; To have 3rd party Media streamers to play on your Linn DS&lt;br /&gt;
** &#039;&#039;&#039;Visible&#039;&#039;&#039;&lt;br /&gt;
*** Set Visible to &#039;&#039;&#039;NO&#039;&#039;&#039; will hide this on the inputs listing within the control software Kinsky.&lt;br /&gt;
*** Set Visible to &#039;&#039;&#039;YES&#039;&#039;&#039; will make this a visible source in Kinsky&lt;br /&gt;
** &#039;&#039;&#039;Auto Select&#039;&#039;&#039;&lt;br /&gt;
*** Set Auto Select to &#039;&#039;&#039;ON&#039;&#039;&#039; will get have the Linn DS to automatically switch to the Net-Aux input on receipt of a third party media stream.&lt;br /&gt;
*** Set Auto Select to &#039;&#039;&#039;OFF&#039;&#039;&#039; if you do &#039;&#039;&#039;NOT&#039;&#039;&#039; want the Linn DS to automatically switch to the Net-Aux input on receipt of a third party media stream&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== HDMI ==&lt;br /&gt;
[[file:764px-HDMI_Konfig_10.jpg|400px|right|thumb| HDMI - click to enlarge]]&lt;br /&gt;
* The HDMI connection can be shutdown whilst the product is in Sleep mode&lt;br /&gt;
* Usage of the Audio mode etc are explained [http://docs.linn.co.uk/wiki/index.php/HDMI_Setup#Audio_Mode  here]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Songcast Sender ==&lt;br /&gt;
&lt;br /&gt;
[[File:809px-Songcast_sender.jpg‎| 400px | centre]]&lt;br /&gt;
&lt;br /&gt;
[[Songcast_Sender|&amp;lt;big&amp;gt;Click here for Songcast Sender page&amp;lt;/big&amp;gt;]] &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Tidal ==&lt;br /&gt;
[[file:795px-Konfig-Tidal.jpg‎ |298px | centre]]&lt;br /&gt;
&lt;br /&gt;
This allows you to control the quality of the next Tidal radio stream tracks.&lt;br /&gt;
This tell tell Tidal that the music stream will now be in the Low, High or top level - FLAC quality audio. That is, the next Tidal track will be played in the newly set quality of audio.&lt;br /&gt;
&lt;br /&gt;
The change in Tidal audio quality will also control the amount of broadband capacity you are using. &lt;br /&gt;
* &amp;quot;Low (AAC 96kbps)&amp;quot; will use the least amount of broadband&lt;br /&gt;
* &amp;quot;High (AAC 320kbps)&amp;quot; will use a resonable amount of broadband&lt;br /&gt;
* &amp;quot;FLAC (lossless)&amp;quot; will use the most amount of broadband.&lt;br /&gt;
&lt;br /&gt;
== Space Optimisation and Space Optimisation+ ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;An Internet connection is required when using Exakt Systems&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
If you have selected an Exakt compatible device, you will see two new configuration tabs.&lt;br /&gt;
&lt;br /&gt;
[[File:KonfigExaktTabs.png|740px|Exakt Tabs]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Exakt&#039;&#039;&#039; allows you to assign an audio channel (i.e. Left or Right) to an Exakt speaker.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Space Optimisation+&#039;&#039;&#039; provides a listener focused way of applying room optimisation.&lt;br /&gt;
&lt;br /&gt;
For help with this, please see the [[Exakt Optimsation]] article.&lt;br /&gt;
&lt;br /&gt;
== Updates ==&lt;br /&gt;
&lt;br /&gt;
[[File:Updates.png|740px|Updates Page]]&lt;br /&gt;
&lt;br /&gt;
The Updates tab indicates the number of Linn devices that currently have a newer software version available, as shown in the screenshot above.&lt;br /&gt;
&lt;br /&gt;
Each device that has an update available will be in the list of updatable devices. Each device has information about the update version available as well as a link to the release notes.&lt;br /&gt;
&lt;br /&gt;
To update a device click the &#039;Update&#039; button. If you have more than one devices to update you can click the &#039;Update All&#039; button to update all the devices at the same time.&lt;br /&gt;
&lt;br /&gt;
If you updated a device to beta software and then decide you want to go back to the latest stable release you just need to un-click the [[#Participate_in_beta_program_2| Participate in beta program]] option, return to the Updates page and update the desired device.&lt;br /&gt;
&lt;br /&gt;
== Diagnostics ==&lt;br /&gt;
&lt;br /&gt;
[[File:Diagnostics.png|740px|Diagnostics Page]]&lt;br /&gt;
&lt;br /&gt;
The Diagnostics tab indicates the number of Linn devices that currently have crash data available to send to Linn, as shown in the screenshot above.&lt;br /&gt;
&lt;br /&gt;
To send the crash data from a device to Linn click the &#039;Send&#039; button. If you have more than one device with crash data you can click the &#039;Send All&#039; button.&lt;br /&gt;
&lt;br /&gt;
If you do not wish to send the crash data for a device you can click the &#039;Ignore&#039; button and you will not be notified about crash data until the device crashes again. If you want to ignore crash data from all the listed devices you can click the &#039;Ignore All&#039; button.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;NOTE: No personal information is sent to Linn as a result of sending crash data to Linn.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== Advanced ==&lt;br /&gt;
&lt;br /&gt;
[[File:Advanced.png|740px|Advanced Page]]&lt;br /&gt;
&lt;br /&gt;
The Advanced page allows a user to restore a Linn device back to the original factory settings. It also allows a user to manually updating a Linn device&#039;s firmware to a locally stored firmware bundle.&lt;br /&gt;
&lt;br /&gt;
=== Restore Factory Settings ===&lt;br /&gt;
&lt;br /&gt;
Click the &#039;Restore&#039; button associated with the desired Linn device to start the process of restoring the Linn device to its factory default settings.&lt;br /&gt;
&lt;br /&gt;
=== Updating Linn Device Firmware ===&lt;br /&gt;
&lt;br /&gt;
First download the desired firmware from [http://products.linn.co.uk/VersionInfo/Downloads/Releases/ here].&lt;br /&gt;
&lt;br /&gt;
[[File:992px-Advanced-update.jpg|740px|Advanced Page]]&lt;br /&gt;
&lt;br /&gt;
Next enter the firmware&#039;s downloaded location into the text field associated with the desired Linn device, e.g. On Windows, C:\Users\&amp;lt;username&amp;gt;\Desktop\KlimaxDsm_4.7.5.zip and on Mac, /Users/&amp;lt;username&amp;gt;/Desktop/S08500116.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;NOTE: On Mac the downloaded firmware is automatically unzipped by the OS and so the location is a directory unlike on Windows where the location is the downloaded zip file.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
After entering the firmware&#039;s location click the &#039;Update&#039; button to start the process of updating the Linn device&#039;s firmware.&lt;br /&gt;
&lt;br /&gt;
=== Device Recovery ===&lt;br /&gt;
&lt;br /&gt;
This option should only be used if your are having problems updating your Linn DS through the standard methods, i.e. automatically through the Update page or manually as described in the previous section.&lt;br /&gt;
&lt;br /&gt;
After a &#039;Device Recovery&#039; update has been performed any Linn device settings changed by the user will be set back to factory defaults.&lt;br /&gt;
&lt;br /&gt;
== Settings ==&lt;br /&gt;
&lt;br /&gt;
[[File:Settings.png|740px|Settings Page]]&lt;br /&gt;
&lt;br /&gt;
=== Application Updates ===&lt;br /&gt;
==== Automatic update checks ====&lt;br /&gt;
Whether Konfig automatically checks for newer versions of Konfig.&lt;br /&gt;
==== Participate in beta program ====&lt;br /&gt;
Whether Konfig automatically checks for beta releases of Konfig.&lt;br /&gt;
==== Check For Updates ====&lt;br /&gt;
Force Konfig to check for newer versions of Konfig, taking into account whether &#039;Participate in beta program&#039; is checked.&lt;br /&gt;
&lt;br /&gt;
=== Device Updates ===&lt;br /&gt;
==== Participate in beta program ====&lt;br /&gt;
Whether Konfig automatically checks for beta releases of firmware for available Linn devices.&lt;br /&gt;
&lt;br /&gt;
=== Diagnostics ===&lt;br /&gt;
==== Automatically send DS crash information to Linn ====&lt;br /&gt;
Whether to automatically send Linn device crash information to Linn for analysis (recommended to be checked).&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;NOTE: No personal information is sent to Linn as a result of this option being checked.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== Privacy ===&lt;br /&gt;
==== Send anonymous usage data to Linn ====&lt;br /&gt;
&lt;br /&gt;
Whether to allow Konfig to send anonymous usage data to Linn for analysis (recommended to be checked).&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;NOTE: No personal information is sent to Linn as a result of this option being checked.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== Network ===&lt;br /&gt;
&lt;br /&gt;
Which network to use to locate Linn DSs.&lt;br /&gt;
&lt;br /&gt;
= Troubleshooting =&lt;br /&gt;
=== Konfig cannot see any of my DS ===&lt;br /&gt;
&lt;br /&gt;
Check within Settings that the Network connection is correct.&amp;lt;br&amp;gt;&lt;br /&gt;
In older versions of Konfig you only had to select the network card, (wired, wireless etc). Now Konfig asks you for the Network IP range, this is to simplify the connection as this can use BOTH the wired and wireless connections if they are connected to the same Network.&amp;lt;br&amp;gt;&lt;br /&gt;
If your PC/MAC has changed Ethernet networks (for installation, Home-Work etc), the Konfig may be setup for a different address range and not see any DS products. So if your Konfig cannot see your Linn DS products, go into Settings and check that the correct Network address has been selected (click on the drop down box to see what is available)&lt;br /&gt;
&lt;br /&gt;
Some Anti-virus Suites also have additional Firewalls that will block a lot of communications. If Konfig used to work and now does not find any products then check if your Anti-Virus suite has recently had a major update. This update may require the Konfig for have &amp;quot;firewall exceptions&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
=== After the software update the Linn DS is not working correctly or losing settings ===&lt;br /&gt;
&lt;br /&gt;
This can be due to a configuration conflict with the last software version:&lt;br /&gt;
* From Konfig, under the Advanced page, select your DS&lt;br /&gt;
* Select the &#039;&#039;&#039;RESTORE&#039;&#039;&#039; button, this will reset the Linn DS back its factory defaults&lt;br /&gt;
* Reconfigure your DS to your preferred setting. (As this is configuration is performed in the same software version this should remove any previous conflicts).&lt;br /&gt;
&lt;br /&gt;
=== Where is the manual for the previous releases of Konfig? ===&lt;br /&gt;
&lt;br /&gt;
The old Konfig manual has moved to [[Konfig_Manual_Old| here]]&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
=== Konfig just doesn&#039;t run on my Mac. The icon bounces in the dock and then goes away.===&lt;br /&gt;
* Open Finder&lt;br /&gt;
* From the Menu bar at the top select &#039;Go&#039; the &#039;Go to Folder&#039;&lt;br /&gt;
* Type in ~/Library/Konfig and click Go&lt;br /&gt;
* Select &#039;Options.xml&#039; file and delete&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== What if I have problems updating? ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Don&#039;t panic, the update process is safe, so you should always be able to recover your device&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* Restart Konfig. If your device reports the expected version, the update was successful and you are done&lt;br /&gt;
* If your device does not report the expected version, retry the update process (if you were updating over wireless, try updating over a wired connection)&lt;br /&gt;
* If this fails, power cycle your device and try again&lt;br /&gt;
* If this fails, download the latest version of software from [http://products.linn.co.uk/VersionInfo/Downloads/Releases/ here]&lt;br /&gt;
* Save this zip file to a known location on your hard drive, preferably in C:\&lt;br /&gt;
* Open Linn Konfig&lt;br /&gt;
* Go to the ‘Advanced’ tab&lt;br /&gt;
* Press the fallback button on the DS&lt;br /&gt;
* The DS should appear in Konfig with a lightning symbol beside it&lt;br /&gt;
* Enter the full location of the .zip file that you saved in the text box for the DS (e.g. “C:\MajikDs_4.12.357.zip”)&lt;br /&gt;
* Select the ‘Device Recovery’ option below the text box&lt;br /&gt;
* Click on ‘Update’&lt;br /&gt;
* The unit should update successfully&lt;br /&gt;
* If the update fails then contact your retailer for further support&lt;br /&gt;
&#039;&#039;&#039;NOTE: If there is no text box to enter the file location, ensure that you have the latest version of Internet Explorer installed. If there is still no text box, ensure that the security settings for Local Intranet are set to medium-low.&lt;br /&gt;
&lt;br /&gt;
=== What if I want to revert to older versions of firmware? ===&lt;br /&gt;
&lt;br /&gt;
We only support the latest firmware release and do not recommend running old firmware on any Linn DS.&lt;br /&gt;
&lt;br /&gt;
We only archive released versions of firmware.&lt;br /&gt;
&lt;br /&gt;
* Put your device into fallback mode from the button on the back of the device&lt;br /&gt;
* Download and install the compatible version of Konfig from the release download site (i.e. Cara Konfig if you are reverting to Cara firmware, Davaar for Davaar, etc)&lt;br /&gt;
* Download the version of firmware (zip file) you wish to use from the release download site (only firmware for your device model will work)&lt;br /&gt;
* From Konfig, under the Advanced page, enter the downloaded firmware location for your Linn device&lt;br /&gt;
&lt;br /&gt;
Keep in mind, only compatible control points will work with your device (i.e. Cara with Cara, Davaar with Davaar, etc)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== What if I have problems updating my Exakt devices? ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Don&#039;t panic, the update process is safe, so you will always be able to recover your device&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* Normally your Exakt devices will update seemlessly as part of the standard DS/DSM update process.&lt;br /&gt;
*  Restart Konfig. If your Exakt device appears under Exakt Setup and there is no Update button, the update was successful and you are done.&lt;br /&gt;
* Restart Konfig. If your Exakt device appears under Exakt Setup and there IS an Update button, the update was unsuccessful, click Update to try again.&lt;br /&gt;
* If this fails, power cycle your Exakt device and the connected DS/DSM device and try again.&lt;br /&gt;
* If this fails, follow the device recovery process below:&lt;br /&gt;
* Put both your Exakt device and connected DS/DSM into fallback (from the buttons on the back of the devices).&lt;br /&gt;
* Find the connected DS/DSM in the Update tab and click Update.&lt;br /&gt;
* If you have an integrated Exakt speaker, this will fully update your Exakt device as well.&lt;br /&gt;
* If you have an Exakt tunebox, you will be prompted at the end of the update to enter your speaker serial number from the Exakt Setup tab to complete the update.&lt;br /&gt;
&lt;br /&gt;
If you have difficulty programming an Exakt speaker or Tunebox, but the Exakt DSM is OK (require Konfig 4.12.2 onwards)&lt;br /&gt;
&lt;br /&gt;
* Put the speaker or Tunebox into FALLBACK&lt;br /&gt;
:* Make sure the Exakt DSM is Out of Standby&lt;br /&gt;
:* Press the Fallback button on the Exakt Speaker/Exakt Tunboks&lt;br /&gt;
* In Konfig in the DS - &amp;quot;Exakt setup&amp;quot; tab, this speaker should now show up with a RESTORE button, press the RESTORE button and wait for this to complete. If this is a Exakt Tunebox then enter the serial number of the speaker then do the UPDATE button&lt;br /&gt;
* Complete&lt;br /&gt;
&lt;br /&gt;
=== Why does Konfig not show Space Optimisation for my DS? ===&lt;br /&gt;
&lt;br /&gt;
Space Optimisation for DS was introduced in Davaar 25.&lt;br /&gt;
&lt;br /&gt;
To enable Space Optimisation on your DS you will need to install Davaar 25 or later firmware on your DS. &lt;br /&gt;
&lt;br /&gt;
== Known Issues ==&lt;br /&gt;
If you start Konfig and only get a white screen or only shows toolbar with no &amp;quot;Show devices&amp;quot; button:&lt;br /&gt;
:1. Go into Internet Explorer - &#039;&#039;Tools&#039;&#039; - &#039;&#039;Internet options&#039;&#039;&lt;br /&gt;
:2. Select Security &lt;br /&gt;
::a) If &#039;&#039;&#039;&amp;quot;Internet&amp;quot;&#039;&#039;&#039; Security is High, reduce this to Medium High&lt;br /&gt;
::b) now select &#039;&#039;&#039;&amp;quot;Local Internet&amp;quot;&#039;&#039;&#039; icon&lt;br /&gt;
::c) If &#039;&#039;&#039;&amp;quot;Local Internet&amp;quot;&#039;&#039;&#039; Security is High, reduce this to Medium High&lt;br /&gt;
:3. OK out of this &amp;amp; restart Konfig&lt;br /&gt;
&lt;br /&gt;
If this does not cure the issue then&lt;br /&gt;
:1. Run Konfig&lt;br /&gt;
:2. Open Internet Explorer&lt;br /&gt;
:3.  Type in [http://localhost:5000 http://localhost:5000] into the IE address bar&lt;br /&gt;
::(If Songbox is running then type [http://localhost:5001 http://localhost:5001]&lt;br /&gt;
:4. What appears in the window?&lt;br /&gt;
:5. If Internet Explorer shown the Konfig windows OK then retry steps 3/4/5 using Chrome or another web browser.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;After the update some PC/MAC cannot find any Linn DS/DSM products:&lt;br /&gt;
Do the following procedure:&lt;br /&gt;
:1. If you are using Norton Anti-virus, make sure that the new Konfig is added an exception&lt;br /&gt;
:2. Restart your PC/MAC and retry Konfig 10 &lt;br /&gt;
::a) Press the &#039;&#039;&#039;SHOW DEVICES&#039;&#039;&#039; button&lt;br /&gt;
::b) If a number appears beside the Updates tab (top of Konfig screen,&lt;br /&gt;
:::i) Press the Updates tab and press &#039;&#039;&#039;UPDATE&#039;&#039;&#039; beside your Linn DS/DSM name &lt;br /&gt;
:::ii) Wait until he update is finished and Press the &#039;&#039;&#039;SHOW DEVICES&#039;&#039;&#039; button. Your DS should now appear.&lt;br /&gt;
If your Linn DS/DSM is not listed&lt;br /&gt;
:3. Press the &#039;&#039;&#039;ADVANCED&#039;&#039;&#039; tab and see if your Linn DS/DSM is listed here&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
;If neither of these two options work:Follow the  [http://docs.linn.co.uk/wiki/index.php/Troubleshooting#Konfig_diagnostics Konfig 10 diagnostics]&lt;br /&gt;
&lt;br /&gt;
;If doing a Advanced download Konfig reports &amp;quot;cannot find directory..&amp;quot;;&lt;br /&gt;
:Check that &lt;br /&gt;
:1. You can typed the correct file location and file name in to the download field&lt;br /&gt;
:2. Konfig 4.10.5-4.11.2 needs internet access before doing the file update. Make sure that you have an Internet link BEFORE opening Konfig&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;/div&gt;</summary>
		<author><name>Davidd</name></author>
	</entry>
	<entry>
		<id>https://docs.linn.co.uk/wiki/index.php?title=Konfig_Manual&amp;diff=11254</id>
		<title>Konfig Manual</title>
		<link rel="alternate" type="text/html" href="https://docs.linn.co.uk/wiki/index.php?title=Konfig_Manual&amp;diff=11254"/>
		<updated>2015-03-17T11:23:49Z</updated>

		<summary type="html">&lt;p&gt;Davidd: /* Exakt Optimisation */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Introduction =&lt;br /&gt;
&lt;br /&gt;
Konfig provides advanced configuration of a Linn DS, notification and updating of a Linn DS to the latest firmware, restoring Linn DS settings back to factory defaults and manual updating of a Linn DS firmware.&lt;br /&gt;
&lt;br /&gt;
Konfig can also be run from a web-browser with all functions except the software update. Get the IP address of the Linn DS/DSM from the front panel using either the:&amp;lt;br&amp;gt;&lt;br /&gt;
:[http://docs.linn.co.uk/wiki/index.php/REM_020 REM 020 Remote control] by pressing and holding the # button &amp;lt;br&amp;gt;or with the &amp;lt;br&amp;gt;&lt;br /&gt;
:[http://docs.linn.co.uk/wiki/index.php/DS_%26_REM_019 REM 019 Remote control] by pressing DVD then the INFO buttons.&lt;br /&gt;
&lt;br /&gt;
When you are in DS web page select Control, this will give you the same options (except Software update) as below&lt;br /&gt;
&lt;br /&gt;
= Installation =&lt;br /&gt;
== System Requirements ==&lt;br /&gt;
=== Windows ===&lt;br /&gt;
* Windows Vista or later version of Windows&lt;br /&gt;
* IE9 or later&lt;br /&gt;
* 32 or 64-bit hardware&lt;br /&gt;
* Internet connection when using Exakt Systems&lt;br /&gt;
&lt;br /&gt;
=== Mac ===&lt;br /&gt;
* Mac OS X Snow Leopard 10.6.8 or later&lt;br /&gt;
* 32 or 64-bit hardware&lt;br /&gt;
* Internet connection when using Exakt Systems&lt;br /&gt;
&lt;br /&gt;
== Installing ==&lt;br /&gt;
=== Windows ===&lt;br /&gt;
* Download the installer from the [http://www.linn.co.uk/support/software#konfig download] page&lt;br /&gt;
* Double click the downloaded .exe file&lt;br /&gt;
* Follow the on screen instructions in the installer program&lt;br /&gt;
&lt;br /&gt;
=== Mac ===&lt;br /&gt;
* Download the .pkg file from the [http://www.linn.co.uk/support/software#konfig download] page&lt;br /&gt;
* Double click the downloaded .pkg file&lt;br /&gt;
* Follow the on screen instructions in the installer program&lt;br /&gt;
&lt;br /&gt;
== Uninstalling ==&lt;br /&gt;
=== Windows ===&lt;br /&gt;
* Open the Windows Control Panel and double click &amp;quot;Programs and Features&amp;quot;&lt;br /&gt;
* Select &amp;quot;Konfig&amp;quot; in the list of programs and click the &amp;quot;Uninstall&amp;quot; button&lt;br /&gt;
* Follow the on screen instructions in the uninstall window&lt;br /&gt;
&lt;br /&gt;
=== Mac ===&lt;br /&gt;
* Using Finder drag the Konfig icon from Applications/Konfig to the waste bin&lt;br /&gt;
&lt;br /&gt;
== Updating ==&lt;br /&gt;
&lt;br /&gt;
Konfig for Mac and Windows will automatically check for new software updates. Checking for available updates can also be performed manually as described below. Alternatively, Konfig can be updated by manually downloading the installation packages from the [http://www.linn.co.uk/support/software#konfig download] page and installing them using the method described in the [[#Installing| Installing]] section above.&lt;br /&gt;
&lt;br /&gt;
= Operation =&lt;br /&gt;
&lt;br /&gt;
Konfig has four main views, [[#Configuration| Configuration]], [[#Updates| Updates]], [[#Diagnostics| Diagnostics]], and [[#Advanced| Advanced]]&lt;br /&gt;
&lt;br /&gt;
[[File:Header.png|740px|Header]]&lt;br /&gt;
&lt;br /&gt;
== Configuration ==&lt;br /&gt;
&lt;br /&gt;
[[File:Configuration.png|740px|Configuration Page]]&lt;br /&gt;
&lt;br /&gt;
Click the &#039;&#039;&#039;Show Devices&#039;&#039;&#039; button to slide a list of available devices in from the left. Selecting a device from the list will show it&#039;s configuration page in the right hand pane.&lt;br /&gt;
&lt;br /&gt;
A Linn device&#039;s configuration page will only show in the right hand pane if the device is running firmware version Davaar 9 (4.9.4) or later. If your Linn device is running firmware version less that Davaar 9 (4.9.4), Konfig will provide a link to allow you to open the configuration page in your default browser.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- === DEVICES ===&lt;br /&gt;
[[Linn_DS-DSM_Konfig Devices|&amp;lt;big&amp;gt;Click here for Devices configuration page&amp;lt;/big&amp;gt;]] &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--=== DISPLAY ===&lt;br /&gt;
[[Linn_DS-DSM_Konfig_Display|&amp;lt;big&amp;gt;Click here for Display configuration page&amp;lt;/big&amp;gt;]] &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Linn Preamplifier, Volume, Delay modes, Songcast, Net-Aux and HDMI settings ===&lt;br /&gt;
[[file:771px-DS_Name_10.jpg|300px|center]]&lt;br /&gt;
&lt;br /&gt;
== DS Volume control &amp;amp; Proxy RS232 control ==&lt;br /&gt;
There are two way to control the Volume on a Linn DS system:&lt;br /&gt;
&lt;br /&gt;
* &#039;&#039;&#039;Internal Volume&#039;&#039;&#039; control that will directly control the analogue audio level coming out of the Linn DS. This is good for directly connecting to a Power amplifier on your speakers.&lt;br /&gt;
[[file:635px-Internal_Vol_ctrl_10.jpg|400px|center]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
===Proxy RS232 control ===&lt;br /&gt;
* Or use an external preamplifier, this means that the Linn DS will always output Line-level audio.&lt;br /&gt;
:If you have a Linn Pre-amplifier this can be set to be controlled by the Kinsky control software. &lt;br /&gt;
&lt;br /&gt;
[[file:771px-DS_Name_10.jpg|300px|right]]&lt;br /&gt;
: &#039;&#039;1.&#039;&#039; Wire up the Linn DS and Linn preamplifiers/CD players &#039;&#039;&#039;RS232&#039;&#039;&#039; and audio connections as shown [http://docs.linn.co.uk/wiki/index.php/Systems Here] &#039;&#039;&#039;(Ignore this if you are using an Akurate Kontrol/1)&#039;&#039;&#039;&lt;br /&gt;
:&#039;&#039;2.&#039;&#039; Select the Linn DS and go into the Linn DS &#039;&#039;&#039;Device&#039;&#039; screen&lt;br /&gt;
:&#039;&#039;3.&#039;&#039; Take note of the text in &#039;&#039;&#039;Name&#039;&#039;&#039; field&lt;br /&gt;
:&#039;&#039;4.&#039;&#039; Go into the Linn DS &#039;&#039;&#039;RS232 connections&#039;&#039; screen&lt;br /&gt;
:&#039;&#039;5.&#039;&#039; Under Linn Preamplifier/CD player select the Linn product and Linn DS com port it is wired to.&lt;br /&gt;
:&#039;&#039;6.&#039;&#039; Press the Circle arrow to Reboot the Linn DS&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[file:824px-DS_Ktrl_Name_10.jpg|300px|right|thumb|DS Name in Kontrol - click to enlarge]]&lt;br /&gt;
:&#039;&#039;7.&#039;&#039; Click on &amp;quot;Show Devices&amp;quot; and&lt;br /&gt;
:&#039;&#039;8.&#039;&#039; Select the Linn Kontrol (preamplifier) and go into the Linn Kontrol &#039;&#039;&#039;Sources&#039;&#039;&#039; screen &lt;br /&gt;
:&#039;&#039;9.&#039;&#039; Select the Input that the Linn DS is connected to and enter the &#039;&#039;&#039;Name&#039;&#039;&#039; of the Linn DS that was take from the Linn DS - Devices screen Name field (taken in point 3)&lt;br /&gt;
:&#039;&#039;10.&#039;&#039; If a Linn CD player was also enabled enter the &#039;&#039;&#039;Name&#039;&#039;&#039; of the Linn CD device that was take from the Linn CD player - Devices screen&lt;br /&gt;
&lt;br /&gt;
===Ethernet controlled Linn Pre-Amplifier (Akurate Kontrol/1)===&lt;br /&gt;
:&#039;&#039;1.&#039;&#039; Select the Linn DS and go into the Linn DS &#039;&#039;&#039;Device&#039;&#039; screen&lt;br /&gt;
:&#039;&#039;2.&#039;&#039; Take note of the text in &#039;&#039;&#039;Name&#039;&#039;&#039; and the &#039;&#039;&#039;Room&#039;&#039;&#039; fields&lt;br /&gt;
:&#039;&#039;3.&#039;&#039; Click on &amp;quot;Show Devices&amp;quot; and&lt;br /&gt;
:&#039;&#039;4.&#039;&#039; Select the Linn Kontrol (preamplifier) and go into the Linn Kontrol &#039;&#039;&#039;Sources&#039;&#039;&#039; screen &lt;br /&gt;
:&#039;&#039;5.&#039;&#039; Change the Akurate Kontrol &#039;&#039;&#039;Device - Room&#039;&#039;&#039; name matches the Linn DS Room field taken in point 2.&lt;br /&gt;
:&#039;&#039;6.&#039;&#039; Select the Input that the Linn DS is connected to and enter the &#039;&#039;&#039;Name&#039;&#039;&#039; of the Linn DS that was take from the Linn DS Name field taken in point 2.&lt;br /&gt;
&lt;br /&gt;
I would suggest a &amp;quot;cut and paste&amp;quot; of the Room field and DS name field as this is case-senative (&amp;quot;lounge&amp;quot; is not the same as &amp;quot;Lounge&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
==Sources==&lt;br /&gt;
&lt;br /&gt;
===Name===&lt;br /&gt;
This is the source name that will appear in the DS user control software (Kinksy, Kazoo etc)&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Visible===&lt;br /&gt;
This allows you to hide sources. &lt;br /&gt;
If you set Visible-NO, then this input is hidden from selection in the Front panel and the user control software selection list.&amp;lt;br&amp;gt;&lt;br /&gt;
This does not mean that you have disabled the input, it only means that you cannot see it.&lt;br /&gt;
&lt;br /&gt;
===Delay Mode===&lt;br /&gt;
[[file:584px-DSM_delays.jpg|400px|right|thumb|Source delays - click to enlarge]]&lt;br /&gt;
&lt;br /&gt;
There are 3 different delays modes with the Linn DSI/DSM/Exakt for external sources (Analogue, Toslink, SPDIF &amp;amp; HDMI)&lt;br /&gt;
:&#039;&#039;&#039;Direct&#039;&#039;&#039; - This will feed the audio in real-time to the local Linn DSI/DSM, but the audio fed to the other Linn DS products will be delayed by 150mS. If this is setup and the other Linn DS products are fairly close, the music will sound like an echo&amp;lt;br&amp;gt;&lt;br /&gt;
:&#039;&#039;&#039;Fixed&#039;&#039;&#039; - This will delay the audio to ALL Linn DS/DSI/DSM products (including Exakt products) to keep the audio in perfect sync. This common delay is 150mS&amp;lt;br&amp;gt;&lt;br /&gt;
:&#039;&#039;&#039;Variable&#039;&#039;&#039; - This is a lipsync delay from 20ms-1999ms on this local DS. However the Songcast listening rooms will ONLY be in perfect sync for Lip-sync delays of =&amp;gt;150mS. &lt;br /&gt;
:If the lip-sync is less than 150ms, the listening rooms will always have a 150mS from original source, this means that the audio will be out of sync by 150ms minus the lip sync value. (eg Lipsync delay 90mS, then the delay from the sender DS audio to the listening room DS is 60mS)&lt;br /&gt;
:Lipsync delay time is variable from from 20mS-2S either from the Konfig app or the IR handset.&amp;lt;br&amp;gt;&lt;br /&gt;
For operation detail check [[DSM Audio Latencies Explained]]&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Input level, Unity Gain, Volume offset===&lt;br /&gt;
[[file:808px-Sources-setup.jpg|404px|right|thumb|Source settings - click to enlarge]]&lt;br /&gt;
:&#039;&#039;&#039;Input level (Vrms)&#039;&#039;&#039; - This is to allow you to change that input profile for the specific sources. This may be due to input adapters,  such as RCA-XLR, XLR-RCA etc, being used giving different output levels.&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Transformer&#039;&#039;&#039; - This is only on some of the Linn DSM&#039;s and enables the input to electrically isolated via an audio transformer on this input. This should &#039;&#039;&#039;NOT&#039;&#039;&#039; be enabled if you are connecting to another product with an audio transformer on it output, such as a &#039;&#039;&#039;URIKA&#039;&#039;&#039; or &#039;&#039;&#039;Klimax DS/1&#039;&#039;&#039;. &lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Unity Gain&#039;&#039;&#039; -This will turn off the DSM volume control whenever that input/source is selected. This is a pass-through state&lt;br /&gt;
&lt;br /&gt;
:&#039;&#039;&#039;Volume Offset&#039;&#039;&#039; - this is an trim adjustment. Some audio sources have a higher or lower output than normal.  This trim/offset will allow you to you to switch between source and keep the same DSM volume.&lt;br /&gt;
&lt;br /&gt;
==Songcast / Net Aux inputs==&lt;br /&gt;
[[file:669px-Net_Aux_10.jpg|300px|right|thumb|Sources - click to enlarge]]&lt;br /&gt;
* To show the Linn DS sources you need to make these visible. This allows you to hide source that you are not going to use, such as UpnpAV that is only used with some media controllers.&lt;br /&gt;
* &#039;&#039;&#039;Songcast&#039;&#039;&#039; listen to Music playing on your [http://oss.linn.co.uk/trac/wiki/SongcastWindowsDavaarManual#KnownIssues PC SONGCAST] software or listen to another  DS, &lt;br /&gt;
** &#039;&#039;&#039;Visible&#039;&#039;&#039;&lt;br /&gt;
*** Set Visible to &#039;&#039;&#039;NO&#039;&#039;&#039; will hide this on the inputs listing within the control software Kinsky.&lt;br /&gt;
*** Set Visible to &#039;&#039;&#039;YES&#039;&#039;&#039; will make this a visible source in Kinsky&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
* &#039;&#039;&#039;Net-Aux&#039;&#039;&#039; To have 3rd party Media streamers to play on your Linn DS&lt;br /&gt;
** &#039;&#039;&#039;Visible&#039;&#039;&#039;&lt;br /&gt;
*** Set Visible to &#039;&#039;&#039;NO&#039;&#039;&#039; will hide this on the inputs listing within the control software Kinsky.&lt;br /&gt;
*** Set Visible to &#039;&#039;&#039;YES&#039;&#039;&#039; will make this a visible source in Kinsky&lt;br /&gt;
** &#039;&#039;&#039;Auto Select&#039;&#039;&#039;&lt;br /&gt;
*** Set Auto Select to &#039;&#039;&#039;ON&#039;&#039;&#039; will get have the Linn DS to automatically switch to the Net-Aux input on receipt of a third party media stream.&lt;br /&gt;
*** Set Auto Select to &#039;&#039;&#039;OFF&#039;&#039;&#039; if you do &#039;&#039;&#039;NOT&#039;&#039;&#039; want the Linn DS to automatically switch to the Net-Aux input on receipt of a third party media stream&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== HDMI ==&lt;br /&gt;
[[file:764px-HDMI_Konfig_10.jpg|400px|right|thumb| HDMI - click to enlarge]]&lt;br /&gt;
* The HDMI connection can be shutdown whilst the product is in Sleep mode&lt;br /&gt;
* Usage of the Audio mode etc are explained [http://docs.linn.co.uk/wiki/index.php/HDMI_Setup#Audio_Mode  here]&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Songcast Sender ==&lt;br /&gt;
&lt;br /&gt;
[[File:809px-Songcast_sender.jpg‎| 400px | centre]]&lt;br /&gt;
&lt;br /&gt;
[[Songcast_Sender|&amp;lt;big&amp;gt;Click here for Songcast Sender page&amp;lt;/big&amp;gt;]] &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Tidal ==&lt;br /&gt;
[[file:795px-Konfig-Tidal.jpg‎ |298px | centre]]&lt;br /&gt;
&lt;br /&gt;
This allows you to control the quality of the next Tidal radio stream tracks.&lt;br /&gt;
This tell tell Tidal that the music stream will now be in the Low, High or top level - FLAC quality audio. That is, the next Tidal track will be played in the newly set quality of audio.&lt;br /&gt;
&lt;br /&gt;
The change in Tidal audio quality will also control the amount of broadband capacity you are using. &lt;br /&gt;
* &amp;quot;Low (AAC 96kbps)&amp;quot; will use the least amount of broadband&lt;br /&gt;
* &amp;quot;High (AAC 320kbps)&amp;quot; will use a resonable amount of broadband&lt;br /&gt;
* &amp;quot;FLAC (lossless)&amp;quot; will use the most amount of broadband.&lt;br /&gt;
&lt;br /&gt;
== Space Optimisation and Space Optimisation+ ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;An Internet connection is required when using Exakt Systems&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
If you have selected an Exakt compatible device, you will see two new configuration tabs.&lt;br /&gt;
&lt;br /&gt;
[[File:KonfigExaktTabs.png|740px|Exakt Tabs]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Exakt&#039;&#039;&#039; allows you to assign an audio channel (i.e. Left or Right) to an Exakt speaker.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Space Optimisation+&#039;&#039;&#039; provides a listener focused way of applying room optimisation.&lt;br /&gt;
&lt;br /&gt;
For help with this, please see the [[Exakt Optimsation]] article.&lt;br /&gt;
&lt;br /&gt;
== Updates ==&lt;br /&gt;
&lt;br /&gt;
[[File:Updates.png|740px|Updates Page]]&lt;br /&gt;
&lt;br /&gt;
The Updates tab indicates the number of Linn devices that currently have a newer software version available, as shown in the screenshot above.&lt;br /&gt;
&lt;br /&gt;
Each device that has an update available will be in the list of updatable devices. Each device has information about the update version available as well as a link to the release notes.&lt;br /&gt;
&lt;br /&gt;
To update a device click the &#039;Update&#039; button. If you have more than one devices to update you can click the &#039;Update All&#039; button to update all the devices at the same time.&lt;br /&gt;
&lt;br /&gt;
If you updated a device to beta software and then decide you want to go back to the latest stable release you just need to un-click the [[#Participate_in_beta_program_2| Participate in beta program]] option, return to the Updates page and update the desired device.&lt;br /&gt;
&lt;br /&gt;
== Diagnostics ==&lt;br /&gt;
&lt;br /&gt;
[[File:Diagnostics.png|740px|Diagnostics Page]]&lt;br /&gt;
&lt;br /&gt;
The Diagnostics tab indicates the number of Linn devices that currently have crash data available to send to Linn, as shown in the screenshot above.&lt;br /&gt;
&lt;br /&gt;
To send the crash data from a device to Linn click the &#039;Send&#039; button. If you have more than one device with crash data you can click the &#039;Send All&#039; button.&lt;br /&gt;
&lt;br /&gt;
If you do not wish to send the crash data for a device you can click the &#039;Ignore&#039; button and you will not be notified about crash data until the device crashes again. If you want to ignore crash data from all the listed devices you can click the &#039;Ignore All&#039; button.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;NOTE: No personal information is sent to Linn as a result of sending crash data to Linn.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== Advanced ==&lt;br /&gt;
&lt;br /&gt;
[[File:Advanced.png|740px|Advanced Page]]&lt;br /&gt;
&lt;br /&gt;
The Advanced page allows a user to restore a Linn device back to the original factory settings. It also allows a user to manually updating a Linn device&#039;s firmware to a locally stored firmware bundle.&lt;br /&gt;
&lt;br /&gt;
=== Restore Factory Settings ===&lt;br /&gt;
&lt;br /&gt;
Click the &#039;Restore&#039; button associated with the desired Linn device to start the process of restoring the Linn device to its factory default settings.&lt;br /&gt;
&lt;br /&gt;
=== Updating Linn Device Firmware ===&lt;br /&gt;
&lt;br /&gt;
First download the desired firmware from [http://products.linn.co.uk/VersionInfo/Downloads/Releases/ here].&lt;br /&gt;
&lt;br /&gt;
[[File:992px-Advanced-update.jpg|740px|Advanced Page]]&lt;br /&gt;
&lt;br /&gt;
Next enter the firmware&#039;s downloaded location into the text field associated with the desired Linn device, e.g. On Windows, C:\Users\&amp;lt;username&amp;gt;\Desktop\KlimaxDsm_4.7.5.zip and on Mac, /Users/&amp;lt;username&amp;gt;/Desktop/S08500116.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;NOTE: On Mac the downloaded firmware is automatically unzipped by the OS and so the location is a directory unlike on Windows where the location is the downloaded zip file.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
After entering the firmware&#039;s location click the &#039;Update&#039; button to start the process of updating the Linn device&#039;s firmware.&lt;br /&gt;
&lt;br /&gt;
=== Device Recovery ===&lt;br /&gt;
&lt;br /&gt;
This option should only be used if your are having problems updating your Linn DS through the standard methods, i.e. automatically through the Update page or manually as described in the previous section.&lt;br /&gt;
&lt;br /&gt;
After a &#039;Device Recovery&#039; update has been performed any Linn device settings changed by the user will be set back to factory defaults.&lt;br /&gt;
&lt;br /&gt;
== Settings ==&lt;br /&gt;
&lt;br /&gt;
[[File:Settings.png|740px|Settings Page]]&lt;br /&gt;
&lt;br /&gt;
=== Application Updates ===&lt;br /&gt;
==== Automatic update checks ====&lt;br /&gt;
Whether Konfig automatically checks for newer versions of Konfig.&lt;br /&gt;
==== Participate in beta program ====&lt;br /&gt;
Whether Konfig automatically checks for beta releases of Konfig.&lt;br /&gt;
==== Check For Updates ====&lt;br /&gt;
Force Konfig to check for newer versions of Konfig, taking into account whether &#039;Participate in beta program&#039; is checked.&lt;br /&gt;
&lt;br /&gt;
=== Device Updates ===&lt;br /&gt;
==== Participate in beta program ====&lt;br /&gt;
Whether Konfig automatically checks for beta releases of firmware for available Linn devices.&lt;br /&gt;
&lt;br /&gt;
=== Diagnostics ===&lt;br /&gt;
==== Automatically send DS crash information to Linn ====&lt;br /&gt;
Whether to automatically send Linn device crash information to Linn for analysis (recommended to be checked).&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;NOTE: No personal information is sent to Linn as a result of this option being checked.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== Privacy ===&lt;br /&gt;
==== Send anonymous usage data to Linn ====&lt;br /&gt;
&lt;br /&gt;
Whether to allow Konfig to send anonymous usage data to Linn for analysis (recommended to be checked).&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;NOTE: No personal information is sent to Linn as a result of this option being checked.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
=== Network ===&lt;br /&gt;
&lt;br /&gt;
Which network to use to locate Linn DSs.&lt;br /&gt;
&lt;br /&gt;
= Troubleshooting =&lt;br /&gt;
=== Konfig cannot see any of my DS ===&lt;br /&gt;
&lt;br /&gt;
Check within Settings that the Network connection is correct.&amp;lt;br&amp;gt;&lt;br /&gt;
In older versions of Konfig you only had to select the network card, (wired, wireless etc). Now Konfig asks you for the Network IP range, this is to simplify the connection as this can use BOTH the wired and wireless connections if they are connected to the same Network.&amp;lt;br&amp;gt;&lt;br /&gt;
If your PC/MAC has changed Ethernet networks (for installation, Home-Work etc), the Konfig may be setup for a different address range and not see any DS products. So if your Konfig cannot see your Linn DS products, go into Settings and check that the correct Network address has been selected (click on the drop down box to see what is available)&lt;br /&gt;
&lt;br /&gt;
Some Anti-virus Suites also have additional Firewalls that will block a lot of communications. If Konfig used to work and now does not find any products then check if your Anti-Virus suite has recently had a major update. This update may require the Konfig for have &amp;quot;firewall exceptions&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
=== After the software update the Linn DS is not working correctly or losing settings ===&lt;br /&gt;
&lt;br /&gt;
This can be due to a configuration conflict with the last software version:&lt;br /&gt;
* From Konfig, under the Advanced page, select your DS&lt;br /&gt;
* Select the &#039;&#039;&#039;RESTORE&#039;&#039;&#039; button, this will reset the Linn DS back its factory defaults&lt;br /&gt;
* Reconfigure your DS to your preferred setting. (As this is configuration is performed in the same software version this should remove any previous conflicts).&lt;br /&gt;
&lt;br /&gt;
=== Where is the manual for the previous releases of Konfig? ===&lt;br /&gt;
&lt;br /&gt;
The old Konfig manual has moved to [[Konfig_Manual_Old| here]]&lt;br /&gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
=== Konfig just doesn&#039;t run on my Mac. The icon bounces in the dock and then goes away.===&lt;br /&gt;
* Open Finder&lt;br /&gt;
* From the Menu bar at the top select &#039;Go&#039; the &#039;Go to Folder&#039;&lt;br /&gt;
* Type in ~/Library/Konfig and click Go&lt;br /&gt;
* Select &#039;Options.xml&#039; file and delete&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== What if I have problems updating? ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Don&#039;t panic, the update process is safe, so you should always be able to recover your device&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* Restart Konfig. If your device reports the expected version, the update was successful and you are done&lt;br /&gt;
* If your device does not report the expected version, retry the update process (if you were updating over wireless, try updating over a wired connection)&lt;br /&gt;
* If this fails, power cycle your device and try again&lt;br /&gt;
* If this fails, download the latest version of software from [http://products.linn.co.uk/VersionInfo/Downloads/Releases/ here]&lt;br /&gt;
* Save this zip file to a known location on your hard drive, preferably in C:\&lt;br /&gt;
* Open Linn Konfig&lt;br /&gt;
* Go to the ‘Advanced’ tab&lt;br /&gt;
* Press the fallback button on the DS&lt;br /&gt;
* The DS should appear in Konfig with a lightning symbol beside it&lt;br /&gt;
* Enter the full location of the .zip file that you saved in the text box for the DS (e.g. “C:\MajikDs_4.12.357.zip”)&lt;br /&gt;
* Select the ‘Device Recovery’ option below the text box&lt;br /&gt;
* Click on ‘Update’&lt;br /&gt;
* The unit should update successfully&lt;br /&gt;
* If the update fails then contact your retailer for further support&lt;br /&gt;
&#039;&#039;&#039;NOTE: If there is no text box to enter the file location, ensure that you have the latest version of Internet Explorer installed. If there is still no text box, ensure that the security settings for Local Intranet are set to medium-low.&lt;br /&gt;
&lt;br /&gt;
=== What if I want to revert to older versions of firmware? ===&lt;br /&gt;
&lt;br /&gt;
We only support the latest firmware release and do not recommend running old firmware on any Linn DS.&lt;br /&gt;
&lt;br /&gt;
We only archive released versions of firmware.&lt;br /&gt;
&lt;br /&gt;
* Put your device into fallback mode from the button on the back of the device&lt;br /&gt;
* Download and install the compatible version of Konfig from the release download site (i.e. Cara Konfig if you are reverting to Cara firmware, Davaar for Davaar, etc)&lt;br /&gt;
* Download the version of firmware (zip file) you wish to use from the release download site (only firmware for your device model will work)&lt;br /&gt;
* From Konfig, under the Advanced page, enter the downloaded firmware location for your Linn device&lt;br /&gt;
&lt;br /&gt;
Keep in mind, only compatible control points will work with your device (i.e. Cara with Cara, Davaar with Davaar, etc)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== What if I have problems updating my Exakt devices? ===&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Don&#039;t panic, the update process is safe, so you will always be able to recover your device&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
* Normally your Exakt devices will update seemlessly as part of the standard DS/DSM update process.&lt;br /&gt;
*  Restart Konfig. If your Exakt device appears under Exakt Setup and there is no Update button, the update was successful and you are done.&lt;br /&gt;
* Restart Konfig. If your Exakt device appears under Exakt Setup and there IS an Update button, the update was unsuccessful, click Update to try again.&lt;br /&gt;
* If this fails, power cycle your Exakt device and the connected DS/DSM device and try again.&lt;br /&gt;
* If this fails, follow the device recovery process below:&lt;br /&gt;
* Put both your Exakt device and connected DS/DSM into fallback (from the buttons on the back of the devices).&lt;br /&gt;
* Find the connected DS/DSM in the Update tab and click Update.&lt;br /&gt;
* If you have an integrated Exakt speaker, this will fully update your Exakt device as well.&lt;br /&gt;
* If you have an Exakt tunebox, you will be prompted at the end of the update to enter your speaker serial number from the Exakt Setup tab to complete the update.&lt;br /&gt;
&lt;br /&gt;
If you have difficulty programming an Exakt speaker or Tunebox, but the Exakt DSM is OK (require Konfig 4.12.2 onwards)&lt;br /&gt;
&lt;br /&gt;
* Put the speaker or Tunebox into FALLBACK&lt;br /&gt;
:* Make sure the Exakt DSM is Out of Standby&lt;br /&gt;
:* Press the Fallback button on the Exakt Speaker/Exakt Tunboks&lt;br /&gt;
* In Konfig in the DS - &amp;quot;Exakt setup&amp;quot; tab, this speaker should now show up with a RESTORE button, press the RESTORE button and wait for this to complete. If this is a Exakt Tunebox then enter the serial number of the speaker then do the UPDATE button&lt;br /&gt;
* Complete&lt;br /&gt;
&lt;br /&gt;
== Known Issues ==&lt;br /&gt;
If you start Konfig and only get a white screen or only shows toolbar with no &amp;quot;Show devices&amp;quot; button:&lt;br /&gt;
:1. Go into Internet Explorer - &#039;&#039;Tools&#039;&#039; - &#039;&#039;Internet options&#039;&#039;&lt;br /&gt;
:2. Select Security &lt;br /&gt;
::a) If &#039;&#039;&#039;&amp;quot;Internet&amp;quot;&#039;&#039;&#039; Security is High, reduce this to Medium High&lt;br /&gt;
::b) now select &#039;&#039;&#039;&amp;quot;Local Internet&amp;quot;&#039;&#039;&#039; icon&lt;br /&gt;
::c) If &#039;&#039;&#039;&amp;quot;Local Internet&amp;quot;&#039;&#039;&#039; Security is High, reduce this to Medium High&lt;br /&gt;
:3. OK out of this &amp;amp; restart Konfig&lt;br /&gt;
&lt;br /&gt;
If this does not cure the issue then&lt;br /&gt;
:1. Run Konfig&lt;br /&gt;
:2. Open Internet Explorer&lt;br /&gt;
:3.  Type in [http://localhost:5000 http://localhost:5000] into the IE address bar&lt;br /&gt;
::(If Songbox is running then type [http://localhost:5001 http://localhost:5001]&lt;br /&gt;
:4. What appears in the window?&lt;br /&gt;
:5. If Internet Explorer shown the Konfig windows OK then retry steps 3/4/5 using Chrome or another web browser.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
;After the update some PC/MAC cannot find any Linn DS/DSM products:&lt;br /&gt;
Do the following procedure:&lt;br /&gt;
:1. If you are using Norton Anti-virus, make sure that the new Konfig is added an exception&lt;br /&gt;
:2. Restart your PC/MAC and retry Konfig 10 &lt;br /&gt;
::a) Press the &#039;&#039;&#039;SHOW DEVICES&#039;&#039;&#039; button&lt;br /&gt;
::b) If a number appears beside the Updates tab (top of Konfig screen,&lt;br /&gt;
:::i) Press the Updates tab and press &#039;&#039;&#039;UPDATE&#039;&#039;&#039; beside your Linn DS/DSM name &lt;br /&gt;
:::ii) Wait until he update is finished and Press the &#039;&#039;&#039;SHOW DEVICES&#039;&#039;&#039; button. Your DS should now appear.&lt;br /&gt;
If your Linn DS/DSM is not listed&lt;br /&gt;
:3. Press the &#039;&#039;&#039;ADVANCED&#039;&#039;&#039; tab and see if your Linn DS/DSM is listed here&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
;If neither of these two options work:Follow the  [http://docs.linn.co.uk/wiki/index.php/Troubleshooting#Konfig_diagnostics Konfig 10 diagnostics]&lt;br /&gt;
&lt;br /&gt;
;If doing a Advanced download Konfig reports &amp;quot;cannot find directory..&amp;quot;;&lt;br /&gt;
:Check that &lt;br /&gt;
:1. You can typed the correct file location and file name in to the download field&lt;br /&gt;
:2. Konfig 4.10.5-4.11.2 needs internet access before doing the file update. Make sure that you have an Internet link BEFORE opening Konfig&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;/div&gt;</summary>
		<author><name>Davidd</name></author>
	</entry>
	<entry>
		<id>https://docs.linn.co.uk/wiki/index.php?title=Developer:Media_Server_Extensions&amp;diff=11253</id>
		<title>Developer:Media Server Extensions</title>
		<link rel="alternate" type="text/html" href="https://docs.linn.co.uk/wiki/index.php?title=Developer:Media_Server_Extensions&amp;diff=11253"/>
		<updated>2015-03-17T10:51:22Z</updated>

		<summary type="html">&lt;p&gt;Davidd: /* Introduction */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Introduction =&lt;br /&gt;
&lt;br /&gt;
The ContentDirectory service has various limitations which become apparent when implementing control points on different hardware platforms. This document aims to outline some ideas that address the various shortcomings of the ContentDirectory specification.&lt;br /&gt;
&lt;br /&gt;
== Container map ==&lt;br /&gt;
&lt;br /&gt;
The current ContentDirectory specification makes it tricky for a control point to display the returned contents in an appropriate, aesthetically pleasing, manner for the content being viewed. This is because the ContentDirectory specification does not allow for a control point to know in advanced what content to expect when browsing through any particular hierarchy.&lt;br /&gt;
&lt;br /&gt;
An example of this might be, at a particular point in the browse hierarchy the ContentDirectory will return a list of albums which in turn will contain a list of tracks. A UI might wish to represent this list of albums as a grid and the album&#039;s tracks as a header and a list of the tracks. Currently it is not possible for the UI to know when it gets to a point in a hierarchy where the hierarchy represents a list of albums followed by a list of tracks.&lt;br /&gt;
&lt;br /&gt;
The container map extension allows a media server to express its container hierarchy in advance of the control point navigating it. This is done using an OpenHome vendor extension to the device XML.&lt;br /&gt;
&lt;br /&gt;
Three types of mapped container are defined: browse, link, and search.&lt;br /&gt;
&lt;br /&gt;
The browse map defines named top level containers that represent significant starting points for browsing that can meaningfully be presented in top level tabs of a control point UI. The browse map is expressed within the X_MAP_BROWSE element of X_MAP.&lt;br /&gt;
&lt;br /&gt;
The link map defines containers that can be meaningfully linked to from track or album details. For instance a track will typically have an artist defined. If an entry for &amp;quot;artist&amp;quot; is defined in the link map then it will be possible for the user of a control point to quickly access this artist-related container by clicking on the track&#039;s artist text. Similar links might be offered for &amp;quot;genre&amp;quot;, &amp;quot;composer&amp;quot;, &amp;quot;conductor&amp;quot;, etc. The link map is expressed within the X_MAP_LINK element of X_MAP.&lt;br /&gt;
&lt;br /&gt;
The search map defines the different kinds of search containers and the type of results that they produce. The search map is expressed within the X_MAP_SEARCH element of X_MAP.&lt;br /&gt;
&lt;br /&gt;
=== Browse map ===&lt;br /&gt;
&lt;br /&gt;
The X_MAP_BROWSE element must contain 1 or more X_MAP_BROWSE_ENTRY elements.&lt;br /&gt;
&lt;br /&gt;
The X_MAP_BROWSE_ENTRY has three child elements.&lt;br /&gt;
&lt;br /&gt;
X_MAP_BROWSE_ENTRY_NAME is a string that can be used by a control point to label a tab containing this browse hierarchy.&lt;br /&gt;
&lt;br /&gt;
X_MAP_BROWSE_ENTRY_ID is the UPnP container id that contains the root of this browse hierarchy. This id is then submitted to the ContentDirectory service using the Browse action as usual. The returned contents are navigated using subsequent Browse request as usual. The difference is that the control point knows in advance what kind of results to expect at each level.&lt;br /&gt;
&lt;br /&gt;
X_MAP_BROWSE_ENTRY_TYPE is a space separated list of strings that maps out the kind of containers that are to be found at each level of this browse hierarchy. For instance, &amp;quot;artist album&amp;quot; represents a browse hierarchy giving a container containing only artist containers, each of which contains only album containers, each of which contains only tracks.&lt;br /&gt;
&lt;br /&gt;
There should be an X_MAP_BROWSE_ENTRY for each root browse hierarchy defined by the media server.&lt;br /&gt;
&lt;br /&gt;
For example:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;X_MAP_BROWSE_ENTRY&amp;gt;&lt;br /&gt;
     &amp;lt;X_MAP_BROWSE_ENTRY_NAME&amp;gt;Genre&amp;lt;/X_MAP_BROWSE_ENTRY_NAME&amp;gt;&lt;br /&gt;
     &amp;lt;X_MAP_BROWSE_ENTRY_ID&amp;gt;db/browse/genre&amp;lt;/X_MAP_BROWSE_ENTRY_ID&amp;gt;&lt;br /&gt;
     &amp;lt;X_MAP_BROWSE_ENTRY_TYPE&amp;gt;genre artist album&amp;lt;/X_MAP_BROWSE_ENTRY_TYPE&amp;gt;&lt;br /&gt;
 &amp;lt;/X_MAP_BROWSE_ENTRY&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Link map ===&lt;br /&gt;
&lt;br /&gt;
The X_MAP_LINK element must contain 1 or more X_MAP_LINK_ENTRY elements.&lt;br /&gt;
&lt;br /&gt;
The X_MAP_LINK_ENTRY has three child elements.&lt;br /&gt;
&lt;br /&gt;
X_MAP_LINK_ENTRY_TAG is a string that defines which type of metadata is the target for this link. e.g. &amp;quot;artist&amp;quot;, &amp;quot;genre&amp;quot;, &amp;quot;composer&amp;quot;, etc. See the type section below. &lt;br /&gt;
&lt;br /&gt;
X_MAP_LINK_ENTRY_ID_PREFIX is a string that is prefix for a UPnP container id. The link can be taken by browsing to the container whose id is the result of appending the associated metadata value to this prefix. For instance, if the prefix for an &amp;quot;artist&amp;quot; link is defined as db/link/artist/, and a track returned anywhere in the media server&#039;s library has &amp;quot;Pink Floyd&amp;quot; as its artist. Then the linked container will have an id of db/link/artist/Pink Floyd.&lt;br /&gt;
&lt;br /&gt;
X_MAP_LINK_ENTRY_TYPE represents the type of browse hierarchy returned when taking this type of link. See X_MAP_BROWSE_ENTRY_TYPE for details.&lt;br /&gt;
&lt;br /&gt;
There should be an X_MAP_LINK_ENTRY for each piece of metadata that the media server allows to be linked.&lt;br /&gt;
&lt;br /&gt;
For example:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;X_MAP_LINK_ENTRY&amp;gt;&lt;br /&gt;
     &amp;lt;X_MAP_LINK_ENTRY_TAG&amp;gt;artist&amp;lt;/X_MAP_LINK_ENTRY_TAG&amp;gt;&lt;br /&gt;
     &amp;lt;X_MAP_LINK_ENTRY_ID_PREFIX&amp;gt;db/link/artist/&amp;lt;/X_MAP_LINK_ENTRY_ID_PREFIX&amp;gt;&lt;br /&gt;
     &amp;lt;X_MAP_LINK_ENTRY_TYPE&amp;gt;album&amp;lt;/X_MAP_LINK_ENTRY_TYPE&amp;gt;&lt;br /&gt;
 &amp;lt;/X_MAP_LINK_ENTRY&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The example above defines a browse hierarchy that is created when linking from an artist name. The hierarchy created provides a list of linked artist albums which in turn provide a list of tracks.&lt;br /&gt;
&lt;br /&gt;
=== Search map ===&lt;br /&gt;
&lt;br /&gt;
The X_MAP_SEARCH element must contain 1 or more X_MAP_SEARCH_ENTRY elements.&lt;br /&gt;
&lt;br /&gt;
The X_MAP_SEARCH_ENTRY has three child elements.&lt;br /&gt;
&lt;br /&gt;
X_MAP_SEARCH_ENTRY_NAME  is a string that can be used by a control point to label a tab containing these search results.&lt;br /&gt;
&lt;br /&gt;
X_MAP_SEARCH_ENTRY_ID_PREFIX is a string that is a prefix for a UPnP container id. The search results can be found by browsing to the container whose id is the result of appending the search string to this prefix. For instance, if the prefix for an &amp;quot;album&amp;quot; search is defined as db/search/album/, and the search string is &amp;quot;blue&amp;quot;, then the search results container will have an id of db/search/album/blue.&lt;br /&gt;
&lt;br /&gt;
X_MAP_SEARCH_ENTRY_TYPE represents the type of browse hierarchy returned when taking this type of search. See X_MAP_BROWSE_ENTRY_TYPE for details.&lt;br /&gt;
&lt;br /&gt;
There should be an X_MAP_SEARCH_ENTRY for each type of search offered by the media server.&lt;br /&gt;
&lt;br /&gt;
For example:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;X_MAP_SEARCH_ENTRY&amp;gt;&lt;br /&gt;
     &amp;lt;X_MAP_SEARCH_ENTRY_NAME&amp;gt;Artist&amp;lt;/X_MAP_SEARCH_ENTRY_NAME&amp;gt;&lt;br /&gt;
     &amp;lt;X_MAP_SEARCH_ENTRY_ID_PREFIX&amp;gt;db/search/artist/&amp;lt;/X_MAP_SEARCH_ENTRY_ID_PREFIX&amp;gt;&lt;br /&gt;
     &amp;lt;X_MAP_SEARCH_ENTRY_TYPE&amp;gt;artist album&amp;lt;/X_MAP_SEARCH_ENTRY_TYPE&amp;gt;&lt;br /&gt;
 &amp;lt;/X_MAP_SEARCH_ENTRY&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The example above defines a browse hierarchy that is created when searching for an artist. The hierarchy created provides a list of artists, which in turn provide a list of albums, which in turn provide a list of tracks.&lt;br /&gt;
&lt;br /&gt;
=== Types ===&lt;br /&gt;
&lt;br /&gt;
The list of allowed types for X_BROWSE_ENTRY_TYPE, X_MAP_LINK_ENTRY_TAG, X_LINK_ENTRY_TYPE, and X_SEARCH_ENTRY_TYPE&lt;br /&gt;
&lt;br /&gt;
 genre&lt;br /&gt;
 artist&lt;br /&gt;
 composer&lt;br /&gt;
 conductor&lt;br /&gt;
 album&lt;br /&gt;
 year&lt;br /&gt;
 mixed&lt;br /&gt;
&lt;br /&gt;
mixed is a special value that represents a container that has mixed entries. It is not a valid type for the X_MAP_LINK_ENTRY_TAG element.&lt;br /&gt;
&lt;br /&gt;
=== Example device XML ===&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;root xmlns=&amp;quot;urn:schemas-upnp-org:device-1-0&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;specVersion&amp;gt;&lt;br /&gt;
        &amp;lt;major&amp;gt;1&amp;lt;/major&amp;gt;&lt;br /&gt;
        &amp;lt;minor&amp;gt;1&amp;lt;/minor&amp;gt;&lt;br /&gt;
    &amp;lt;/specVersion&amp;gt;&lt;br /&gt;
    &amp;lt;device&amp;gt;&lt;br /&gt;
        &amp;lt;deviceType&amp;gt;urn:schemas-upnp-org:device:MediaServer:1&amp;lt;/deviceType&amp;gt;&lt;br /&gt;
        &amp;lt;dlna:X_DLNADOC xmlns:dlna=&amp;quot;urn:schemas-dlna-org:device-1-0&amp;quot;&amp;gt;DMS-1.50&amp;lt;/dlna:X_DLNADOC&amp;gt;&lt;br /&gt;
        &amp;lt;dlna:X_DLNACAP xmlns:dlna=&amp;quot;urn:schemas-dlna-org:device-1-0&amp;quot;&amp;gt;av-upload,image-upload,audio-upload&amp;lt;/dlna:X_DLNACAP&amp;gt;&lt;br /&gt;
        &amp;lt;openhome:X_MAP xmlns:openhome=&amp;quot;http://www.openhome.org&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;X_MAP_BROWSE&amp;gt;&lt;br /&gt;
                &amp;lt;X_MAP_BROWSE_ENTRY&amp;gt;&lt;br /&gt;
                    &amp;lt;X_MAP_BROWSE_ENTRY_NAME&amp;gt;Albums&amp;lt;/X_MAP_BROWSE_ENTRY_NAME&amp;gt;&lt;br /&gt;
                    &amp;lt;X_MAP_BROWSE_ENTRY_ID&amp;gt;db/browse/albums&amp;lt;/X_MAP_BROWSE_ENTRY_ID&amp;gt;&lt;br /&gt;
                    &amp;lt;X_MAP_BROWSE_ENTRY_TYPE&amp;gt;album&amp;lt;/X_MAP_BROWSE_ENTRY_TYPE&amp;gt;&lt;br /&gt;
                &amp;lt;/X_MAP_BROWSE_ENTRY&amp;gt;&lt;br /&gt;
                &amp;lt;X_MAP_BROWSE_ENTRY&amp;gt;&lt;br /&gt;
                    &amp;lt;X_MAP_BROWSE_ENTRY_NAME&amp;gt;Artists&amp;lt;/X_MAP_BROWSE_ENTRY_NAME&amp;gt;&lt;br /&gt;
                    &amp;lt;X_MAP_BROWSE_ENTRY_ID&amp;gt;db/browse/artists&amp;lt;/X_MAP_BROWSE_ENTRY_ID&amp;gt;&lt;br /&gt;
                    &amp;lt;X_MAP_BROWSE_ENTRY_TYPE&amp;gt;artist album&amp;lt;/X_MAP_BROWSE_ENTRY_TYPE&amp;gt;&lt;br /&gt;
                &amp;lt;/X_MAP_BROWSE_ENTRY&amp;gt;&lt;br /&gt;
                &amp;lt;X_MAP_BROWSE_ENTRY&amp;gt;&lt;br /&gt;
                    &amp;lt;X_MAP_BROWSE_ENTRY_NAME&amp;gt;Folders&amp;lt;/X_MAP_BROWSE_ENTRY_NAME&amp;gt;&lt;br /&gt;
                    &amp;lt;X_MAP_BROWSE_ENTRY_ID&amp;gt;db/browse/folders&amp;lt;/X_MAP_BROWSE_ENTRY_ID&amp;gt;&lt;br /&gt;
                    &amp;lt;X_MAP_BROWSE_ENTRY_TYPE&amp;gt;mixed&amp;lt;/X_MAP_BROWSE_ENTRY_TYPE&amp;gt;&lt;br /&gt;
                &amp;lt;/X_MAP_BROWSE_ENTRY&amp;gt;&lt;br /&gt;
            &amp;lt;/X_MAP_BROWSE&amp;gt;&lt;br /&gt;
            &amp;lt;X_MAP_LINK&amp;gt;&lt;br /&gt;
                &amp;lt;X_MAP_LINK_ENTRY&amp;gt;&lt;br /&gt;
                    &amp;lt;X_MAP_LINK_ENTRY_TAG&amp;gt;artist&amp;lt;/X_MAP_LINK_ENTRY_TAG&amp;gt;&lt;br /&gt;
                    &amp;lt;X_MAP_LINK_ENTRY_ID_PREFIX&amp;gt;db/link/artist/&amp;lt;/X_MAP_LINK_ENTRY_ID_PREFIX&amp;gt;&lt;br /&gt;
                    &amp;lt;X_MAP_LINK_ENTRY_TYPE&amp;gt;album&amp;lt;/X_MAP_LINK_ENTRY_TYPE&amp;gt;&lt;br /&gt;
                &amp;lt;/X_MAP_LINK_ENTRY&amp;gt;&lt;br /&gt;
                &amp;lt;X_MAP_LINK_ENTRY&amp;gt;&lt;br /&gt;
                    &amp;lt;X_MAP_LINK_ENTRY_TAG&amp;gt;composer&amp;lt;/X_MAP_LINK_ENTRY_TAG&amp;gt;&lt;br /&gt;
                    &amp;lt;X_MAP_LINK_ENTRY_ID_PREFIX&amp;gt;db/link/composer/&amp;lt;/X_MAP_LINK_ENTRY_ID_PREFIX&amp;gt;&lt;br /&gt;
                    &amp;lt;X_MAP_LINK_ENTRY_TYPE&amp;gt;album&amp;lt;/X_MAP_LINK_ENTRY_TYPE&amp;gt;&lt;br /&gt;
                &amp;lt;/X_MAP_LINK_ENTRY&amp;gt;&lt;br /&gt;
            &amp;lt;/X_MAP_LINK&amp;gt;&lt;br /&gt;
            &amp;lt;X_MAP_SEARCH&amp;gt;&lt;br /&gt;
                &amp;lt;X_MAP_SEARCH_ENTRY&amp;gt;&lt;br /&gt;
                    &amp;lt;X_MAP_SEARCH_ENTRY_NAME&amp;gt;Artist&amp;lt;/X_MAP_SEARCH_ENTRY_NAME&amp;gt;&lt;br /&gt;
                    &amp;lt;X_MAP_SEARCH_ENTRY_ID_PREFIX&amp;gt;db/search/artist/&amp;lt;/X_MAP_SEARCH_ENTRY_ID_PREFIX&amp;gt;&lt;br /&gt;
                    &amp;lt;X_MAP_SEARCH_ENTRY_TYPE&amp;gt;artist album&amp;lt;/X_MAP_SEARCH_ENTRY_TYPE&amp;gt;&lt;br /&gt;
                &amp;lt;/X_MAP_SEARCH_ENTRY&amp;gt;&lt;br /&gt;
                &amp;lt;X_MAP_SEARCH_ENTRY&amp;gt;&lt;br /&gt;
                    &amp;lt;X_MAP_SEARCH_ENTRY_NAME&amp;gt;Tracks&amp;lt;/X_MAP_SEARCH_ENTRY_NAME&amp;gt;&lt;br /&gt;
                    &amp;lt;X_MAP_SEARCH_ENTRY_ID_PREFIX&amp;gt;db/search/all/&amp;lt;/X_MAP_SEARCH_ENTRY_ID_PREFIX&amp;gt;&lt;br /&gt;
                    &amp;lt;X_MAP_SEARCH_ENTRY_TYPE&amp;gt;&amp;lt;/X_MAP_SEARCH_ENTRY_TYPE&amp;gt;&lt;br /&gt;
                &amp;lt;/X_MAP_SEARCH_ENTRY&amp;gt;&lt;br /&gt;
            &amp;lt;/X_MAP_SEARCH&amp;gt;&lt;br /&gt;
        &amp;lt;/openhome:X_MAP&amp;gt;&lt;br /&gt;
        &amp;lt;presentationURL&amp;gt;http://10.2.1.170:4000/res/linn.co.uk.kazooserver/index.html&amp;lt;/presentationURL&amp;gt;&lt;br /&gt;
        &amp;lt;friendlyName&amp;gt;Linn Kazoo Server [R&amp;amp;D Mac Mini]&amp;lt;/friendlyName&amp;gt;&lt;br /&gt;
        &amp;lt;manufacturer&amp;gt;Linn&amp;lt;/manufacturer&amp;gt;&lt;br /&gt;
        &amp;lt;manufacturerURL&amp;gt;http://www.linn.co.uk&amp;lt;/manufacturerURL&amp;gt;&lt;br /&gt;
        &amp;lt;modelName&amp;gt;Kazoo Server&amp;lt;/modelName&amp;gt;&lt;br /&gt;
        &amp;lt;modelURL&amp;gt;http://oss.linn.co.uk/trac/wiki/KazooServer&amp;lt;/modelURL&amp;gt;&lt;br /&gt;
        &amp;lt;UDN&amp;gt;uuid:ac3d630e37b5f11ff5cdd23c0f5a7400&amp;lt;/UDN&amp;gt;&lt;br /&gt;
        &amp;lt;iconList&amp;gt;&lt;br /&gt;
            &amp;lt;icon&amp;gt;&lt;br /&gt;
                &amp;lt;mimetype&amp;gt;image/png&amp;lt;/mimetype&amp;gt;&lt;br /&gt;
                &amp;lt;width&amp;gt;65&amp;lt;/width&amp;gt;&lt;br /&gt;
                &amp;lt;height&amp;gt;65&amp;lt;/height&amp;gt;&lt;br /&gt;
                &amp;lt;depth&amp;gt;32&amp;lt;/depth&amp;gt;&lt;br /&gt;
                &amp;lt;url&amp;gt;ac3d630e37b5f11ff5cdd23c0f5a7400/resource/icon/icon&amp;lt;/url&amp;gt;&lt;br /&gt;
            &amp;lt;/icon&amp;gt;&lt;br /&gt;
        &amp;lt;/iconList&amp;gt;&lt;br /&gt;
        &amp;lt;serviceList&amp;gt;&lt;br /&gt;
            &amp;lt;service&amp;gt;&lt;br /&gt;
                &amp;lt;serviceType&amp;gt;urn:av-openhome-org:service:PlaylistManager:1&amp;lt;/serviceType&amp;gt;&lt;br /&gt;
                &amp;lt;serviceId&amp;gt;urn:av-openhome-org:serviceId:PlaylistManager&amp;lt;/serviceId&amp;gt;&lt;br /&gt;
                &amp;lt;SCPDURL&amp;gt;/ac3d630e37b5f11ff5cdd23c0f5a7400/Upnp/av.openhome.org-PlaylistManager-1/service.xml&amp;lt;/SCPDURL&amp;gt;&lt;br /&gt;
                &amp;lt;controlURL&amp;gt;/ac3d630e37b5f11ff5cdd23c0f5a7400/av.openhome.org-PlaylistManager-1/control&amp;lt;/controlURL&amp;gt;&lt;br /&gt;
                &amp;lt;eventSubURL&amp;gt;/ac3d630e37b5f11ff5cdd23c0f5a7400/av.openhome.org-PlaylistManager-1/event&amp;lt;/eventSubURL&amp;gt;&lt;br /&gt;
            &amp;lt;/service&amp;gt;&lt;br /&gt;
            &amp;lt;service&amp;gt;&lt;br /&gt;
                &amp;lt;serviceType&amp;gt;urn:schemas-upnp-org:service:ContentDirectory:1&amp;lt;/serviceType&amp;gt;&lt;br /&gt;
                &amp;lt;serviceId&amp;gt;urn:upnp-org:serviceId:ContentDirectory&amp;lt;/serviceId&amp;gt;&lt;br /&gt;
                &amp;lt;SCPDURL&amp;gt;/ac3d630e37b5f11ff5cdd23c0f5a7400/Upnp/upnp.org-ContentDirectory-1/service.xml&amp;lt;/SCPDURL&amp;gt;&lt;br /&gt;
                &amp;lt;controlURL&amp;gt;/ac3d630e37b5f11ff5cdd23c0f5a7400/upnp.org-ContentDirectory-1/control&amp;lt;/controlURL&amp;gt;&lt;br /&gt;
                &amp;lt;eventSubURL&amp;gt;/ac3d630e37b5f11ff5cdd23c0f5a7400/upnp.org-ContentDirectory-1/event&amp;lt;/eventSubURL&amp;gt;&lt;br /&gt;
            &amp;lt;/service&amp;gt;&lt;br /&gt;
            &amp;lt;service&amp;gt;&lt;br /&gt;
                &amp;lt;serviceType&amp;gt;urn:schemas-upnp-org:service:ConnectionManager:1&amp;lt;/serviceType&amp;gt;&lt;br /&gt;
                &amp;lt;serviceId&amp;gt;urn:upnp-org:serviceId:ConnectionManager&amp;lt;/serviceId&amp;gt;&lt;br /&gt;
                &amp;lt;SCPDURL&amp;gt;/ac3d630e37b5f11ff5cdd23c0f5a7400/Upnp/upnp.org-ConnectionManager-1/service.xml&amp;lt;/SCPDURL&amp;gt;&lt;br /&gt;
                &amp;lt;controlURL&amp;gt;/ac3d630e37b5f11ff5cdd23c0f5a7400/upnp.org-ConnectionManager-1/control&amp;lt;/controlURL&amp;gt;&lt;br /&gt;
                &amp;lt;eventSubURL&amp;gt;/ac3d630e37b5f11ff5cdd23c0f5a7400/upnp.org-ConnectionManager-1/event&amp;lt;/eventSubURL&amp;gt;&lt;br /&gt;
            &amp;lt;/service&amp;gt;&lt;br /&gt;
        &amp;lt;/serviceList&amp;gt;&lt;br /&gt;
    &amp;lt;/device&amp;gt;&lt;br /&gt;
 &amp;lt;/root&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Index maps ==&lt;br /&gt;
&lt;br /&gt;
Large lists are difficult to navigate, especially on mobile devices. Mobile devices added the idea of an index map to improve this situation. The index map allows a users to jump to different sections in a large list, similar to what is possible with a scrollbar on desktops.&lt;br /&gt;
&lt;br /&gt;
In order for a control point to generate an index map for any particular level in a ContentDirectory&#039;s hierarchy it first needs to download all the objects in the container, figure out if they are sorted and then calculate the index map. This means that a user will need to wait, perhaps minutes, before an index map is able to be presented on the UI. &lt;br /&gt;
&lt;br /&gt;
The media server can optionally return an index map for container that are in alphabetical order. This implemented through a OpenHome vendor extension of the DIDL-Lite XML. Below shows an example DIDL-Lite with an index map included.&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;DIDL-Lite xmlns=&amp;quot;urn:schemas-upnp-org:metadata-1-0/DIDL-Lite/&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;container id=&amp;quot;db/ba37a2ac24efa676c8676aab71a6cdf074&amp;quot; parentID=&amp;quot;0&amp;quot; restricted=&amp;quot;true&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;dc:title xmlns:dc=&amp;quot;http://purl.org/dc/elements/1.1/&amp;quot;&amp;gt;Worlds Apart [Deluxe Edition]&amp;lt;/dc:title&amp;gt;&lt;br /&gt;
        &amp;lt;upnp:udn xmlns:upnp=&amp;quot;urn:schemas-upnp-org:metadata-1-0/upnp/&amp;quot;&amp;gt;ac3d630e37b5f11ff5cdd23c0f5a7400&amp;lt;/upnp:udn&amp;gt;&lt;br /&gt;
        &amp;lt;upnp:class xmlns:upnp=&amp;quot;urn:schemas-upnp-org:metadata-1-0/upnp/&amp;quot;&amp;gt;object.container.album.musicAlbum&amp;lt;/upnp:class&amp;gt;&lt;br /&gt;
        &amp;lt;upnp:artist xmlns:upnp=&amp;quot;urn:schemas-upnp-org:metadata-1-0/upnp/&amp;quot;&amp;gt;...And You Will Know Us by the Trail of Dead&amp;lt;/upnp:artist&amp;gt;&lt;br /&gt;
        &amp;lt;upnp:albumArtURI&amp;gt;http://10.2.1.170:4000/linn.co.uk.kazooserver/ms/artwork/37a2ac2?size=0&amp;lt;/upnp:albumArtURI&amp;gt;&lt;br /&gt;
    &amp;lt;/container&amp;gt;&lt;br /&gt;
    &amp;lt;desc nameSpace=&amp;quot;openhome.org&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;indexmap&amp;gt;0 10 10 10 10 10 0 0 0 0 10 12 1 10 10 10 12 17 18 1 0 20 0 20 20 2 2 24&amp;lt;/indexmap&amp;gt;&lt;br /&gt;
    &amp;lt;/desc&amp;gt;&lt;br /&gt;
 &amp;lt;/DIDL-Lite&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The index map contains a space separated list of 28 number representing the total number of items that begin with that letter. #, represents everything below A, largely digits and punctuation and + represents everything above Z, largely international characters not collatable within the roman alphabet.&lt;br /&gt;
&lt;br /&gt;
 # A B C D E F G H I J K L M N O P Q R S T U V W X Y Z +&lt;br /&gt;
&lt;br /&gt;
== Image Resolution ==&lt;br /&gt;
&lt;br /&gt;
Control points running on different platforms have different memory limits and display technologies. This means that a control point on a PC might want to display artwork at a high resolution, while a control point on a PDA might want to display artwork at a much lower resolution.&lt;br /&gt;
&lt;br /&gt;
Media servers often try to solve this problem using one of the following two methods:&lt;br /&gt;
&lt;br /&gt;
# A configurable parameter that scales all artwork to a user defined size&lt;br /&gt;
# A profile system where a user can create profiles for each class of control point they have and configure a parameter that scales all artwork to a user defined size per profile&lt;br /&gt;
&lt;br /&gt;
The first solution is highly problematic because it limits the resolution of artwork across the whole network. But a single network very often contains control points that can display high resolution images AND control points that can&#039;t.&lt;br /&gt;
&lt;br /&gt;
The second solution is just architecturally poor, turning the relationship between a control point and a media server on its head. Why should the media server try to infer what a control point needs through configuration when the control point is perfectly capable of telling the media server its exact requirements in every single circumstance.&lt;br /&gt;
&lt;br /&gt;
Compliant media servers should include a &#039;&#039;&#039;size&#039;&#039;&#039; element in their artwork URIs, where the size is the image&#039;s largest dimension. This allows a control point to ask for an image at a specified size.&lt;br /&gt;
&lt;br /&gt;
The size requested by a control point is a hint for the media server and it does not imply that the media server will satisfy the request. For example a control point might request size=160 but the media server returns size=256 as it is the closest match in its cache.&lt;br /&gt;
&lt;br /&gt;
=== Example ===&lt;br /&gt;
&lt;br /&gt;
If the original artwork was 400x512, then a media server would provide the following albumArtURI: &amp;lt;uri&amp;gt;?size=512. If it is not possible for the media server to obtain the original resolution then the media server would provide the following albumArtURI: &amp;lt;uri&amp;gt;?size=0.&lt;br /&gt;
&lt;br /&gt;
The presence of the size element tells the control point:&lt;br /&gt;
&lt;br /&gt;
# the media server implements the image scaling extension&lt;br /&gt;
# the original size of the image.&lt;br /&gt;
&lt;br /&gt;
Now the control point can request the image at any resolution by using &amp;lt;uri&amp;gt;?size=x, where x is the size it wants.&lt;br /&gt;
&lt;br /&gt;
So, in this example, &amp;lt;uri&amp;gt;?size=1024 gets an 800x1024 image, and &amp;lt;uri&amp;gt;?size=200 gets a 156x200 image.&lt;br /&gt;
&lt;br /&gt;
== Group Information ==&lt;br /&gt;
&lt;br /&gt;
Classical music has the concept of a &amp;quot;work&amp;quot; or &amp;quot;composition&amp;quot; consisting of a group of tracks. This concept is not easily represented in a control point using DidlLite.&lt;br /&gt;
&lt;br /&gt;
A new property has been added to the musicTrack item called &#039;&#039;&#039;group&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
A media server would set the the group property of a musicTrack with the value defined by the GROUP tag contained in the metadata of the audio file.&lt;br /&gt;
&lt;br /&gt;
== Disc Information ==&lt;br /&gt;
&lt;br /&gt;
A new property has been added to the musicTrack item called &#039;&#039;&#039;originalDiscNumber&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
A new property has been added to the musicAlbum item called &#039;&#039;&#039;originalDiscCount&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
== Replay Gain Information ==&lt;br /&gt;
&lt;br /&gt;
Four new properties have been added to the musicTrack item called &#039;&#039;&#039;replayGainAlbum&#039;&#039;&#039;, &#039;&#039;&#039;replayGainAlbumPeak&#039;&#039;&#039;, &#039;&#039;&#039;replayGainTrack&#039;&#039;&#039;, and &#039;&#039;&#039;replayGainTrackPeak&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
== Dynamic IP Addresses ==&lt;br /&gt;
&lt;br /&gt;
At present all media servers return URIs that contain a reference to their IP address, e.g. http://172.20.1.1/music.flac etc. This means that if the media server&#039;s IP address were to change across reboots, then any control point or media renderer with URIs that referenced the media server before the reboot will become invalid.&lt;br /&gt;
&lt;br /&gt;
If a user wants to ensure a URI provided by the media server is long lived the host machine running the media server must be assigned a static or dynamic reserved IP address.&lt;/div&gt;</summary>
		<author><name>Davidd</name></author>
	</entry>
	<entry>
		<id>https://docs.linn.co.uk/wiki/index.php?title=Developer:Media_Server_Extensions&amp;diff=11247</id>
		<title>Developer:Media Server Extensions</title>
		<link rel="alternate" type="text/html" href="https://docs.linn.co.uk/wiki/index.php?title=Developer:Media_Server_Extensions&amp;diff=11247"/>
		<updated>2015-03-16T11:34:02Z</updated>

		<summary type="html">&lt;p&gt;Davidd: /* Image Resolution */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Introduction =&lt;br /&gt;
&lt;br /&gt;
The ContentDirectory service has various limitations which become apparent when implementing control points on different hardware platforms. This document aims to outline some ideas that address the various shortcomings of the ContentDirectory specification.&lt;br /&gt;
&lt;br /&gt;
== Container map ==&lt;br /&gt;
&lt;br /&gt;
The current ContentDirectory specification makes it tricky for a control point to display the returned contents in an appropriate, aesthetically pleasing, manner for the content being viewed. This is because the ContentDirectory specification does not allow for a control point to know in advanced what content to expect when browsing through any particular hierarchy.&lt;br /&gt;
&lt;br /&gt;
An example of this might be, at a particular point in the browse hierarchy the ContentDirectory will return a list of albums which in turn will contain a list of tracks. A UI might wish to represent this list of albums as a grid and the album&#039;s tracks as a header and a list of the tracks. Currently it is not possible for the UI to know when it gets to a point in a hierarchy where the hierarchy represents a list of albums followed by a list of tracks.&lt;br /&gt;
&lt;br /&gt;
The container map extension allows a media server to express its container hierarchy in advance of the control point navigating it. This is done using an OpenHome vendor extension to the device XML.&lt;br /&gt;
&lt;br /&gt;
Three types of mapped container are defined: browse, link, and search.&lt;br /&gt;
&lt;br /&gt;
The browse map defines named top level containers that represent significant starting points for browsing that can meaningfully be presented in top level tabs of a control point UI. The browse map is expressed within the X_MAP_BROWSE element of X_MAP.&lt;br /&gt;
&lt;br /&gt;
The link map defines containers that can be meaningfully linked to from track or album details. For instance a track will typically have an artist defined. If an entry for &amp;quot;artist&amp;quot; is defined in the link map then it will be possible for the user of a control point to quickly access this artist-related container by clicking on the track&#039;s artist text. Similar links might be offered for &amp;quot;genre&amp;quot;, &amp;quot;composer&amp;quot;, &amp;quot;conductor&amp;quot;, etc. The link map is expressed within the X_MAP_LINK element of X_MAP.&lt;br /&gt;
&lt;br /&gt;
The search map defines the different kinds of search containers and the type of results that they produce. The search map is expressed within the X_MAP_SEARCH element of X_MAP.&lt;br /&gt;
&lt;br /&gt;
=== Browse map ===&lt;br /&gt;
&lt;br /&gt;
The X_MAP_BROWSE element must contain 1 or more X_MAP_BROWSE_ENTRY elements.&lt;br /&gt;
&lt;br /&gt;
The X_MAP_BROWSE_ENTRY has three child elements.&lt;br /&gt;
&lt;br /&gt;
X_MAP_BROWSE_ENTRY_NAME is a string that can be used by a control point to label a tab containing this browse hierarchy.&lt;br /&gt;
&lt;br /&gt;
X_MAP_BROWSE_ENTRY_ID is the UPnP container id that contains the root of this browse hierarchy. This id is then submitted to the ContentDirectory service using the Browse action as usual. The returned contents are navigated using subsequent Browse request as usual. The difference is that the control point knows in advance what kind of results to expect at each level.&lt;br /&gt;
&lt;br /&gt;
X_MAP_BROWSE_ENTRY_TYPE is a space separated list of strings that maps out the kind of containers that are to be found at each level of this browse hierarchy. For instance, &amp;quot;artist album&amp;quot; represents a browse hierarchy giving a container containing only artist containers, each of which contains only album containers, each of which contains only tracks.&lt;br /&gt;
&lt;br /&gt;
There should be an X_MAP_BROWSE_ENTRY for each root browse hierarchy defined by the media server.&lt;br /&gt;
&lt;br /&gt;
For example:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;X_MAP_BROWSE_ENTRY&amp;gt;&lt;br /&gt;
     &amp;lt;X_MAP_BROWSE_ENTRY_NAME&amp;gt;Genre&amp;lt;/X_MAP_BROWSE_ENTRY_NAME&amp;gt;&lt;br /&gt;
     &amp;lt;X_MAP_BROWSE_ENTRY_ID&amp;gt;db/browse/genre&amp;lt;/X_MAP_BROWSE_ENTRY_ID&amp;gt;&lt;br /&gt;
     &amp;lt;X_MAP_BROWSE_ENTRY_TYPE&amp;gt;genre artist album&amp;lt;/X_MAP_BROWSE_ENTRY_TYPE&amp;gt;&lt;br /&gt;
 &amp;lt;/X_MAP_BROWSE_ENTRY&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Link map ===&lt;br /&gt;
&lt;br /&gt;
The X_MAP_LINK element must contain 1 or more X_MAP_LINK_ENTRY elements.&lt;br /&gt;
&lt;br /&gt;
The X_MAP_LINK_ENTRY has three child elements.&lt;br /&gt;
&lt;br /&gt;
X_MAP_LINK_ENTRY_TAG is a string that defines which type of metadata is the target for this link. e.g. &amp;quot;artist&amp;quot;, &amp;quot;genre&amp;quot;, &amp;quot;composer&amp;quot;, etc. See the type section below. &lt;br /&gt;
&lt;br /&gt;
X_MAP_LINK_ENTRY_ID_PREFIX is a string that is prefix for a UPnP container id. The link can be taken by browsing to the container whose id is the result of appending the associated metadata value to this prefix. For instance, if the prefix for an &amp;quot;artist&amp;quot; link is defined as db/link/artist/, and a track returned anywhere in the media server&#039;s library has &amp;quot;Pink Floyd&amp;quot; as its artist. Then the linked container will have an id of db/link/artist/Pink Floyd.&lt;br /&gt;
&lt;br /&gt;
X_MAP_LINK_ENTRY_TYPE represents the type of browse hierarchy returned when taking this type of link. See X_MAP_BROWSE_ENTRY_TYPE for details.&lt;br /&gt;
&lt;br /&gt;
There should be an X_MAP_LINK_ENTRY for each piece of metadata that the media server allows to be linked.&lt;br /&gt;
&lt;br /&gt;
For example:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;X_MAP_LINK_ENTRY&amp;gt;&lt;br /&gt;
     &amp;lt;X_MAP_LINK_ENTRY_TAG&amp;gt;artist&amp;lt;/X_MAP_LINK_ENTRY_TAG&amp;gt;&lt;br /&gt;
     &amp;lt;X_MAP_LINK_ENTRY_ID_PREFIX&amp;gt;db/link/artist/&amp;lt;/X_MAP_LINK_ENTRY_ID_PREFIX&amp;gt;&lt;br /&gt;
     &amp;lt;X_MAP_LINK_ENTRY_TYPE&amp;gt;album&amp;lt;/X_MAP_LINK_ENTRY_TYPE&amp;gt;&lt;br /&gt;
 &amp;lt;/X_MAP_LINK_ENTRY&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The example above defines a browse hierarchy that is created when linking from an artist name. The hierarchy created provides a list of linked artist albums which in turn provide a list of tracks.&lt;br /&gt;
&lt;br /&gt;
=== Search map ===&lt;br /&gt;
&lt;br /&gt;
The X_MAP_SEARCH element must contain 1 or more X_MAP_SEARCH_ENTRY elements.&lt;br /&gt;
&lt;br /&gt;
The X_MAP_SEARCH_ENTRY has three child elements.&lt;br /&gt;
&lt;br /&gt;
X_MAP_SEARCH_ENTRY_NAME  is a string that can be used by a control point to label a tab containing these search results.&lt;br /&gt;
&lt;br /&gt;
X_MAP_SEARCH_ENTRY_ID_PREFIX is a string that is a prefix for a UPnP container id. The search results can be found by browsing to the container whose id is the result of appending the search string to this prefix. For instance, if the prefix for an &amp;quot;album&amp;quot; search is defined as db/search/album/, and the search string is &amp;quot;blue&amp;quot;, then the search results container will have an id of db/search/album/blue.&lt;br /&gt;
&lt;br /&gt;
X_MAP_SEARCH_ENTRY_TYPE represents the type of browse hierarchy returned when taking this type of search. See X_MAP_BROWSE_ENTRY_TYPE for details.&lt;br /&gt;
&lt;br /&gt;
There should be an X_MAP_SEARCH_ENTRY for each type of search offered by the media server.&lt;br /&gt;
&lt;br /&gt;
For example:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;X_MAP_SEARCH_ENTRY&amp;gt;&lt;br /&gt;
     &amp;lt;X_MAP_SEARCH_ENTRY_NAME&amp;gt;Artist&amp;lt;/X_MAP_SEARCH_ENTRY_NAME&amp;gt;&lt;br /&gt;
     &amp;lt;X_MAP_SEARCH_ENTRY_ID_PREFIX&amp;gt;db/search/artist/&amp;lt;/X_MAP_SEARCH_ENTRY_ID_PREFIX&amp;gt;&lt;br /&gt;
     &amp;lt;X_MAP_SEARCH_ENTRY_TYPE&amp;gt;artist album&amp;lt;/X_MAP_SEARCH_ENTRY_TYPE&amp;gt;&lt;br /&gt;
 &amp;lt;/X_MAP_SEARCH_ENTRY&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The example above defines a browse hierarchy that is created when searching for an artist. The hierarchy created provides a list of artists, which in turn provide a list of albums, which in turn provide a list of tracks.&lt;br /&gt;
&lt;br /&gt;
=== Types ===&lt;br /&gt;
&lt;br /&gt;
The list of allowed types for X_BROWSE_ENTRY_TYPE, X_MAP_LINK_ENTRY_TAG, X_LINK_ENTRY_TYPE, and X_SEARCH_ENTRY_TYPE&lt;br /&gt;
&lt;br /&gt;
 genre&lt;br /&gt;
 artist&lt;br /&gt;
 composer&lt;br /&gt;
 conductor&lt;br /&gt;
 album&lt;br /&gt;
 year&lt;br /&gt;
 mixed&lt;br /&gt;
&lt;br /&gt;
mixed is a special value that represents a container that has mixed entries. It is not a valid type for the X_MAP_LINK_ENTRY_TAG element.&lt;br /&gt;
&lt;br /&gt;
=== Example device XML ===&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;root xmlns=&amp;quot;urn:schemas-upnp-org:device-1-0&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;specVersion&amp;gt;&lt;br /&gt;
        &amp;lt;major&amp;gt;1&amp;lt;/major&amp;gt;&lt;br /&gt;
        &amp;lt;minor&amp;gt;1&amp;lt;/minor&amp;gt;&lt;br /&gt;
    &amp;lt;/specVersion&amp;gt;&lt;br /&gt;
    &amp;lt;device&amp;gt;&lt;br /&gt;
        &amp;lt;deviceType&amp;gt;urn:schemas-upnp-org:device:MediaServer:1&amp;lt;/deviceType&amp;gt;&lt;br /&gt;
        &amp;lt;dlna:X_DLNADOC xmlns:dlna=&amp;quot;urn:schemas-dlna-org:device-1-0&amp;quot;&amp;gt;DMS-1.50&amp;lt;/dlna:X_DLNADOC&amp;gt;&lt;br /&gt;
        &amp;lt;dlna:X_DLNACAP xmlns:dlna=&amp;quot;urn:schemas-dlna-org:device-1-0&amp;quot;&amp;gt;av-upload,image-upload,audio-upload&amp;lt;/dlna:X_DLNACAP&amp;gt;&lt;br /&gt;
        &amp;lt;openhome:X_MAP xmlns:openhome=&amp;quot;http://www.openhome.org&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;X_MAP_BROWSE&amp;gt;&lt;br /&gt;
                &amp;lt;X_MAP_BROWSE_ENTRY&amp;gt;&lt;br /&gt;
                    &amp;lt;X_MAP_BROWSE_ENTRY_NAME&amp;gt;Albums&amp;lt;/X_MAP_BROWSE_ENTRY_NAME&amp;gt;&lt;br /&gt;
                    &amp;lt;X_MAP_BROWSE_ENTRY_ID&amp;gt;db/browse/albums&amp;lt;/X_MAP_BROWSE_ENTRY_ID&amp;gt;&lt;br /&gt;
                    &amp;lt;X_MAP_BROWSE_ENTRY_TYPE&amp;gt;album&amp;lt;/X_MAP_BROWSE_ENTRY_TYPE&amp;gt;&lt;br /&gt;
                &amp;lt;/X_MAP_BROWSE_ENTRY&amp;gt;&lt;br /&gt;
                &amp;lt;X_MAP_BROWSE_ENTRY&amp;gt;&lt;br /&gt;
                    &amp;lt;X_MAP_BROWSE_ENTRY_NAME&amp;gt;Artists&amp;lt;/X_MAP_BROWSE_ENTRY_NAME&amp;gt;&lt;br /&gt;
                    &amp;lt;X_MAP_BROWSE_ENTRY_ID&amp;gt;db/browse/artists&amp;lt;/X_MAP_BROWSE_ENTRY_ID&amp;gt;&lt;br /&gt;
                    &amp;lt;X_MAP_BROWSE_ENTRY_TYPE&amp;gt;artist album&amp;lt;/X_MAP_BROWSE_ENTRY_TYPE&amp;gt;&lt;br /&gt;
                &amp;lt;/X_MAP_BROWSE_ENTRY&amp;gt;&lt;br /&gt;
                &amp;lt;X_MAP_BROWSE_ENTRY&amp;gt;&lt;br /&gt;
                    &amp;lt;X_MAP_BROWSE_ENTRY_NAME&amp;gt;Folders&amp;lt;/X_MAP_BROWSE_ENTRY_NAME&amp;gt;&lt;br /&gt;
                    &amp;lt;X_MAP_BROWSE_ENTRY_ID&amp;gt;db/browse/folders&amp;lt;/X_MAP_BROWSE_ENTRY_ID&amp;gt;&lt;br /&gt;
                    &amp;lt;X_MAP_BROWSE_ENTRY_TYPE&amp;gt;mixed&amp;lt;/X_MAP_BROWSE_ENTRY_TYPE&amp;gt;&lt;br /&gt;
                &amp;lt;/X_MAP_BROWSE_ENTRY&amp;gt;&lt;br /&gt;
            &amp;lt;/X_MAP_BROWSE&amp;gt;&lt;br /&gt;
            &amp;lt;X_MAP_LINK&amp;gt;&lt;br /&gt;
                &amp;lt;X_MAP_LINK_ENTRY&amp;gt;&lt;br /&gt;
                    &amp;lt;X_MAP_LINK_ENTRY_TAG&amp;gt;artist&amp;lt;/X_MAP_LINK_ENTRY_TAG&amp;gt;&lt;br /&gt;
                    &amp;lt;X_MAP_LINK_ENTRY_ID_PREFIX&amp;gt;db/link/artist/&amp;lt;/X_MAP_LINK_ENTRY_ID_PREFIX&amp;gt;&lt;br /&gt;
                    &amp;lt;X_MAP_LINK_ENTRY_TYPE&amp;gt;album&amp;lt;/X_MAP_LINK_ENTRY_TYPE&amp;gt;&lt;br /&gt;
                &amp;lt;/X_MAP_LINK_ENTRY&amp;gt;&lt;br /&gt;
                &amp;lt;X_MAP_LINK_ENTRY&amp;gt;&lt;br /&gt;
                    &amp;lt;X_MAP_LINK_ENTRY_TAG&amp;gt;composer&amp;lt;/X_MAP_LINK_ENTRY_TAG&amp;gt;&lt;br /&gt;
                    &amp;lt;X_MAP_LINK_ENTRY_ID_PREFIX&amp;gt;db/link/composer/&amp;lt;/X_MAP_LINK_ENTRY_ID_PREFIX&amp;gt;&lt;br /&gt;
                    &amp;lt;X_MAP_LINK_ENTRY_TYPE&amp;gt;album&amp;lt;/X_MAP_LINK_ENTRY_TYPE&amp;gt;&lt;br /&gt;
                &amp;lt;/X_MAP_LINK_ENTRY&amp;gt;&lt;br /&gt;
            &amp;lt;/X_MAP_LINK&amp;gt;&lt;br /&gt;
            &amp;lt;X_MAP_SEARCH&amp;gt;&lt;br /&gt;
                &amp;lt;X_MAP_SEARCH_ENTRY&amp;gt;&lt;br /&gt;
                    &amp;lt;X_MAP_SEARCH_ENTRY_NAME&amp;gt;Artist&amp;lt;/X_MAP_SEARCH_ENTRY_NAME&amp;gt;&lt;br /&gt;
                    &amp;lt;X_MAP_SEARCH_ENTRY_ID_PREFIX&amp;gt;db/search/artist/&amp;lt;/X_MAP_SEARCH_ENTRY_ID_PREFIX&amp;gt;&lt;br /&gt;
                    &amp;lt;X_MAP_SEARCH_ENTRY_TYPE&amp;gt;artist album&amp;lt;/X_MAP_SEARCH_ENTRY_TYPE&amp;gt;&lt;br /&gt;
                &amp;lt;/X_MAP_SEARCH_ENTRY&amp;gt;&lt;br /&gt;
                &amp;lt;X_MAP_SEARCH_ENTRY&amp;gt;&lt;br /&gt;
                    &amp;lt;X_MAP_SEARCH_ENTRY_NAME&amp;gt;Tracks&amp;lt;/X_MAP_SEARCH_ENTRY_NAME&amp;gt;&lt;br /&gt;
                    &amp;lt;X_MAP_SEARCH_ENTRY_ID_PREFIX&amp;gt;db/search/all/&amp;lt;/X_MAP_SEARCH_ENTRY_ID_PREFIX&amp;gt;&lt;br /&gt;
                    &amp;lt;X_MAP_SEARCH_ENTRY_TYPE&amp;gt;&amp;lt;/X_MAP_SEARCH_ENTRY_TYPE&amp;gt;&lt;br /&gt;
                &amp;lt;/X_MAP_SEARCH_ENTRY&amp;gt;&lt;br /&gt;
            &amp;lt;/X_MAP_SEARCH&amp;gt;&lt;br /&gt;
        &amp;lt;/openhome:X_MAP&amp;gt;&lt;br /&gt;
        &amp;lt;presentationURL&amp;gt;http://10.2.1.170:4000/res/linn.co.uk.kazooserver/index.html&amp;lt;/presentationURL&amp;gt;&lt;br /&gt;
        &amp;lt;friendlyName&amp;gt;Linn Kazoo Server [R&amp;amp;D Mac Mini]&amp;lt;/friendlyName&amp;gt;&lt;br /&gt;
        &amp;lt;manufacturer&amp;gt;Linn&amp;lt;/manufacturer&amp;gt;&lt;br /&gt;
        &amp;lt;manufacturerURL&amp;gt;http://www.linn.co.uk&amp;lt;/manufacturerURL&amp;gt;&lt;br /&gt;
        &amp;lt;modelName&amp;gt;Kazoo Server&amp;lt;/modelName&amp;gt;&lt;br /&gt;
        &amp;lt;modelURL&amp;gt;http://oss.linn.co.uk/trac/wiki/KazooServer&amp;lt;/modelURL&amp;gt;&lt;br /&gt;
        &amp;lt;UDN&amp;gt;uuid:ac3d630e37b5f11ff5cdd23c0f5a7400&amp;lt;/UDN&amp;gt;&lt;br /&gt;
        &amp;lt;iconList&amp;gt;&lt;br /&gt;
            &amp;lt;icon&amp;gt;&lt;br /&gt;
                &amp;lt;mimetype&amp;gt;image/png&amp;lt;/mimetype&amp;gt;&lt;br /&gt;
                &amp;lt;width&amp;gt;65&amp;lt;/width&amp;gt;&lt;br /&gt;
                &amp;lt;height&amp;gt;65&amp;lt;/height&amp;gt;&lt;br /&gt;
                &amp;lt;depth&amp;gt;32&amp;lt;/depth&amp;gt;&lt;br /&gt;
                &amp;lt;url&amp;gt;ac3d630e37b5f11ff5cdd23c0f5a7400/resource/icon/icon&amp;lt;/url&amp;gt;&lt;br /&gt;
            &amp;lt;/icon&amp;gt;&lt;br /&gt;
        &amp;lt;/iconList&amp;gt;&lt;br /&gt;
        &amp;lt;serviceList&amp;gt;&lt;br /&gt;
            &amp;lt;service&amp;gt;&lt;br /&gt;
                &amp;lt;serviceType&amp;gt;urn:av-openhome-org:service:PlaylistManager:1&amp;lt;/serviceType&amp;gt;&lt;br /&gt;
                &amp;lt;serviceId&amp;gt;urn:av-openhome-org:serviceId:PlaylistManager&amp;lt;/serviceId&amp;gt;&lt;br /&gt;
                &amp;lt;SCPDURL&amp;gt;/ac3d630e37b5f11ff5cdd23c0f5a7400/Upnp/av.openhome.org-PlaylistManager-1/service.xml&amp;lt;/SCPDURL&amp;gt;&lt;br /&gt;
                &amp;lt;controlURL&amp;gt;/ac3d630e37b5f11ff5cdd23c0f5a7400/av.openhome.org-PlaylistManager-1/control&amp;lt;/controlURL&amp;gt;&lt;br /&gt;
                &amp;lt;eventSubURL&amp;gt;/ac3d630e37b5f11ff5cdd23c0f5a7400/av.openhome.org-PlaylistManager-1/event&amp;lt;/eventSubURL&amp;gt;&lt;br /&gt;
            &amp;lt;/service&amp;gt;&lt;br /&gt;
            &amp;lt;service&amp;gt;&lt;br /&gt;
                &amp;lt;serviceType&amp;gt;urn:schemas-upnp-org:service:ContentDirectory:1&amp;lt;/serviceType&amp;gt;&lt;br /&gt;
                &amp;lt;serviceId&amp;gt;urn:upnp-org:serviceId:ContentDirectory&amp;lt;/serviceId&amp;gt;&lt;br /&gt;
                &amp;lt;SCPDURL&amp;gt;/ac3d630e37b5f11ff5cdd23c0f5a7400/Upnp/upnp.org-ContentDirectory-1/service.xml&amp;lt;/SCPDURL&amp;gt;&lt;br /&gt;
                &amp;lt;controlURL&amp;gt;/ac3d630e37b5f11ff5cdd23c0f5a7400/upnp.org-ContentDirectory-1/control&amp;lt;/controlURL&amp;gt;&lt;br /&gt;
                &amp;lt;eventSubURL&amp;gt;/ac3d630e37b5f11ff5cdd23c0f5a7400/upnp.org-ContentDirectory-1/event&amp;lt;/eventSubURL&amp;gt;&lt;br /&gt;
            &amp;lt;/service&amp;gt;&lt;br /&gt;
            &amp;lt;service&amp;gt;&lt;br /&gt;
                &amp;lt;serviceType&amp;gt;urn:schemas-upnp-org:service:ConnectionManager:1&amp;lt;/serviceType&amp;gt;&lt;br /&gt;
                &amp;lt;serviceId&amp;gt;urn:upnp-org:serviceId:ConnectionManager&amp;lt;/serviceId&amp;gt;&lt;br /&gt;
                &amp;lt;SCPDURL&amp;gt;/ac3d630e37b5f11ff5cdd23c0f5a7400/Upnp/upnp.org-ConnectionManager-1/service.xml&amp;lt;/SCPDURL&amp;gt;&lt;br /&gt;
                &amp;lt;controlURL&amp;gt;/ac3d630e37b5f11ff5cdd23c0f5a7400/upnp.org-ConnectionManager-1/control&amp;lt;/controlURL&amp;gt;&lt;br /&gt;
                &amp;lt;eventSubURL&amp;gt;/ac3d630e37b5f11ff5cdd23c0f5a7400/upnp.org-ConnectionManager-1/event&amp;lt;/eventSubURL&amp;gt;&lt;br /&gt;
            &amp;lt;/service&amp;gt;&lt;br /&gt;
        &amp;lt;/serviceList&amp;gt;&lt;br /&gt;
    &amp;lt;/device&amp;gt;&lt;br /&gt;
 &amp;lt;/root&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Index maps ==&lt;br /&gt;
&lt;br /&gt;
Large lists are difficult to navigate, especially on mobile devices. Mobile devices added the idea of an index map to improve this situation. The index map allows a users to jump to different sections in a large list, similar to what is possible with a scrollbar on desktops.&lt;br /&gt;
&lt;br /&gt;
In order for a control point to generate an index map for any particular level in a ContentDirectory&#039;s hierarchy it first needs to download all the objects in the container, figure out if they are sorted and then calculate the index map. This means that a user will need to wait, perhaps minutes, before an index map is able to be presented on the UI. &lt;br /&gt;
&lt;br /&gt;
The media server can optionally return an index map for container that are in alphabetical order. This implemented through a OpenHome vendor extension of the DIDL-Lite XML. Below shows an example DIDL-Lite with an index map included.&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;DIDL-Lite xmlns=&amp;quot;urn:schemas-upnp-org:metadata-1-0/DIDL-Lite/&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;container id=&amp;quot;db/ba37a2ac24efa676c8676aab71a6cdf074&amp;quot; parentID=&amp;quot;0&amp;quot; restricted=&amp;quot;true&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;dc:title xmlns:dc=&amp;quot;http://purl.org/dc/elements/1.1/&amp;quot;&amp;gt;Worlds Apart [Deluxe Edition]&amp;lt;/dc:title&amp;gt;&lt;br /&gt;
        &amp;lt;upnp:udn xmlns:upnp=&amp;quot;urn:schemas-upnp-org:metadata-1-0/upnp/&amp;quot;&amp;gt;ac3d630e37b5f11ff5cdd23c0f5a7400&amp;lt;/upnp:udn&amp;gt;&lt;br /&gt;
        &amp;lt;upnp:class xmlns:upnp=&amp;quot;urn:schemas-upnp-org:metadata-1-0/upnp/&amp;quot;&amp;gt;object.container.album.musicAlbum&amp;lt;/upnp:class&amp;gt;&lt;br /&gt;
        &amp;lt;upnp:artist xmlns:upnp=&amp;quot;urn:schemas-upnp-org:metadata-1-0/upnp/&amp;quot;&amp;gt;...And You Will Know Us by the Trail of Dead&amp;lt;/upnp:artist&amp;gt;&lt;br /&gt;
        &amp;lt;upnp:albumArtURI&amp;gt;http://10.2.1.170:4000/linn.co.uk.kazooserver/ms/artwork/37a2ac2?size=0&amp;lt;/upnp:albumArtURI&amp;gt;&lt;br /&gt;
    &amp;lt;/container&amp;gt;&lt;br /&gt;
    &amp;lt;desc nameSpace=&amp;quot;openhome.org&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;indexmap&amp;gt;0 10 10 10 10 10 0 0 0 0 10 12 1 10 10 10 12 17 18 1 0 20 0 20 20 2 2 24&amp;lt;/indexmap&amp;gt;&lt;br /&gt;
    &amp;lt;/desc&amp;gt;&lt;br /&gt;
 &amp;lt;/DIDL-Lite&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The index map contains a space separated list of 28 number representing the total number of items that begin with that letter. #, represents everything below A, largely digits and punctuation and + represents everything above Z, largely international characters not collatable within the roman alphabet.&lt;br /&gt;
&lt;br /&gt;
 # A B C D E F G H I J K L M N O P Q R S T U V W X Y Z +&lt;br /&gt;
&lt;br /&gt;
== Image Resolution ==&lt;br /&gt;
&lt;br /&gt;
Control points running on different platforms have different memory limits and display technologies. This means that a control point on a PC might want to display artwork at a high resolution, while a control point on a PDA might want to display artwork at a much lower resolution.&lt;br /&gt;
&lt;br /&gt;
Media servers often try to solve this problem using one of the following two methods:&lt;br /&gt;
&lt;br /&gt;
# A configurable parameter that scales all artwork to a user defined size&lt;br /&gt;
# A profile system where a user can create profiles for each class of control point they have and configure a parameter that scales all artwork to a user defined size per profile&lt;br /&gt;
&lt;br /&gt;
The first solution is highly problematic because it limits the resolution of artwork across the whole network. But a single network very often contains control points that can display high resolution images AND control points that can&#039;t.&lt;br /&gt;
&lt;br /&gt;
The second solution is just architecturally poor, turning the relationship between a control point and a media server on its head. Why should the media server try to infer what a control point needs through configuration when the control point is perfectly capable of telling the media server its exact requirements in every single circumstance.&lt;br /&gt;
&lt;br /&gt;
Compliant media servers should include a &#039;&#039;&#039;size&#039;&#039;&#039; element in their artwork URIs, where the size is the image&#039;s largest dimension. This allows a control point to ask for an image at a specified size.&lt;br /&gt;
&lt;br /&gt;
The size requested by a control point is a hint for the media server and it does not imply that the media server will satisfy the request. For example a control point might request size=160 but the media server returns size=256 as it is the closest match in its cache.&lt;br /&gt;
&lt;br /&gt;
=== Example ===&lt;br /&gt;
&lt;br /&gt;
If the original artwork was 400x512, then a media server would provide the following albumArtURI: &amp;lt;uri&amp;gt;?size=512. If it is not possible for the media server to obtain the original resolution then the media server would provide the following albumArtURI: &amp;lt;uri&amp;gt;?size=0.&lt;br /&gt;
&lt;br /&gt;
The presence of the size element tells the control point:&lt;br /&gt;
&lt;br /&gt;
# the media server implements the image scaling extension&lt;br /&gt;
# the original size of the image.&lt;br /&gt;
&lt;br /&gt;
Now the control point can request the image at any resolution by using &amp;lt;uri&amp;gt;?size=x, where x is the size it wants.&lt;br /&gt;
&lt;br /&gt;
So, in this example, &amp;lt;uri&amp;gt;?size=1024 gets an 800x1024 image, and &amp;lt;uri&amp;gt;?size=200 gets a 156x200 image.&lt;br /&gt;
&lt;br /&gt;
== Dynamic IP Addresses ==&lt;br /&gt;
&lt;br /&gt;
At present all media servers return URIs that contain a reference to their IP address, e.g. http://172.20.1.1/music.flac etc. This means that if the media server&#039;s IP address were to change across reboots, then any control point or media renderer with URIs that referenced the media server before the reboot will become invalid.&lt;br /&gt;
&lt;br /&gt;
If a user wants to ensure a URI provided by the media server is long lived the host machine running the media server must be assigned a static or dynamic reserved IP address.&lt;br /&gt;
&lt;br /&gt;
== Disc Information ==&lt;br /&gt;
&lt;br /&gt;
A new property has been added to the musicTrack item called &#039;&#039;&#039;OriginalDiscNumber&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
A new property has been added to the musicAlbum item called &#039;&#039;&#039;OriginalDiscCount&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
== Replay Gain Information ==&lt;br /&gt;
&lt;br /&gt;
Four new properties have been added to the musicTrack item called &#039;&#039;&#039;ReplayGainAlbum&#039;&#039;&#039;, &#039;&#039;&#039;ReplayGainAlbumPeak&#039;&#039;&#039;, &#039;&#039;&#039;ReplayGainTrack&#039;&#039;&#039;, and &#039;&#039;&#039;ReplayGainTrackPeak&#039;&#039;&#039;.&lt;/div&gt;</summary>
		<author><name>Davidd</name></author>
	</entry>
	<entry>
		<id>https://docs.linn.co.uk/wiki/index.php?title=Developer:Media_Server_Extensions&amp;diff=11246</id>
		<title>Developer:Media Server Extensions</title>
		<link rel="alternate" type="text/html" href="https://docs.linn.co.uk/wiki/index.php?title=Developer:Media_Server_Extensions&amp;diff=11246"/>
		<updated>2015-03-16T11:33:31Z</updated>

		<summary type="html">&lt;p&gt;Davidd: /* Image Resolution */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Introduction =&lt;br /&gt;
&lt;br /&gt;
The ContentDirectory service has various limitations which become apparent when implementing control points on different hardware platforms. This document aims to outline some ideas that address the various shortcomings of the ContentDirectory specification.&lt;br /&gt;
&lt;br /&gt;
== Container map ==&lt;br /&gt;
&lt;br /&gt;
The current ContentDirectory specification makes it tricky for a control point to display the returned contents in an appropriate, aesthetically pleasing, manner for the content being viewed. This is because the ContentDirectory specification does not allow for a control point to know in advanced what content to expect when browsing through any particular hierarchy.&lt;br /&gt;
&lt;br /&gt;
An example of this might be, at a particular point in the browse hierarchy the ContentDirectory will return a list of albums which in turn will contain a list of tracks. A UI might wish to represent this list of albums as a grid and the album&#039;s tracks as a header and a list of the tracks. Currently it is not possible for the UI to know when it gets to a point in a hierarchy where the hierarchy represents a list of albums followed by a list of tracks.&lt;br /&gt;
&lt;br /&gt;
The container map extension allows a media server to express its container hierarchy in advance of the control point navigating it. This is done using an OpenHome vendor extension to the device XML.&lt;br /&gt;
&lt;br /&gt;
Three types of mapped container are defined: browse, link, and search.&lt;br /&gt;
&lt;br /&gt;
The browse map defines named top level containers that represent significant starting points for browsing that can meaningfully be presented in top level tabs of a control point UI. The browse map is expressed within the X_MAP_BROWSE element of X_MAP.&lt;br /&gt;
&lt;br /&gt;
The link map defines containers that can be meaningfully linked to from track or album details. For instance a track will typically have an artist defined. If an entry for &amp;quot;artist&amp;quot; is defined in the link map then it will be possible for the user of a control point to quickly access this artist-related container by clicking on the track&#039;s artist text. Similar links might be offered for &amp;quot;genre&amp;quot;, &amp;quot;composer&amp;quot;, &amp;quot;conductor&amp;quot;, etc. The link map is expressed within the X_MAP_LINK element of X_MAP.&lt;br /&gt;
&lt;br /&gt;
The search map defines the different kinds of search containers and the type of results that they produce. The search map is expressed within the X_MAP_SEARCH element of X_MAP.&lt;br /&gt;
&lt;br /&gt;
=== Browse map ===&lt;br /&gt;
&lt;br /&gt;
The X_MAP_BROWSE element must contain 1 or more X_MAP_BROWSE_ENTRY elements.&lt;br /&gt;
&lt;br /&gt;
The X_MAP_BROWSE_ENTRY has three child elements.&lt;br /&gt;
&lt;br /&gt;
X_MAP_BROWSE_ENTRY_NAME is a string that can be used by a control point to label a tab containing this browse hierarchy.&lt;br /&gt;
&lt;br /&gt;
X_MAP_BROWSE_ENTRY_ID is the UPnP container id that contains the root of this browse hierarchy. This id is then submitted to the ContentDirectory service using the Browse action as usual. The returned contents are navigated using subsequent Browse request as usual. The difference is that the control point knows in advance what kind of results to expect at each level.&lt;br /&gt;
&lt;br /&gt;
X_MAP_BROWSE_ENTRY_TYPE is a space separated list of strings that maps out the kind of containers that are to be found at each level of this browse hierarchy. For instance, &amp;quot;artist album&amp;quot; represents a browse hierarchy giving a container containing only artist containers, each of which contains only album containers, each of which contains only tracks.&lt;br /&gt;
&lt;br /&gt;
There should be an X_MAP_BROWSE_ENTRY for each root browse hierarchy defined by the media server.&lt;br /&gt;
&lt;br /&gt;
For example:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;X_MAP_BROWSE_ENTRY&amp;gt;&lt;br /&gt;
     &amp;lt;X_MAP_BROWSE_ENTRY_NAME&amp;gt;Genre&amp;lt;/X_MAP_BROWSE_ENTRY_NAME&amp;gt;&lt;br /&gt;
     &amp;lt;X_MAP_BROWSE_ENTRY_ID&amp;gt;db/browse/genre&amp;lt;/X_MAP_BROWSE_ENTRY_ID&amp;gt;&lt;br /&gt;
     &amp;lt;X_MAP_BROWSE_ENTRY_TYPE&amp;gt;genre artist album&amp;lt;/X_MAP_BROWSE_ENTRY_TYPE&amp;gt;&lt;br /&gt;
 &amp;lt;/X_MAP_BROWSE_ENTRY&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Link map ===&lt;br /&gt;
&lt;br /&gt;
The X_MAP_LINK element must contain 1 or more X_MAP_LINK_ENTRY elements.&lt;br /&gt;
&lt;br /&gt;
The X_MAP_LINK_ENTRY has three child elements.&lt;br /&gt;
&lt;br /&gt;
X_MAP_LINK_ENTRY_TAG is a string that defines which type of metadata is the target for this link. e.g. &amp;quot;artist&amp;quot;, &amp;quot;genre&amp;quot;, &amp;quot;composer&amp;quot;, etc. See the type section below. &lt;br /&gt;
&lt;br /&gt;
X_MAP_LINK_ENTRY_ID_PREFIX is a string that is prefix for a UPnP container id. The link can be taken by browsing to the container whose id is the result of appending the associated metadata value to this prefix. For instance, if the prefix for an &amp;quot;artist&amp;quot; link is defined as db/link/artist/, and a track returned anywhere in the media server&#039;s library has &amp;quot;Pink Floyd&amp;quot; as its artist. Then the linked container will have an id of db/link/artist/Pink Floyd.&lt;br /&gt;
&lt;br /&gt;
X_MAP_LINK_ENTRY_TYPE represents the type of browse hierarchy returned when taking this type of link. See X_MAP_BROWSE_ENTRY_TYPE for details.&lt;br /&gt;
&lt;br /&gt;
There should be an X_MAP_LINK_ENTRY for each piece of metadata that the media server allows to be linked.&lt;br /&gt;
&lt;br /&gt;
For example:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;X_MAP_LINK_ENTRY&amp;gt;&lt;br /&gt;
     &amp;lt;X_MAP_LINK_ENTRY_TAG&amp;gt;artist&amp;lt;/X_MAP_LINK_ENTRY_TAG&amp;gt;&lt;br /&gt;
     &amp;lt;X_MAP_LINK_ENTRY_ID_PREFIX&amp;gt;db/link/artist/&amp;lt;/X_MAP_LINK_ENTRY_ID_PREFIX&amp;gt;&lt;br /&gt;
     &amp;lt;X_MAP_LINK_ENTRY_TYPE&amp;gt;album&amp;lt;/X_MAP_LINK_ENTRY_TYPE&amp;gt;&lt;br /&gt;
 &amp;lt;/X_MAP_LINK_ENTRY&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The example above defines a browse hierarchy that is created when linking from an artist name. The hierarchy created provides a list of linked artist albums which in turn provide a list of tracks.&lt;br /&gt;
&lt;br /&gt;
=== Search map ===&lt;br /&gt;
&lt;br /&gt;
The X_MAP_SEARCH element must contain 1 or more X_MAP_SEARCH_ENTRY elements.&lt;br /&gt;
&lt;br /&gt;
The X_MAP_SEARCH_ENTRY has three child elements.&lt;br /&gt;
&lt;br /&gt;
X_MAP_SEARCH_ENTRY_NAME  is a string that can be used by a control point to label a tab containing these search results.&lt;br /&gt;
&lt;br /&gt;
X_MAP_SEARCH_ENTRY_ID_PREFIX is a string that is a prefix for a UPnP container id. The search results can be found by browsing to the container whose id is the result of appending the search string to this prefix. For instance, if the prefix for an &amp;quot;album&amp;quot; search is defined as db/search/album/, and the search string is &amp;quot;blue&amp;quot;, then the search results container will have an id of db/search/album/blue.&lt;br /&gt;
&lt;br /&gt;
X_MAP_SEARCH_ENTRY_TYPE represents the type of browse hierarchy returned when taking this type of search. See X_MAP_BROWSE_ENTRY_TYPE for details.&lt;br /&gt;
&lt;br /&gt;
There should be an X_MAP_SEARCH_ENTRY for each type of search offered by the media server.&lt;br /&gt;
&lt;br /&gt;
For example:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;X_MAP_SEARCH_ENTRY&amp;gt;&lt;br /&gt;
     &amp;lt;X_MAP_SEARCH_ENTRY_NAME&amp;gt;Artist&amp;lt;/X_MAP_SEARCH_ENTRY_NAME&amp;gt;&lt;br /&gt;
     &amp;lt;X_MAP_SEARCH_ENTRY_ID_PREFIX&amp;gt;db/search/artist/&amp;lt;/X_MAP_SEARCH_ENTRY_ID_PREFIX&amp;gt;&lt;br /&gt;
     &amp;lt;X_MAP_SEARCH_ENTRY_TYPE&amp;gt;artist album&amp;lt;/X_MAP_SEARCH_ENTRY_TYPE&amp;gt;&lt;br /&gt;
 &amp;lt;/X_MAP_SEARCH_ENTRY&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The example above defines a browse hierarchy that is created when searching for an artist. The hierarchy created provides a list of artists, which in turn provide a list of albums, which in turn provide a list of tracks.&lt;br /&gt;
&lt;br /&gt;
=== Types ===&lt;br /&gt;
&lt;br /&gt;
The list of allowed types for X_BROWSE_ENTRY_TYPE, X_MAP_LINK_ENTRY_TAG, X_LINK_ENTRY_TYPE, and X_SEARCH_ENTRY_TYPE&lt;br /&gt;
&lt;br /&gt;
 genre&lt;br /&gt;
 artist&lt;br /&gt;
 composer&lt;br /&gt;
 conductor&lt;br /&gt;
 album&lt;br /&gt;
 year&lt;br /&gt;
 mixed&lt;br /&gt;
&lt;br /&gt;
mixed is a special value that represents a container that has mixed entries. It is not a valid type for the X_MAP_LINK_ENTRY_TAG element.&lt;br /&gt;
&lt;br /&gt;
=== Example device XML ===&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;root xmlns=&amp;quot;urn:schemas-upnp-org:device-1-0&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;specVersion&amp;gt;&lt;br /&gt;
        &amp;lt;major&amp;gt;1&amp;lt;/major&amp;gt;&lt;br /&gt;
        &amp;lt;minor&amp;gt;1&amp;lt;/minor&amp;gt;&lt;br /&gt;
    &amp;lt;/specVersion&amp;gt;&lt;br /&gt;
    &amp;lt;device&amp;gt;&lt;br /&gt;
        &amp;lt;deviceType&amp;gt;urn:schemas-upnp-org:device:MediaServer:1&amp;lt;/deviceType&amp;gt;&lt;br /&gt;
        &amp;lt;dlna:X_DLNADOC xmlns:dlna=&amp;quot;urn:schemas-dlna-org:device-1-0&amp;quot;&amp;gt;DMS-1.50&amp;lt;/dlna:X_DLNADOC&amp;gt;&lt;br /&gt;
        &amp;lt;dlna:X_DLNACAP xmlns:dlna=&amp;quot;urn:schemas-dlna-org:device-1-0&amp;quot;&amp;gt;av-upload,image-upload,audio-upload&amp;lt;/dlna:X_DLNACAP&amp;gt;&lt;br /&gt;
        &amp;lt;openhome:X_MAP xmlns:openhome=&amp;quot;http://www.openhome.org&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;X_MAP_BROWSE&amp;gt;&lt;br /&gt;
                &amp;lt;X_MAP_BROWSE_ENTRY&amp;gt;&lt;br /&gt;
                    &amp;lt;X_MAP_BROWSE_ENTRY_NAME&amp;gt;Albums&amp;lt;/X_MAP_BROWSE_ENTRY_NAME&amp;gt;&lt;br /&gt;
                    &amp;lt;X_MAP_BROWSE_ENTRY_ID&amp;gt;db/browse/albums&amp;lt;/X_MAP_BROWSE_ENTRY_ID&amp;gt;&lt;br /&gt;
                    &amp;lt;X_MAP_BROWSE_ENTRY_TYPE&amp;gt;album&amp;lt;/X_MAP_BROWSE_ENTRY_TYPE&amp;gt;&lt;br /&gt;
                &amp;lt;/X_MAP_BROWSE_ENTRY&amp;gt;&lt;br /&gt;
                &amp;lt;X_MAP_BROWSE_ENTRY&amp;gt;&lt;br /&gt;
                    &amp;lt;X_MAP_BROWSE_ENTRY_NAME&amp;gt;Artists&amp;lt;/X_MAP_BROWSE_ENTRY_NAME&amp;gt;&lt;br /&gt;
                    &amp;lt;X_MAP_BROWSE_ENTRY_ID&amp;gt;db/browse/artists&amp;lt;/X_MAP_BROWSE_ENTRY_ID&amp;gt;&lt;br /&gt;
                    &amp;lt;X_MAP_BROWSE_ENTRY_TYPE&amp;gt;artist album&amp;lt;/X_MAP_BROWSE_ENTRY_TYPE&amp;gt;&lt;br /&gt;
                &amp;lt;/X_MAP_BROWSE_ENTRY&amp;gt;&lt;br /&gt;
                &amp;lt;X_MAP_BROWSE_ENTRY&amp;gt;&lt;br /&gt;
                    &amp;lt;X_MAP_BROWSE_ENTRY_NAME&amp;gt;Folders&amp;lt;/X_MAP_BROWSE_ENTRY_NAME&amp;gt;&lt;br /&gt;
                    &amp;lt;X_MAP_BROWSE_ENTRY_ID&amp;gt;db/browse/folders&amp;lt;/X_MAP_BROWSE_ENTRY_ID&amp;gt;&lt;br /&gt;
                    &amp;lt;X_MAP_BROWSE_ENTRY_TYPE&amp;gt;mixed&amp;lt;/X_MAP_BROWSE_ENTRY_TYPE&amp;gt;&lt;br /&gt;
                &amp;lt;/X_MAP_BROWSE_ENTRY&amp;gt;&lt;br /&gt;
            &amp;lt;/X_MAP_BROWSE&amp;gt;&lt;br /&gt;
            &amp;lt;X_MAP_LINK&amp;gt;&lt;br /&gt;
                &amp;lt;X_MAP_LINK_ENTRY&amp;gt;&lt;br /&gt;
                    &amp;lt;X_MAP_LINK_ENTRY_TAG&amp;gt;artist&amp;lt;/X_MAP_LINK_ENTRY_TAG&amp;gt;&lt;br /&gt;
                    &amp;lt;X_MAP_LINK_ENTRY_ID_PREFIX&amp;gt;db/link/artist/&amp;lt;/X_MAP_LINK_ENTRY_ID_PREFIX&amp;gt;&lt;br /&gt;
                    &amp;lt;X_MAP_LINK_ENTRY_TYPE&amp;gt;album&amp;lt;/X_MAP_LINK_ENTRY_TYPE&amp;gt;&lt;br /&gt;
                &amp;lt;/X_MAP_LINK_ENTRY&amp;gt;&lt;br /&gt;
                &amp;lt;X_MAP_LINK_ENTRY&amp;gt;&lt;br /&gt;
                    &amp;lt;X_MAP_LINK_ENTRY_TAG&amp;gt;composer&amp;lt;/X_MAP_LINK_ENTRY_TAG&amp;gt;&lt;br /&gt;
                    &amp;lt;X_MAP_LINK_ENTRY_ID_PREFIX&amp;gt;db/link/composer/&amp;lt;/X_MAP_LINK_ENTRY_ID_PREFIX&amp;gt;&lt;br /&gt;
                    &amp;lt;X_MAP_LINK_ENTRY_TYPE&amp;gt;album&amp;lt;/X_MAP_LINK_ENTRY_TYPE&amp;gt;&lt;br /&gt;
                &amp;lt;/X_MAP_LINK_ENTRY&amp;gt;&lt;br /&gt;
            &amp;lt;/X_MAP_LINK&amp;gt;&lt;br /&gt;
            &amp;lt;X_MAP_SEARCH&amp;gt;&lt;br /&gt;
                &amp;lt;X_MAP_SEARCH_ENTRY&amp;gt;&lt;br /&gt;
                    &amp;lt;X_MAP_SEARCH_ENTRY_NAME&amp;gt;Artist&amp;lt;/X_MAP_SEARCH_ENTRY_NAME&amp;gt;&lt;br /&gt;
                    &amp;lt;X_MAP_SEARCH_ENTRY_ID_PREFIX&amp;gt;db/search/artist/&amp;lt;/X_MAP_SEARCH_ENTRY_ID_PREFIX&amp;gt;&lt;br /&gt;
                    &amp;lt;X_MAP_SEARCH_ENTRY_TYPE&amp;gt;artist album&amp;lt;/X_MAP_SEARCH_ENTRY_TYPE&amp;gt;&lt;br /&gt;
                &amp;lt;/X_MAP_SEARCH_ENTRY&amp;gt;&lt;br /&gt;
                &amp;lt;X_MAP_SEARCH_ENTRY&amp;gt;&lt;br /&gt;
                    &amp;lt;X_MAP_SEARCH_ENTRY_NAME&amp;gt;Tracks&amp;lt;/X_MAP_SEARCH_ENTRY_NAME&amp;gt;&lt;br /&gt;
                    &amp;lt;X_MAP_SEARCH_ENTRY_ID_PREFIX&amp;gt;db/search/all/&amp;lt;/X_MAP_SEARCH_ENTRY_ID_PREFIX&amp;gt;&lt;br /&gt;
                    &amp;lt;X_MAP_SEARCH_ENTRY_TYPE&amp;gt;&amp;lt;/X_MAP_SEARCH_ENTRY_TYPE&amp;gt;&lt;br /&gt;
                &amp;lt;/X_MAP_SEARCH_ENTRY&amp;gt;&lt;br /&gt;
            &amp;lt;/X_MAP_SEARCH&amp;gt;&lt;br /&gt;
        &amp;lt;/openhome:X_MAP&amp;gt;&lt;br /&gt;
        &amp;lt;presentationURL&amp;gt;http://10.2.1.170:4000/res/linn.co.uk.kazooserver/index.html&amp;lt;/presentationURL&amp;gt;&lt;br /&gt;
        &amp;lt;friendlyName&amp;gt;Linn Kazoo Server [R&amp;amp;D Mac Mini]&amp;lt;/friendlyName&amp;gt;&lt;br /&gt;
        &amp;lt;manufacturer&amp;gt;Linn&amp;lt;/manufacturer&amp;gt;&lt;br /&gt;
        &amp;lt;manufacturerURL&amp;gt;http://www.linn.co.uk&amp;lt;/manufacturerURL&amp;gt;&lt;br /&gt;
        &amp;lt;modelName&amp;gt;Kazoo Server&amp;lt;/modelName&amp;gt;&lt;br /&gt;
        &amp;lt;modelURL&amp;gt;http://oss.linn.co.uk/trac/wiki/KazooServer&amp;lt;/modelURL&amp;gt;&lt;br /&gt;
        &amp;lt;UDN&amp;gt;uuid:ac3d630e37b5f11ff5cdd23c0f5a7400&amp;lt;/UDN&amp;gt;&lt;br /&gt;
        &amp;lt;iconList&amp;gt;&lt;br /&gt;
            &amp;lt;icon&amp;gt;&lt;br /&gt;
                &amp;lt;mimetype&amp;gt;image/png&amp;lt;/mimetype&amp;gt;&lt;br /&gt;
                &amp;lt;width&amp;gt;65&amp;lt;/width&amp;gt;&lt;br /&gt;
                &amp;lt;height&amp;gt;65&amp;lt;/height&amp;gt;&lt;br /&gt;
                &amp;lt;depth&amp;gt;32&amp;lt;/depth&amp;gt;&lt;br /&gt;
                &amp;lt;url&amp;gt;ac3d630e37b5f11ff5cdd23c0f5a7400/resource/icon/icon&amp;lt;/url&amp;gt;&lt;br /&gt;
            &amp;lt;/icon&amp;gt;&lt;br /&gt;
        &amp;lt;/iconList&amp;gt;&lt;br /&gt;
        &amp;lt;serviceList&amp;gt;&lt;br /&gt;
            &amp;lt;service&amp;gt;&lt;br /&gt;
                &amp;lt;serviceType&amp;gt;urn:av-openhome-org:service:PlaylistManager:1&amp;lt;/serviceType&amp;gt;&lt;br /&gt;
                &amp;lt;serviceId&amp;gt;urn:av-openhome-org:serviceId:PlaylistManager&amp;lt;/serviceId&amp;gt;&lt;br /&gt;
                &amp;lt;SCPDURL&amp;gt;/ac3d630e37b5f11ff5cdd23c0f5a7400/Upnp/av.openhome.org-PlaylistManager-1/service.xml&amp;lt;/SCPDURL&amp;gt;&lt;br /&gt;
                &amp;lt;controlURL&amp;gt;/ac3d630e37b5f11ff5cdd23c0f5a7400/av.openhome.org-PlaylistManager-1/control&amp;lt;/controlURL&amp;gt;&lt;br /&gt;
                &amp;lt;eventSubURL&amp;gt;/ac3d630e37b5f11ff5cdd23c0f5a7400/av.openhome.org-PlaylistManager-1/event&amp;lt;/eventSubURL&amp;gt;&lt;br /&gt;
            &amp;lt;/service&amp;gt;&lt;br /&gt;
            &amp;lt;service&amp;gt;&lt;br /&gt;
                &amp;lt;serviceType&amp;gt;urn:schemas-upnp-org:service:ContentDirectory:1&amp;lt;/serviceType&amp;gt;&lt;br /&gt;
                &amp;lt;serviceId&amp;gt;urn:upnp-org:serviceId:ContentDirectory&amp;lt;/serviceId&amp;gt;&lt;br /&gt;
                &amp;lt;SCPDURL&amp;gt;/ac3d630e37b5f11ff5cdd23c0f5a7400/Upnp/upnp.org-ContentDirectory-1/service.xml&amp;lt;/SCPDURL&amp;gt;&lt;br /&gt;
                &amp;lt;controlURL&amp;gt;/ac3d630e37b5f11ff5cdd23c0f5a7400/upnp.org-ContentDirectory-1/control&amp;lt;/controlURL&amp;gt;&lt;br /&gt;
                &amp;lt;eventSubURL&amp;gt;/ac3d630e37b5f11ff5cdd23c0f5a7400/upnp.org-ContentDirectory-1/event&amp;lt;/eventSubURL&amp;gt;&lt;br /&gt;
            &amp;lt;/service&amp;gt;&lt;br /&gt;
            &amp;lt;service&amp;gt;&lt;br /&gt;
                &amp;lt;serviceType&amp;gt;urn:schemas-upnp-org:service:ConnectionManager:1&amp;lt;/serviceType&amp;gt;&lt;br /&gt;
                &amp;lt;serviceId&amp;gt;urn:upnp-org:serviceId:ConnectionManager&amp;lt;/serviceId&amp;gt;&lt;br /&gt;
                &amp;lt;SCPDURL&amp;gt;/ac3d630e37b5f11ff5cdd23c0f5a7400/Upnp/upnp.org-ConnectionManager-1/service.xml&amp;lt;/SCPDURL&amp;gt;&lt;br /&gt;
                &amp;lt;controlURL&amp;gt;/ac3d630e37b5f11ff5cdd23c0f5a7400/upnp.org-ConnectionManager-1/control&amp;lt;/controlURL&amp;gt;&lt;br /&gt;
                &amp;lt;eventSubURL&amp;gt;/ac3d630e37b5f11ff5cdd23c0f5a7400/upnp.org-ConnectionManager-1/event&amp;lt;/eventSubURL&amp;gt;&lt;br /&gt;
            &amp;lt;/service&amp;gt;&lt;br /&gt;
        &amp;lt;/serviceList&amp;gt;&lt;br /&gt;
    &amp;lt;/device&amp;gt;&lt;br /&gt;
 &amp;lt;/root&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Index maps ==&lt;br /&gt;
&lt;br /&gt;
Large lists are difficult to navigate, especially on mobile devices. Mobile devices added the idea of an index map to improve this situation. The index map allows a users to jump to different sections in a large list, similar to what is possible with a scrollbar on desktops.&lt;br /&gt;
&lt;br /&gt;
In order for a control point to generate an index map for any particular level in a ContentDirectory&#039;s hierarchy it first needs to download all the objects in the container, figure out if they are sorted and then calculate the index map. This means that a user will need to wait, perhaps minutes, before an index map is able to be presented on the UI. &lt;br /&gt;
&lt;br /&gt;
The media server can optionally return an index map for container that are in alphabetical order. This implemented through a OpenHome vendor extension of the DIDL-Lite XML. Below shows an example DIDL-Lite with an index map included.&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;DIDL-Lite xmlns=&amp;quot;urn:schemas-upnp-org:metadata-1-0/DIDL-Lite/&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;container id=&amp;quot;db/ba37a2ac24efa676c8676aab71a6cdf074&amp;quot; parentID=&amp;quot;0&amp;quot; restricted=&amp;quot;true&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;dc:title xmlns:dc=&amp;quot;http://purl.org/dc/elements/1.1/&amp;quot;&amp;gt;Worlds Apart [Deluxe Edition]&amp;lt;/dc:title&amp;gt;&lt;br /&gt;
        &amp;lt;upnp:udn xmlns:upnp=&amp;quot;urn:schemas-upnp-org:metadata-1-0/upnp/&amp;quot;&amp;gt;ac3d630e37b5f11ff5cdd23c0f5a7400&amp;lt;/upnp:udn&amp;gt;&lt;br /&gt;
        &amp;lt;upnp:class xmlns:upnp=&amp;quot;urn:schemas-upnp-org:metadata-1-0/upnp/&amp;quot;&amp;gt;object.container.album.musicAlbum&amp;lt;/upnp:class&amp;gt;&lt;br /&gt;
        &amp;lt;upnp:artist xmlns:upnp=&amp;quot;urn:schemas-upnp-org:metadata-1-0/upnp/&amp;quot;&amp;gt;...And You Will Know Us by the Trail of Dead&amp;lt;/upnp:artist&amp;gt;&lt;br /&gt;
        &amp;lt;upnp:albumArtURI&amp;gt;http://10.2.1.170:4000/linn.co.uk.kazooserver/ms/artwork/37a2ac2?size=0&amp;lt;/upnp:albumArtURI&amp;gt;&lt;br /&gt;
    &amp;lt;/container&amp;gt;&lt;br /&gt;
    &amp;lt;desc nameSpace=&amp;quot;openhome.org&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;indexmap&amp;gt;0 10 10 10 10 10 0 0 0 0 10 12 1 10 10 10 12 17 18 1 0 20 0 20 20 2 2 24&amp;lt;/indexmap&amp;gt;&lt;br /&gt;
    &amp;lt;/desc&amp;gt;&lt;br /&gt;
 &amp;lt;/DIDL-Lite&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The index map contains a space separated list of 28 number representing the total number of items that begin with that letter. #, represents everything below A, largely digits and punctuation and + represents everything above Z, largely international characters not collatable within the roman alphabet.&lt;br /&gt;
&lt;br /&gt;
 # A B C D E F G H I J K L M N O P Q R S T U V W X Y Z +&lt;br /&gt;
&lt;br /&gt;
== Image Resolution ==&lt;br /&gt;
&lt;br /&gt;
Control points running on different platforms have different memory limits and display technologies. This means that a control point on a PC might want to display artwork at a high resolution, while a control point on a PDA might want to display artwork at a much lower resolution.&lt;br /&gt;
&lt;br /&gt;
Media servers often try to solve this problem using one of the following two methods:&lt;br /&gt;
&lt;br /&gt;
# A configurable parameter that scales all artwork to a user defined size&lt;br /&gt;
# A profile system where a user can create profiles for each class of control point they have and configure a parameter that scales all artwork to a user defined size per profile&lt;br /&gt;
&lt;br /&gt;
The first solution is highly problematic because it limits the resolution of artwork across the whole network. But a single network very often contains control points that can display high resolution images AND control points that can&#039;t.&lt;br /&gt;
&lt;br /&gt;
The second solution is just architecturally poor, turning the relationship between a control point and a media server on its head. Why should the media server try to infer what a control point needs through configuration when the control point is perfectly capable of telling the media server its exact requirements in every single circumstance.&lt;br /&gt;
&lt;br /&gt;
Compliant media servers should include a &#039;&#039;&#039;size&#039;&#039;&#039; element in their artwork URIs, where the size is the image&#039;s largest dimension. This allows a control point to ask for an image at a specified size.&lt;br /&gt;
&lt;br /&gt;
The size requested by a control point is a hint for the media server and it does not imply that the media server will satisfy the requested size. For example a control point might request size=160 but the media server returns size=256 as it is the closest match in its cache.&lt;br /&gt;
&lt;br /&gt;
=== Example ===&lt;br /&gt;
&lt;br /&gt;
If the original artwork was 400x512, then a media server would provide the following albumArtURI: &amp;lt;uri&amp;gt;?size=512. If it is not possible for the media server to obtain the original resolution then the media server would provide the following albumArtURI: &amp;lt;uri&amp;gt;?size=0.&lt;br /&gt;
&lt;br /&gt;
The presence of the size element tells the control point:&lt;br /&gt;
&lt;br /&gt;
# the media server implements the image scaling extension&lt;br /&gt;
# the original size of the image.&lt;br /&gt;
&lt;br /&gt;
Now the control point can request the image at any resolution by using &amp;lt;uri&amp;gt;?size=x, where x is the size it wants.&lt;br /&gt;
&lt;br /&gt;
So, in this example, &amp;lt;uri&amp;gt;?size=1024 gets an 800x1024 image, and &amp;lt;uri&amp;gt;?size=200 gets a 156x200 image.&lt;br /&gt;
&lt;br /&gt;
== Dynamic IP Addresses ==&lt;br /&gt;
&lt;br /&gt;
At present all media servers return URIs that contain a reference to their IP address, e.g. http://172.20.1.1/music.flac etc. This means that if the media server&#039;s IP address were to change across reboots, then any control point or media renderer with URIs that referenced the media server before the reboot will become invalid.&lt;br /&gt;
&lt;br /&gt;
If a user wants to ensure a URI provided by the media server is long lived the host machine running the media server must be assigned a static or dynamic reserved IP address.&lt;br /&gt;
&lt;br /&gt;
== Disc Information ==&lt;br /&gt;
&lt;br /&gt;
A new property has been added to the musicTrack item called &#039;&#039;&#039;OriginalDiscNumber&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
A new property has been added to the musicAlbum item called &#039;&#039;&#039;OriginalDiscCount&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
== Replay Gain Information ==&lt;br /&gt;
&lt;br /&gt;
Four new properties have been added to the musicTrack item called &#039;&#039;&#039;ReplayGainAlbum&#039;&#039;&#039;, &#039;&#039;&#039;ReplayGainAlbumPeak&#039;&#039;&#039;, &#039;&#039;&#039;ReplayGainTrack&#039;&#039;&#039;, and &#039;&#039;&#039;ReplayGainTrackPeak&#039;&#039;&#039;.&lt;/div&gt;</summary>
		<author><name>Davidd</name></author>
	</entry>
	<entry>
		<id>https://docs.linn.co.uk/wiki/index.php?title=Developer:Media_Server_Extensions&amp;diff=11245</id>
		<title>Developer:Media Server Extensions</title>
		<link rel="alternate" type="text/html" href="https://docs.linn.co.uk/wiki/index.php?title=Developer:Media_Server_Extensions&amp;diff=11245"/>
		<updated>2015-03-16T11:29:23Z</updated>

		<summary type="html">&lt;p&gt;Davidd: /* Image Resolution */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Introduction =&lt;br /&gt;
&lt;br /&gt;
The ContentDirectory service has various limitations which become apparent when implementing control points on different hardware platforms. This document aims to outline some ideas that address the various shortcomings of the ContentDirectory specification.&lt;br /&gt;
&lt;br /&gt;
== Container map ==&lt;br /&gt;
&lt;br /&gt;
The current ContentDirectory specification makes it tricky for a control point to display the returned contents in an appropriate, aesthetically pleasing, manner for the content being viewed. This is because the ContentDirectory specification does not allow for a control point to know in advanced what content to expect when browsing through any particular hierarchy.&lt;br /&gt;
&lt;br /&gt;
An example of this might be, at a particular point in the browse hierarchy the ContentDirectory will return a list of albums which in turn will contain a list of tracks. A UI might wish to represent this list of albums as a grid and the album&#039;s tracks as a header and a list of the tracks. Currently it is not possible for the UI to know when it gets to a point in a hierarchy where the hierarchy represents a list of albums followed by a list of tracks.&lt;br /&gt;
&lt;br /&gt;
The container map extension allows a media server to express its container hierarchy in advance of the control point navigating it. This is done using an OpenHome vendor extension to the device XML.&lt;br /&gt;
&lt;br /&gt;
Three types of mapped container are defined: browse, link, and search.&lt;br /&gt;
&lt;br /&gt;
The browse map defines named top level containers that represent significant starting points for browsing that can meaningfully be presented in top level tabs of a control point UI. The browse map is expressed within the X_MAP_BROWSE element of X_MAP.&lt;br /&gt;
&lt;br /&gt;
The link map defines containers that can be meaningfully linked to from track or album details. For instance a track will typically have an artist defined. If an entry for &amp;quot;artist&amp;quot; is defined in the link map then it will be possible for the user of a control point to quickly access this artist-related container by clicking on the track&#039;s artist text. Similar links might be offered for &amp;quot;genre&amp;quot;, &amp;quot;composer&amp;quot;, &amp;quot;conductor&amp;quot;, etc. The link map is expressed within the X_MAP_LINK element of X_MAP.&lt;br /&gt;
&lt;br /&gt;
The search map defines the different kinds of search containers and the type of results that they produce. The search map is expressed within the X_MAP_SEARCH element of X_MAP.&lt;br /&gt;
&lt;br /&gt;
=== Browse map ===&lt;br /&gt;
&lt;br /&gt;
The X_MAP_BROWSE element must contain 1 or more X_MAP_BROWSE_ENTRY elements.&lt;br /&gt;
&lt;br /&gt;
The X_MAP_BROWSE_ENTRY has three child elements.&lt;br /&gt;
&lt;br /&gt;
X_MAP_BROWSE_ENTRY_NAME is a string that can be used by a control point to label a tab containing this browse hierarchy.&lt;br /&gt;
&lt;br /&gt;
X_MAP_BROWSE_ENTRY_ID is the UPnP container id that contains the root of this browse hierarchy. This id is then submitted to the ContentDirectory service using the Browse action as usual. The returned contents are navigated using subsequent Browse request as usual. The difference is that the control point knows in advance what kind of results to expect at each level.&lt;br /&gt;
&lt;br /&gt;
X_MAP_BROWSE_ENTRY_TYPE is a space separated list of strings that maps out the kind of containers that are to be found at each level of this browse hierarchy. For instance, &amp;quot;artist album&amp;quot; represents a browse hierarchy giving a container containing only artist containers, each of which contains only album containers, each of which contains only tracks.&lt;br /&gt;
&lt;br /&gt;
There should be an X_MAP_BROWSE_ENTRY for each root browse hierarchy defined by the media server.&lt;br /&gt;
&lt;br /&gt;
For example:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;X_MAP_BROWSE_ENTRY&amp;gt;&lt;br /&gt;
     &amp;lt;X_MAP_BROWSE_ENTRY_NAME&amp;gt;Genre&amp;lt;/X_MAP_BROWSE_ENTRY_NAME&amp;gt;&lt;br /&gt;
     &amp;lt;X_MAP_BROWSE_ENTRY_ID&amp;gt;db/browse/genre&amp;lt;/X_MAP_BROWSE_ENTRY_ID&amp;gt;&lt;br /&gt;
     &amp;lt;X_MAP_BROWSE_ENTRY_TYPE&amp;gt;genre artist album&amp;lt;/X_MAP_BROWSE_ENTRY_TYPE&amp;gt;&lt;br /&gt;
 &amp;lt;/X_MAP_BROWSE_ENTRY&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Link map ===&lt;br /&gt;
&lt;br /&gt;
The X_MAP_LINK element must contain 1 or more X_MAP_LINK_ENTRY elements.&lt;br /&gt;
&lt;br /&gt;
The X_MAP_LINK_ENTRY has three child elements.&lt;br /&gt;
&lt;br /&gt;
X_MAP_LINK_ENTRY_TAG is a string that defines which type of metadata is the target for this link. e.g. &amp;quot;artist&amp;quot;, &amp;quot;genre&amp;quot;, &amp;quot;composer&amp;quot;, etc. See the type section below. &lt;br /&gt;
&lt;br /&gt;
X_MAP_LINK_ENTRY_ID_PREFIX is a string that is prefix for a UPnP container id. The link can be taken by browsing to the container whose id is the result of appending the associated metadata value to this prefix. For instance, if the prefix for an &amp;quot;artist&amp;quot; link is defined as db/link/artist/, and a track returned anywhere in the media server&#039;s library has &amp;quot;Pink Floyd&amp;quot; as its artist. Then the linked container will have an id of db/link/artist/Pink Floyd.&lt;br /&gt;
&lt;br /&gt;
X_MAP_LINK_ENTRY_TYPE represents the type of browse hierarchy returned when taking this type of link. See X_MAP_BROWSE_ENTRY_TYPE for details.&lt;br /&gt;
&lt;br /&gt;
There should be an X_MAP_LINK_ENTRY for each piece of metadata that the media server allows to be linked.&lt;br /&gt;
&lt;br /&gt;
For example:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;X_MAP_LINK_ENTRY&amp;gt;&lt;br /&gt;
     &amp;lt;X_MAP_LINK_ENTRY_TAG&amp;gt;artist&amp;lt;/X_MAP_LINK_ENTRY_TAG&amp;gt;&lt;br /&gt;
     &amp;lt;X_MAP_LINK_ENTRY_ID_PREFIX&amp;gt;db/link/artist/&amp;lt;/X_MAP_LINK_ENTRY_ID_PREFIX&amp;gt;&lt;br /&gt;
     &amp;lt;X_MAP_LINK_ENTRY_TYPE&amp;gt;album&amp;lt;/X_MAP_LINK_ENTRY_TYPE&amp;gt;&lt;br /&gt;
 &amp;lt;/X_MAP_LINK_ENTRY&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The example above defines a browse hierarchy that is created when linking from an artist name. The hierarchy created provides a list of linked artist albums which in turn provide a list of tracks.&lt;br /&gt;
&lt;br /&gt;
=== Search map ===&lt;br /&gt;
&lt;br /&gt;
The X_MAP_SEARCH element must contain 1 or more X_MAP_SEARCH_ENTRY elements.&lt;br /&gt;
&lt;br /&gt;
The X_MAP_SEARCH_ENTRY has three child elements.&lt;br /&gt;
&lt;br /&gt;
X_MAP_SEARCH_ENTRY_NAME  is a string that can be used by a control point to label a tab containing these search results.&lt;br /&gt;
&lt;br /&gt;
X_MAP_SEARCH_ENTRY_ID_PREFIX is a string that is a prefix for a UPnP container id. The search results can be found by browsing to the container whose id is the result of appending the search string to this prefix. For instance, if the prefix for an &amp;quot;album&amp;quot; search is defined as db/search/album/, and the search string is &amp;quot;blue&amp;quot;, then the search results container will have an id of db/search/album/blue.&lt;br /&gt;
&lt;br /&gt;
X_MAP_SEARCH_ENTRY_TYPE represents the type of browse hierarchy returned when taking this type of search. See X_MAP_BROWSE_ENTRY_TYPE for details.&lt;br /&gt;
&lt;br /&gt;
There should be an X_MAP_SEARCH_ENTRY for each type of search offered by the media server.&lt;br /&gt;
&lt;br /&gt;
For example:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;X_MAP_SEARCH_ENTRY&amp;gt;&lt;br /&gt;
     &amp;lt;X_MAP_SEARCH_ENTRY_NAME&amp;gt;Artist&amp;lt;/X_MAP_SEARCH_ENTRY_NAME&amp;gt;&lt;br /&gt;
     &amp;lt;X_MAP_SEARCH_ENTRY_ID_PREFIX&amp;gt;db/search/artist/&amp;lt;/X_MAP_SEARCH_ENTRY_ID_PREFIX&amp;gt;&lt;br /&gt;
     &amp;lt;X_MAP_SEARCH_ENTRY_TYPE&amp;gt;artist album&amp;lt;/X_MAP_SEARCH_ENTRY_TYPE&amp;gt;&lt;br /&gt;
 &amp;lt;/X_MAP_SEARCH_ENTRY&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The example above defines a browse hierarchy that is created when searching for an artist. The hierarchy created provides a list of artists, which in turn provide a list of albums, which in turn provide a list of tracks.&lt;br /&gt;
&lt;br /&gt;
=== Types ===&lt;br /&gt;
&lt;br /&gt;
The list of allowed types for X_BROWSE_ENTRY_TYPE, X_MAP_LINK_ENTRY_TAG, X_LINK_ENTRY_TYPE, and X_SEARCH_ENTRY_TYPE&lt;br /&gt;
&lt;br /&gt;
 genre&lt;br /&gt;
 artist&lt;br /&gt;
 composer&lt;br /&gt;
 conductor&lt;br /&gt;
 album&lt;br /&gt;
 year&lt;br /&gt;
 mixed&lt;br /&gt;
&lt;br /&gt;
mixed is a special value that represents a container that has mixed entries. It is not a valid type for the X_MAP_LINK_ENTRY_TAG element.&lt;br /&gt;
&lt;br /&gt;
=== Example device XML ===&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;root xmlns=&amp;quot;urn:schemas-upnp-org:device-1-0&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;specVersion&amp;gt;&lt;br /&gt;
        &amp;lt;major&amp;gt;1&amp;lt;/major&amp;gt;&lt;br /&gt;
        &amp;lt;minor&amp;gt;1&amp;lt;/minor&amp;gt;&lt;br /&gt;
    &amp;lt;/specVersion&amp;gt;&lt;br /&gt;
    &amp;lt;device&amp;gt;&lt;br /&gt;
        &amp;lt;deviceType&amp;gt;urn:schemas-upnp-org:device:MediaServer:1&amp;lt;/deviceType&amp;gt;&lt;br /&gt;
        &amp;lt;dlna:X_DLNADOC xmlns:dlna=&amp;quot;urn:schemas-dlna-org:device-1-0&amp;quot;&amp;gt;DMS-1.50&amp;lt;/dlna:X_DLNADOC&amp;gt;&lt;br /&gt;
        &amp;lt;dlna:X_DLNACAP xmlns:dlna=&amp;quot;urn:schemas-dlna-org:device-1-0&amp;quot;&amp;gt;av-upload,image-upload,audio-upload&amp;lt;/dlna:X_DLNACAP&amp;gt;&lt;br /&gt;
        &amp;lt;openhome:X_MAP xmlns:openhome=&amp;quot;http://www.openhome.org&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;X_MAP_BROWSE&amp;gt;&lt;br /&gt;
                &amp;lt;X_MAP_BROWSE_ENTRY&amp;gt;&lt;br /&gt;
                    &amp;lt;X_MAP_BROWSE_ENTRY_NAME&amp;gt;Albums&amp;lt;/X_MAP_BROWSE_ENTRY_NAME&amp;gt;&lt;br /&gt;
                    &amp;lt;X_MAP_BROWSE_ENTRY_ID&amp;gt;db/browse/albums&amp;lt;/X_MAP_BROWSE_ENTRY_ID&amp;gt;&lt;br /&gt;
                    &amp;lt;X_MAP_BROWSE_ENTRY_TYPE&amp;gt;album&amp;lt;/X_MAP_BROWSE_ENTRY_TYPE&amp;gt;&lt;br /&gt;
                &amp;lt;/X_MAP_BROWSE_ENTRY&amp;gt;&lt;br /&gt;
                &amp;lt;X_MAP_BROWSE_ENTRY&amp;gt;&lt;br /&gt;
                    &amp;lt;X_MAP_BROWSE_ENTRY_NAME&amp;gt;Artists&amp;lt;/X_MAP_BROWSE_ENTRY_NAME&amp;gt;&lt;br /&gt;
                    &amp;lt;X_MAP_BROWSE_ENTRY_ID&amp;gt;db/browse/artists&amp;lt;/X_MAP_BROWSE_ENTRY_ID&amp;gt;&lt;br /&gt;
                    &amp;lt;X_MAP_BROWSE_ENTRY_TYPE&amp;gt;artist album&amp;lt;/X_MAP_BROWSE_ENTRY_TYPE&amp;gt;&lt;br /&gt;
                &amp;lt;/X_MAP_BROWSE_ENTRY&amp;gt;&lt;br /&gt;
                &amp;lt;X_MAP_BROWSE_ENTRY&amp;gt;&lt;br /&gt;
                    &amp;lt;X_MAP_BROWSE_ENTRY_NAME&amp;gt;Folders&amp;lt;/X_MAP_BROWSE_ENTRY_NAME&amp;gt;&lt;br /&gt;
                    &amp;lt;X_MAP_BROWSE_ENTRY_ID&amp;gt;db/browse/folders&amp;lt;/X_MAP_BROWSE_ENTRY_ID&amp;gt;&lt;br /&gt;
                    &amp;lt;X_MAP_BROWSE_ENTRY_TYPE&amp;gt;mixed&amp;lt;/X_MAP_BROWSE_ENTRY_TYPE&amp;gt;&lt;br /&gt;
                &amp;lt;/X_MAP_BROWSE_ENTRY&amp;gt;&lt;br /&gt;
            &amp;lt;/X_MAP_BROWSE&amp;gt;&lt;br /&gt;
            &amp;lt;X_MAP_LINK&amp;gt;&lt;br /&gt;
                &amp;lt;X_MAP_LINK_ENTRY&amp;gt;&lt;br /&gt;
                    &amp;lt;X_MAP_LINK_ENTRY_TAG&amp;gt;artist&amp;lt;/X_MAP_LINK_ENTRY_TAG&amp;gt;&lt;br /&gt;
                    &amp;lt;X_MAP_LINK_ENTRY_ID_PREFIX&amp;gt;db/link/artist/&amp;lt;/X_MAP_LINK_ENTRY_ID_PREFIX&amp;gt;&lt;br /&gt;
                    &amp;lt;X_MAP_LINK_ENTRY_TYPE&amp;gt;album&amp;lt;/X_MAP_LINK_ENTRY_TYPE&amp;gt;&lt;br /&gt;
                &amp;lt;/X_MAP_LINK_ENTRY&amp;gt;&lt;br /&gt;
                &amp;lt;X_MAP_LINK_ENTRY&amp;gt;&lt;br /&gt;
                    &amp;lt;X_MAP_LINK_ENTRY_TAG&amp;gt;composer&amp;lt;/X_MAP_LINK_ENTRY_TAG&amp;gt;&lt;br /&gt;
                    &amp;lt;X_MAP_LINK_ENTRY_ID_PREFIX&amp;gt;db/link/composer/&amp;lt;/X_MAP_LINK_ENTRY_ID_PREFIX&amp;gt;&lt;br /&gt;
                    &amp;lt;X_MAP_LINK_ENTRY_TYPE&amp;gt;album&amp;lt;/X_MAP_LINK_ENTRY_TYPE&amp;gt;&lt;br /&gt;
                &amp;lt;/X_MAP_LINK_ENTRY&amp;gt;&lt;br /&gt;
            &amp;lt;/X_MAP_LINK&amp;gt;&lt;br /&gt;
            &amp;lt;X_MAP_SEARCH&amp;gt;&lt;br /&gt;
                &amp;lt;X_MAP_SEARCH_ENTRY&amp;gt;&lt;br /&gt;
                    &amp;lt;X_MAP_SEARCH_ENTRY_NAME&amp;gt;Artist&amp;lt;/X_MAP_SEARCH_ENTRY_NAME&amp;gt;&lt;br /&gt;
                    &amp;lt;X_MAP_SEARCH_ENTRY_ID_PREFIX&amp;gt;db/search/artist/&amp;lt;/X_MAP_SEARCH_ENTRY_ID_PREFIX&amp;gt;&lt;br /&gt;
                    &amp;lt;X_MAP_SEARCH_ENTRY_TYPE&amp;gt;artist album&amp;lt;/X_MAP_SEARCH_ENTRY_TYPE&amp;gt;&lt;br /&gt;
                &amp;lt;/X_MAP_SEARCH_ENTRY&amp;gt;&lt;br /&gt;
                &amp;lt;X_MAP_SEARCH_ENTRY&amp;gt;&lt;br /&gt;
                    &amp;lt;X_MAP_SEARCH_ENTRY_NAME&amp;gt;Tracks&amp;lt;/X_MAP_SEARCH_ENTRY_NAME&amp;gt;&lt;br /&gt;
                    &amp;lt;X_MAP_SEARCH_ENTRY_ID_PREFIX&amp;gt;db/search/all/&amp;lt;/X_MAP_SEARCH_ENTRY_ID_PREFIX&amp;gt;&lt;br /&gt;
                    &amp;lt;X_MAP_SEARCH_ENTRY_TYPE&amp;gt;&amp;lt;/X_MAP_SEARCH_ENTRY_TYPE&amp;gt;&lt;br /&gt;
                &amp;lt;/X_MAP_SEARCH_ENTRY&amp;gt;&lt;br /&gt;
            &amp;lt;/X_MAP_SEARCH&amp;gt;&lt;br /&gt;
        &amp;lt;/openhome:X_MAP&amp;gt;&lt;br /&gt;
        &amp;lt;presentationURL&amp;gt;http://10.2.1.170:4000/res/linn.co.uk.kazooserver/index.html&amp;lt;/presentationURL&amp;gt;&lt;br /&gt;
        &amp;lt;friendlyName&amp;gt;Linn Kazoo Server [R&amp;amp;D Mac Mini]&amp;lt;/friendlyName&amp;gt;&lt;br /&gt;
        &amp;lt;manufacturer&amp;gt;Linn&amp;lt;/manufacturer&amp;gt;&lt;br /&gt;
        &amp;lt;manufacturerURL&amp;gt;http://www.linn.co.uk&amp;lt;/manufacturerURL&amp;gt;&lt;br /&gt;
        &amp;lt;modelName&amp;gt;Kazoo Server&amp;lt;/modelName&amp;gt;&lt;br /&gt;
        &amp;lt;modelURL&amp;gt;http://oss.linn.co.uk/trac/wiki/KazooServer&amp;lt;/modelURL&amp;gt;&lt;br /&gt;
        &amp;lt;UDN&amp;gt;uuid:ac3d630e37b5f11ff5cdd23c0f5a7400&amp;lt;/UDN&amp;gt;&lt;br /&gt;
        &amp;lt;iconList&amp;gt;&lt;br /&gt;
            &amp;lt;icon&amp;gt;&lt;br /&gt;
                &amp;lt;mimetype&amp;gt;image/png&amp;lt;/mimetype&amp;gt;&lt;br /&gt;
                &amp;lt;width&amp;gt;65&amp;lt;/width&amp;gt;&lt;br /&gt;
                &amp;lt;height&amp;gt;65&amp;lt;/height&amp;gt;&lt;br /&gt;
                &amp;lt;depth&amp;gt;32&amp;lt;/depth&amp;gt;&lt;br /&gt;
                &amp;lt;url&amp;gt;ac3d630e37b5f11ff5cdd23c0f5a7400/resource/icon/icon&amp;lt;/url&amp;gt;&lt;br /&gt;
            &amp;lt;/icon&amp;gt;&lt;br /&gt;
        &amp;lt;/iconList&amp;gt;&lt;br /&gt;
        &amp;lt;serviceList&amp;gt;&lt;br /&gt;
            &amp;lt;service&amp;gt;&lt;br /&gt;
                &amp;lt;serviceType&amp;gt;urn:av-openhome-org:service:PlaylistManager:1&amp;lt;/serviceType&amp;gt;&lt;br /&gt;
                &amp;lt;serviceId&amp;gt;urn:av-openhome-org:serviceId:PlaylistManager&amp;lt;/serviceId&amp;gt;&lt;br /&gt;
                &amp;lt;SCPDURL&amp;gt;/ac3d630e37b5f11ff5cdd23c0f5a7400/Upnp/av.openhome.org-PlaylistManager-1/service.xml&amp;lt;/SCPDURL&amp;gt;&lt;br /&gt;
                &amp;lt;controlURL&amp;gt;/ac3d630e37b5f11ff5cdd23c0f5a7400/av.openhome.org-PlaylistManager-1/control&amp;lt;/controlURL&amp;gt;&lt;br /&gt;
                &amp;lt;eventSubURL&amp;gt;/ac3d630e37b5f11ff5cdd23c0f5a7400/av.openhome.org-PlaylistManager-1/event&amp;lt;/eventSubURL&amp;gt;&lt;br /&gt;
            &amp;lt;/service&amp;gt;&lt;br /&gt;
            &amp;lt;service&amp;gt;&lt;br /&gt;
                &amp;lt;serviceType&amp;gt;urn:schemas-upnp-org:service:ContentDirectory:1&amp;lt;/serviceType&amp;gt;&lt;br /&gt;
                &amp;lt;serviceId&amp;gt;urn:upnp-org:serviceId:ContentDirectory&amp;lt;/serviceId&amp;gt;&lt;br /&gt;
                &amp;lt;SCPDURL&amp;gt;/ac3d630e37b5f11ff5cdd23c0f5a7400/Upnp/upnp.org-ContentDirectory-1/service.xml&amp;lt;/SCPDURL&amp;gt;&lt;br /&gt;
                &amp;lt;controlURL&amp;gt;/ac3d630e37b5f11ff5cdd23c0f5a7400/upnp.org-ContentDirectory-1/control&amp;lt;/controlURL&amp;gt;&lt;br /&gt;
                &amp;lt;eventSubURL&amp;gt;/ac3d630e37b5f11ff5cdd23c0f5a7400/upnp.org-ContentDirectory-1/event&amp;lt;/eventSubURL&amp;gt;&lt;br /&gt;
            &amp;lt;/service&amp;gt;&lt;br /&gt;
            &amp;lt;service&amp;gt;&lt;br /&gt;
                &amp;lt;serviceType&amp;gt;urn:schemas-upnp-org:service:ConnectionManager:1&amp;lt;/serviceType&amp;gt;&lt;br /&gt;
                &amp;lt;serviceId&amp;gt;urn:upnp-org:serviceId:ConnectionManager&amp;lt;/serviceId&amp;gt;&lt;br /&gt;
                &amp;lt;SCPDURL&amp;gt;/ac3d630e37b5f11ff5cdd23c0f5a7400/Upnp/upnp.org-ConnectionManager-1/service.xml&amp;lt;/SCPDURL&amp;gt;&lt;br /&gt;
                &amp;lt;controlURL&amp;gt;/ac3d630e37b5f11ff5cdd23c0f5a7400/upnp.org-ConnectionManager-1/control&amp;lt;/controlURL&amp;gt;&lt;br /&gt;
                &amp;lt;eventSubURL&amp;gt;/ac3d630e37b5f11ff5cdd23c0f5a7400/upnp.org-ConnectionManager-1/event&amp;lt;/eventSubURL&amp;gt;&lt;br /&gt;
            &amp;lt;/service&amp;gt;&lt;br /&gt;
        &amp;lt;/serviceList&amp;gt;&lt;br /&gt;
    &amp;lt;/device&amp;gt;&lt;br /&gt;
 &amp;lt;/root&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Index maps ==&lt;br /&gt;
&lt;br /&gt;
Large lists are difficult to navigate, especially on mobile devices. Mobile devices added the idea of an index map to improve this situation. The index map allows a users to jump to different sections in a large list, similar to what is possible with a scrollbar on desktops.&lt;br /&gt;
&lt;br /&gt;
In order for a control point to generate an index map for any particular level in a ContentDirectory&#039;s hierarchy it first needs to download all the objects in the container, figure out if they are sorted and then calculate the index map. This means that a user will need to wait, perhaps minutes, before an index map is able to be presented on the UI. &lt;br /&gt;
&lt;br /&gt;
The media server can optionally return an index map for container that are in alphabetical order. This implemented through a OpenHome vendor extension of the DIDL-Lite XML. Below shows an example DIDL-Lite with an index map included.&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;DIDL-Lite xmlns=&amp;quot;urn:schemas-upnp-org:metadata-1-0/DIDL-Lite/&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;container id=&amp;quot;db/ba37a2ac24efa676c8676aab71a6cdf074&amp;quot; parentID=&amp;quot;0&amp;quot; restricted=&amp;quot;true&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;dc:title xmlns:dc=&amp;quot;http://purl.org/dc/elements/1.1/&amp;quot;&amp;gt;Worlds Apart [Deluxe Edition]&amp;lt;/dc:title&amp;gt;&lt;br /&gt;
        &amp;lt;upnp:udn xmlns:upnp=&amp;quot;urn:schemas-upnp-org:metadata-1-0/upnp/&amp;quot;&amp;gt;ac3d630e37b5f11ff5cdd23c0f5a7400&amp;lt;/upnp:udn&amp;gt;&lt;br /&gt;
        &amp;lt;upnp:class xmlns:upnp=&amp;quot;urn:schemas-upnp-org:metadata-1-0/upnp/&amp;quot;&amp;gt;object.container.album.musicAlbum&amp;lt;/upnp:class&amp;gt;&lt;br /&gt;
        &amp;lt;upnp:artist xmlns:upnp=&amp;quot;urn:schemas-upnp-org:metadata-1-0/upnp/&amp;quot;&amp;gt;...And You Will Know Us by the Trail of Dead&amp;lt;/upnp:artist&amp;gt;&lt;br /&gt;
        &amp;lt;upnp:albumArtURI&amp;gt;http://10.2.1.170:4000/linn.co.uk.kazooserver/ms/artwork/37a2ac2?size=0&amp;lt;/upnp:albumArtURI&amp;gt;&lt;br /&gt;
    &amp;lt;/container&amp;gt;&lt;br /&gt;
    &amp;lt;desc nameSpace=&amp;quot;openhome.org&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;indexmap&amp;gt;0 10 10 10 10 10 0 0 0 0 10 12 1 10 10 10 12 17 18 1 0 20 0 20 20 2 2 24&amp;lt;/indexmap&amp;gt;&lt;br /&gt;
    &amp;lt;/desc&amp;gt;&lt;br /&gt;
 &amp;lt;/DIDL-Lite&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The index map contains a space separated list of 28 number representing the total number of items that begin with that letter. #, represents everything below A, largely digits and punctuation and + represents everything above Z, largely international characters not collatable within the roman alphabet.&lt;br /&gt;
&lt;br /&gt;
 # A B C D E F G H I J K L M N O P Q R S T U V W X Y Z +&lt;br /&gt;
&lt;br /&gt;
== Image Resolution ==&lt;br /&gt;
&lt;br /&gt;
Control points running on different platforms have different memory limits and display technologies. This means that a control point on a PC might want to display artwork at a high resolution, while a control point on a PDA might want to display artwork at a much lower resolution.&lt;br /&gt;
&lt;br /&gt;
Media servers often try to solve this problem using one of the following two methods:&lt;br /&gt;
&lt;br /&gt;
# A configurable parameter that scales all artwork to a user defined size&lt;br /&gt;
# A profile system where a user can create profiles for each class of control point they have and configure a parameter that scales all artwork to a user defined size per profile&lt;br /&gt;
&lt;br /&gt;
The first solution is highly problematic because it limits the resolution of artwork across the whole network. But a single network very often contains control points that can display high resolution images AND control points that can&#039;t.&lt;br /&gt;
&lt;br /&gt;
The second solution is just architecturally poor, turning the relationship between a control point and a media server on its head. Why should the media server try to infer what a control point needs through configuration when the control point is perfectly capable of telling the media server its exact requirements in every single circumstance.&lt;br /&gt;
&lt;br /&gt;
So, compliant media servers should include a &#039;&#039;&#039;size&#039;&#039;&#039; element in their artwork URIs, where the size is the image&#039;s largest dimension. This allows a control point to ask for an image at a specified size.&lt;br /&gt;
&lt;br /&gt;
=== Example ===&lt;br /&gt;
&lt;br /&gt;
If the original artwork was 400x512, then a media server would provide the following albumArtURI: &amp;lt;uri&amp;gt;?size=512. If it is not possible for the media server to obtain the original resolution then the media server would provide the following albumArtURI: &amp;lt;uri&amp;gt;?size=0.&lt;br /&gt;
&lt;br /&gt;
The presence of the size element tells the control point:&lt;br /&gt;
&lt;br /&gt;
# the media server implements the image scaling extension&lt;br /&gt;
# the original size of the image.&lt;br /&gt;
&lt;br /&gt;
Now the control point can request the image at any resolution by using &amp;lt;uri&amp;gt;?size=x, where x is the size it wants.&lt;br /&gt;
&lt;br /&gt;
So, in this example, &amp;lt;uri&amp;gt;?size=1024 gets an 800x1024 image, and &amp;lt;uri&amp;gt;?size=200 gets a 156x200 image.&lt;br /&gt;
&lt;br /&gt;
== Dynamic IP Addresses ==&lt;br /&gt;
&lt;br /&gt;
At present all media servers return URIs that contain a reference to their IP address, e.g. http://172.20.1.1/music.flac etc. This means that if the media server&#039;s IP address were to change across reboots, then any control point or media renderer with URIs that referenced the media server before the reboot will become invalid.&lt;br /&gt;
&lt;br /&gt;
If a user wants to ensure a URI provided by the media server is long lived the host machine running the media server must be assigned a static or dynamic reserved IP address.&lt;br /&gt;
&lt;br /&gt;
== Disc Information ==&lt;br /&gt;
&lt;br /&gt;
A new property has been added to the musicTrack item called &#039;&#039;&#039;OriginalDiscNumber&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
A new property has been added to the musicAlbum item called &#039;&#039;&#039;OriginalDiscCount&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
== Replay Gain Information ==&lt;br /&gt;
&lt;br /&gt;
Four new properties have been added to the musicTrack item called &#039;&#039;&#039;ReplayGainAlbum&#039;&#039;&#039;, &#039;&#039;&#039;ReplayGainAlbumPeak&#039;&#039;&#039;, &#039;&#039;&#039;ReplayGainTrack&#039;&#039;&#039;, and &#039;&#039;&#039;ReplayGainTrackPeak&#039;&#039;&#039;.&lt;/div&gt;</summary>
		<author><name>Davidd</name></author>
	</entry>
	<entry>
		<id>https://docs.linn.co.uk/wiki/index.php?title=Developer:Media_Server_Extensions&amp;diff=11244</id>
		<title>Developer:Media Server Extensions</title>
		<link rel="alternate" type="text/html" href="https://docs.linn.co.uk/wiki/index.php?title=Developer:Media_Server_Extensions&amp;diff=11244"/>
		<updated>2015-03-16T11:28:41Z</updated>

		<summary type="html">&lt;p&gt;Davidd: /* albumArtURI */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Introduction =&lt;br /&gt;
&lt;br /&gt;
The ContentDirectory service has various limitations which become apparent when implementing control points on different hardware platforms. This document aims to outline some ideas that address the various shortcomings of the ContentDirectory specification.&lt;br /&gt;
&lt;br /&gt;
== Container map ==&lt;br /&gt;
&lt;br /&gt;
The current ContentDirectory specification makes it tricky for a control point to display the returned contents in an appropriate, aesthetically pleasing, manner for the content being viewed. This is because the ContentDirectory specification does not allow for a control point to know in advanced what content to expect when browsing through any particular hierarchy.&lt;br /&gt;
&lt;br /&gt;
An example of this might be, at a particular point in the browse hierarchy the ContentDirectory will return a list of albums which in turn will contain a list of tracks. A UI might wish to represent this list of albums as a grid and the album&#039;s tracks as a header and a list of the tracks. Currently it is not possible for the UI to know when it gets to a point in a hierarchy where the hierarchy represents a list of albums followed by a list of tracks.&lt;br /&gt;
&lt;br /&gt;
The container map extension allows a media server to express its container hierarchy in advance of the control point navigating it. This is done using an OpenHome vendor extension to the device XML.&lt;br /&gt;
&lt;br /&gt;
Three types of mapped container are defined: browse, link, and search.&lt;br /&gt;
&lt;br /&gt;
The browse map defines named top level containers that represent significant starting points for browsing that can meaningfully be presented in top level tabs of a control point UI. The browse map is expressed within the X_MAP_BROWSE element of X_MAP.&lt;br /&gt;
&lt;br /&gt;
The link map defines containers that can be meaningfully linked to from track or album details. For instance a track will typically have an artist defined. If an entry for &amp;quot;artist&amp;quot; is defined in the link map then it will be possible for the user of a control point to quickly access this artist-related container by clicking on the track&#039;s artist text. Similar links might be offered for &amp;quot;genre&amp;quot;, &amp;quot;composer&amp;quot;, &amp;quot;conductor&amp;quot;, etc. The link map is expressed within the X_MAP_LINK element of X_MAP.&lt;br /&gt;
&lt;br /&gt;
The search map defines the different kinds of search containers and the type of results that they produce. The search map is expressed within the X_MAP_SEARCH element of X_MAP.&lt;br /&gt;
&lt;br /&gt;
=== Browse map ===&lt;br /&gt;
&lt;br /&gt;
The X_MAP_BROWSE element must contain 1 or more X_MAP_BROWSE_ENTRY elements.&lt;br /&gt;
&lt;br /&gt;
The X_MAP_BROWSE_ENTRY has three child elements.&lt;br /&gt;
&lt;br /&gt;
X_MAP_BROWSE_ENTRY_NAME is a string that can be used by a control point to label a tab containing this browse hierarchy.&lt;br /&gt;
&lt;br /&gt;
X_MAP_BROWSE_ENTRY_ID is the UPnP container id that contains the root of this browse hierarchy. This id is then submitted to the ContentDirectory service using the Browse action as usual. The returned contents are navigated using subsequent Browse request as usual. The difference is that the control point knows in advance what kind of results to expect at each level.&lt;br /&gt;
&lt;br /&gt;
X_MAP_BROWSE_ENTRY_TYPE is a space separated list of strings that maps out the kind of containers that are to be found at each level of this browse hierarchy. For instance, &amp;quot;artist album&amp;quot; represents a browse hierarchy giving a container containing only artist containers, each of which contains only album containers, each of which contains only tracks.&lt;br /&gt;
&lt;br /&gt;
There should be an X_MAP_BROWSE_ENTRY for each root browse hierarchy defined by the media server.&lt;br /&gt;
&lt;br /&gt;
For example:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;X_MAP_BROWSE_ENTRY&amp;gt;&lt;br /&gt;
     &amp;lt;X_MAP_BROWSE_ENTRY_NAME&amp;gt;Genre&amp;lt;/X_MAP_BROWSE_ENTRY_NAME&amp;gt;&lt;br /&gt;
     &amp;lt;X_MAP_BROWSE_ENTRY_ID&amp;gt;db/browse/genre&amp;lt;/X_MAP_BROWSE_ENTRY_ID&amp;gt;&lt;br /&gt;
     &amp;lt;X_MAP_BROWSE_ENTRY_TYPE&amp;gt;genre artist album&amp;lt;/X_MAP_BROWSE_ENTRY_TYPE&amp;gt;&lt;br /&gt;
 &amp;lt;/X_MAP_BROWSE_ENTRY&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Link map ===&lt;br /&gt;
&lt;br /&gt;
The X_MAP_LINK element must contain 1 or more X_MAP_LINK_ENTRY elements.&lt;br /&gt;
&lt;br /&gt;
The X_MAP_LINK_ENTRY has three child elements.&lt;br /&gt;
&lt;br /&gt;
X_MAP_LINK_ENTRY_TAG is a string that defines which type of metadata is the target for this link. e.g. &amp;quot;artist&amp;quot;, &amp;quot;genre&amp;quot;, &amp;quot;composer&amp;quot;, etc. See the type section below. &lt;br /&gt;
&lt;br /&gt;
X_MAP_LINK_ENTRY_ID_PREFIX is a string that is prefix for a UPnP container id. The link can be taken by browsing to the container whose id is the result of appending the associated metadata value to this prefix. For instance, if the prefix for an &amp;quot;artist&amp;quot; link is defined as db/link/artist/, and a track returned anywhere in the media server&#039;s library has &amp;quot;Pink Floyd&amp;quot; as its artist. Then the linked container will have an id of db/link/artist/Pink Floyd.&lt;br /&gt;
&lt;br /&gt;
X_MAP_LINK_ENTRY_TYPE represents the type of browse hierarchy returned when taking this type of link. See X_MAP_BROWSE_ENTRY_TYPE for details.&lt;br /&gt;
&lt;br /&gt;
There should be an X_MAP_LINK_ENTRY for each piece of metadata that the media server allows to be linked.&lt;br /&gt;
&lt;br /&gt;
For example:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;X_MAP_LINK_ENTRY&amp;gt;&lt;br /&gt;
     &amp;lt;X_MAP_LINK_ENTRY_TAG&amp;gt;artist&amp;lt;/X_MAP_LINK_ENTRY_TAG&amp;gt;&lt;br /&gt;
     &amp;lt;X_MAP_LINK_ENTRY_ID_PREFIX&amp;gt;db/link/artist/&amp;lt;/X_MAP_LINK_ENTRY_ID_PREFIX&amp;gt;&lt;br /&gt;
     &amp;lt;X_MAP_LINK_ENTRY_TYPE&amp;gt;album&amp;lt;/X_MAP_LINK_ENTRY_TYPE&amp;gt;&lt;br /&gt;
 &amp;lt;/X_MAP_LINK_ENTRY&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The example above defines a browse hierarchy that is created when linking from an artist name. The hierarchy created provides a list of linked artist albums which in turn provide a list of tracks.&lt;br /&gt;
&lt;br /&gt;
=== Search map ===&lt;br /&gt;
&lt;br /&gt;
The X_MAP_SEARCH element must contain 1 or more X_MAP_SEARCH_ENTRY elements.&lt;br /&gt;
&lt;br /&gt;
The X_MAP_SEARCH_ENTRY has three child elements.&lt;br /&gt;
&lt;br /&gt;
X_MAP_SEARCH_ENTRY_NAME  is a string that can be used by a control point to label a tab containing these search results.&lt;br /&gt;
&lt;br /&gt;
X_MAP_SEARCH_ENTRY_ID_PREFIX is a string that is a prefix for a UPnP container id. The search results can be found by browsing to the container whose id is the result of appending the search string to this prefix. For instance, if the prefix for an &amp;quot;album&amp;quot; search is defined as db/search/album/, and the search string is &amp;quot;blue&amp;quot;, then the search results container will have an id of db/search/album/blue.&lt;br /&gt;
&lt;br /&gt;
X_MAP_SEARCH_ENTRY_TYPE represents the type of browse hierarchy returned when taking this type of search. See X_MAP_BROWSE_ENTRY_TYPE for details.&lt;br /&gt;
&lt;br /&gt;
There should be an X_MAP_SEARCH_ENTRY for each type of search offered by the media server.&lt;br /&gt;
&lt;br /&gt;
For example:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;X_MAP_SEARCH_ENTRY&amp;gt;&lt;br /&gt;
     &amp;lt;X_MAP_SEARCH_ENTRY_NAME&amp;gt;Artist&amp;lt;/X_MAP_SEARCH_ENTRY_NAME&amp;gt;&lt;br /&gt;
     &amp;lt;X_MAP_SEARCH_ENTRY_ID_PREFIX&amp;gt;db/search/artist/&amp;lt;/X_MAP_SEARCH_ENTRY_ID_PREFIX&amp;gt;&lt;br /&gt;
     &amp;lt;X_MAP_SEARCH_ENTRY_TYPE&amp;gt;artist album&amp;lt;/X_MAP_SEARCH_ENTRY_TYPE&amp;gt;&lt;br /&gt;
 &amp;lt;/X_MAP_SEARCH_ENTRY&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The example above defines a browse hierarchy that is created when searching for an artist. The hierarchy created provides a list of artists, which in turn provide a list of albums, which in turn provide a list of tracks.&lt;br /&gt;
&lt;br /&gt;
=== Types ===&lt;br /&gt;
&lt;br /&gt;
The list of allowed types for X_BROWSE_ENTRY_TYPE, X_MAP_LINK_ENTRY_TAG, X_LINK_ENTRY_TYPE, and X_SEARCH_ENTRY_TYPE&lt;br /&gt;
&lt;br /&gt;
 genre&lt;br /&gt;
 artist&lt;br /&gt;
 composer&lt;br /&gt;
 conductor&lt;br /&gt;
 album&lt;br /&gt;
 year&lt;br /&gt;
 mixed&lt;br /&gt;
&lt;br /&gt;
mixed is a special value that represents a container that has mixed entries. It is not a valid type for the X_MAP_LINK_ENTRY_TAG element.&lt;br /&gt;
&lt;br /&gt;
=== Example device XML ===&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;root xmlns=&amp;quot;urn:schemas-upnp-org:device-1-0&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;specVersion&amp;gt;&lt;br /&gt;
        &amp;lt;major&amp;gt;1&amp;lt;/major&amp;gt;&lt;br /&gt;
        &amp;lt;minor&amp;gt;1&amp;lt;/minor&amp;gt;&lt;br /&gt;
    &amp;lt;/specVersion&amp;gt;&lt;br /&gt;
    &amp;lt;device&amp;gt;&lt;br /&gt;
        &amp;lt;deviceType&amp;gt;urn:schemas-upnp-org:device:MediaServer:1&amp;lt;/deviceType&amp;gt;&lt;br /&gt;
        &amp;lt;dlna:X_DLNADOC xmlns:dlna=&amp;quot;urn:schemas-dlna-org:device-1-0&amp;quot;&amp;gt;DMS-1.50&amp;lt;/dlna:X_DLNADOC&amp;gt;&lt;br /&gt;
        &amp;lt;dlna:X_DLNACAP xmlns:dlna=&amp;quot;urn:schemas-dlna-org:device-1-0&amp;quot;&amp;gt;av-upload,image-upload,audio-upload&amp;lt;/dlna:X_DLNACAP&amp;gt;&lt;br /&gt;
        &amp;lt;openhome:X_MAP xmlns:openhome=&amp;quot;http://www.openhome.org&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;X_MAP_BROWSE&amp;gt;&lt;br /&gt;
                &amp;lt;X_MAP_BROWSE_ENTRY&amp;gt;&lt;br /&gt;
                    &amp;lt;X_MAP_BROWSE_ENTRY_NAME&amp;gt;Albums&amp;lt;/X_MAP_BROWSE_ENTRY_NAME&amp;gt;&lt;br /&gt;
                    &amp;lt;X_MAP_BROWSE_ENTRY_ID&amp;gt;db/browse/albums&amp;lt;/X_MAP_BROWSE_ENTRY_ID&amp;gt;&lt;br /&gt;
                    &amp;lt;X_MAP_BROWSE_ENTRY_TYPE&amp;gt;album&amp;lt;/X_MAP_BROWSE_ENTRY_TYPE&amp;gt;&lt;br /&gt;
                &amp;lt;/X_MAP_BROWSE_ENTRY&amp;gt;&lt;br /&gt;
                &amp;lt;X_MAP_BROWSE_ENTRY&amp;gt;&lt;br /&gt;
                    &amp;lt;X_MAP_BROWSE_ENTRY_NAME&amp;gt;Artists&amp;lt;/X_MAP_BROWSE_ENTRY_NAME&amp;gt;&lt;br /&gt;
                    &amp;lt;X_MAP_BROWSE_ENTRY_ID&amp;gt;db/browse/artists&amp;lt;/X_MAP_BROWSE_ENTRY_ID&amp;gt;&lt;br /&gt;
                    &amp;lt;X_MAP_BROWSE_ENTRY_TYPE&amp;gt;artist album&amp;lt;/X_MAP_BROWSE_ENTRY_TYPE&amp;gt;&lt;br /&gt;
                &amp;lt;/X_MAP_BROWSE_ENTRY&amp;gt;&lt;br /&gt;
                &amp;lt;X_MAP_BROWSE_ENTRY&amp;gt;&lt;br /&gt;
                    &amp;lt;X_MAP_BROWSE_ENTRY_NAME&amp;gt;Folders&amp;lt;/X_MAP_BROWSE_ENTRY_NAME&amp;gt;&lt;br /&gt;
                    &amp;lt;X_MAP_BROWSE_ENTRY_ID&amp;gt;db/browse/folders&amp;lt;/X_MAP_BROWSE_ENTRY_ID&amp;gt;&lt;br /&gt;
                    &amp;lt;X_MAP_BROWSE_ENTRY_TYPE&amp;gt;mixed&amp;lt;/X_MAP_BROWSE_ENTRY_TYPE&amp;gt;&lt;br /&gt;
                &amp;lt;/X_MAP_BROWSE_ENTRY&amp;gt;&lt;br /&gt;
            &amp;lt;/X_MAP_BROWSE&amp;gt;&lt;br /&gt;
            &amp;lt;X_MAP_LINK&amp;gt;&lt;br /&gt;
                &amp;lt;X_MAP_LINK_ENTRY&amp;gt;&lt;br /&gt;
                    &amp;lt;X_MAP_LINK_ENTRY_TAG&amp;gt;artist&amp;lt;/X_MAP_LINK_ENTRY_TAG&amp;gt;&lt;br /&gt;
                    &amp;lt;X_MAP_LINK_ENTRY_ID_PREFIX&amp;gt;db/link/artist/&amp;lt;/X_MAP_LINK_ENTRY_ID_PREFIX&amp;gt;&lt;br /&gt;
                    &amp;lt;X_MAP_LINK_ENTRY_TYPE&amp;gt;album&amp;lt;/X_MAP_LINK_ENTRY_TYPE&amp;gt;&lt;br /&gt;
                &amp;lt;/X_MAP_LINK_ENTRY&amp;gt;&lt;br /&gt;
                &amp;lt;X_MAP_LINK_ENTRY&amp;gt;&lt;br /&gt;
                    &amp;lt;X_MAP_LINK_ENTRY_TAG&amp;gt;composer&amp;lt;/X_MAP_LINK_ENTRY_TAG&amp;gt;&lt;br /&gt;
                    &amp;lt;X_MAP_LINK_ENTRY_ID_PREFIX&amp;gt;db/link/composer/&amp;lt;/X_MAP_LINK_ENTRY_ID_PREFIX&amp;gt;&lt;br /&gt;
                    &amp;lt;X_MAP_LINK_ENTRY_TYPE&amp;gt;album&amp;lt;/X_MAP_LINK_ENTRY_TYPE&amp;gt;&lt;br /&gt;
                &amp;lt;/X_MAP_LINK_ENTRY&amp;gt;&lt;br /&gt;
            &amp;lt;/X_MAP_LINK&amp;gt;&lt;br /&gt;
            &amp;lt;X_MAP_SEARCH&amp;gt;&lt;br /&gt;
                &amp;lt;X_MAP_SEARCH_ENTRY&amp;gt;&lt;br /&gt;
                    &amp;lt;X_MAP_SEARCH_ENTRY_NAME&amp;gt;Artist&amp;lt;/X_MAP_SEARCH_ENTRY_NAME&amp;gt;&lt;br /&gt;
                    &amp;lt;X_MAP_SEARCH_ENTRY_ID_PREFIX&amp;gt;db/search/artist/&amp;lt;/X_MAP_SEARCH_ENTRY_ID_PREFIX&amp;gt;&lt;br /&gt;
                    &amp;lt;X_MAP_SEARCH_ENTRY_TYPE&amp;gt;artist album&amp;lt;/X_MAP_SEARCH_ENTRY_TYPE&amp;gt;&lt;br /&gt;
                &amp;lt;/X_MAP_SEARCH_ENTRY&amp;gt;&lt;br /&gt;
                &amp;lt;X_MAP_SEARCH_ENTRY&amp;gt;&lt;br /&gt;
                    &amp;lt;X_MAP_SEARCH_ENTRY_NAME&amp;gt;Tracks&amp;lt;/X_MAP_SEARCH_ENTRY_NAME&amp;gt;&lt;br /&gt;
                    &amp;lt;X_MAP_SEARCH_ENTRY_ID_PREFIX&amp;gt;db/search/all/&amp;lt;/X_MAP_SEARCH_ENTRY_ID_PREFIX&amp;gt;&lt;br /&gt;
                    &amp;lt;X_MAP_SEARCH_ENTRY_TYPE&amp;gt;&amp;lt;/X_MAP_SEARCH_ENTRY_TYPE&amp;gt;&lt;br /&gt;
                &amp;lt;/X_MAP_SEARCH_ENTRY&amp;gt;&lt;br /&gt;
            &amp;lt;/X_MAP_SEARCH&amp;gt;&lt;br /&gt;
        &amp;lt;/openhome:X_MAP&amp;gt;&lt;br /&gt;
        &amp;lt;presentationURL&amp;gt;http://10.2.1.170:4000/res/linn.co.uk.kazooserver/index.html&amp;lt;/presentationURL&amp;gt;&lt;br /&gt;
        &amp;lt;friendlyName&amp;gt;Linn Kazoo Server [R&amp;amp;D Mac Mini]&amp;lt;/friendlyName&amp;gt;&lt;br /&gt;
        &amp;lt;manufacturer&amp;gt;Linn&amp;lt;/manufacturer&amp;gt;&lt;br /&gt;
        &amp;lt;manufacturerURL&amp;gt;http://www.linn.co.uk&amp;lt;/manufacturerURL&amp;gt;&lt;br /&gt;
        &amp;lt;modelName&amp;gt;Kazoo Server&amp;lt;/modelName&amp;gt;&lt;br /&gt;
        &amp;lt;modelURL&amp;gt;http://oss.linn.co.uk/trac/wiki/KazooServer&amp;lt;/modelURL&amp;gt;&lt;br /&gt;
        &amp;lt;UDN&amp;gt;uuid:ac3d630e37b5f11ff5cdd23c0f5a7400&amp;lt;/UDN&amp;gt;&lt;br /&gt;
        &amp;lt;iconList&amp;gt;&lt;br /&gt;
            &amp;lt;icon&amp;gt;&lt;br /&gt;
                &amp;lt;mimetype&amp;gt;image/png&amp;lt;/mimetype&amp;gt;&lt;br /&gt;
                &amp;lt;width&amp;gt;65&amp;lt;/width&amp;gt;&lt;br /&gt;
                &amp;lt;height&amp;gt;65&amp;lt;/height&amp;gt;&lt;br /&gt;
                &amp;lt;depth&amp;gt;32&amp;lt;/depth&amp;gt;&lt;br /&gt;
                &amp;lt;url&amp;gt;ac3d630e37b5f11ff5cdd23c0f5a7400/resource/icon/icon&amp;lt;/url&amp;gt;&lt;br /&gt;
            &amp;lt;/icon&amp;gt;&lt;br /&gt;
        &amp;lt;/iconList&amp;gt;&lt;br /&gt;
        &amp;lt;serviceList&amp;gt;&lt;br /&gt;
            &amp;lt;service&amp;gt;&lt;br /&gt;
                &amp;lt;serviceType&amp;gt;urn:av-openhome-org:service:PlaylistManager:1&amp;lt;/serviceType&amp;gt;&lt;br /&gt;
                &amp;lt;serviceId&amp;gt;urn:av-openhome-org:serviceId:PlaylistManager&amp;lt;/serviceId&amp;gt;&lt;br /&gt;
                &amp;lt;SCPDURL&amp;gt;/ac3d630e37b5f11ff5cdd23c0f5a7400/Upnp/av.openhome.org-PlaylistManager-1/service.xml&amp;lt;/SCPDURL&amp;gt;&lt;br /&gt;
                &amp;lt;controlURL&amp;gt;/ac3d630e37b5f11ff5cdd23c0f5a7400/av.openhome.org-PlaylistManager-1/control&amp;lt;/controlURL&amp;gt;&lt;br /&gt;
                &amp;lt;eventSubURL&amp;gt;/ac3d630e37b5f11ff5cdd23c0f5a7400/av.openhome.org-PlaylistManager-1/event&amp;lt;/eventSubURL&amp;gt;&lt;br /&gt;
            &amp;lt;/service&amp;gt;&lt;br /&gt;
            &amp;lt;service&amp;gt;&lt;br /&gt;
                &amp;lt;serviceType&amp;gt;urn:schemas-upnp-org:service:ContentDirectory:1&amp;lt;/serviceType&amp;gt;&lt;br /&gt;
                &amp;lt;serviceId&amp;gt;urn:upnp-org:serviceId:ContentDirectory&amp;lt;/serviceId&amp;gt;&lt;br /&gt;
                &amp;lt;SCPDURL&amp;gt;/ac3d630e37b5f11ff5cdd23c0f5a7400/Upnp/upnp.org-ContentDirectory-1/service.xml&amp;lt;/SCPDURL&amp;gt;&lt;br /&gt;
                &amp;lt;controlURL&amp;gt;/ac3d630e37b5f11ff5cdd23c0f5a7400/upnp.org-ContentDirectory-1/control&amp;lt;/controlURL&amp;gt;&lt;br /&gt;
                &amp;lt;eventSubURL&amp;gt;/ac3d630e37b5f11ff5cdd23c0f5a7400/upnp.org-ContentDirectory-1/event&amp;lt;/eventSubURL&amp;gt;&lt;br /&gt;
            &amp;lt;/service&amp;gt;&lt;br /&gt;
            &amp;lt;service&amp;gt;&lt;br /&gt;
                &amp;lt;serviceType&amp;gt;urn:schemas-upnp-org:service:ConnectionManager:1&amp;lt;/serviceType&amp;gt;&lt;br /&gt;
                &amp;lt;serviceId&amp;gt;urn:upnp-org:serviceId:ConnectionManager&amp;lt;/serviceId&amp;gt;&lt;br /&gt;
                &amp;lt;SCPDURL&amp;gt;/ac3d630e37b5f11ff5cdd23c0f5a7400/Upnp/upnp.org-ConnectionManager-1/service.xml&amp;lt;/SCPDURL&amp;gt;&lt;br /&gt;
                &amp;lt;controlURL&amp;gt;/ac3d630e37b5f11ff5cdd23c0f5a7400/upnp.org-ConnectionManager-1/control&amp;lt;/controlURL&amp;gt;&lt;br /&gt;
                &amp;lt;eventSubURL&amp;gt;/ac3d630e37b5f11ff5cdd23c0f5a7400/upnp.org-ConnectionManager-1/event&amp;lt;/eventSubURL&amp;gt;&lt;br /&gt;
            &amp;lt;/service&amp;gt;&lt;br /&gt;
        &amp;lt;/serviceList&amp;gt;&lt;br /&gt;
    &amp;lt;/device&amp;gt;&lt;br /&gt;
 &amp;lt;/root&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Index maps ==&lt;br /&gt;
&lt;br /&gt;
Large lists are difficult to navigate, especially on mobile devices. Mobile devices added the idea of an index map to improve this situation. The index map allows a users to jump to different sections in a large list, similar to what is possible with a scrollbar on desktops.&lt;br /&gt;
&lt;br /&gt;
In order for a control point to generate an index map for any particular level in a ContentDirectory&#039;s hierarchy it first needs to download all the objects in the container, figure out if they are sorted and then calculate the index map. This means that a user will need to wait, perhaps minutes, before an index map is able to be presented on the UI. &lt;br /&gt;
&lt;br /&gt;
The media server can optionally return an index map for container that are in alphabetical order. This implemented through a OpenHome vendor extension of the DIDL-Lite XML. Below shows an example DIDL-Lite with an index map included.&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;DIDL-Lite xmlns=&amp;quot;urn:schemas-upnp-org:metadata-1-0/DIDL-Lite/&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;container id=&amp;quot;db/ba37a2ac24efa676c8676aab71a6cdf074&amp;quot; parentID=&amp;quot;0&amp;quot; restricted=&amp;quot;true&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;dc:title xmlns:dc=&amp;quot;http://purl.org/dc/elements/1.1/&amp;quot;&amp;gt;Worlds Apart [Deluxe Edition]&amp;lt;/dc:title&amp;gt;&lt;br /&gt;
        &amp;lt;upnp:udn xmlns:upnp=&amp;quot;urn:schemas-upnp-org:metadata-1-0/upnp/&amp;quot;&amp;gt;ac3d630e37b5f11ff5cdd23c0f5a7400&amp;lt;/upnp:udn&amp;gt;&lt;br /&gt;
        &amp;lt;upnp:class xmlns:upnp=&amp;quot;urn:schemas-upnp-org:metadata-1-0/upnp/&amp;quot;&amp;gt;object.container.album.musicAlbum&amp;lt;/upnp:class&amp;gt;&lt;br /&gt;
        &amp;lt;upnp:artist xmlns:upnp=&amp;quot;urn:schemas-upnp-org:metadata-1-0/upnp/&amp;quot;&amp;gt;...And You Will Know Us by the Trail of Dead&amp;lt;/upnp:artist&amp;gt;&lt;br /&gt;
        &amp;lt;upnp:albumArtURI&amp;gt;http://10.2.1.170:4000/linn.co.uk.kazooserver/ms/artwork/37a2ac2?size=0&amp;lt;/upnp:albumArtURI&amp;gt;&lt;br /&gt;
    &amp;lt;/container&amp;gt;&lt;br /&gt;
    &amp;lt;desc nameSpace=&amp;quot;openhome.org&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;indexmap&amp;gt;0 10 10 10 10 10 0 0 0 0 10 12 1 10 10 10 12 17 18 1 0 20 0 20 20 2 2 24&amp;lt;/indexmap&amp;gt;&lt;br /&gt;
    &amp;lt;/desc&amp;gt;&lt;br /&gt;
 &amp;lt;/DIDL-Lite&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The index map contains a space separated list of 28 number representing the total number of items that begin with that letter. #, represents everything below A, largely digits and punctuation and + represents everything above Z, largely international characters not collatable within the roman alphabet.&lt;br /&gt;
&lt;br /&gt;
 # A B C D E F G H I J K L M N O P Q R S T U V W X Y Z +&lt;br /&gt;
&lt;br /&gt;
== Image Resolution ==&lt;br /&gt;
&lt;br /&gt;
Control points running on different platforms have different memory limits and display technologies. This means that a control point on a PC might want to display artwork at a high resolution, while a control point on a PDA might want to display artwork at a much lower resolution.&lt;br /&gt;
&lt;br /&gt;
Media servers often try to solve this problem using one of the following two methods:&lt;br /&gt;
&lt;br /&gt;
# A configurable parameter that scales all artwork to a user defined size&lt;br /&gt;
# A profile system where a user can create profiles for each class of control point they have and configure a parameter that scales all artwork to a user defined size per profile&lt;br /&gt;
&lt;br /&gt;
The first solution is highly problematic because it limits the resolution of artwork across the whole network. But a single network very often contains control points that can display high resolution images AND control points that can&#039;t.&lt;br /&gt;
&lt;br /&gt;
The second solution is just architecturally poor, turning the relationship between a control point and a media server on its head. Why should the media server try to infer what a control point needs through configuration when the control point is perfectly capable of telling the media server its exact requirements in every single circumstance.&lt;br /&gt;
&lt;br /&gt;
So, it is proposed that compliant media servers include a &#039;&#039;&#039;size&#039;&#039;&#039; element in their artwork uri&#039;s, where the size is the image&#039;s largest dimension. This allows a control point to ask for an image at a specified size.&lt;br /&gt;
&lt;br /&gt;
=== Example ===&lt;br /&gt;
&lt;br /&gt;
If the original artwork was 400x512, then a media server would provide the following albumArtURI: &amp;lt;uri&amp;gt;?size=512. If it is not possible for the media server to obtain the original resolution then the media server would provide the following albumArtURI: &amp;lt;uri&amp;gt;?size=0.&lt;br /&gt;
&lt;br /&gt;
The presence of the size element tells the control point:&lt;br /&gt;
&lt;br /&gt;
# the media server implements the image scaling extension&lt;br /&gt;
# the original size of the image.&lt;br /&gt;
&lt;br /&gt;
Now the control point can request the image at any resolution by using &amp;lt;uri&amp;gt;?size=x, where x is the size it wants.&lt;br /&gt;
&lt;br /&gt;
So, in this example, &amp;lt;uri&amp;gt;?size=1024 gets an 800x1024 image, and &amp;lt;uri&amp;gt;?size=200 gets a 156x200 image.&lt;br /&gt;
&lt;br /&gt;
== Dynamic IP Addresses ==&lt;br /&gt;
&lt;br /&gt;
At present all media servers return URIs that contain a reference to their IP address, e.g. http://172.20.1.1/music.flac etc. This means that if the media server&#039;s IP address were to change across reboots, then any control point or media renderer with URIs that referenced the media server before the reboot will become invalid.&lt;br /&gt;
&lt;br /&gt;
If a user wants to ensure a URI provided by the media server is long lived the host machine running the media server must be assigned a static or dynamic reserved IP address.&lt;br /&gt;
&lt;br /&gt;
== Disc Information ==&lt;br /&gt;
&lt;br /&gt;
A new property has been added to the musicTrack item called &#039;&#039;&#039;OriginalDiscNumber&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
A new property has been added to the musicAlbum item called &#039;&#039;&#039;OriginalDiscCount&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
== Replay Gain Information ==&lt;br /&gt;
&lt;br /&gt;
Four new properties have been added to the musicTrack item called &#039;&#039;&#039;ReplayGainAlbum&#039;&#039;&#039;, &#039;&#039;&#039;ReplayGainAlbumPeak&#039;&#039;&#039;, &#039;&#039;&#039;ReplayGainTrack&#039;&#039;&#039;, and &#039;&#039;&#039;ReplayGainTrackPeak&#039;&#039;&#039;.&lt;/div&gt;</summary>
		<author><name>Davidd</name></author>
	</entry>
	<entry>
		<id>https://docs.linn.co.uk/wiki/index.php?title=Developer:Media_Server_Extensions&amp;diff=11243</id>
		<title>Developer:Media Server Extensions</title>
		<link rel="alternate" type="text/html" href="https://docs.linn.co.uk/wiki/index.php?title=Developer:Media_Server_Extensions&amp;diff=11243"/>
		<updated>2015-03-16T10:35:48Z</updated>

		<summary type="html">&lt;p&gt;Davidd: /* albumArtURI */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Introduction =&lt;br /&gt;
&lt;br /&gt;
The ContentDirectory service has various limitations which become apparent when implementing control points on different hardware platforms. This document aims to outline some ideas that address the various shortcomings of the ContentDirectory specification.&lt;br /&gt;
&lt;br /&gt;
== Container map ==&lt;br /&gt;
&lt;br /&gt;
The current ContentDirectory specification makes it tricky for a control point to display the returned contents in an appropriate, aesthetically pleasing, manner for the content being viewed. This is because the ContentDirectory specification does not allow for a control point to know in advanced what content to expect when browsing through any particular hierarchy.&lt;br /&gt;
&lt;br /&gt;
An example of this might be, at a particular point in the browse hierarchy the ContentDirectory will return a list of albums which in turn will contain a list of tracks. A UI might wish to represent this list of albums as a grid and the album&#039;s tracks as a header and a list of the tracks. Currently it is not possible for the UI to know when it gets to a point in a hierarchy where the hierarchy represents a list of albums followed by a list of tracks.&lt;br /&gt;
&lt;br /&gt;
The container map extension allows a media server to express its container hierarchy in advance of the control point navigating it. This is done using an OpenHome vendor extension to the device XML.&lt;br /&gt;
&lt;br /&gt;
Three types of mapped container are defined: browse, link, and search.&lt;br /&gt;
&lt;br /&gt;
The browse map defines named top level containers that represent significant starting points for browsing that can meaningfully be presented in top level tabs of a control point UI. The browse map is expressed within the X_MAP_BROWSE element of X_MAP.&lt;br /&gt;
&lt;br /&gt;
The link map defines containers that can be meaningfully linked to from track or album details. For instance a track will typically have an artist defined. If an entry for &amp;quot;artist&amp;quot; is defined in the link map then it will be possible for the user of a control point to quickly access this artist-related container by clicking on the track&#039;s artist text. Similar links might be offered for &amp;quot;genre&amp;quot;, &amp;quot;composer&amp;quot;, &amp;quot;conductor&amp;quot;, etc. The link map is expressed within the X_MAP_LINK element of X_MAP.&lt;br /&gt;
&lt;br /&gt;
The search map defines the different kinds of search containers and the type of results that they produce. The search map is expressed within the X_MAP_SEARCH element of X_MAP.&lt;br /&gt;
&lt;br /&gt;
=== Browse map ===&lt;br /&gt;
&lt;br /&gt;
The X_MAP_BROWSE element must contain 1 or more X_MAP_BROWSE_ENTRY elements.&lt;br /&gt;
&lt;br /&gt;
The X_MAP_BROWSE_ENTRY has three child elements.&lt;br /&gt;
&lt;br /&gt;
X_MAP_BROWSE_ENTRY_NAME is a string that can be used by a control point to label a tab containing this browse hierarchy.&lt;br /&gt;
&lt;br /&gt;
X_MAP_BROWSE_ENTRY_ID is the UPnP container id that contains the root of this browse hierarchy. This id is then submitted to the ContentDirectory service using the Browse action as usual. The returned contents are navigated using subsequent Browse request as usual. The difference is that the control point knows in advance what kind of results to expect at each level.&lt;br /&gt;
&lt;br /&gt;
X_MAP_BROWSE_ENTRY_TYPE is a space separated list of strings that maps out the kind of containers that are to be found at each level of this browse hierarchy. For instance, &amp;quot;artist album&amp;quot; represents a browse hierarchy giving a container containing only artist containers, each of which contains only album containers, each of which contains only tracks.&lt;br /&gt;
&lt;br /&gt;
There should be an X_MAP_BROWSE_ENTRY for each root browse hierarchy defined by the media server.&lt;br /&gt;
&lt;br /&gt;
For example:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;X_MAP_BROWSE_ENTRY&amp;gt;&lt;br /&gt;
     &amp;lt;X_MAP_BROWSE_ENTRY_NAME&amp;gt;Genre&amp;lt;/X_MAP_BROWSE_ENTRY_NAME&amp;gt;&lt;br /&gt;
     &amp;lt;X_MAP_BROWSE_ENTRY_ID&amp;gt;db/browse/genre&amp;lt;/X_MAP_BROWSE_ENTRY_ID&amp;gt;&lt;br /&gt;
     &amp;lt;X_MAP_BROWSE_ENTRY_TYPE&amp;gt;genre artist album&amp;lt;/X_MAP_BROWSE_ENTRY_TYPE&amp;gt;&lt;br /&gt;
 &amp;lt;/X_MAP_BROWSE_ENTRY&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Link map ===&lt;br /&gt;
&lt;br /&gt;
The X_MAP_LINK element must contain 1 or more X_MAP_LINK_ENTRY elements.&lt;br /&gt;
&lt;br /&gt;
The X_MAP_LINK_ENTRY has three child elements.&lt;br /&gt;
&lt;br /&gt;
X_MAP_LINK_ENTRY_TAG is a string that defines which type of metadata is the target for this link. e.g. &amp;quot;artist&amp;quot;, &amp;quot;genre&amp;quot;, &amp;quot;composer&amp;quot;, etc. See the type section below. &lt;br /&gt;
&lt;br /&gt;
X_MAP_LINK_ENTRY_ID_PREFIX is a string that is prefix for a UPnP container id. The link can be taken by browsing to the container whose id is the result of appending the associated metadata value to this prefix. For instance, if the prefix for an &amp;quot;artist&amp;quot; link is defined as db/link/artist/, and a track returned anywhere in the media server&#039;s library has &amp;quot;Pink Floyd&amp;quot; as its artist. Then the linked container will have an id of db/link/artist/Pink Floyd.&lt;br /&gt;
&lt;br /&gt;
X_MAP_LINK_ENTRY_TYPE represents the type of browse hierarchy returned when taking this type of link. See X_MAP_BROWSE_ENTRY_TYPE for details.&lt;br /&gt;
&lt;br /&gt;
There should be an X_MAP_LINK_ENTRY for each piece of metadata that the media server allows to be linked.&lt;br /&gt;
&lt;br /&gt;
For example:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;X_MAP_LINK_ENTRY&amp;gt;&lt;br /&gt;
     &amp;lt;X_MAP_LINK_ENTRY_TAG&amp;gt;artist&amp;lt;/X_MAP_LINK_ENTRY_TAG&amp;gt;&lt;br /&gt;
     &amp;lt;X_MAP_LINK_ENTRY_ID_PREFIX&amp;gt;db/link/artist/&amp;lt;/X_MAP_LINK_ENTRY_ID_PREFIX&amp;gt;&lt;br /&gt;
     &amp;lt;X_MAP_LINK_ENTRY_TYPE&amp;gt;album&amp;lt;/X_MAP_LINK_ENTRY_TYPE&amp;gt;&lt;br /&gt;
 &amp;lt;/X_MAP_LINK_ENTRY&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The example above defines a browse hierarchy that is created when linking from an artist name. The hierarchy created provides a list of linked artist albums which in turn provide a list of tracks.&lt;br /&gt;
&lt;br /&gt;
=== Search map ===&lt;br /&gt;
&lt;br /&gt;
The X_MAP_SEARCH element must contain 1 or more X_MAP_SEARCH_ENTRY elements.&lt;br /&gt;
&lt;br /&gt;
The X_MAP_SEARCH_ENTRY has three child elements.&lt;br /&gt;
&lt;br /&gt;
X_MAP_SEARCH_ENTRY_NAME  is a string that can be used by a control point to label a tab containing these search results.&lt;br /&gt;
&lt;br /&gt;
X_MAP_SEARCH_ENTRY_ID_PREFIX is a string that is a prefix for a UPnP container id. The search results can be found by browsing to the container whose id is the result of appending the search string to this prefix. For instance, if the prefix for an &amp;quot;album&amp;quot; search is defined as db/search/album/, and the search string is &amp;quot;blue&amp;quot;, then the search results container will have an id of db/search/album/blue.&lt;br /&gt;
&lt;br /&gt;
X_MAP_SEARCH_ENTRY_TYPE represents the type of browse hierarchy returned when taking this type of search. See X_MAP_BROWSE_ENTRY_TYPE for details.&lt;br /&gt;
&lt;br /&gt;
There should be an X_MAP_SEARCH_ENTRY for each type of search offered by the media server.&lt;br /&gt;
&lt;br /&gt;
For example:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;X_MAP_SEARCH_ENTRY&amp;gt;&lt;br /&gt;
     &amp;lt;X_MAP_SEARCH_ENTRY_NAME&amp;gt;Artist&amp;lt;/X_MAP_SEARCH_ENTRY_NAME&amp;gt;&lt;br /&gt;
     &amp;lt;X_MAP_SEARCH_ENTRY_ID_PREFIX&amp;gt;db/search/artist/&amp;lt;/X_MAP_SEARCH_ENTRY_ID_PREFIX&amp;gt;&lt;br /&gt;
     &amp;lt;X_MAP_SEARCH_ENTRY_TYPE&amp;gt;artist album&amp;lt;/X_MAP_SEARCH_ENTRY_TYPE&amp;gt;&lt;br /&gt;
 &amp;lt;/X_MAP_SEARCH_ENTRY&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The example above defines a browse hierarchy that is created when searching for an artist. The hierarchy created provides a list of artists, which in turn provide a list of albums, which in turn provide a list of tracks.&lt;br /&gt;
&lt;br /&gt;
=== Types ===&lt;br /&gt;
&lt;br /&gt;
The list of allowed types for X_BROWSE_ENTRY_TYPE, X_MAP_LINK_ENTRY_TAG, X_LINK_ENTRY_TYPE, and X_SEARCH_ENTRY_TYPE&lt;br /&gt;
&lt;br /&gt;
 genre&lt;br /&gt;
 artist&lt;br /&gt;
 composer&lt;br /&gt;
 conductor&lt;br /&gt;
 album&lt;br /&gt;
 year&lt;br /&gt;
 mixed&lt;br /&gt;
&lt;br /&gt;
mixed is a special value that represents a container that has mixed entries. It is not a valid type for the X_MAP_LINK_ENTRY_TAG element.&lt;br /&gt;
&lt;br /&gt;
=== Example device XML ===&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;root xmlns=&amp;quot;urn:schemas-upnp-org:device-1-0&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;specVersion&amp;gt;&lt;br /&gt;
        &amp;lt;major&amp;gt;1&amp;lt;/major&amp;gt;&lt;br /&gt;
        &amp;lt;minor&amp;gt;1&amp;lt;/minor&amp;gt;&lt;br /&gt;
    &amp;lt;/specVersion&amp;gt;&lt;br /&gt;
    &amp;lt;device&amp;gt;&lt;br /&gt;
        &amp;lt;deviceType&amp;gt;urn:schemas-upnp-org:device:MediaServer:1&amp;lt;/deviceType&amp;gt;&lt;br /&gt;
        &amp;lt;dlna:X_DLNADOC xmlns:dlna=&amp;quot;urn:schemas-dlna-org:device-1-0&amp;quot;&amp;gt;DMS-1.50&amp;lt;/dlna:X_DLNADOC&amp;gt;&lt;br /&gt;
        &amp;lt;dlna:X_DLNACAP xmlns:dlna=&amp;quot;urn:schemas-dlna-org:device-1-0&amp;quot;&amp;gt;av-upload,image-upload,audio-upload&amp;lt;/dlna:X_DLNACAP&amp;gt;&lt;br /&gt;
        &amp;lt;openhome:X_MAP xmlns:openhome=&amp;quot;http://www.openhome.org&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;X_MAP_BROWSE&amp;gt;&lt;br /&gt;
                &amp;lt;X_MAP_BROWSE_ENTRY&amp;gt;&lt;br /&gt;
                    &amp;lt;X_MAP_BROWSE_ENTRY_NAME&amp;gt;Albums&amp;lt;/X_MAP_BROWSE_ENTRY_NAME&amp;gt;&lt;br /&gt;
                    &amp;lt;X_MAP_BROWSE_ENTRY_ID&amp;gt;db/browse/albums&amp;lt;/X_MAP_BROWSE_ENTRY_ID&amp;gt;&lt;br /&gt;
                    &amp;lt;X_MAP_BROWSE_ENTRY_TYPE&amp;gt;album&amp;lt;/X_MAP_BROWSE_ENTRY_TYPE&amp;gt;&lt;br /&gt;
                &amp;lt;/X_MAP_BROWSE_ENTRY&amp;gt;&lt;br /&gt;
                &amp;lt;X_MAP_BROWSE_ENTRY&amp;gt;&lt;br /&gt;
                    &amp;lt;X_MAP_BROWSE_ENTRY_NAME&amp;gt;Artists&amp;lt;/X_MAP_BROWSE_ENTRY_NAME&amp;gt;&lt;br /&gt;
                    &amp;lt;X_MAP_BROWSE_ENTRY_ID&amp;gt;db/browse/artists&amp;lt;/X_MAP_BROWSE_ENTRY_ID&amp;gt;&lt;br /&gt;
                    &amp;lt;X_MAP_BROWSE_ENTRY_TYPE&amp;gt;artist album&amp;lt;/X_MAP_BROWSE_ENTRY_TYPE&amp;gt;&lt;br /&gt;
                &amp;lt;/X_MAP_BROWSE_ENTRY&amp;gt;&lt;br /&gt;
                &amp;lt;X_MAP_BROWSE_ENTRY&amp;gt;&lt;br /&gt;
                    &amp;lt;X_MAP_BROWSE_ENTRY_NAME&amp;gt;Folders&amp;lt;/X_MAP_BROWSE_ENTRY_NAME&amp;gt;&lt;br /&gt;
                    &amp;lt;X_MAP_BROWSE_ENTRY_ID&amp;gt;db/browse/folders&amp;lt;/X_MAP_BROWSE_ENTRY_ID&amp;gt;&lt;br /&gt;
                    &amp;lt;X_MAP_BROWSE_ENTRY_TYPE&amp;gt;mixed&amp;lt;/X_MAP_BROWSE_ENTRY_TYPE&amp;gt;&lt;br /&gt;
                &amp;lt;/X_MAP_BROWSE_ENTRY&amp;gt;&lt;br /&gt;
            &amp;lt;/X_MAP_BROWSE&amp;gt;&lt;br /&gt;
            &amp;lt;X_MAP_LINK&amp;gt;&lt;br /&gt;
                &amp;lt;X_MAP_LINK_ENTRY&amp;gt;&lt;br /&gt;
                    &amp;lt;X_MAP_LINK_ENTRY_TAG&amp;gt;artist&amp;lt;/X_MAP_LINK_ENTRY_TAG&amp;gt;&lt;br /&gt;
                    &amp;lt;X_MAP_LINK_ENTRY_ID_PREFIX&amp;gt;db/link/artist/&amp;lt;/X_MAP_LINK_ENTRY_ID_PREFIX&amp;gt;&lt;br /&gt;
                    &amp;lt;X_MAP_LINK_ENTRY_TYPE&amp;gt;album&amp;lt;/X_MAP_LINK_ENTRY_TYPE&amp;gt;&lt;br /&gt;
                &amp;lt;/X_MAP_LINK_ENTRY&amp;gt;&lt;br /&gt;
                &amp;lt;X_MAP_LINK_ENTRY&amp;gt;&lt;br /&gt;
                    &amp;lt;X_MAP_LINK_ENTRY_TAG&amp;gt;composer&amp;lt;/X_MAP_LINK_ENTRY_TAG&amp;gt;&lt;br /&gt;
                    &amp;lt;X_MAP_LINK_ENTRY_ID_PREFIX&amp;gt;db/link/composer/&amp;lt;/X_MAP_LINK_ENTRY_ID_PREFIX&amp;gt;&lt;br /&gt;
                    &amp;lt;X_MAP_LINK_ENTRY_TYPE&amp;gt;album&amp;lt;/X_MAP_LINK_ENTRY_TYPE&amp;gt;&lt;br /&gt;
                &amp;lt;/X_MAP_LINK_ENTRY&amp;gt;&lt;br /&gt;
            &amp;lt;/X_MAP_LINK&amp;gt;&lt;br /&gt;
            &amp;lt;X_MAP_SEARCH&amp;gt;&lt;br /&gt;
                &amp;lt;X_MAP_SEARCH_ENTRY&amp;gt;&lt;br /&gt;
                    &amp;lt;X_MAP_SEARCH_ENTRY_NAME&amp;gt;Artist&amp;lt;/X_MAP_SEARCH_ENTRY_NAME&amp;gt;&lt;br /&gt;
                    &amp;lt;X_MAP_SEARCH_ENTRY_ID_PREFIX&amp;gt;db/search/artist/&amp;lt;/X_MAP_SEARCH_ENTRY_ID_PREFIX&amp;gt;&lt;br /&gt;
                    &amp;lt;X_MAP_SEARCH_ENTRY_TYPE&amp;gt;artist album&amp;lt;/X_MAP_SEARCH_ENTRY_TYPE&amp;gt;&lt;br /&gt;
                &amp;lt;/X_MAP_SEARCH_ENTRY&amp;gt;&lt;br /&gt;
                &amp;lt;X_MAP_SEARCH_ENTRY&amp;gt;&lt;br /&gt;
                    &amp;lt;X_MAP_SEARCH_ENTRY_NAME&amp;gt;Tracks&amp;lt;/X_MAP_SEARCH_ENTRY_NAME&amp;gt;&lt;br /&gt;
                    &amp;lt;X_MAP_SEARCH_ENTRY_ID_PREFIX&amp;gt;db/search/all/&amp;lt;/X_MAP_SEARCH_ENTRY_ID_PREFIX&amp;gt;&lt;br /&gt;
                    &amp;lt;X_MAP_SEARCH_ENTRY_TYPE&amp;gt;&amp;lt;/X_MAP_SEARCH_ENTRY_TYPE&amp;gt;&lt;br /&gt;
                &amp;lt;/X_MAP_SEARCH_ENTRY&amp;gt;&lt;br /&gt;
            &amp;lt;/X_MAP_SEARCH&amp;gt;&lt;br /&gt;
        &amp;lt;/openhome:X_MAP&amp;gt;&lt;br /&gt;
        &amp;lt;presentationURL&amp;gt;http://10.2.1.170:4000/res/linn.co.uk.kazooserver/index.html&amp;lt;/presentationURL&amp;gt;&lt;br /&gt;
        &amp;lt;friendlyName&amp;gt;Linn Kazoo Server [R&amp;amp;D Mac Mini]&amp;lt;/friendlyName&amp;gt;&lt;br /&gt;
        &amp;lt;manufacturer&amp;gt;Linn&amp;lt;/manufacturer&amp;gt;&lt;br /&gt;
        &amp;lt;manufacturerURL&amp;gt;http://www.linn.co.uk&amp;lt;/manufacturerURL&amp;gt;&lt;br /&gt;
        &amp;lt;modelName&amp;gt;Kazoo Server&amp;lt;/modelName&amp;gt;&lt;br /&gt;
        &amp;lt;modelURL&amp;gt;http://oss.linn.co.uk/trac/wiki/KazooServer&amp;lt;/modelURL&amp;gt;&lt;br /&gt;
        &amp;lt;UDN&amp;gt;uuid:ac3d630e37b5f11ff5cdd23c0f5a7400&amp;lt;/UDN&amp;gt;&lt;br /&gt;
        &amp;lt;iconList&amp;gt;&lt;br /&gt;
            &amp;lt;icon&amp;gt;&lt;br /&gt;
                &amp;lt;mimetype&amp;gt;image/png&amp;lt;/mimetype&amp;gt;&lt;br /&gt;
                &amp;lt;width&amp;gt;65&amp;lt;/width&amp;gt;&lt;br /&gt;
                &amp;lt;height&amp;gt;65&amp;lt;/height&amp;gt;&lt;br /&gt;
                &amp;lt;depth&amp;gt;32&amp;lt;/depth&amp;gt;&lt;br /&gt;
                &amp;lt;url&amp;gt;ac3d630e37b5f11ff5cdd23c0f5a7400/resource/icon/icon&amp;lt;/url&amp;gt;&lt;br /&gt;
            &amp;lt;/icon&amp;gt;&lt;br /&gt;
        &amp;lt;/iconList&amp;gt;&lt;br /&gt;
        &amp;lt;serviceList&amp;gt;&lt;br /&gt;
            &amp;lt;service&amp;gt;&lt;br /&gt;
                &amp;lt;serviceType&amp;gt;urn:av-openhome-org:service:PlaylistManager:1&amp;lt;/serviceType&amp;gt;&lt;br /&gt;
                &amp;lt;serviceId&amp;gt;urn:av-openhome-org:serviceId:PlaylistManager&amp;lt;/serviceId&amp;gt;&lt;br /&gt;
                &amp;lt;SCPDURL&amp;gt;/ac3d630e37b5f11ff5cdd23c0f5a7400/Upnp/av.openhome.org-PlaylistManager-1/service.xml&amp;lt;/SCPDURL&amp;gt;&lt;br /&gt;
                &amp;lt;controlURL&amp;gt;/ac3d630e37b5f11ff5cdd23c0f5a7400/av.openhome.org-PlaylistManager-1/control&amp;lt;/controlURL&amp;gt;&lt;br /&gt;
                &amp;lt;eventSubURL&amp;gt;/ac3d630e37b5f11ff5cdd23c0f5a7400/av.openhome.org-PlaylistManager-1/event&amp;lt;/eventSubURL&amp;gt;&lt;br /&gt;
            &amp;lt;/service&amp;gt;&lt;br /&gt;
            &amp;lt;service&amp;gt;&lt;br /&gt;
                &amp;lt;serviceType&amp;gt;urn:schemas-upnp-org:service:ContentDirectory:1&amp;lt;/serviceType&amp;gt;&lt;br /&gt;
                &amp;lt;serviceId&amp;gt;urn:upnp-org:serviceId:ContentDirectory&amp;lt;/serviceId&amp;gt;&lt;br /&gt;
                &amp;lt;SCPDURL&amp;gt;/ac3d630e37b5f11ff5cdd23c0f5a7400/Upnp/upnp.org-ContentDirectory-1/service.xml&amp;lt;/SCPDURL&amp;gt;&lt;br /&gt;
                &amp;lt;controlURL&amp;gt;/ac3d630e37b5f11ff5cdd23c0f5a7400/upnp.org-ContentDirectory-1/control&amp;lt;/controlURL&amp;gt;&lt;br /&gt;
                &amp;lt;eventSubURL&amp;gt;/ac3d630e37b5f11ff5cdd23c0f5a7400/upnp.org-ContentDirectory-1/event&amp;lt;/eventSubURL&amp;gt;&lt;br /&gt;
            &amp;lt;/service&amp;gt;&lt;br /&gt;
            &amp;lt;service&amp;gt;&lt;br /&gt;
                &amp;lt;serviceType&amp;gt;urn:schemas-upnp-org:service:ConnectionManager:1&amp;lt;/serviceType&amp;gt;&lt;br /&gt;
                &amp;lt;serviceId&amp;gt;urn:upnp-org:serviceId:ConnectionManager&amp;lt;/serviceId&amp;gt;&lt;br /&gt;
                &amp;lt;SCPDURL&amp;gt;/ac3d630e37b5f11ff5cdd23c0f5a7400/Upnp/upnp.org-ConnectionManager-1/service.xml&amp;lt;/SCPDURL&amp;gt;&lt;br /&gt;
                &amp;lt;controlURL&amp;gt;/ac3d630e37b5f11ff5cdd23c0f5a7400/upnp.org-ConnectionManager-1/control&amp;lt;/controlURL&amp;gt;&lt;br /&gt;
                &amp;lt;eventSubURL&amp;gt;/ac3d630e37b5f11ff5cdd23c0f5a7400/upnp.org-ConnectionManager-1/event&amp;lt;/eventSubURL&amp;gt;&lt;br /&gt;
            &amp;lt;/service&amp;gt;&lt;br /&gt;
        &amp;lt;/serviceList&amp;gt;&lt;br /&gt;
    &amp;lt;/device&amp;gt;&lt;br /&gt;
 &amp;lt;/root&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Index maps ==&lt;br /&gt;
&lt;br /&gt;
Large lists are difficult to navigate, especially on mobile devices. Mobile devices added the idea of an index map to improve this situation. The index map allows a users to jump to different sections in a large list, similar to what is possible with a scrollbar on desktops.&lt;br /&gt;
&lt;br /&gt;
In order for a control point to generate an index map for any particular level in a ContentDirectory&#039;s hierarchy it first needs to download all the objects in the container, figure out if they are sorted and then calculate the index map. This means that a user will need to wait, perhaps minutes, before an index map is able to be presented on the UI. &lt;br /&gt;
&lt;br /&gt;
The media server can optionally return an index map for container that are in alphabetical order. This implemented through a OpenHome vendor extension of the DIDL-Lite XML. Below shows an example DIDL-Lite with an index map included.&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;DIDL-Lite xmlns=&amp;quot;urn:schemas-upnp-org:metadata-1-0/DIDL-Lite/&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;container id=&amp;quot;db/ba37a2ac24efa676c8676aab71a6cdf074&amp;quot; parentID=&amp;quot;0&amp;quot; restricted=&amp;quot;true&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;dc:title xmlns:dc=&amp;quot;http://purl.org/dc/elements/1.1/&amp;quot;&amp;gt;Worlds Apart [Deluxe Edition]&amp;lt;/dc:title&amp;gt;&lt;br /&gt;
        &amp;lt;upnp:udn xmlns:upnp=&amp;quot;urn:schemas-upnp-org:metadata-1-0/upnp/&amp;quot;&amp;gt;ac3d630e37b5f11ff5cdd23c0f5a7400&amp;lt;/upnp:udn&amp;gt;&lt;br /&gt;
        &amp;lt;upnp:class xmlns:upnp=&amp;quot;urn:schemas-upnp-org:metadata-1-0/upnp/&amp;quot;&amp;gt;object.container.album.musicAlbum&amp;lt;/upnp:class&amp;gt;&lt;br /&gt;
        &amp;lt;upnp:artist xmlns:upnp=&amp;quot;urn:schemas-upnp-org:metadata-1-0/upnp/&amp;quot;&amp;gt;...And You Will Know Us by the Trail of Dead&amp;lt;/upnp:artist&amp;gt;&lt;br /&gt;
        &amp;lt;upnp:albumArtURI&amp;gt;http://10.2.1.170:4000/linn.co.uk.kazooserver/ms/artwork/37a2ac2?size=0&amp;lt;/upnp:albumArtURI&amp;gt;&lt;br /&gt;
    &amp;lt;/container&amp;gt;&lt;br /&gt;
    &amp;lt;desc nameSpace=&amp;quot;openhome.org&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;indexmap&amp;gt;0 10 10 10 10 10 0 0 0 0 10 12 1 10 10 10 12 17 18 1 0 20 0 20 20 2 2 24&amp;lt;/indexmap&amp;gt;&lt;br /&gt;
    &amp;lt;/desc&amp;gt;&lt;br /&gt;
 &amp;lt;/DIDL-Lite&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The index map contains a space separated list of 28 number representing the total number of items that begin with that letter. #, represents everything below A, largely digits and punctuation and + represents everything above Z, largely international characters not collatable within the roman alphabet.&lt;br /&gt;
&lt;br /&gt;
 # A B C D E F G H I J K L M N O P Q R S T U V W X Y Z +&lt;br /&gt;
&lt;br /&gt;
== Image Resolution ==&lt;br /&gt;
&lt;br /&gt;
Control points running on different platforms have different memory limits and display technologies. This means that a control point on a PC might want to display artwork at a high resolution, while a control point on a PDA might want to display artwork at a much lower resolution.&lt;br /&gt;
&lt;br /&gt;
Media servers often try to solve this problem using one of the following two methods:&lt;br /&gt;
&lt;br /&gt;
# A configurable parameter that scales all artwork to a user defined size&lt;br /&gt;
# A profile system where a user can create profiles for each class of control point they have and configure a parameter that scales all artwork to a user defined size per profile&lt;br /&gt;
&lt;br /&gt;
The first solution is highly problematic because it limits the resolution of artwork across the whole network. But a single network very often contains control points that can display high resolution images AND control points that can&#039;t.&lt;br /&gt;
&lt;br /&gt;
The second solution is just architecturally poor, turning the relationship between a control point and a media server on its head. Why should the media server try to infer what a control point needs through configuration when the control point is perfectly capable of telling the media server its exact requirements in every single circumstance.&lt;br /&gt;
&lt;br /&gt;
So, it is proposed that compliant media servers include a &#039;&#039;&#039;size&#039;&#039;&#039; element in their artwork uri&#039;s, where the size is the image&#039;s largest dimension. This allows a control point to ask for an image at a specified size.&lt;br /&gt;
&lt;br /&gt;
=== Example ===&lt;br /&gt;
&lt;br /&gt;
If the original artwork was 400x512, then a media server would provide the following albumArtURI: &amp;lt;uri&amp;gt;?size=512. If it is not possible for the media server to obtain the original resolution then the media server would provide the following albumArtURI: &amp;lt;uri&amp;gt;?size=0.&lt;br /&gt;
&lt;br /&gt;
The presence of the size element tells the control point:&lt;br /&gt;
&lt;br /&gt;
# the media server implements the image scaling extension&lt;br /&gt;
# the original size of the image.&lt;br /&gt;
&lt;br /&gt;
Now the control point can request the image at any resolution by using &amp;lt;uri&amp;gt;?size=x, where x is the size it wants.&lt;br /&gt;
&lt;br /&gt;
So, in this example, &amp;lt;uri&amp;gt;?size=1024 gets an 800x1024 image, and &amp;lt;uri&amp;gt;?size=200 gets a 156x200 image.&lt;br /&gt;
&lt;br /&gt;
== albumArtURI&amp;lt;br&amp;gt; ==&lt;br /&gt;
&lt;br /&gt;
The current specification only allows retrieval of artwork for a musicAlbum container through the property albumArtURI. When browsing a music library on a control point it quickly becomes clear that to implement a graphically rich control point the ContentDirectory service should provide a way to retrieve artwork for all of the content directory classes, not just musicAlbum containers.&lt;br /&gt;
&lt;br /&gt;
There has become a somewhat defacto standard where just about all media server provide an albumArtURI property for a musicItem item as well as for a musicAlbum container, however this is still not good enough to implement a graphically rich control point.&lt;br /&gt;
&lt;br /&gt;
It is proposed that an optional property is introduced to the object class called &#039;&#039;&#039;albumArtURI&#039;&#039;&amp;amp;nbsp;&#039;&#039;&#039;&#039;&#039;which may contain an attribute &#039;&#039;&#039;title&#039;&#039;&#039;,&amp;amp;nbsp;e.g. &amp;amp;lt;albumArtURI title=&amp;quot;Font Cover&amp;quot;&amp;amp;gt;http://Front Cover.jpg&amp;amp;lt;/albumArtURI&amp;amp;gt;.&amp;amp;nbsp;The object class can contain zero or more albumArtURIs elements.&lt;br /&gt;
&lt;br /&gt;
== Dynamic IP Addresses ==&lt;br /&gt;
&lt;br /&gt;
At present all media servers return URIs that contain a reference to their IP address, e.g. http://172.20.1.1/music.flac etc. This means that if the media server&#039;s IP address were to change across reboots, then any control point or media renderer with URIs that referenced the media server before the reboot will become invalid.&lt;br /&gt;
&lt;br /&gt;
If a user wants to ensure a URI provided by the media server is long lived the host machine running the media server must be assigned a static or dynamic reserved IP address.&lt;br /&gt;
&lt;br /&gt;
== Disc Information ==&lt;br /&gt;
&lt;br /&gt;
A new property has been added to the musicTrack item called &#039;&#039;&#039;OriginalDiscNumber&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
A new property has been added to the musicAlbum item called &#039;&#039;&#039;OriginalDiscCount&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
== Replay Gain Information ==&lt;br /&gt;
&lt;br /&gt;
Four new properties have been added to the musicTrack item called &#039;&#039;&#039;ReplayGainAlbum&#039;&#039;&#039;, &#039;&#039;&#039;ReplayGainAlbumPeak&#039;&#039;&#039;, &#039;&#039;&#039;ReplayGainTrack&#039;&#039;&#039;, and &#039;&#039;&#039;ReplayGainTrackPeak&#039;&#039;&#039;.&lt;/div&gt;</summary>
		<author><name>Davidd</name></author>
	</entry>
	<entry>
		<id>https://docs.linn.co.uk/wiki/index.php?title=Developer:Media_Server_Extensions&amp;diff=11242</id>
		<title>Developer:Media Server Extensions</title>
		<link rel="alternate" type="text/html" href="https://docs.linn.co.uk/wiki/index.php?title=Developer:Media_Server_Extensions&amp;diff=11242"/>
		<updated>2015-03-16T10:35:34Z</updated>

		<summary type="html">&lt;p&gt;Davidd: /* Dynamic IP Addresses */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Introduction =&lt;br /&gt;
&lt;br /&gt;
The ContentDirectory service has various limitations which become apparent when implementing control points on different hardware platforms. This document aims to outline some ideas that address the various shortcomings of the ContentDirectory specification.&lt;br /&gt;
&lt;br /&gt;
== Container map ==&lt;br /&gt;
&lt;br /&gt;
The current ContentDirectory specification makes it tricky for a control point to display the returned contents in an appropriate, aesthetically pleasing, manner for the content being viewed. This is because the ContentDirectory specification does not allow for a control point to know in advanced what content to expect when browsing through any particular hierarchy.&lt;br /&gt;
&lt;br /&gt;
An example of this might be, at a particular point in the browse hierarchy the ContentDirectory will return a list of albums which in turn will contain a list of tracks. A UI might wish to represent this list of albums as a grid and the album&#039;s tracks as a header and a list of the tracks. Currently it is not possible for the UI to know when it gets to a point in a hierarchy where the hierarchy represents a list of albums followed by a list of tracks.&lt;br /&gt;
&lt;br /&gt;
The container map extension allows a media server to express its container hierarchy in advance of the control point navigating it. This is done using an OpenHome vendor extension to the device XML.&lt;br /&gt;
&lt;br /&gt;
Three types of mapped container are defined: browse, link, and search.&lt;br /&gt;
&lt;br /&gt;
The browse map defines named top level containers that represent significant starting points for browsing that can meaningfully be presented in top level tabs of a control point UI. The browse map is expressed within the X_MAP_BROWSE element of X_MAP.&lt;br /&gt;
&lt;br /&gt;
The link map defines containers that can be meaningfully linked to from track or album details. For instance a track will typically have an artist defined. If an entry for &amp;quot;artist&amp;quot; is defined in the link map then it will be possible for the user of a control point to quickly access this artist-related container by clicking on the track&#039;s artist text. Similar links might be offered for &amp;quot;genre&amp;quot;, &amp;quot;composer&amp;quot;, &amp;quot;conductor&amp;quot;, etc. The link map is expressed within the X_MAP_LINK element of X_MAP.&lt;br /&gt;
&lt;br /&gt;
The search map defines the different kinds of search containers and the type of results that they produce. The search map is expressed within the X_MAP_SEARCH element of X_MAP.&lt;br /&gt;
&lt;br /&gt;
=== Browse map ===&lt;br /&gt;
&lt;br /&gt;
The X_MAP_BROWSE element must contain 1 or more X_MAP_BROWSE_ENTRY elements.&lt;br /&gt;
&lt;br /&gt;
The X_MAP_BROWSE_ENTRY has three child elements.&lt;br /&gt;
&lt;br /&gt;
X_MAP_BROWSE_ENTRY_NAME is a string that can be used by a control point to label a tab containing this browse hierarchy.&lt;br /&gt;
&lt;br /&gt;
X_MAP_BROWSE_ENTRY_ID is the UPnP container id that contains the root of this browse hierarchy. This id is then submitted to the ContentDirectory service using the Browse action as usual. The returned contents are navigated using subsequent Browse request as usual. The difference is that the control point knows in advance what kind of results to expect at each level.&lt;br /&gt;
&lt;br /&gt;
X_MAP_BROWSE_ENTRY_TYPE is a space separated list of strings that maps out the kind of containers that are to be found at each level of this browse hierarchy. For instance, &amp;quot;artist album&amp;quot; represents a browse hierarchy giving a container containing only artist containers, each of which contains only album containers, each of which contains only tracks.&lt;br /&gt;
&lt;br /&gt;
There should be an X_MAP_BROWSE_ENTRY for each root browse hierarchy defined by the media server.&lt;br /&gt;
&lt;br /&gt;
For example:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;X_MAP_BROWSE_ENTRY&amp;gt;&lt;br /&gt;
     &amp;lt;X_MAP_BROWSE_ENTRY_NAME&amp;gt;Genre&amp;lt;/X_MAP_BROWSE_ENTRY_NAME&amp;gt;&lt;br /&gt;
     &amp;lt;X_MAP_BROWSE_ENTRY_ID&amp;gt;db/browse/genre&amp;lt;/X_MAP_BROWSE_ENTRY_ID&amp;gt;&lt;br /&gt;
     &amp;lt;X_MAP_BROWSE_ENTRY_TYPE&amp;gt;genre artist album&amp;lt;/X_MAP_BROWSE_ENTRY_TYPE&amp;gt;&lt;br /&gt;
 &amp;lt;/X_MAP_BROWSE_ENTRY&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Link map ===&lt;br /&gt;
&lt;br /&gt;
The X_MAP_LINK element must contain 1 or more X_MAP_LINK_ENTRY elements.&lt;br /&gt;
&lt;br /&gt;
The X_MAP_LINK_ENTRY has three child elements.&lt;br /&gt;
&lt;br /&gt;
X_MAP_LINK_ENTRY_TAG is a string that defines which type of metadata is the target for this link. e.g. &amp;quot;artist&amp;quot;, &amp;quot;genre&amp;quot;, &amp;quot;composer&amp;quot;, etc. See the type section below. &lt;br /&gt;
&lt;br /&gt;
X_MAP_LINK_ENTRY_ID_PREFIX is a string that is prefix for a UPnP container id. The link can be taken by browsing to the container whose id is the result of appending the associated metadata value to this prefix. For instance, if the prefix for an &amp;quot;artist&amp;quot; link is defined as db/link/artist/, and a track returned anywhere in the media server&#039;s library has &amp;quot;Pink Floyd&amp;quot; as its artist. Then the linked container will have an id of db/link/artist/Pink Floyd.&lt;br /&gt;
&lt;br /&gt;
X_MAP_LINK_ENTRY_TYPE represents the type of browse hierarchy returned when taking this type of link. See X_MAP_BROWSE_ENTRY_TYPE for details.&lt;br /&gt;
&lt;br /&gt;
There should be an X_MAP_LINK_ENTRY for each piece of metadata that the media server allows to be linked.&lt;br /&gt;
&lt;br /&gt;
For example:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;X_MAP_LINK_ENTRY&amp;gt;&lt;br /&gt;
     &amp;lt;X_MAP_LINK_ENTRY_TAG&amp;gt;artist&amp;lt;/X_MAP_LINK_ENTRY_TAG&amp;gt;&lt;br /&gt;
     &amp;lt;X_MAP_LINK_ENTRY_ID_PREFIX&amp;gt;db/link/artist/&amp;lt;/X_MAP_LINK_ENTRY_ID_PREFIX&amp;gt;&lt;br /&gt;
     &amp;lt;X_MAP_LINK_ENTRY_TYPE&amp;gt;album&amp;lt;/X_MAP_LINK_ENTRY_TYPE&amp;gt;&lt;br /&gt;
 &amp;lt;/X_MAP_LINK_ENTRY&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The example above defines a browse hierarchy that is created when linking from an artist name. The hierarchy created provides a list of linked artist albums which in turn provide a list of tracks.&lt;br /&gt;
&lt;br /&gt;
=== Search map ===&lt;br /&gt;
&lt;br /&gt;
The X_MAP_SEARCH element must contain 1 or more X_MAP_SEARCH_ENTRY elements.&lt;br /&gt;
&lt;br /&gt;
The X_MAP_SEARCH_ENTRY has three child elements.&lt;br /&gt;
&lt;br /&gt;
X_MAP_SEARCH_ENTRY_NAME  is a string that can be used by a control point to label a tab containing these search results.&lt;br /&gt;
&lt;br /&gt;
X_MAP_SEARCH_ENTRY_ID_PREFIX is a string that is a prefix for a UPnP container id. The search results can be found by browsing to the container whose id is the result of appending the search string to this prefix. For instance, if the prefix for an &amp;quot;album&amp;quot; search is defined as db/search/album/, and the search string is &amp;quot;blue&amp;quot;, then the search results container will have an id of db/search/album/blue.&lt;br /&gt;
&lt;br /&gt;
X_MAP_SEARCH_ENTRY_TYPE represents the type of browse hierarchy returned when taking this type of search. See X_MAP_BROWSE_ENTRY_TYPE for details.&lt;br /&gt;
&lt;br /&gt;
There should be an X_MAP_SEARCH_ENTRY for each type of search offered by the media server.&lt;br /&gt;
&lt;br /&gt;
For example:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;X_MAP_SEARCH_ENTRY&amp;gt;&lt;br /&gt;
     &amp;lt;X_MAP_SEARCH_ENTRY_NAME&amp;gt;Artist&amp;lt;/X_MAP_SEARCH_ENTRY_NAME&amp;gt;&lt;br /&gt;
     &amp;lt;X_MAP_SEARCH_ENTRY_ID_PREFIX&amp;gt;db/search/artist/&amp;lt;/X_MAP_SEARCH_ENTRY_ID_PREFIX&amp;gt;&lt;br /&gt;
     &amp;lt;X_MAP_SEARCH_ENTRY_TYPE&amp;gt;artist album&amp;lt;/X_MAP_SEARCH_ENTRY_TYPE&amp;gt;&lt;br /&gt;
 &amp;lt;/X_MAP_SEARCH_ENTRY&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The example above defines a browse hierarchy that is created when searching for an artist. The hierarchy created provides a list of artists, which in turn provide a list of albums, which in turn provide a list of tracks.&lt;br /&gt;
&lt;br /&gt;
=== Types ===&lt;br /&gt;
&lt;br /&gt;
The list of allowed types for X_BROWSE_ENTRY_TYPE, X_MAP_LINK_ENTRY_TAG, X_LINK_ENTRY_TYPE, and X_SEARCH_ENTRY_TYPE&lt;br /&gt;
&lt;br /&gt;
 genre&lt;br /&gt;
 artist&lt;br /&gt;
 composer&lt;br /&gt;
 conductor&lt;br /&gt;
 album&lt;br /&gt;
 year&lt;br /&gt;
 mixed&lt;br /&gt;
&lt;br /&gt;
mixed is a special value that represents a container that has mixed entries. It is not a valid type for the X_MAP_LINK_ENTRY_TAG element.&lt;br /&gt;
&lt;br /&gt;
=== Example device XML ===&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;root xmlns=&amp;quot;urn:schemas-upnp-org:device-1-0&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;specVersion&amp;gt;&lt;br /&gt;
        &amp;lt;major&amp;gt;1&amp;lt;/major&amp;gt;&lt;br /&gt;
        &amp;lt;minor&amp;gt;1&amp;lt;/minor&amp;gt;&lt;br /&gt;
    &amp;lt;/specVersion&amp;gt;&lt;br /&gt;
    &amp;lt;device&amp;gt;&lt;br /&gt;
        &amp;lt;deviceType&amp;gt;urn:schemas-upnp-org:device:MediaServer:1&amp;lt;/deviceType&amp;gt;&lt;br /&gt;
        &amp;lt;dlna:X_DLNADOC xmlns:dlna=&amp;quot;urn:schemas-dlna-org:device-1-0&amp;quot;&amp;gt;DMS-1.50&amp;lt;/dlna:X_DLNADOC&amp;gt;&lt;br /&gt;
        &amp;lt;dlna:X_DLNACAP xmlns:dlna=&amp;quot;urn:schemas-dlna-org:device-1-0&amp;quot;&amp;gt;av-upload,image-upload,audio-upload&amp;lt;/dlna:X_DLNACAP&amp;gt;&lt;br /&gt;
        &amp;lt;openhome:X_MAP xmlns:openhome=&amp;quot;http://www.openhome.org&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;X_MAP_BROWSE&amp;gt;&lt;br /&gt;
                &amp;lt;X_MAP_BROWSE_ENTRY&amp;gt;&lt;br /&gt;
                    &amp;lt;X_MAP_BROWSE_ENTRY_NAME&amp;gt;Albums&amp;lt;/X_MAP_BROWSE_ENTRY_NAME&amp;gt;&lt;br /&gt;
                    &amp;lt;X_MAP_BROWSE_ENTRY_ID&amp;gt;db/browse/albums&amp;lt;/X_MAP_BROWSE_ENTRY_ID&amp;gt;&lt;br /&gt;
                    &amp;lt;X_MAP_BROWSE_ENTRY_TYPE&amp;gt;album&amp;lt;/X_MAP_BROWSE_ENTRY_TYPE&amp;gt;&lt;br /&gt;
                &amp;lt;/X_MAP_BROWSE_ENTRY&amp;gt;&lt;br /&gt;
                &amp;lt;X_MAP_BROWSE_ENTRY&amp;gt;&lt;br /&gt;
                    &amp;lt;X_MAP_BROWSE_ENTRY_NAME&amp;gt;Artists&amp;lt;/X_MAP_BROWSE_ENTRY_NAME&amp;gt;&lt;br /&gt;
                    &amp;lt;X_MAP_BROWSE_ENTRY_ID&amp;gt;db/browse/artists&amp;lt;/X_MAP_BROWSE_ENTRY_ID&amp;gt;&lt;br /&gt;
                    &amp;lt;X_MAP_BROWSE_ENTRY_TYPE&amp;gt;artist album&amp;lt;/X_MAP_BROWSE_ENTRY_TYPE&amp;gt;&lt;br /&gt;
                &amp;lt;/X_MAP_BROWSE_ENTRY&amp;gt;&lt;br /&gt;
                &amp;lt;X_MAP_BROWSE_ENTRY&amp;gt;&lt;br /&gt;
                    &amp;lt;X_MAP_BROWSE_ENTRY_NAME&amp;gt;Folders&amp;lt;/X_MAP_BROWSE_ENTRY_NAME&amp;gt;&lt;br /&gt;
                    &amp;lt;X_MAP_BROWSE_ENTRY_ID&amp;gt;db/browse/folders&amp;lt;/X_MAP_BROWSE_ENTRY_ID&amp;gt;&lt;br /&gt;
                    &amp;lt;X_MAP_BROWSE_ENTRY_TYPE&amp;gt;mixed&amp;lt;/X_MAP_BROWSE_ENTRY_TYPE&amp;gt;&lt;br /&gt;
                &amp;lt;/X_MAP_BROWSE_ENTRY&amp;gt;&lt;br /&gt;
            &amp;lt;/X_MAP_BROWSE&amp;gt;&lt;br /&gt;
            &amp;lt;X_MAP_LINK&amp;gt;&lt;br /&gt;
                &amp;lt;X_MAP_LINK_ENTRY&amp;gt;&lt;br /&gt;
                    &amp;lt;X_MAP_LINK_ENTRY_TAG&amp;gt;artist&amp;lt;/X_MAP_LINK_ENTRY_TAG&amp;gt;&lt;br /&gt;
                    &amp;lt;X_MAP_LINK_ENTRY_ID_PREFIX&amp;gt;db/link/artist/&amp;lt;/X_MAP_LINK_ENTRY_ID_PREFIX&amp;gt;&lt;br /&gt;
                    &amp;lt;X_MAP_LINK_ENTRY_TYPE&amp;gt;album&amp;lt;/X_MAP_LINK_ENTRY_TYPE&amp;gt;&lt;br /&gt;
                &amp;lt;/X_MAP_LINK_ENTRY&amp;gt;&lt;br /&gt;
                &amp;lt;X_MAP_LINK_ENTRY&amp;gt;&lt;br /&gt;
                    &amp;lt;X_MAP_LINK_ENTRY_TAG&amp;gt;composer&amp;lt;/X_MAP_LINK_ENTRY_TAG&amp;gt;&lt;br /&gt;
                    &amp;lt;X_MAP_LINK_ENTRY_ID_PREFIX&amp;gt;db/link/composer/&amp;lt;/X_MAP_LINK_ENTRY_ID_PREFIX&amp;gt;&lt;br /&gt;
                    &amp;lt;X_MAP_LINK_ENTRY_TYPE&amp;gt;album&amp;lt;/X_MAP_LINK_ENTRY_TYPE&amp;gt;&lt;br /&gt;
                &amp;lt;/X_MAP_LINK_ENTRY&amp;gt;&lt;br /&gt;
            &amp;lt;/X_MAP_LINK&amp;gt;&lt;br /&gt;
            &amp;lt;X_MAP_SEARCH&amp;gt;&lt;br /&gt;
                &amp;lt;X_MAP_SEARCH_ENTRY&amp;gt;&lt;br /&gt;
                    &amp;lt;X_MAP_SEARCH_ENTRY_NAME&amp;gt;Artist&amp;lt;/X_MAP_SEARCH_ENTRY_NAME&amp;gt;&lt;br /&gt;
                    &amp;lt;X_MAP_SEARCH_ENTRY_ID_PREFIX&amp;gt;db/search/artist/&amp;lt;/X_MAP_SEARCH_ENTRY_ID_PREFIX&amp;gt;&lt;br /&gt;
                    &amp;lt;X_MAP_SEARCH_ENTRY_TYPE&amp;gt;artist album&amp;lt;/X_MAP_SEARCH_ENTRY_TYPE&amp;gt;&lt;br /&gt;
                &amp;lt;/X_MAP_SEARCH_ENTRY&amp;gt;&lt;br /&gt;
                &amp;lt;X_MAP_SEARCH_ENTRY&amp;gt;&lt;br /&gt;
                    &amp;lt;X_MAP_SEARCH_ENTRY_NAME&amp;gt;Tracks&amp;lt;/X_MAP_SEARCH_ENTRY_NAME&amp;gt;&lt;br /&gt;
                    &amp;lt;X_MAP_SEARCH_ENTRY_ID_PREFIX&amp;gt;db/search/all/&amp;lt;/X_MAP_SEARCH_ENTRY_ID_PREFIX&amp;gt;&lt;br /&gt;
                    &amp;lt;X_MAP_SEARCH_ENTRY_TYPE&amp;gt;&amp;lt;/X_MAP_SEARCH_ENTRY_TYPE&amp;gt;&lt;br /&gt;
                &amp;lt;/X_MAP_SEARCH_ENTRY&amp;gt;&lt;br /&gt;
            &amp;lt;/X_MAP_SEARCH&amp;gt;&lt;br /&gt;
        &amp;lt;/openhome:X_MAP&amp;gt;&lt;br /&gt;
        &amp;lt;presentationURL&amp;gt;http://10.2.1.170:4000/res/linn.co.uk.kazooserver/index.html&amp;lt;/presentationURL&amp;gt;&lt;br /&gt;
        &amp;lt;friendlyName&amp;gt;Linn Kazoo Server [R&amp;amp;D Mac Mini]&amp;lt;/friendlyName&amp;gt;&lt;br /&gt;
        &amp;lt;manufacturer&amp;gt;Linn&amp;lt;/manufacturer&amp;gt;&lt;br /&gt;
        &amp;lt;manufacturerURL&amp;gt;http://www.linn.co.uk&amp;lt;/manufacturerURL&amp;gt;&lt;br /&gt;
        &amp;lt;modelName&amp;gt;Kazoo Server&amp;lt;/modelName&amp;gt;&lt;br /&gt;
        &amp;lt;modelURL&amp;gt;http://oss.linn.co.uk/trac/wiki/KazooServer&amp;lt;/modelURL&amp;gt;&lt;br /&gt;
        &amp;lt;UDN&amp;gt;uuid:ac3d630e37b5f11ff5cdd23c0f5a7400&amp;lt;/UDN&amp;gt;&lt;br /&gt;
        &amp;lt;iconList&amp;gt;&lt;br /&gt;
            &amp;lt;icon&amp;gt;&lt;br /&gt;
                &amp;lt;mimetype&amp;gt;image/png&amp;lt;/mimetype&amp;gt;&lt;br /&gt;
                &amp;lt;width&amp;gt;65&amp;lt;/width&amp;gt;&lt;br /&gt;
                &amp;lt;height&amp;gt;65&amp;lt;/height&amp;gt;&lt;br /&gt;
                &amp;lt;depth&amp;gt;32&amp;lt;/depth&amp;gt;&lt;br /&gt;
                &amp;lt;url&amp;gt;ac3d630e37b5f11ff5cdd23c0f5a7400/resource/icon/icon&amp;lt;/url&amp;gt;&lt;br /&gt;
            &amp;lt;/icon&amp;gt;&lt;br /&gt;
        &amp;lt;/iconList&amp;gt;&lt;br /&gt;
        &amp;lt;serviceList&amp;gt;&lt;br /&gt;
            &amp;lt;service&amp;gt;&lt;br /&gt;
                &amp;lt;serviceType&amp;gt;urn:av-openhome-org:service:PlaylistManager:1&amp;lt;/serviceType&amp;gt;&lt;br /&gt;
                &amp;lt;serviceId&amp;gt;urn:av-openhome-org:serviceId:PlaylistManager&amp;lt;/serviceId&amp;gt;&lt;br /&gt;
                &amp;lt;SCPDURL&amp;gt;/ac3d630e37b5f11ff5cdd23c0f5a7400/Upnp/av.openhome.org-PlaylistManager-1/service.xml&amp;lt;/SCPDURL&amp;gt;&lt;br /&gt;
                &amp;lt;controlURL&amp;gt;/ac3d630e37b5f11ff5cdd23c0f5a7400/av.openhome.org-PlaylistManager-1/control&amp;lt;/controlURL&amp;gt;&lt;br /&gt;
                &amp;lt;eventSubURL&amp;gt;/ac3d630e37b5f11ff5cdd23c0f5a7400/av.openhome.org-PlaylistManager-1/event&amp;lt;/eventSubURL&amp;gt;&lt;br /&gt;
            &amp;lt;/service&amp;gt;&lt;br /&gt;
            &amp;lt;service&amp;gt;&lt;br /&gt;
                &amp;lt;serviceType&amp;gt;urn:schemas-upnp-org:service:ContentDirectory:1&amp;lt;/serviceType&amp;gt;&lt;br /&gt;
                &amp;lt;serviceId&amp;gt;urn:upnp-org:serviceId:ContentDirectory&amp;lt;/serviceId&amp;gt;&lt;br /&gt;
                &amp;lt;SCPDURL&amp;gt;/ac3d630e37b5f11ff5cdd23c0f5a7400/Upnp/upnp.org-ContentDirectory-1/service.xml&amp;lt;/SCPDURL&amp;gt;&lt;br /&gt;
                &amp;lt;controlURL&amp;gt;/ac3d630e37b5f11ff5cdd23c0f5a7400/upnp.org-ContentDirectory-1/control&amp;lt;/controlURL&amp;gt;&lt;br /&gt;
                &amp;lt;eventSubURL&amp;gt;/ac3d630e37b5f11ff5cdd23c0f5a7400/upnp.org-ContentDirectory-1/event&amp;lt;/eventSubURL&amp;gt;&lt;br /&gt;
            &amp;lt;/service&amp;gt;&lt;br /&gt;
            &amp;lt;service&amp;gt;&lt;br /&gt;
                &amp;lt;serviceType&amp;gt;urn:schemas-upnp-org:service:ConnectionManager:1&amp;lt;/serviceType&amp;gt;&lt;br /&gt;
                &amp;lt;serviceId&amp;gt;urn:upnp-org:serviceId:ConnectionManager&amp;lt;/serviceId&amp;gt;&lt;br /&gt;
                &amp;lt;SCPDURL&amp;gt;/ac3d630e37b5f11ff5cdd23c0f5a7400/Upnp/upnp.org-ConnectionManager-1/service.xml&amp;lt;/SCPDURL&amp;gt;&lt;br /&gt;
                &amp;lt;controlURL&amp;gt;/ac3d630e37b5f11ff5cdd23c0f5a7400/upnp.org-ConnectionManager-1/control&amp;lt;/controlURL&amp;gt;&lt;br /&gt;
                &amp;lt;eventSubURL&amp;gt;/ac3d630e37b5f11ff5cdd23c0f5a7400/upnp.org-ConnectionManager-1/event&amp;lt;/eventSubURL&amp;gt;&lt;br /&gt;
            &amp;lt;/service&amp;gt;&lt;br /&gt;
        &amp;lt;/serviceList&amp;gt;&lt;br /&gt;
    &amp;lt;/device&amp;gt;&lt;br /&gt;
 &amp;lt;/root&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Index maps ==&lt;br /&gt;
&lt;br /&gt;
Large lists are difficult to navigate, especially on mobile devices. Mobile devices added the idea of an index map to improve this situation. The index map allows a users to jump to different sections in a large list, similar to what is possible with a scrollbar on desktops.&lt;br /&gt;
&lt;br /&gt;
In order for a control point to generate an index map for any particular level in a ContentDirectory&#039;s hierarchy it first needs to download all the objects in the container, figure out if they are sorted and then calculate the index map. This means that a user will need to wait, perhaps minutes, before an index map is able to be presented on the UI. &lt;br /&gt;
&lt;br /&gt;
The media server can optionally return an index map for container that are in alphabetical order. This implemented through a OpenHome vendor extension of the DIDL-Lite XML. Below shows an example DIDL-Lite with an index map included.&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;DIDL-Lite xmlns=&amp;quot;urn:schemas-upnp-org:metadata-1-0/DIDL-Lite/&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;container id=&amp;quot;db/ba37a2ac24efa676c8676aab71a6cdf074&amp;quot; parentID=&amp;quot;0&amp;quot; restricted=&amp;quot;true&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;dc:title xmlns:dc=&amp;quot;http://purl.org/dc/elements/1.1/&amp;quot;&amp;gt;Worlds Apart [Deluxe Edition]&amp;lt;/dc:title&amp;gt;&lt;br /&gt;
        &amp;lt;upnp:udn xmlns:upnp=&amp;quot;urn:schemas-upnp-org:metadata-1-0/upnp/&amp;quot;&amp;gt;ac3d630e37b5f11ff5cdd23c0f5a7400&amp;lt;/upnp:udn&amp;gt;&lt;br /&gt;
        &amp;lt;upnp:class xmlns:upnp=&amp;quot;urn:schemas-upnp-org:metadata-1-0/upnp/&amp;quot;&amp;gt;object.container.album.musicAlbum&amp;lt;/upnp:class&amp;gt;&lt;br /&gt;
        &amp;lt;upnp:artist xmlns:upnp=&amp;quot;urn:schemas-upnp-org:metadata-1-0/upnp/&amp;quot;&amp;gt;...And You Will Know Us by the Trail of Dead&amp;lt;/upnp:artist&amp;gt;&lt;br /&gt;
        &amp;lt;upnp:albumArtURI&amp;gt;http://10.2.1.170:4000/linn.co.uk.kazooserver/ms/artwork/37a2ac2?size=0&amp;lt;/upnp:albumArtURI&amp;gt;&lt;br /&gt;
    &amp;lt;/container&amp;gt;&lt;br /&gt;
    &amp;lt;desc nameSpace=&amp;quot;openhome.org&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;indexmap&amp;gt;0 10 10 10 10 10 0 0 0 0 10 12 1 10 10 10 12 17 18 1 0 20 0 20 20 2 2 24&amp;lt;/indexmap&amp;gt;&lt;br /&gt;
    &amp;lt;/desc&amp;gt;&lt;br /&gt;
 &amp;lt;/DIDL-Lite&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The index map contains a space separated list of 28 number representing the total number of items that begin with that letter. #, represents everything below A, largely digits and punctuation and + represents everything above Z, largely international characters not collatable within the roman alphabet.&lt;br /&gt;
&lt;br /&gt;
 # A B C D E F G H I J K L M N O P Q R S T U V W X Y Z +&lt;br /&gt;
&lt;br /&gt;
== Image Resolution ==&lt;br /&gt;
&lt;br /&gt;
Control points running on different platforms have different memory limits and display technologies. This means that a control point on a PC might want to display artwork at a high resolution, while a control point on a PDA might want to display artwork at a much lower resolution.&lt;br /&gt;
&lt;br /&gt;
Media servers often try to solve this problem using one of the following two methods:&lt;br /&gt;
&lt;br /&gt;
# A configurable parameter that scales all artwork to a user defined size&lt;br /&gt;
# A profile system where a user can create profiles for each class of control point they have and configure a parameter that scales all artwork to a user defined size per profile&lt;br /&gt;
&lt;br /&gt;
The first solution is highly problematic because it limits the resolution of artwork across the whole network. But a single network very often contains control points that can display high resolution images AND control points that can&#039;t.&lt;br /&gt;
&lt;br /&gt;
The second solution is just architecturally poor, turning the relationship between a control point and a media server on its head. Why should the media server try to infer what a control point needs through configuration when the control point is perfectly capable of telling the media server its exact requirements in every single circumstance.&lt;br /&gt;
&lt;br /&gt;
So, it is proposed that compliant media servers include a &#039;&#039;&#039;size&#039;&#039;&#039; element in their artwork uri&#039;s, where the size is the image&#039;s largest dimension. This allows a control point to ask for an image at a specified size.&lt;br /&gt;
&lt;br /&gt;
=== Example ===&lt;br /&gt;
&lt;br /&gt;
If the original artwork was 400x512, then a media server would provide the following albumArtURI: &amp;lt;uri&amp;gt;?size=512. If it is not possible for the media server to obtain the original resolution then the media server would provide the following albumArtURI: &amp;lt;uri&amp;gt;?size=0.&lt;br /&gt;
&lt;br /&gt;
The presence of the size element tells the control point:&lt;br /&gt;
&lt;br /&gt;
# the media server implements the image scaling extension&lt;br /&gt;
# the original size of the image.&lt;br /&gt;
&lt;br /&gt;
Now the control point can request the image at any resolution by using &amp;lt;uri&amp;gt;?size=x, where x is the size it wants.&lt;br /&gt;
&lt;br /&gt;
So, in this example, &amp;lt;uri&amp;gt;?size=1024 gets an 800x1024 image, and &amp;lt;uri&amp;gt;?size=200 gets a 156x200 image.&lt;br /&gt;
&lt;br /&gt;
== albumArtURI&amp;lt;br&amp;gt; ==&lt;br /&gt;
&lt;br /&gt;
The current specification only allows retrieval of artwork for a musicAlbum container through the property albumArtURI. When browsing a music library on a control point it quickly becomes clear that to implement a graphically rich control point the ContentDirectory service should provide a way to retrieve artwork for all of the content directory classes, not just musicAlbum containers.&lt;br /&gt;
&lt;br /&gt;
There has become a somewhat defacto standard where just about all media server provide an albumArtURI property for a musicItem item as well as for a musicAlbum container, however this is still not good enough to implement a graphically rich control point.&lt;br /&gt;
&lt;br /&gt;
It is proposed that an optional property is introduced to the object class called &#039;&#039;&#039;albumArtURI&#039;&#039;&amp;amp;nbsp;&#039;&#039;&#039;&#039;&#039;which may contain an attribute &#039;&#039;&#039;title&#039;&#039;&#039;,&amp;amp;nbsp;e.g. &amp;amp;lt;albumArtURI title=&amp;quot;Font Cover&amp;quot;&amp;amp;gt;http://Front Cover.jpg&amp;amp;lt;/albumArtURI&amp;amp;gt;.&amp;amp;nbsp;The object class can contain zero or more albumArtURIs elements.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Dynamic IP Addresses ==&lt;br /&gt;
&lt;br /&gt;
At present all media servers return URIs that contain a reference to their IP address, e.g. http://172.20.1.1/music.flac etc. This means that if the media server&#039;s IP address were to change across reboots, then any control point or media renderer with URIs that referenced the media server before the reboot will become invalid.&lt;br /&gt;
&lt;br /&gt;
If a user wants to ensure a URI provided by the media server is long lived the host machine running the media server must be assigned a static or dynamic reserved IP address.&lt;br /&gt;
&lt;br /&gt;
== Disc Information ==&lt;br /&gt;
&lt;br /&gt;
A new property has been added to the musicTrack item called &#039;&#039;&#039;OriginalDiscNumber&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
A new property has been added to the musicAlbum item called &#039;&#039;&#039;OriginalDiscCount&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
== Replay Gain Information ==&lt;br /&gt;
&lt;br /&gt;
Four new properties have been added to the musicTrack item called &#039;&#039;&#039;ReplayGainAlbum&#039;&#039;&#039;, &#039;&#039;&#039;ReplayGainAlbumPeak&#039;&#039;&#039;, &#039;&#039;&#039;ReplayGainTrack&#039;&#039;&#039;, and &#039;&#039;&#039;ReplayGainTrackPeak&#039;&#039;&#039;.&lt;/div&gt;</summary>
		<author><name>Davidd</name></author>
	</entry>
	<entry>
		<id>https://docs.linn.co.uk/wiki/index.php?title=Developer:Media_Server_Extensions&amp;diff=11241</id>
		<title>Developer:Media Server Extensions</title>
		<link rel="alternate" type="text/html" href="https://docs.linn.co.uk/wiki/index.php?title=Developer:Media_Server_Extensions&amp;diff=11241"/>
		<updated>2015-03-16T10:34:13Z</updated>

		<summary type="html">&lt;p&gt;Davidd: /* Dynamic IP Addresses */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Introduction =&lt;br /&gt;
&lt;br /&gt;
The ContentDirectory service has various limitations which become apparent when implementing control points on different hardware platforms. This document aims to outline some ideas that address the various shortcomings of the ContentDirectory specification.&lt;br /&gt;
&lt;br /&gt;
== Container map ==&lt;br /&gt;
&lt;br /&gt;
The current ContentDirectory specification makes it tricky for a control point to display the returned contents in an appropriate, aesthetically pleasing, manner for the content being viewed. This is because the ContentDirectory specification does not allow for a control point to know in advanced what content to expect when browsing through any particular hierarchy.&lt;br /&gt;
&lt;br /&gt;
An example of this might be, at a particular point in the browse hierarchy the ContentDirectory will return a list of albums which in turn will contain a list of tracks. A UI might wish to represent this list of albums as a grid and the album&#039;s tracks as a header and a list of the tracks. Currently it is not possible for the UI to know when it gets to a point in a hierarchy where the hierarchy represents a list of albums followed by a list of tracks.&lt;br /&gt;
&lt;br /&gt;
The container map extension allows a media server to express its container hierarchy in advance of the control point navigating it. This is done using an OpenHome vendor extension to the device XML.&lt;br /&gt;
&lt;br /&gt;
Three types of mapped container are defined: browse, link, and search.&lt;br /&gt;
&lt;br /&gt;
The browse map defines named top level containers that represent significant starting points for browsing that can meaningfully be presented in top level tabs of a control point UI. The browse map is expressed within the X_MAP_BROWSE element of X_MAP.&lt;br /&gt;
&lt;br /&gt;
The link map defines containers that can be meaningfully linked to from track or album details. For instance a track will typically have an artist defined. If an entry for &amp;quot;artist&amp;quot; is defined in the link map then it will be possible for the user of a control point to quickly access this artist-related container by clicking on the track&#039;s artist text. Similar links might be offered for &amp;quot;genre&amp;quot;, &amp;quot;composer&amp;quot;, &amp;quot;conductor&amp;quot;, etc. The link map is expressed within the X_MAP_LINK element of X_MAP.&lt;br /&gt;
&lt;br /&gt;
The search map defines the different kinds of search containers and the type of results that they produce. The search map is expressed within the X_MAP_SEARCH element of X_MAP.&lt;br /&gt;
&lt;br /&gt;
=== Browse map ===&lt;br /&gt;
&lt;br /&gt;
The X_MAP_BROWSE element must contain 1 or more X_MAP_BROWSE_ENTRY elements.&lt;br /&gt;
&lt;br /&gt;
The X_MAP_BROWSE_ENTRY has three child elements.&lt;br /&gt;
&lt;br /&gt;
X_MAP_BROWSE_ENTRY_NAME is a string that can be used by a control point to label a tab containing this browse hierarchy.&lt;br /&gt;
&lt;br /&gt;
X_MAP_BROWSE_ENTRY_ID is the UPnP container id that contains the root of this browse hierarchy. This id is then submitted to the ContentDirectory service using the Browse action as usual. The returned contents are navigated using subsequent Browse request as usual. The difference is that the control point knows in advance what kind of results to expect at each level.&lt;br /&gt;
&lt;br /&gt;
X_MAP_BROWSE_ENTRY_TYPE is a space separated list of strings that maps out the kind of containers that are to be found at each level of this browse hierarchy. For instance, &amp;quot;artist album&amp;quot; represents a browse hierarchy giving a container containing only artist containers, each of which contains only album containers, each of which contains only tracks.&lt;br /&gt;
&lt;br /&gt;
There should be an X_MAP_BROWSE_ENTRY for each root browse hierarchy defined by the media server.&lt;br /&gt;
&lt;br /&gt;
For example:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;X_MAP_BROWSE_ENTRY&amp;gt;&lt;br /&gt;
     &amp;lt;X_MAP_BROWSE_ENTRY_NAME&amp;gt;Genre&amp;lt;/X_MAP_BROWSE_ENTRY_NAME&amp;gt;&lt;br /&gt;
     &amp;lt;X_MAP_BROWSE_ENTRY_ID&amp;gt;db/browse/genre&amp;lt;/X_MAP_BROWSE_ENTRY_ID&amp;gt;&lt;br /&gt;
     &amp;lt;X_MAP_BROWSE_ENTRY_TYPE&amp;gt;genre artist album&amp;lt;/X_MAP_BROWSE_ENTRY_TYPE&amp;gt;&lt;br /&gt;
 &amp;lt;/X_MAP_BROWSE_ENTRY&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Link map ===&lt;br /&gt;
&lt;br /&gt;
The X_MAP_LINK element must contain 1 or more X_MAP_LINK_ENTRY elements.&lt;br /&gt;
&lt;br /&gt;
The X_MAP_LINK_ENTRY has three child elements.&lt;br /&gt;
&lt;br /&gt;
X_MAP_LINK_ENTRY_TAG is a string that defines which type of metadata is the target for this link. e.g. &amp;quot;artist&amp;quot;, &amp;quot;genre&amp;quot;, &amp;quot;composer&amp;quot;, etc. See the type section below. &lt;br /&gt;
&lt;br /&gt;
X_MAP_LINK_ENTRY_ID_PREFIX is a string that is prefix for a UPnP container id. The link can be taken by browsing to the container whose id is the result of appending the associated metadata value to this prefix. For instance, if the prefix for an &amp;quot;artist&amp;quot; link is defined as db/link/artist/, and a track returned anywhere in the media server&#039;s library has &amp;quot;Pink Floyd&amp;quot; as its artist. Then the linked container will have an id of db/link/artist/Pink Floyd.&lt;br /&gt;
&lt;br /&gt;
X_MAP_LINK_ENTRY_TYPE represents the type of browse hierarchy returned when taking this type of link. See X_MAP_BROWSE_ENTRY_TYPE for details.&lt;br /&gt;
&lt;br /&gt;
There should be an X_MAP_LINK_ENTRY for each piece of metadata that the media server allows to be linked.&lt;br /&gt;
&lt;br /&gt;
For example:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;X_MAP_LINK_ENTRY&amp;gt;&lt;br /&gt;
     &amp;lt;X_MAP_LINK_ENTRY_TAG&amp;gt;artist&amp;lt;/X_MAP_LINK_ENTRY_TAG&amp;gt;&lt;br /&gt;
     &amp;lt;X_MAP_LINK_ENTRY_ID_PREFIX&amp;gt;db/link/artist/&amp;lt;/X_MAP_LINK_ENTRY_ID_PREFIX&amp;gt;&lt;br /&gt;
     &amp;lt;X_MAP_LINK_ENTRY_TYPE&amp;gt;album&amp;lt;/X_MAP_LINK_ENTRY_TYPE&amp;gt;&lt;br /&gt;
 &amp;lt;/X_MAP_LINK_ENTRY&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The example above defines a browse hierarchy that is created when linking from an artist name. The hierarchy created provides a list of linked artist albums which in turn provide a list of tracks.&lt;br /&gt;
&lt;br /&gt;
=== Search map ===&lt;br /&gt;
&lt;br /&gt;
The X_MAP_SEARCH element must contain 1 or more X_MAP_SEARCH_ENTRY elements.&lt;br /&gt;
&lt;br /&gt;
The X_MAP_SEARCH_ENTRY has three child elements.&lt;br /&gt;
&lt;br /&gt;
X_MAP_SEARCH_ENTRY_NAME  is a string that can be used by a control point to label a tab containing these search results.&lt;br /&gt;
&lt;br /&gt;
X_MAP_SEARCH_ENTRY_ID_PREFIX is a string that is a prefix for a UPnP container id. The search results can be found by browsing to the container whose id is the result of appending the search string to this prefix. For instance, if the prefix for an &amp;quot;album&amp;quot; search is defined as db/search/album/, and the search string is &amp;quot;blue&amp;quot;, then the search results container will have an id of db/search/album/blue.&lt;br /&gt;
&lt;br /&gt;
X_MAP_SEARCH_ENTRY_TYPE represents the type of browse hierarchy returned when taking this type of search. See X_MAP_BROWSE_ENTRY_TYPE for details.&lt;br /&gt;
&lt;br /&gt;
There should be an X_MAP_SEARCH_ENTRY for each type of search offered by the media server.&lt;br /&gt;
&lt;br /&gt;
For example:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;X_MAP_SEARCH_ENTRY&amp;gt;&lt;br /&gt;
     &amp;lt;X_MAP_SEARCH_ENTRY_NAME&amp;gt;Artist&amp;lt;/X_MAP_SEARCH_ENTRY_NAME&amp;gt;&lt;br /&gt;
     &amp;lt;X_MAP_SEARCH_ENTRY_ID_PREFIX&amp;gt;db/search/artist/&amp;lt;/X_MAP_SEARCH_ENTRY_ID_PREFIX&amp;gt;&lt;br /&gt;
     &amp;lt;X_MAP_SEARCH_ENTRY_TYPE&amp;gt;artist album&amp;lt;/X_MAP_SEARCH_ENTRY_TYPE&amp;gt;&lt;br /&gt;
 &amp;lt;/X_MAP_SEARCH_ENTRY&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The example above defines a browse hierarchy that is created when searching for an artist. The hierarchy created provides a list of artists, which in turn provide a list of albums, which in turn provide a list of tracks.&lt;br /&gt;
&lt;br /&gt;
=== Types ===&lt;br /&gt;
&lt;br /&gt;
The list of allowed types for X_BROWSE_ENTRY_TYPE, X_MAP_LINK_ENTRY_TAG, X_LINK_ENTRY_TYPE, and X_SEARCH_ENTRY_TYPE&lt;br /&gt;
&lt;br /&gt;
 genre&lt;br /&gt;
 artist&lt;br /&gt;
 composer&lt;br /&gt;
 conductor&lt;br /&gt;
 album&lt;br /&gt;
 year&lt;br /&gt;
 mixed&lt;br /&gt;
&lt;br /&gt;
mixed is a special value that represents a container that has mixed entries. It is not a valid type for the X_MAP_LINK_ENTRY_TAG element.&lt;br /&gt;
&lt;br /&gt;
=== Example device XML ===&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;root xmlns=&amp;quot;urn:schemas-upnp-org:device-1-0&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;specVersion&amp;gt;&lt;br /&gt;
        &amp;lt;major&amp;gt;1&amp;lt;/major&amp;gt;&lt;br /&gt;
        &amp;lt;minor&amp;gt;1&amp;lt;/minor&amp;gt;&lt;br /&gt;
    &amp;lt;/specVersion&amp;gt;&lt;br /&gt;
    &amp;lt;device&amp;gt;&lt;br /&gt;
        &amp;lt;deviceType&amp;gt;urn:schemas-upnp-org:device:MediaServer:1&amp;lt;/deviceType&amp;gt;&lt;br /&gt;
        &amp;lt;dlna:X_DLNADOC xmlns:dlna=&amp;quot;urn:schemas-dlna-org:device-1-0&amp;quot;&amp;gt;DMS-1.50&amp;lt;/dlna:X_DLNADOC&amp;gt;&lt;br /&gt;
        &amp;lt;dlna:X_DLNACAP xmlns:dlna=&amp;quot;urn:schemas-dlna-org:device-1-0&amp;quot;&amp;gt;av-upload,image-upload,audio-upload&amp;lt;/dlna:X_DLNACAP&amp;gt;&lt;br /&gt;
        &amp;lt;openhome:X_MAP xmlns:openhome=&amp;quot;http://www.openhome.org&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;X_MAP_BROWSE&amp;gt;&lt;br /&gt;
                &amp;lt;X_MAP_BROWSE_ENTRY&amp;gt;&lt;br /&gt;
                    &amp;lt;X_MAP_BROWSE_ENTRY_NAME&amp;gt;Albums&amp;lt;/X_MAP_BROWSE_ENTRY_NAME&amp;gt;&lt;br /&gt;
                    &amp;lt;X_MAP_BROWSE_ENTRY_ID&amp;gt;db/browse/albums&amp;lt;/X_MAP_BROWSE_ENTRY_ID&amp;gt;&lt;br /&gt;
                    &amp;lt;X_MAP_BROWSE_ENTRY_TYPE&amp;gt;album&amp;lt;/X_MAP_BROWSE_ENTRY_TYPE&amp;gt;&lt;br /&gt;
                &amp;lt;/X_MAP_BROWSE_ENTRY&amp;gt;&lt;br /&gt;
                &amp;lt;X_MAP_BROWSE_ENTRY&amp;gt;&lt;br /&gt;
                    &amp;lt;X_MAP_BROWSE_ENTRY_NAME&amp;gt;Artists&amp;lt;/X_MAP_BROWSE_ENTRY_NAME&amp;gt;&lt;br /&gt;
                    &amp;lt;X_MAP_BROWSE_ENTRY_ID&amp;gt;db/browse/artists&amp;lt;/X_MAP_BROWSE_ENTRY_ID&amp;gt;&lt;br /&gt;
                    &amp;lt;X_MAP_BROWSE_ENTRY_TYPE&amp;gt;artist album&amp;lt;/X_MAP_BROWSE_ENTRY_TYPE&amp;gt;&lt;br /&gt;
                &amp;lt;/X_MAP_BROWSE_ENTRY&amp;gt;&lt;br /&gt;
                &amp;lt;X_MAP_BROWSE_ENTRY&amp;gt;&lt;br /&gt;
                    &amp;lt;X_MAP_BROWSE_ENTRY_NAME&amp;gt;Folders&amp;lt;/X_MAP_BROWSE_ENTRY_NAME&amp;gt;&lt;br /&gt;
                    &amp;lt;X_MAP_BROWSE_ENTRY_ID&amp;gt;db/browse/folders&amp;lt;/X_MAP_BROWSE_ENTRY_ID&amp;gt;&lt;br /&gt;
                    &amp;lt;X_MAP_BROWSE_ENTRY_TYPE&amp;gt;mixed&amp;lt;/X_MAP_BROWSE_ENTRY_TYPE&amp;gt;&lt;br /&gt;
                &amp;lt;/X_MAP_BROWSE_ENTRY&amp;gt;&lt;br /&gt;
            &amp;lt;/X_MAP_BROWSE&amp;gt;&lt;br /&gt;
            &amp;lt;X_MAP_LINK&amp;gt;&lt;br /&gt;
                &amp;lt;X_MAP_LINK_ENTRY&amp;gt;&lt;br /&gt;
                    &amp;lt;X_MAP_LINK_ENTRY_TAG&amp;gt;artist&amp;lt;/X_MAP_LINK_ENTRY_TAG&amp;gt;&lt;br /&gt;
                    &amp;lt;X_MAP_LINK_ENTRY_ID_PREFIX&amp;gt;db/link/artist/&amp;lt;/X_MAP_LINK_ENTRY_ID_PREFIX&amp;gt;&lt;br /&gt;
                    &amp;lt;X_MAP_LINK_ENTRY_TYPE&amp;gt;album&amp;lt;/X_MAP_LINK_ENTRY_TYPE&amp;gt;&lt;br /&gt;
                &amp;lt;/X_MAP_LINK_ENTRY&amp;gt;&lt;br /&gt;
                &amp;lt;X_MAP_LINK_ENTRY&amp;gt;&lt;br /&gt;
                    &amp;lt;X_MAP_LINK_ENTRY_TAG&amp;gt;composer&amp;lt;/X_MAP_LINK_ENTRY_TAG&amp;gt;&lt;br /&gt;
                    &amp;lt;X_MAP_LINK_ENTRY_ID_PREFIX&amp;gt;db/link/composer/&amp;lt;/X_MAP_LINK_ENTRY_ID_PREFIX&amp;gt;&lt;br /&gt;
                    &amp;lt;X_MAP_LINK_ENTRY_TYPE&amp;gt;album&amp;lt;/X_MAP_LINK_ENTRY_TYPE&amp;gt;&lt;br /&gt;
                &amp;lt;/X_MAP_LINK_ENTRY&amp;gt;&lt;br /&gt;
            &amp;lt;/X_MAP_LINK&amp;gt;&lt;br /&gt;
            &amp;lt;X_MAP_SEARCH&amp;gt;&lt;br /&gt;
                &amp;lt;X_MAP_SEARCH_ENTRY&amp;gt;&lt;br /&gt;
                    &amp;lt;X_MAP_SEARCH_ENTRY_NAME&amp;gt;Artist&amp;lt;/X_MAP_SEARCH_ENTRY_NAME&amp;gt;&lt;br /&gt;
                    &amp;lt;X_MAP_SEARCH_ENTRY_ID_PREFIX&amp;gt;db/search/artist/&amp;lt;/X_MAP_SEARCH_ENTRY_ID_PREFIX&amp;gt;&lt;br /&gt;
                    &amp;lt;X_MAP_SEARCH_ENTRY_TYPE&amp;gt;artist album&amp;lt;/X_MAP_SEARCH_ENTRY_TYPE&amp;gt;&lt;br /&gt;
                &amp;lt;/X_MAP_SEARCH_ENTRY&amp;gt;&lt;br /&gt;
                &amp;lt;X_MAP_SEARCH_ENTRY&amp;gt;&lt;br /&gt;
                    &amp;lt;X_MAP_SEARCH_ENTRY_NAME&amp;gt;Tracks&amp;lt;/X_MAP_SEARCH_ENTRY_NAME&amp;gt;&lt;br /&gt;
                    &amp;lt;X_MAP_SEARCH_ENTRY_ID_PREFIX&amp;gt;db/search/all/&amp;lt;/X_MAP_SEARCH_ENTRY_ID_PREFIX&amp;gt;&lt;br /&gt;
                    &amp;lt;X_MAP_SEARCH_ENTRY_TYPE&amp;gt;&amp;lt;/X_MAP_SEARCH_ENTRY_TYPE&amp;gt;&lt;br /&gt;
                &amp;lt;/X_MAP_SEARCH_ENTRY&amp;gt;&lt;br /&gt;
            &amp;lt;/X_MAP_SEARCH&amp;gt;&lt;br /&gt;
        &amp;lt;/openhome:X_MAP&amp;gt;&lt;br /&gt;
        &amp;lt;presentationURL&amp;gt;http://10.2.1.170:4000/res/linn.co.uk.kazooserver/index.html&amp;lt;/presentationURL&amp;gt;&lt;br /&gt;
        &amp;lt;friendlyName&amp;gt;Linn Kazoo Server [R&amp;amp;D Mac Mini]&amp;lt;/friendlyName&amp;gt;&lt;br /&gt;
        &amp;lt;manufacturer&amp;gt;Linn&amp;lt;/manufacturer&amp;gt;&lt;br /&gt;
        &amp;lt;manufacturerURL&amp;gt;http://www.linn.co.uk&amp;lt;/manufacturerURL&amp;gt;&lt;br /&gt;
        &amp;lt;modelName&amp;gt;Kazoo Server&amp;lt;/modelName&amp;gt;&lt;br /&gt;
        &amp;lt;modelURL&amp;gt;http://oss.linn.co.uk/trac/wiki/KazooServer&amp;lt;/modelURL&amp;gt;&lt;br /&gt;
        &amp;lt;UDN&amp;gt;uuid:ac3d630e37b5f11ff5cdd23c0f5a7400&amp;lt;/UDN&amp;gt;&lt;br /&gt;
        &amp;lt;iconList&amp;gt;&lt;br /&gt;
            &amp;lt;icon&amp;gt;&lt;br /&gt;
                &amp;lt;mimetype&amp;gt;image/png&amp;lt;/mimetype&amp;gt;&lt;br /&gt;
                &amp;lt;width&amp;gt;65&amp;lt;/width&amp;gt;&lt;br /&gt;
                &amp;lt;height&amp;gt;65&amp;lt;/height&amp;gt;&lt;br /&gt;
                &amp;lt;depth&amp;gt;32&amp;lt;/depth&amp;gt;&lt;br /&gt;
                &amp;lt;url&amp;gt;ac3d630e37b5f11ff5cdd23c0f5a7400/resource/icon/icon&amp;lt;/url&amp;gt;&lt;br /&gt;
            &amp;lt;/icon&amp;gt;&lt;br /&gt;
        &amp;lt;/iconList&amp;gt;&lt;br /&gt;
        &amp;lt;serviceList&amp;gt;&lt;br /&gt;
            &amp;lt;service&amp;gt;&lt;br /&gt;
                &amp;lt;serviceType&amp;gt;urn:av-openhome-org:service:PlaylistManager:1&amp;lt;/serviceType&amp;gt;&lt;br /&gt;
                &amp;lt;serviceId&amp;gt;urn:av-openhome-org:serviceId:PlaylistManager&amp;lt;/serviceId&amp;gt;&lt;br /&gt;
                &amp;lt;SCPDURL&amp;gt;/ac3d630e37b5f11ff5cdd23c0f5a7400/Upnp/av.openhome.org-PlaylistManager-1/service.xml&amp;lt;/SCPDURL&amp;gt;&lt;br /&gt;
                &amp;lt;controlURL&amp;gt;/ac3d630e37b5f11ff5cdd23c0f5a7400/av.openhome.org-PlaylistManager-1/control&amp;lt;/controlURL&amp;gt;&lt;br /&gt;
                &amp;lt;eventSubURL&amp;gt;/ac3d630e37b5f11ff5cdd23c0f5a7400/av.openhome.org-PlaylistManager-1/event&amp;lt;/eventSubURL&amp;gt;&lt;br /&gt;
            &amp;lt;/service&amp;gt;&lt;br /&gt;
            &amp;lt;service&amp;gt;&lt;br /&gt;
                &amp;lt;serviceType&amp;gt;urn:schemas-upnp-org:service:ContentDirectory:1&amp;lt;/serviceType&amp;gt;&lt;br /&gt;
                &amp;lt;serviceId&amp;gt;urn:upnp-org:serviceId:ContentDirectory&amp;lt;/serviceId&amp;gt;&lt;br /&gt;
                &amp;lt;SCPDURL&amp;gt;/ac3d630e37b5f11ff5cdd23c0f5a7400/Upnp/upnp.org-ContentDirectory-1/service.xml&amp;lt;/SCPDURL&amp;gt;&lt;br /&gt;
                &amp;lt;controlURL&amp;gt;/ac3d630e37b5f11ff5cdd23c0f5a7400/upnp.org-ContentDirectory-1/control&amp;lt;/controlURL&amp;gt;&lt;br /&gt;
                &amp;lt;eventSubURL&amp;gt;/ac3d630e37b5f11ff5cdd23c0f5a7400/upnp.org-ContentDirectory-1/event&amp;lt;/eventSubURL&amp;gt;&lt;br /&gt;
            &amp;lt;/service&amp;gt;&lt;br /&gt;
            &amp;lt;service&amp;gt;&lt;br /&gt;
                &amp;lt;serviceType&amp;gt;urn:schemas-upnp-org:service:ConnectionManager:1&amp;lt;/serviceType&amp;gt;&lt;br /&gt;
                &amp;lt;serviceId&amp;gt;urn:upnp-org:serviceId:ConnectionManager&amp;lt;/serviceId&amp;gt;&lt;br /&gt;
                &amp;lt;SCPDURL&amp;gt;/ac3d630e37b5f11ff5cdd23c0f5a7400/Upnp/upnp.org-ConnectionManager-1/service.xml&amp;lt;/SCPDURL&amp;gt;&lt;br /&gt;
                &amp;lt;controlURL&amp;gt;/ac3d630e37b5f11ff5cdd23c0f5a7400/upnp.org-ConnectionManager-1/control&amp;lt;/controlURL&amp;gt;&lt;br /&gt;
                &amp;lt;eventSubURL&amp;gt;/ac3d630e37b5f11ff5cdd23c0f5a7400/upnp.org-ConnectionManager-1/event&amp;lt;/eventSubURL&amp;gt;&lt;br /&gt;
            &amp;lt;/service&amp;gt;&lt;br /&gt;
        &amp;lt;/serviceList&amp;gt;&lt;br /&gt;
    &amp;lt;/device&amp;gt;&lt;br /&gt;
 &amp;lt;/root&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Index maps ==&lt;br /&gt;
&lt;br /&gt;
Large lists are difficult to navigate, especially on mobile devices. Mobile devices added the idea of an index map to improve this situation. The index map allows a users to jump to different sections in a large list, similar to what is possible with a scrollbar on desktops.&lt;br /&gt;
&lt;br /&gt;
In order for a control point to generate an index map for any particular level in a ContentDirectory&#039;s hierarchy it first needs to download all the objects in the container, figure out if they are sorted and then calculate the index map. This means that a user will need to wait, perhaps minutes, before an index map is able to be presented on the UI. &lt;br /&gt;
&lt;br /&gt;
The media server can optionally return an index map for container that are in alphabetical order. This implemented through a OpenHome vendor extension of the DIDL-Lite XML. Below shows an example DIDL-Lite with an index map included.&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;DIDL-Lite xmlns=&amp;quot;urn:schemas-upnp-org:metadata-1-0/DIDL-Lite/&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;container id=&amp;quot;db/ba37a2ac24efa676c8676aab71a6cdf074&amp;quot; parentID=&amp;quot;0&amp;quot; restricted=&amp;quot;true&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;dc:title xmlns:dc=&amp;quot;http://purl.org/dc/elements/1.1/&amp;quot;&amp;gt;Worlds Apart [Deluxe Edition]&amp;lt;/dc:title&amp;gt;&lt;br /&gt;
        &amp;lt;upnp:udn xmlns:upnp=&amp;quot;urn:schemas-upnp-org:metadata-1-0/upnp/&amp;quot;&amp;gt;ac3d630e37b5f11ff5cdd23c0f5a7400&amp;lt;/upnp:udn&amp;gt;&lt;br /&gt;
        &amp;lt;upnp:class xmlns:upnp=&amp;quot;urn:schemas-upnp-org:metadata-1-0/upnp/&amp;quot;&amp;gt;object.container.album.musicAlbum&amp;lt;/upnp:class&amp;gt;&lt;br /&gt;
        &amp;lt;upnp:artist xmlns:upnp=&amp;quot;urn:schemas-upnp-org:metadata-1-0/upnp/&amp;quot;&amp;gt;...And You Will Know Us by the Trail of Dead&amp;lt;/upnp:artist&amp;gt;&lt;br /&gt;
        &amp;lt;upnp:albumArtURI&amp;gt;http://10.2.1.170:4000/linn.co.uk.kazooserver/ms/artwork/37a2ac2?size=0&amp;lt;/upnp:albumArtURI&amp;gt;&lt;br /&gt;
    &amp;lt;/container&amp;gt;&lt;br /&gt;
    &amp;lt;desc nameSpace=&amp;quot;openhome.org&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;indexmap&amp;gt;0 10 10 10 10 10 0 0 0 0 10 12 1 10 10 10 12 17 18 1 0 20 0 20 20 2 2 24&amp;lt;/indexmap&amp;gt;&lt;br /&gt;
    &amp;lt;/desc&amp;gt;&lt;br /&gt;
 &amp;lt;/DIDL-Lite&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The index map contains a space separated list of 28 number representing the total number of items that begin with that letter. #, represents everything below A, largely digits and punctuation and + represents everything above Z, largely international characters not collatable within the roman alphabet.&lt;br /&gt;
&lt;br /&gt;
 # A B C D E F G H I J K L M N O P Q R S T U V W X Y Z +&lt;br /&gt;
&lt;br /&gt;
== Image Resolution ==&lt;br /&gt;
&lt;br /&gt;
Control points running on different platforms have different memory limits and display technologies. This means that a control point on a PC might want to display artwork at a high resolution, while a control point on a PDA might want to display artwork at a much lower resolution.&lt;br /&gt;
&lt;br /&gt;
Media servers often try to solve this problem using one of the following two methods:&lt;br /&gt;
&lt;br /&gt;
# A configurable parameter that scales all artwork to a user defined size&lt;br /&gt;
# A profile system where a user can create profiles for each class of control point they have and configure a parameter that scales all artwork to a user defined size per profile&lt;br /&gt;
&lt;br /&gt;
The first solution is highly problematic because it limits the resolution of artwork across the whole network. But a single network very often contains control points that can display high resolution images AND control points that can&#039;t.&lt;br /&gt;
&lt;br /&gt;
The second solution is just architecturally poor, turning the relationship between a control point and a media server on its head. Why should the media server try to infer what a control point needs through configuration when the control point is perfectly capable of telling the media server its exact requirements in every single circumstance.&lt;br /&gt;
&lt;br /&gt;
So, it is proposed that compliant media servers include a &#039;&#039;&#039;size&#039;&#039;&#039; element in their artwork uri&#039;s, where the size is the image&#039;s largest dimension. This allows a control point to ask for an image at a specified size.&lt;br /&gt;
&lt;br /&gt;
=== Example ===&lt;br /&gt;
&lt;br /&gt;
If the original artwork was 400x512, then a media server would provide the following albumArtURI: &amp;lt;uri&amp;gt;?size=512. If it is not possible for the media server to obtain the original resolution then the media server would provide the following albumArtURI: &amp;lt;uri&amp;gt;?size=0.&lt;br /&gt;
&lt;br /&gt;
The presence of the size element tells the control point:&lt;br /&gt;
&lt;br /&gt;
# the media server implements the image scaling extension&lt;br /&gt;
# the original size of the image.&lt;br /&gt;
&lt;br /&gt;
Now the control point can request the image at any resolution by using &amp;lt;uri&amp;gt;?size=x, where x is the size it wants.&lt;br /&gt;
&lt;br /&gt;
So, in this example, &amp;lt;uri&amp;gt;?size=1024 gets an 800x1024 image, and &amp;lt;uri&amp;gt;?size=200 gets a 156x200 image.&lt;br /&gt;
&lt;br /&gt;
== albumArtURI&amp;lt;br&amp;gt; ==&lt;br /&gt;
&lt;br /&gt;
The current specification only allows retrieval of artwork for a musicAlbum container through the property albumArtURI. When browsing a music library on a control point it quickly becomes clear that to implement a graphically rich control point the ContentDirectory service should provide a way to retrieve artwork for all of the content directory classes, not just musicAlbum containers.&lt;br /&gt;
&lt;br /&gt;
There has become a somewhat defacto standard where just about all media server provide an albumArtURI property for a musicItem item as well as for a musicAlbum container, however this is still not good enough to implement a graphically rich control point.&lt;br /&gt;
&lt;br /&gt;
It is proposed that an optional property is introduced to the object class called &#039;&#039;&#039;albumArtURI&#039;&#039;&amp;amp;nbsp;&#039;&#039;&#039;&#039;&#039;which may contain an attribute &#039;&#039;&#039;title&#039;&#039;&#039;,&amp;amp;nbsp;e.g. &amp;amp;lt;albumArtURI title=&amp;quot;Font Cover&amp;quot;&amp;amp;gt;http://Front Cover.jpg&amp;amp;lt;/albumArtURI&amp;amp;gt;.&amp;amp;nbsp;The object class can contain zero or more albumArtURIs elements.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Dynamic IP Addresses ==&lt;br /&gt;
&lt;br /&gt;
At present all media servers return URIs that contain a reference to their IP address, e.g. http://172.20.1.1/music.flac etc. This means that if the media server&#039;s IP address were to change across reboots, then any control point or media renderer with URIs that referenced the media server before the reboot will become invalid.&lt;br /&gt;
&lt;br /&gt;
The host machine for a media server must be assign a static or dynamic reserved IP address if a user wishes to ensure that URIs will remain valid.&lt;br /&gt;
&lt;br /&gt;
== Disc Information ==&lt;br /&gt;
&lt;br /&gt;
A new property has been added to the musicTrack item called &#039;&#039;&#039;OriginalDiscNumber&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
A new property has been added to the musicAlbum item called &#039;&#039;&#039;OriginalDiscCount&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
== Replay Gain Information ==&lt;br /&gt;
&lt;br /&gt;
Four new properties have been added to the musicTrack item called &#039;&#039;&#039;ReplayGainAlbum&#039;&#039;&#039;, &#039;&#039;&#039;ReplayGainAlbumPeak&#039;&#039;&#039;, &#039;&#039;&#039;ReplayGainTrack&#039;&#039;&#039;, and &#039;&#039;&#039;ReplayGainTrackPeak&#039;&#039;&#039;.&lt;/div&gt;</summary>
		<author><name>Davidd</name></author>
	</entry>
	<entry>
		<id>https://docs.linn.co.uk/wiki/index.php?title=Developer:Media_Server_Extensions&amp;diff=11240</id>
		<title>Developer:Media Server Extensions</title>
		<link rel="alternate" type="text/html" href="https://docs.linn.co.uk/wiki/index.php?title=Developer:Media_Server_Extensions&amp;diff=11240"/>
		<updated>2015-03-16T10:25:13Z</updated>

		<summary type="html">&lt;p&gt;Davidd: /* Disc Information */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Introduction =&lt;br /&gt;
&lt;br /&gt;
The ContentDirectory service has various limitations which become apparent when implementing control points on different hardware platforms. This document aims to outline some ideas that address the various shortcomings of the ContentDirectory specification.&lt;br /&gt;
&lt;br /&gt;
== Container map ==&lt;br /&gt;
&lt;br /&gt;
The current ContentDirectory specification makes it tricky for a control point to display the returned contents in an appropriate, aesthetically pleasing, manner for the content being viewed. This is because the ContentDirectory specification does not allow for a control point to know in advanced what content to expect when browsing through any particular hierarchy.&lt;br /&gt;
&lt;br /&gt;
An example of this might be, at a particular point in the browse hierarchy the ContentDirectory will return a list of albums which in turn will contain a list of tracks. A UI might wish to represent this list of albums as a grid and the album&#039;s tracks as a header and a list of the tracks. Currently it is not possible for the UI to know when it gets to a point in a hierarchy where the hierarchy represents a list of albums followed by a list of tracks.&lt;br /&gt;
&lt;br /&gt;
The container map extension allows a media server to express its container hierarchy in advance of the control point navigating it. This is done using an OpenHome vendor extension to the device XML.&lt;br /&gt;
&lt;br /&gt;
Three types of mapped container are defined: browse, link, and search.&lt;br /&gt;
&lt;br /&gt;
The browse map defines named top level containers that represent significant starting points for browsing that can meaningfully be presented in top level tabs of a control point UI. The browse map is expressed within the X_MAP_BROWSE element of X_MAP.&lt;br /&gt;
&lt;br /&gt;
The link map defines containers that can be meaningfully linked to from track or album details. For instance a track will typically have an artist defined. If an entry for &amp;quot;artist&amp;quot; is defined in the link map then it will be possible for the user of a control point to quickly access this artist-related container by clicking on the track&#039;s artist text. Similar links might be offered for &amp;quot;genre&amp;quot;, &amp;quot;composer&amp;quot;, &amp;quot;conductor&amp;quot;, etc. The link map is expressed within the X_MAP_LINK element of X_MAP.&lt;br /&gt;
&lt;br /&gt;
The search map defines the different kinds of search containers and the type of results that they produce. The search map is expressed within the X_MAP_SEARCH element of X_MAP.&lt;br /&gt;
&lt;br /&gt;
=== Browse map ===&lt;br /&gt;
&lt;br /&gt;
The X_MAP_BROWSE element must contain 1 or more X_MAP_BROWSE_ENTRY elements.&lt;br /&gt;
&lt;br /&gt;
The X_MAP_BROWSE_ENTRY has three child elements.&lt;br /&gt;
&lt;br /&gt;
X_MAP_BROWSE_ENTRY_NAME is a string that can be used by a control point to label a tab containing this browse hierarchy.&lt;br /&gt;
&lt;br /&gt;
X_MAP_BROWSE_ENTRY_ID is the UPnP container id that contains the root of this browse hierarchy. This id is then submitted to the ContentDirectory service using the Browse action as usual. The returned contents are navigated using subsequent Browse request as usual. The difference is that the control point knows in advance what kind of results to expect at each level.&lt;br /&gt;
&lt;br /&gt;
X_MAP_BROWSE_ENTRY_TYPE is a space separated list of strings that maps out the kind of containers that are to be found at each level of this browse hierarchy. For instance, &amp;quot;artist album&amp;quot; represents a browse hierarchy giving a container containing only artist containers, each of which contains only album containers, each of which contains only tracks.&lt;br /&gt;
&lt;br /&gt;
There should be an X_MAP_BROWSE_ENTRY for each root browse hierarchy defined by the media server.&lt;br /&gt;
&lt;br /&gt;
For example:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;X_MAP_BROWSE_ENTRY&amp;gt;&lt;br /&gt;
     &amp;lt;X_MAP_BROWSE_ENTRY_NAME&amp;gt;Genre&amp;lt;/X_MAP_BROWSE_ENTRY_NAME&amp;gt;&lt;br /&gt;
     &amp;lt;X_MAP_BROWSE_ENTRY_ID&amp;gt;db/browse/genre&amp;lt;/X_MAP_BROWSE_ENTRY_ID&amp;gt;&lt;br /&gt;
     &amp;lt;X_MAP_BROWSE_ENTRY_TYPE&amp;gt;genre artist album&amp;lt;/X_MAP_BROWSE_ENTRY_TYPE&amp;gt;&lt;br /&gt;
 &amp;lt;/X_MAP_BROWSE_ENTRY&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Link map ===&lt;br /&gt;
&lt;br /&gt;
The X_MAP_LINK element must contain 1 or more X_MAP_LINK_ENTRY elements.&lt;br /&gt;
&lt;br /&gt;
The X_MAP_LINK_ENTRY has three child elements.&lt;br /&gt;
&lt;br /&gt;
X_MAP_LINK_ENTRY_TAG is a string that defines which type of metadata is the target for this link. e.g. &amp;quot;artist&amp;quot;, &amp;quot;genre&amp;quot;, &amp;quot;composer&amp;quot;, etc. See the type section below. &lt;br /&gt;
&lt;br /&gt;
X_MAP_LINK_ENTRY_ID_PREFIX is a string that is prefix for a UPnP container id. The link can be taken by browsing to the container whose id is the result of appending the associated metadata value to this prefix. For instance, if the prefix for an &amp;quot;artist&amp;quot; link is defined as db/link/artist/, and a track returned anywhere in the media server&#039;s library has &amp;quot;Pink Floyd&amp;quot; as its artist. Then the linked container will have an id of db/link/artist/Pink Floyd.&lt;br /&gt;
&lt;br /&gt;
X_MAP_LINK_ENTRY_TYPE represents the type of browse hierarchy returned when taking this type of link. See X_MAP_BROWSE_ENTRY_TYPE for details.&lt;br /&gt;
&lt;br /&gt;
There should be an X_MAP_LINK_ENTRY for each piece of metadata that the media server allows to be linked.&lt;br /&gt;
&lt;br /&gt;
For example:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;X_MAP_LINK_ENTRY&amp;gt;&lt;br /&gt;
     &amp;lt;X_MAP_LINK_ENTRY_TAG&amp;gt;artist&amp;lt;/X_MAP_LINK_ENTRY_TAG&amp;gt;&lt;br /&gt;
     &amp;lt;X_MAP_LINK_ENTRY_ID_PREFIX&amp;gt;db/link/artist/&amp;lt;/X_MAP_LINK_ENTRY_ID_PREFIX&amp;gt;&lt;br /&gt;
     &amp;lt;X_MAP_LINK_ENTRY_TYPE&amp;gt;album&amp;lt;/X_MAP_LINK_ENTRY_TYPE&amp;gt;&lt;br /&gt;
 &amp;lt;/X_MAP_LINK_ENTRY&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The example above defines a browse hierarchy that is created when linking from an artist name. The hierarchy created provides a list of linked artist albums which in turn provide a list of tracks.&lt;br /&gt;
&lt;br /&gt;
=== Search map ===&lt;br /&gt;
&lt;br /&gt;
The X_MAP_SEARCH element must contain 1 or more X_MAP_SEARCH_ENTRY elements.&lt;br /&gt;
&lt;br /&gt;
The X_MAP_SEARCH_ENTRY has three child elements.&lt;br /&gt;
&lt;br /&gt;
X_MAP_SEARCH_ENTRY_NAME  is a string that can be used by a control point to label a tab containing these search results.&lt;br /&gt;
&lt;br /&gt;
X_MAP_SEARCH_ENTRY_ID_PREFIX is a string that is a prefix for a UPnP container id. The search results can be found by browsing to the container whose id is the result of appending the search string to this prefix. For instance, if the prefix for an &amp;quot;album&amp;quot; search is defined as db/search/album/, and the search string is &amp;quot;blue&amp;quot;, then the search results container will have an id of db/search/album/blue.&lt;br /&gt;
&lt;br /&gt;
X_MAP_SEARCH_ENTRY_TYPE represents the type of browse hierarchy returned when taking this type of search. See X_MAP_BROWSE_ENTRY_TYPE for details.&lt;br /&gt;
&lt;br /&gt;
There should be an X_MAP_SEARCH_ENTRY for each type of search offered by the media server.&lt;br /&gt;
&lt;br /&gt;
For example:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;X_MAP_SEARCH_ENTRY&amp;gt;&lt;br /&gt;
     &amp;lt;X_MAP_SEARCH_ENTRY_NAME&amp;gt;Artist&amp;lt;/X_MAP_SEARCH_ENTRY_NAME&amp;gt;&lt;br /&gt;
     &amp;lt;X_MAP_SEARCH_ENTRY_ID_PREFIX&amp;gt;db/search/artist/&amp;lt;/X_MAP_SEARCH_ENTRY_ID_PREFIX&amp;gt;&lt;br /&gt;
     &amp;lt;X_MAP_SEARCH_ENTRY_TYPE&amp;gt;artist album&amp;lt;/X_MAP_SEARCH_ENTRY_TYPE&amp;gt;&lt;br /&gt;
 &amp;lt;/X_MAP_SEARCH_ENTRY&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The example above defines a browse hierarchy that is created when searching for an artist. The hierarchy created provides a list of artists, which in turn provide a list of albums, which in turn provide a list of tracks.&lt;br /&gt;
&lt;br /&gt;
=== Types ===&lt;br /&gt;
&lt;br /&gt;
The list of allowed types for X_BROWSE_ENTRY_TYPE, X_MAP_LINK_ENTRY_TAG, X_LINK_ENTRY_TYPE, and X_SEARCH_ENTRY_TYPE&lt;br /&gt;
&lt;br /&gt;
 genre&lt;br /&gt;
 artist&lt;br /&gt;
 composer&lt;br /&gt;
 conductor&lt;br /&gt;
 album&lt;br /&gt;
 year&lt;br /&gt;
 mixed&lt;br /&gt;
&lt;br /&gt;
mixed is a special value that represents a container that has mixed entries. It is not a valid type for the X_MAP_LINK_ENTRY_TAG element.&lt;br /&gt;
&lt;br /&gt;
=== Example device XML ===&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;root xmlns=&amp;quot;urn:schemas-upnp-org:device-1-0&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;specVersion&amp;gt;&lt;br /&gt;
        &amp;lt;major&amp;gt;1&amp;lt;/major&amp;gt;&lt;br /&gt;
        &amp;lt;minor&amp;gt;1&amp;lt;/minor&amp;gt;&lt;br /&gt;
    &amp;lt;/specVersion&amp;gt;&lt;br /&gt;
    &amp;lt;device&amp;gt;&lt;br /&gt;
        &amp;lt;deviceType&amp;gt;urn:schemas-upnp-org:device:MediaServer:1&amp;lt;/deviceType&amp;gt;&lt;br /&gt;
        &amp;lt;dlna:X_DLNADOC xmlns:dlna=&amp;quot;urn:schemas-dlna-org:device-1-0&amp;quot;&amp;gt;DMS-1.50&amp;lt;/dlna:X_DLNADOC&amp;gt;&lt;br /&gt;
        &amp;lt;dlna:X_DLNACAP xmlns:dlna=&amp;quot;urn:schemas-dlna-org:device-1-0&amp;quot;&amp;gt;av-upload,image-upload,audio-upload&amp;lt;/dlna:X_DLNACAP&amp;gt;&lt;br /&gt;
        &amp;lt;openhome:X_MAP xmlns:openhome=&amp;quot;http://www.openhome.org&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;X_MAP_BROWSE&amp;gt;&lt;br /&gt;
                &amp;lt;X_MAP_BROWSE_ENTRY&amp;gt;&lt;br /&gt;
                    &amp;lt;X_MAP_BROWSE_ENTRY_NAME&amp;gt;Albums&amp;lt;/X_MAP_BROWSE_ENTRY_NAME&amp;gt;&lt;br /&gt;
                    &amp;lt;X_MAP_BROWSE_ENTRY_ID&amp;gt;db/browse/albums&amp;lt;/X_MAP_BROWSE_ENTRY_ID&amp;gt;&lt;br /&gt;
                    &amp;lt;X_MAP_BROWSE_ENTRY_TYPE&amp;gt;album&amp;lt;/X_MAP_BROWSE_ENTRY_TYPE&amp;gt;&lt;br /&gt;
                &amp;lt;/X_MAP_BROWSE_ENTRY&amp;gt;&lt;br /&gt;
                &amp;lt;X_MAP_BROWSE_ENTRY&amp;gt;&lt;br /&gt;
                    &amp;lt;X_MAP_BROWSE_ENTRY_NAME&amp;gt;Artists&amp;lt;/X_MAP_BROWSE_ENTRY_NAME&amp;gt;&lt;br /&gt;
                    &amp;lt;X_MAP_BROWSE_ENTRY_ID&amp;gt;db/browse/artists&amp;lt;/X_MAP_BROWSE_ENTRY_ID&amp;gt;&lt;br /&gt;
                    &amp;lt;X_MAP_BROWSE_ENTRY_TYPE&amp;gt;artist album&amp;lt;/X_MAP_BROWSE_ENTRY_TYPE&amp;gt;&lt;br /&gt;
                &amp;lt;/X_MAP_BROWSE_ENTRY&amp;gt;&lt;br /&gt;
                &amp;lt;X_MAP_BROWSE_ENTRY&amp;gt;&lt;br /&gt;
                    &amp;lt;X_MAP_BROWSE_ENTRY_NAME&amp;gt;Folders&amp;lt;/X_MAP_BROWSE_ENTRY_NAME&amp;gt;&lt;br /&gt;
                    &amp;lt;X_MAP_BROWSE_ENTRY_ID&amp;gt;db/browse/folders&amp;lt;/X_MAP_BROWSE_ENTRY_ID&amp;gt;&lt;br /&gt;
                    &amp;lt;X_MAP_BROWSE_ENTRY_TYPE&amp;gt;mixed&amp;lt;/X_MAP_BROWSE_ENTRY_TYPE&amp;gt;&lt;br /&gt;
                &amp;lt;/X_MAP_BROWSE_ENTRY&amp;gt;&lt;br /&gt;
            &amp;lt;/X_MAP_BROWSE&amp;gt;&lt;br /&gt;
            &amp;lt;X_MAP_LINK&amp;gt;&lt;br /&gt;
                &amp;lt;X_MAP_LINK_ENTRY&amp;gt;&lt;br /&gt;
                    &amp;lt;X_MAP_LINK_ENTRY_TAG&amp;gt;artist&amp;lt;/X_MAP_LINK_ENTRY_TAG&amp;gt;&lt;br /&gt;
                    &amp;lt;X_MAP_LINK_ENTRY_ID_PREFIX&amp;gt;db/link/artist/&amp;lt;/X_MAP_LINK_ENTRY_ID_PREFIX&amp;gt;&lt;br /&gt;
                    &amp;lt;X_MAP_LINK_ENTRY_TYPE&amp;gt;album&amp;lt;/X_MAP_LINK_ENTRY_TYPE&amp;gt;&lt;br /&gt;
                &amp;lt;/X_MAP_LINK_ENTRY&amp;gt;&lt;br /&gt;
                &amp;lt;X_MAP_LINK_ENTRY&amp;gt;&lt;br /&gt;
                    &amp;lt;X_MAP_LINK_ENTRY_TAG&amp;gt;composer&amp;lt;/X_MAP_LINK_ENTRY_TAG&amp;gt;&lt;br /&gt;
                    &amp;lt;X_MAP_LINK_ENTRY_ID_PREFIX&amp;gt;db/link/composer/&amp;lt;/X_MAP_LINK_ENTRY_ID_PREFIX&amp;gt;&lt;br /&gt;
                    &amp;lt;X_MAP_LINK_ENTRY_TYPE&amp;gt;album&amp;lt;/X_MAP_LINK_ENTRY_TYPE&amp;gt;&lt;br /&gt;
                &amp;lt;/X_MAP_LINK_ENTRY&amp;gt;&lt;br /&gt;
            &amp;lt;/X_MAP_LINK&amp;gt;&lt;br /&gt;
            &amp;lt;X_MAP_SEARCH&amp;gt;&lt;br /&gt;
                &amp;lt;X_MAP_SEARCH_ENTRY&amp;gt;&lt;br /&gt;
                    &amp;lt;X_MAP_SEARCH_ENTRY_NAME&amp;gt;Artist&amp;lt;/X_MAP_SEARCH_ENTRY_NAME&amp;gt;&lt;br /&gt;
                    &amp;lt;X_MAP_SEARCH_ENTRY_ID_PREFIX&amp;gt;db/search/artist/&amp;lt;/X_MAP_SEARCH_ENTRY_ID_PREFIX&amp;gt;&lt;br /&gt;
                    &amp;lt;X_MAP_SEARCH_ENTRY_TYPE&amp;gt;artist album&amp;lt;/X_MAP_SEARCH_ENTRY_TYPE&amp;gt;&lt;br /&gt;
                &amp;lt;/X_MAP_SEARCH_ENTRY&amp;gt;&lt;br /&gt;
                &amp;lt;X_MAP_SEARCH_ENTRY&amp;gt;&lt;br /&gt;
                    &amp;lt;X_MAP_SEARCH_ENTRY_NAME&amp;gt;Tracks&amp;lt;/X_MAP_SEARCH_ENTRY_NAME&amp;gt;&lt;br /&gt;
                    &amp;lt;X_MAP_SEARCH_ENTRY_ID_PREFIX&amp;gt;db/search/all/&amp;lt;/X_MAP_SEARCH_ENTRY_ID_PREFIX&amp;gt;&lt;br /&gt;
                    &amp;lt;X_MAP_SEARCH_ENTRY_TYPE&amp;gt;&amp;lt;/X_MAP_SEARCH_ENTRY_TYPE&amp;gt;&lt;br /&gt;
                &amp;lt;/X_MAP_SEARCH_ENTRY&amp;gt;&lt;br /&gt;
            &amp;lt;/X_MAP_SEARCH&amp;gt;&lt;br /&gt;
        &amp;lt;/openhome:X_MAP&amp;gt;&lt;br /&gt;
        &amp;lt;presentationURL&amp;gt;http://10.2.1.170:4000/res/linn.co.uk.kazooserver/index.html&amp;lt;/presentationURL&amp;gt;&lt;br /&gt;
        &amp;lt;friendlyName&amp;gt;Linn Kazoo Server [R&amp;amp;D Mac Mini]&amp;lt;/friendlyName&amp;gt;&lt;br /&gt;
        &amp;lt;manufacturer&amp;gt;Linn&amp;lt;/manufacturer&amp;gt;&lt;br /&gt;
        &amp;lt;manufacturerURL&amp;gt;http://www.linn.co.uk&amp;lt;/manufacturerURL&amp;gt;&lt;br /&gt;
        &amp;lt;modelName&amp;gt;Kazoo Server&amp;lt;/modelName&amp;gt;&lt;br /&gt;
        &amp;lt;modelURL&amp;gt;http://oss.linn.co.uk/trac/wiki/KazooServer&amp;lt;/modelURL&amp;gt;&lt;br /&gt;
        &amp;lt;UDN&amp;gt;uuid:ac3d630e37b5f11ff5cdd23c0f5a7400&amp;lt;/UDN&amp;gt;&lt;br /&gt;
        &amp;lt;iconList&amp;gt;&lt;br /&gt;
            &amp;lt;icon&amp;gt;&lt;br /&gt;
                &amp;lt;mimetype&amp;gt;image/png&amp;lt;/mimetype&amp;gt;&lt;br /&gt;
                &amp;lt;width&amp;gt;65&amp;lt;/width&amp;gt;&lt;br /&gt;
                &amp;lt;height&amp;gt;65&amp;lt;/height&amp;gt;&lt;br /&gt;
                &amp;lt;depth&amp;gt;32&amp;lt;/depth&amp;gt;&lt;br /&gt;
                &amp;lt;url&amp;gt;ac3d630e37b5f11ff5cdd23c0f5a7400/resource/icon/icon&amp;lt;/url&amp;gt;&lt;br /&gt;
            &amp;lt;/icon&amp;gt;&lt;br /&gt;
        &amp;lt;/iconList&amp;gt;&lt;br /&gt;
        &amp;lt;serviceList&amp;gt;&lt;br /&gt;
            &amp;lt;service&amp;gt;&lt;br /&gt;
                &amp;lt;serviceType&amp;gt;urn:av-openhome-org:service:PlaylistManager:1&amp;lt;/serviceType&amp;gt;&lt;br /&gt;
                &amp;lt;serviceId&amp;gt;urn:av-openhome-org:serviceId:PlaylistManager&amp;lt;/serviceId&amp;gt;&lt;br /&gt;
                &amp;lt;SCPDURL&amp;gt;/ac3d630e37b5f11ff5cdd23c0f5a7400/Upnp/av.openhome.org-PlaylistManager-1/service.xml&amp;lt;/SCPDURL&amp;gt;&lt;br /&gt;
                &amp;lt;controlURL&amp;gt;/ac3d630e37b5f11ff5cdd23c0f5a7400/av.openhome.org-PlaylistManager-1/control&amp;lt;/controlURL&amp;gt;&lt;br /&gt;
                &amp;lt;eventSubURL&amp;gt;/ac3d630e37b5f11ff5cdd23c0f5a7400/av.openhome.org-PlaylistManager-1/event&amp;lt;/eventSubURL&amp;gt;&lt;br /&gt;
            &amp;lt;/service&amp;gt;&lt;br /&gt;
            &amp;lt;service&amp;gt;&lt;br /&gt;
                &amp;lt;serviceType&amp;gt;urn:schemas-upnp-org:service:ContentDirectory:1&amp;lt;/serviceType&amp;gt;&lt;br /&gt;
                &amp;lt;serviceId&amp;gt;urn:upnp-org:serviceId:ContentDirectory&amp;lt;/serviceId&amp;gt;&lt;br /&gt;
                &amp;lt;SCPDURL&amp;gt;/ac3d630e37b5f11ff5cdd23c0f5a7400/Upnp/upnp.org-ContentDirectory-1/service.xml&amp;lt;/SCPDURL&amp;gt;&lt;br /&gt;
                &amp;lt;controlURL&amp;gt;/ac3d630e37b5f11ff5cdd23c0f5a7400/upnp.org-ContentDirectory-1/control&amp;lt;/controlURL&amp;gt;&lt;br /&gt;
                &amp;lt;eventSubURL&amp;gt;/ac3d630e37b5f11ff5cdd23c0f5a7400/upnp.org-ContentDirectory-1/event&amp;lt;/eventSubURL&amp;gt;&lt;br /&gt;
            &amp;lt;/service&amp;gt;&lt;br /&gt;
            &amp;lt;service&amp;gt;&lt;br /&gt;
                &amp;lt;serviceType&amp;gt;urn:schemas-upnp-org:service:ConnectionManager:1&amp;lt;/serviceType&amp;gt;&lt;br /&gt;
                &amp;lt;serviceId&amp;gt;urn:upnp-org:serviceId:ConnectionManager&amp;lt;/serviceId&amp;gt;&lt;br /&gt;
                &amp;lt;SCPDURL&amp;gt;/ac3d630e37b5f11ff5cdd23c0f5a7400/Upnp/upnp.org-ConnectionManager-1/service.xml&amp;lt;/SCPDURL&amp;gt;&lt;br /&gt;
                &amp;lt;controlURL&amp;gt;/ac3d630e37b5f11ff5cdd23c0f5a7400/upnp.org-ConnectionManager-1/control&amp;lt;/controlURL&amp;gt;&lt;br /&gt;
                &amp;lt;eventSubURL&amp;gt;/ac3d630e37b5f11ff5cdd23c0f5a7400/upnp.org-ConnectionManager-1/event&amp;lt;/eventSubURL&amp;gt;&lt;br /&gt;
            &amp;lt;/service&amp;gt;&lt;br /&gt;
        &amp;lt;/serviceList&amp;gt;&lt;br /&gt;
    &amp;lt;/device&amp;gt;&lt;br /&gt;
 &amp;lt;/root&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Index maps ==&lt;br /&gt;
&lt;br /&gt;
Large lists are difficult to navigate, especially on mobile devices. Mobile devices added the idea of an index map to improve this situation. The index map allows a users to jump to different sections in a large list, similar to what is possible with a scrollbar on desktops.&lt;br /&gt;
&lt;br /&gt;
In order for a control point to generate an index map for any particular level in a ContentDirectory&#039;s hierarchy it first needs to download all the objects in the container, figure out if they are sorted and then calculate the index map. This means that a user will need to wait, perhaps minutes, before an index map is able to be presented on the UI. &lt;br /&gt;
&lt;br /&gt;
The media server can optionally return an index map for container that are in alphabetical order. This implemented through a OpenHome vendor extension of the DIDL-Lite XML. Below shows an example DIDL-Lite with an index map included.&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;DIDL-Lite xmlns=&amp;quot;urn:schemas-upnp-org:metadata-1-0/DIDL-Lite/&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;container id=&amp;quot;db/ba37a2ac24efa676c8676aab71a6cdf074&amp;quot; parentID=&amp;quot;0&amp;quot; restricted=&amp;quot;true&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;dc:title xmlns:dc=&amp;quot;http://purl.org/dc/elements/1.1/&amp;quot;&amp;gt;Worlds Apart [Deluxe Edition]&amp;lt;/dc:title&amp;gt;&lt;br /&gt;
        &amp;lt;upnp:udn xmlns:upnp=&amp;quot;urn:schemas-upnp-org:metadata-1-0/upnp/&amp;quot;&amp;gt;ac3d630e37b5f11ff5cdd23c0f5a7400&amp;lt;/upnp:udn&amp;gt;&lt;br /&gt;
        &amp;lt;upnp:class xmlns:upnp=&amp;quot;urn:schemas-upnp-org:metadata-1-0/upnp/&amp;quot;&amp;gt;object.container.album.musicAlbum&amp;lt;/upnp:class&amp;gt;&lt;br /&gt;
        &amp;lt;upnp:artist xmlns:upnp=&amp;quot;urn:schemas-upnp-org:metadata-1-0/upnp/&amp;quot;&amp;gt;...And You Will Know Us by the Trail of Dead&amp;lt;/upnp:artist&amp;gt;&lt;br /&gt;
        &amp;lt;upnp:albumArtURI&amp;gt;http://10.2.1.170:4000/linn.co.uk.kazooserver/ms/artwork/37a2ac2?size=0&amp;lt;/upnp:albumArtURI&amp;gt;&lt;br /&gt;
    &amp;lt;/container&amp;gt;&lt;br /&gt;
    &amp;lt;desc nameSpace=&amp;quot;openhome.org&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;indexmap&amp;gt;0 10 10 10 10 10 0 0 0 0 10 12 1 10 10 10 12 17 18 1 0 20 0 20 20 2 2 24&amp;lt;/indexmap&amp;gt;&lt;br /&gt;
    &amp;lt;/desc&amp;gt;&lt;br /&gt;
 &amp;lt;/DIDL-Lite&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The index map contains a space separated list of 28 number representing the total number of items that begin with that letter. #, represents everything below A, largely digits and punctuation and + represents everything above Z, largely international characters not collatable within the roman alphabet.&lt;br /&gt;
&lt;br /&gt;
 # A B C D E F G H I J K L M N O P Q R S T U V W X Y Z +&lt;br /&gt;
&lt;br /&gt;
== Image Resolution ==&lt;br /&gt;
&lt;br /&gt;
Control points running on different platforms have different memory limits and display technologies. This means that a control point on a PC might want to display artwork at a high resolution, while a control point on a PDA might want to display artwork at a much lower resolution.&lt;br /&gt;
&lt;br /&gt;
Media servers often try to solve this problem using one of the following two methods:&lt;br /&gt;
&lt;br /&gt;
# A configurable parameter that scales all artwork to a user defined size&lt;br /&gt;
# A profile system where a user can create profiles for each class of control point they have and configure a parameter that scales all artwork to a user defined size per profile&lt;br /&gt;
&lt;br /&gt;
The first solution is highly problematic because it limits the resolution of artwork across the whole network. But a single network very often contains control points that can display high resolution images AND control points that can&#039;t.&lt;br /&gt;
&lt;br /&gt;
The second solution is just architecturally poor, turning the relationship between a control point and a media server on its head. Why should the media server try to infer what a control point needs through configuration when the control point is perfectly capable of telling the media server its exact requirements in every single circumstance.&lt;br /&gt;
&lt;br /&gt;
So, it is proposed that compliant media servers include a &#039;&#039;&#039;size&#039;&#039;&#039; element in their artwork uri&#039;s, where the size is the image&#039;s largest dimension. This allows a control point to ask for an image at a specified size.&lt;br /&gt;
&lt;br /&gt;
=== Example ===&lt;br /&gt;
&lt;br /&gt;
If the original artwork was 400x512, then a media server would provide the following albumArtURI: &amp;lt;uri&amp;gt;?size=512. If it is not possible for the media server to obtain the original resolution then the media server would provide the following albumArtURI: &amp;lt;uri&amp;gt;?size=0.&lt;br /&gt;
&lt;br /&gt;
The presence of the size element tells the control point:&lt;br /&gt;
&lt;br /&gt;
# the media server implements the image scaling extension&lt;br /&gt;
# the original size of the image.&lt;br /&gt;
&lt;br /&gt;
Now the control point can request the image at any resolution by using &amp;lt;uri&amp;gt;?size=x, where x is the size it wants.&lt;br /&gt;
&lt;br /&gt;
So, in this example, &amp;lt;uri&amp;gt;?size=1024 gets an 800x1024 image, and &amp;lt;uri&amp;gt;?size=200 gets a 156x200 image.&lt;br /&gt;
&lt;br /&gt;
== albumArtURI&amp;lt;br&amp;gt; ==&lt;br /&gt;
&lt;br /&gt;
The current specification only allows retrieval of artwork for a musicAlbum container through the property albumArtURI. When browsing a music library on a control point it quickly becomes clear that to implement a graphically rich control point the ContentDirectory service should provide a way to retrieve artwork for all of the content directory classes, not just musicAlbum containers.&lt;br /&gt;
&lt;br /&gt;
There has become a somewhat defacto standard where just about all media server provide an albumArtURI property for a musicItem item as well as for a musicAlbum container, however this is still not good enough to implement a graphically rich control point.&lt;br /&gt;
&lt;br /&gt;
It is proposed that an optional property is introduced to the object class called &#039;&#039;&#039;albumArtURI&#039;&#039;&amp;amp;nbsp;&#039;&#039;&#039;&#039;&#039;which may contain an attribute &#039;&#039;&#039;title&#039;&#039;&#039;,&amp;amp;nbsp;e.g. &amp;amp;lt;albumArtURI title=&amp;quot;Font Cover&amp;quot;&amp;amp;gt;http://Front Cover.jpg&amp;amp;lt;/albumArtURI&amp;amp;gt;.&amp;amp;nbsp;The object class can contain zero or more albumArtURIs elements.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Dynamic IP Addresses ==&lt;br /&gt;
&lt;br /&gt;
At present all media servers return URIs that contain a reference to their IP address, e.g. http://172.20.1.1/music.flac etc. This means that if the media server&#039;s IP address were to change across reboots, then any control point or media renderer with URIs that referenced the media server before the reboot will become invalid.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
It is proposed that a media server should always reference itself by host name and not by IP address in any XML that it sends to external devices, i.e. http://mynas/music.flac.&lt;br /&gt;
&lt;br /&gt;
== Disc Information ==&lt;br /&gt;
&lt;br /&gt;
A new property has been added to the musicTrack item called &#039;&#039;&#039;OriginalDiscNumber&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
A new property has been added to the musicAlbum item called &#039;&#039;&#039;OriginalDiscCount&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
== Replay Gain Information ==&lt;br /&gt;
&lt;br /&gt;
Four new properties have been added to the musicTrack item called &#039;&#039;&#039;ReplayGainAlbum&#039;&#039;&#039;, &#039;&#039;&#039;ReplayGainAlbumPeak&#039;&#039;&#039;, &#039;&#039;&#039;ReplayGainTrack&#039;&#039;&#039;, and &#039;&#039;&#039;ReplayGainTrackPeak&#039;&#039;&#039;.&lt;/div&gt;</summary>
		<author><name>Davidd</name></author>
	</entry>
	<entry>
		<id>https://docs.linn.co.uk/wiki/index.php?title=Developer:Media_Server_Extensions&amp;diff=11239</id>
		<title>Developer:Media Server Extensions</title>
		<link rel="alternate" type="text/html" href="https://docs.linn.co.uk/wiki/index.php?title=Developer:Media_Server_Extensions&amp;diff=11239"/>
		<updated>2015-03-16T10:24:57Z</updated>

		<summary type="html">&lt;p&gt;Davidd: /* Disc Information */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Introduction =&lt;br /&gt;
&lt;br /&gt;
The ContentDirectory service has various limitations which become apparent when implementing control points on different hardware platforms. This document aims to outline some ideas that address the various shortcomings of the ContentDirectory specification.&lt;br /&gt;
&lt;br /&gt;
== Container map ==&lt;br /&gt;
&lt;br /&gt;
The current ContentDirectory specification makes it tricky for a control point to display the returned contents in an appropriate, aesthetically pleasing, manner for the content being viewed. This is because the ContentDirectory specification does not allow for a control point to know in advanced what content to expect when browsing through any particular hierarchy.&lt;br /&gt;
&lt;br /&gt;
An example of this might be, at a particular point in the browse hierarchy the ContentDirectory will return a list of albums which in turn will contain a list of tracks. A UI might wish to represent this list of albums as a grid and the album&#039;s tracks as a header and a list of the tracks. Currently it is not possible for the UI to know when it gets to a point in a hierarchy where the hierarchy represents a list of albums followed by a list of tracks.&lt;br /&gt;
&lt;br /&gt;
The container map extension allows a media server to express its container hierarchy in advance of the control point navigating it. This is done using an OpenHome vendor extension to the device XML.&lt;br /&gt;
&lt;br /&gt;
Three types of mapped container are defined: browse, link, and search.&lt;br /&gt;
&lt;br /&gt;
The browse map defines named top level containers that represent significant starting points for browsing that can meaningfully be presented in top level tabs of a control point UI. The browse map is expressed within the X_MAP_BROWSE element of X_MAP.&lt;br /&gt;
&lt;br /&gt;
The link map defines containers that can be meaningfully linked to from track or album details. For instance a track will typically have an artist defined. If an entry for &amp;quot;artist&amp;quot; is defined in the link map then it will be possible for the user of a control point to quickly access this artist-related container by clicking on the track&#039;s artist text. Similar links might be offered for &amp;quot;genre&amp;quot;, &amp;quot;composer&amp;quot;, &amp;quot;conductor&amp;quot;, etc. The link map is expressed within the X_MAP_LINK element of X_MAP.&lt;br /&gt;
&lt;br /&gt;
The search map defines the different kinds of search containers and the type of results that they produce. The search map is expressed within the X_MAP_SEARCH element of X_MAP.&lt;br /&gt;
&lt;br /&gt;
=== Browse map ===&lt;br /&gt;
&lt;br /&gt;
The X_MAP_BROWSE element must contain 1 or more X_MAP_BROWSE_ENTRY elements.&lt;br /&gt;
&lt;br /&gt;
The X_MAP_BROWSE_ENTRY has three child elements.&lt;br /&gt;
&lt;br /&gt;
X_MAP_BROWSE_ENTRY_NAME is a string that can be used by a control point to label a tab containing this browse hierarchy.&lt;br /&gt;
&lt;br /&gt;
X_MAP_BROWSE_ENTRY_ID is the UPnP container id that contains the root of this browse hierarchy. This id is then submitted to the ContentDirectory service using the Browse action as usual. The returned contents are navigated using subsequent Browse request as usual. The difference is that the control point knows in advance what kind of results to expect at each level.&lt;br /&gt;
&lt;br /&gt;
X_MAP_BROWSE_ENTRY_TYPE is a space separated list of strings that maps out the kind of containers that are to be found at each level of this browse hierarchy. For instance, &amp;quot;artist album&amp;quot; represents a browse hierarchy giving a container containing only artist containers, each of which contains only album containers, each of which contains only tracks.&lt;br /&gt;
&lt;br /&gt;
There should be an X_MAP_BROWSE_ENTRY for each root browse hierarchy defined by the media server.&lt;br /&gt;
&lt;br /&gt;
For example:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;X_MAP_BROWSE_ENTRY&amp;gt;&lt;br /&gt;
     &amp;lt;X_MAP_BROWSE_ENTRY_NAME&amp;gt;Genre&amp;lt;/X_MAP_BROWSE_ENTRY_NAME&amp;gt;&lt;br /&gt;
     &amp;lt;X_MAP_BROWSE_ENTRY_ID&amp;gt;db/browse/genre&amp;lt;/X_MAP_BROWSE_ENTRY_ID&amp;gt;&lt;br /&gt;
     &amp;lt;X_MAP_BROWSE_ENTRY_TYPE&amp;gt;genre artist album&amp;lt;/X_MAP_BROWSE_ENTRY_TYPE&amp;gt;&lt;br /&gt;
 &amp;lt;/X_MAP_BROWSE_ENTRY&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Link map ===&lt;br /&gt;
&lt;br /&gt;
The X_MAP_LINK element must contain 1 or more X_MAP_LINK_ENTRY elements.&lt;br /&gt;
&lt;br /&gt;
The X_MAP_LINK_ENTRY has three child elements.&lt;br /&gt;
&lt;br /&gt;
X_MAP_LINK_ENTRY_TAG is a string that defines which type of metadata is the target for this link. e.g. &amp;quot;artist&amp;quot;, &amp;quot;genre&amp;quot;, &amp;quot;composer&amp;quot;, etc. See the type section below. &lt;br /&gt;
&lt;br /&gt;
X_MAP_LINK_ENTRY_ID_PREFIX is a string that is prefix for a UPnP container id. The link can be taken by browsing to the container whose id is the result of appending the associated metadata value to this prefix. For instance, if the prefix for an &amp;quot;artist&amp;quot; link is defined as db/link/artist/, and a track returned anywhere in the media server&#039;s library has &amp;quot;Pink Floyd&amp;quot; as its artist. Then the linked container will have an id of db/link/artist/Pink Floyd.&lt;br /&gt;
&lt;br /&gt;
X_MAP_LINK_ENTRY_TYPE represents the type of browse hierarchy returned when taking this type of link. See X_MAP_BROWSE_ENTRY_TYPE for details.&lt;br /&gt;
&lt;br /&gt;
There should be an X_MAP_LINK_ENTRY for each piece of metadata that the media server allows to be linked.&lt;br /&gt;
&lt;br /&gt;
For example:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;X_MAP_LINK_ENTRY&amp;gt;&lt;br /&gt;
     &amp;lt;X_MAP_LINK_ENTRY_TAG&amp;gt;artist&amp;lt;/X_MAP_LINK_ENTRY_TAG&amp;gt;&lt;br /&gt;
     &amp;lt;X_MAP_LINK_ENTRY_ID_PREFIX&amp;gt;db/link/artist/&amp;lt;/X_MAP_LINK_ENTRY_ID_PREFIX&amp;gt;&lt;br /&gt;
     &amp;lt;X_MAP_LINK_ENTRY_TYPE&amp;gt;album&amp;lt;/X_MAP_LINK_ENTRY_TYPE&amp;gt;&lt;br /&gt;
 &amp;lt;/X_MAP_LINK_ENTRY&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The example above defines a browse hierarchy that is created when linking from an artist name. The hierarchy created provides a list of linked artist albums which in turn provide a list of tracks.&lt;br /&gt;
&lt;br /&gt;
=== Search map ===&lt;br /&gt;
&lt;br /&gt;
The X_MAP_SEARCH element must contain 1 or more X_MAP_SEARCH_ENTRY elements.&lt;br /&gt;
&lt;br /&gt;
The X_MAP_SEARCH_ENTRY has three child elements.&lt;br /&gt;
&lt;br /&gt;
X_MAP_SEARCH_ENTRY_NAME  is a string that can be used by a control point to label a tab containing these search results.&lt;br /&gt;
&lt;br /&gt;
X_MAP_SEARCH_ENTRY_ID_PREFIX is a string that is a prefix for a UPnP container id. The search results can be found by browsing to the container whose id is the result of appending the search string to this prefix. For instance, if the prefix for an &amp;quot;album&amp;quot; search is defined as db/search/album/, and the search string is &amp;quot;blue&amp;quot;, then the search results container will have an id of db/search/album/blue.&lt;br /&gt;
&lt;br /&gt;
X_MAP_SEARCH_ENTRY_TYPE represents the type of browse hierarchy returned when taking this type of search. See X_MAP_BROWSE_ENTRY_TYPE for details.&lt;br /&gt;
&lt;br /&gt;
There should be an X_MAP_SEARCH_ENTRY for each type of search offered by the media server.&lt;br /&gt;
&lt;br /&gt;
For example:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;X_MAP_SEARCH_ENTRY&amp;gt;&lt;br /&gt;
     &amp;lt;X_MAP_SEARCH_ENTRY_NAME&amp;gt;Artist&amp;lt;/X_MAP_SEARCH_ENTRY_NAME&amp;gt;&lt;br /&gt;
     &amp;lt;X_MAP_SEARCH_ENTRY_ID_PREFIX&amp;gt;db/search/artist/&amp;lt;/X_MAP_SEARCH_ENTRY_ID_PREFIX&amp;gt;&lt;br /&gt;
     &amp;lt;X_MAP_SEARCH_ENTRY_TYPE&amp;gt;artist album&amp;lt;/X_MAP_SEARCH_ENTRY_TYPE&amp;gt;&lt;br /&gt;
 &amp;lt;/X_MAP_SEARCH_ENTRY&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The example above defines a browse hierarchy that is created when searching for an artist. The hierarchy created provides a list of artists, which in turn provide a list of albums, which in turn provide a list of tracks.&lt;br /&gt;
&lt;br /&gt;
=== Types ===&lt;br /&gt;
&lt;br /&gt;
The list of allowed types for X_BROWSE_ENTRY_TYPE, X_MAP_LINK_ENTRY_TAG, X_LINK_ENTRY_TYPE, and X_SEARCH_ENTRY_TYPE&lt;br /&gt;
&lt;br /&gt;
 genre&lt;br /&gt;
 artist&lt;br /&gt;
 composer&lt;br /&gt;
 conductor&lt;br /&gt;
 album&lt;br /&gt;
 year&lt;br /&gt;
 mixed&lt;br /&gt;
&lt;br /&gt;
mixed is a special value that represents a container that has mixed entries. It is not a valid type for the X_MAP_LINK_ENTRY_TAG element.&lt;br /&gt;
&lt;br /&gt;
=== Example device XML ===&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;root xmlns=&amp;quot;urn:schemas-upnp-org:device-1-0&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;specVersion&amp;gt;&lt;br /&gt;
        &amp;lt;major&amp;gt;1&amp;lt;/major&amp;gt;&lt;br /&gt;
        &amp;lt;minor&amp;gt;1&amp;lt;/minor&amp;gt;&lt;br /&gt;
    &amp;lt;/specVersion&amp;gt;&lt;br /&gt;
    &amp;lt;device&amp;gt;&lt;br /&gt;
        &amp;lt;deviceType&amp;gt;urn:schemas-upnp-org:device:MediaServer:1&amp;lt;/deviceType&amp;gt;&lt;br /&gt;
        &amp;lt;dlna:X_DLNADOC xmlns:dlna=&amp;quot;urn:schemas-dlna-org:device-1-0&amp;quot;&amp;gt;DMS-1.50&amp;lt;/dlna:X_DLNADOC&amp;gt;&lt;br /&gt;
        &amp;lt;dlna:X_DLNACAP xmlns:dlna=&amp;quot;urn:schemas-dlna-org:device-1-0&amp;quot;&amp;gt;av-upload,image-upload,audio-upload&amp;lt;/dlna:X_DLNACAP&amp;gt;&lt;br /&gt;
        &amp;lt;openhome:X_MAP xmlns:openhome=&amp;quot;http://www.openhome.org&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;X_MAP_BROWSE&amp;gt;&lt;br /&gt;
                &amp;lt;X_MAP_BROWSE_ENTRY&amp;gt;&lt;br /&gt;
                    &amp;lt;X_MAP_BROWSE_ENTRY_NAME&amp;gt;Albums&amp;lt;/X_MAP_BROWSE_ENTRY_NAME&amp;gt;&lt;br /&gt;
                    &amp;lt;X_MAP_BROWSE_ENTRY_ID&amp;gt;db/browse/albums&amp;lt;/X_MAP_BROWSE_ENTRY_ID&amp;gt;&lt;br /&gt;
                    &amp;lt;X_MAP_BROWSE_ENTRY_TYPE&amp;gt;album&amp;lt;/X_MAP_BROWSE_ENTRY_TYPE&amp;gt;&lt;br /&gt;
                &amp;lt;/X_MAP_BROWSE_ENTRY&amp;gt;&lt;br /&gt;
                &amp;lt;X_MAP_BROWSE_ENTRY&amp;gt;&lt;br /&gt;
                    &amp;lt;X_MAP_BROWSE_ENTRY_NAME&amp;gt;Artists&amp;lt;/X_MAP_BROWSE_ENTRY_NAME&amp;gt;&lt;br /&gt;
                    &amp;lt;X_MAP_BROWSE_ENTRY_ID&amp;gt;db/browse/artists&amp;lt;/X_MAP_BROWSE_ENTRY_ID&amp;gt;&lt;br /&gt;
                    &amp;lt;X_MAP_BROWSE_ENTRY_TYPE&amp;gt;artist album&amp;lt;/X_MAP_BROWSE_ENTRY_TYPE&amp;gt;&lt;br /&gt;
                &amp;lt;/X_MAP_BROWSE_ENTRY&amp;gt;&lt;br /&gt;
                &amp;lt;X_MAP_BROWSE_ENTRY&amp;gt;&lt;br /&gt;
                    &amp;lt;X_MAP_BROWSE_ENTRY_NAME&amp;gt;Folders&amp;lt;/X_MAP_BROWSE_ENTRY_NAME&amp;gt;&lt;br /&gt;
                    &amp;lt;X_MAP_BROWSE_ENTRY_ID&amp;gt;db/browse/folders&amp;lt;/X_MAP_BROWSE_ENTRY_ID&amp;gt;&lt;br /&gt;
                    &amp;lt;X_MAP_BROWSE_ENTRY_TYPE&amp;gt;mixed&amp;lt;/X_MAP_BROWSE_ENTRY_TYPE&amp;gt;&lt;br /&gt;
                &amp;lt;/X_MAP_BROWSE_ENTRY&amp;gt;&lt;br /&gt;
            &amp;lt;/X_MAP_BROWSE&amp;gt;&lt;br /&gt;
            &amp;lt;X_MAP_LINK&amp;gt;&lt;br /&gt;
                &amp;lt;X_MAP_LINK_ENTRY&amp;gt;&lt;br /&gt;
                    &amp;lt;X_MAP_LINK_ENTRY_TAG&amp;gt;artist&amp;lt;/X_MAP_LINK_ENTRY_TAG&amp;gt;&lt;br /&gt;
                    &amp;lt;X_MAP_LINK_ENTRY_ID_PREFIX&amp;gt;db/link/artist/&amp;lt;/X_MAP_LINK_ENTRY_ID_PREFIX&amp;gt;&lt;br /&gt;
                    &amp;lt;X_MAP_LINK_ENTRY_TYPE&amp;gt;album&amp;lt;/X_MAP_LINK_ENTRY_TYPE&amp;gt;&lt;br /&gt;
                &amp;lt;/X_MAP_LINK_ENTRY&amp;gt;&lt;br /&gt;
                &amp;lt;X_MAP_LINK_ENTRY&amp;gt;&lt;br /&gt;
                    &amp;lt;X_MAP_LINK_ENTRY_TAG&amp;gt;composer&amp;lt;/X_MAP_LINK_ENTRY_TAG&amp;gt;&lt;br /&gt;
                    &amp;lt;X_MAP_LINK_ENTRY_ID_PREFIX&amp;gt;db/link/composer/&amp;lt;/X_MAP_LINK_ENTRY_ID_PREFIX&amp;gt;&lt;br /&gt;
                    &amp;lt;X_MAP_LINK_ENTRY_TYPE&amp;gt;album&amp;lt;/X_MAP_LINK_ENTRY_TYPE&amp;gt;&lt;br /&gt;
                &amp;lt;/X_MAP_LINK_ENTRY&amp;gt;&lt;br /&gt;
            &amp;lt;/X_MAP_LINK&amp;gt;&lt;br /&gt;
            &amp;lt;X_MAP_SEARCH&amp;gt;&lt;br /&gt;
                &amp;lt;X_MAP_SEARCH_ENTRY&amp;gt;&lt;br /&gt;
                    &amp;lt;X_MAP_SEARCH_ENTRY_NAME&amp;gt;Artist&amp;lt;/X_MAP_SEARCH_ENTRY_NAME&amp;gt;&lt;br /&gt;
                    &amp;lt;X_MAP_SEARCH_ENTRY_ID_PREFIX&amp;gt;db/search/artist/&amp;lt;/X_MAP_SEARCH_ENTRY_ID_PREFIX&amp;gt;&lt;br /&gt;
                    &amp;lt;X_MAP_SEARCH_ENTRY_TYPE&amp;gt;artist album&amp;lt;/X_MAP_SEARCH_ENTRY_TYPE&amp;gt;&lt;br /&gt;
                &amp;lt;/X_MAP_SEARCH_ENTRY&amp;gt;&lt;br /&gt;
                &amp;lt;X_MAP_SEARCH_ENTRY&amp;gt;&lt;br /&gt;
                    &amp;lt;X_MAP_SEARCH_ENTRY_NAME&amp;gt;Tracks&amp;lt;/X_MAP_SEARCH_ENTRY_NAME&amp;gt;&lt;br /&gt;
                    &amp;lt;X_MAP_SEARCH_ENTRY_ID_PREFIX&amp;gt;db/search/all/&amp;lt;/X_MAP_SEARCH_ENTRY_ID_PREFIX&amp;gt;&lt;br /&gt;
                    &amp;lt;X_MAP_SEARCH_ENTRY_TYPE&amp;gt;&amp;lt;/X_MAP_SEARCH_ENTRY_TYPE&amp;gt;&lt;br /&gt;
                &amp;lt;/X_MAP_SEARCH_ENTRY&amp;gt;&lt;br /&gt;
            &amp;lt;/X_MAP_SEARCH&amp;gt;&lt;br /&gt;
        &amp;lt;/openhome:X_MAP&amp;gt;&lt;br /&gt;
        &amp;lt;presentationURL&amp;gt;http://10.2.1.170:4000/res/linn.co.uk.kazooserver/index.html&amp;lt;/presentationURL&amp;gt;&lt;br /&gt;
        &amp;lt;friendlyName&amp;gt;Linn Kazoo Server [R&amp;amp;D Mac Mini]&amp;lt;/friendlyName&amp;gt;&lt;br /&gt;
        &amp;lt;manufacturer&amp;gt;Linn&amp;lt;/manufacturer&amp;gt;&lt;br /&gt;
        &amp;lt;manufacturerURL&amp;gt;http://www.linn.co.uk&amp;lt;/manufacturerURL&amp;gt;&lt;br /&gt;
        &amp;lt;modelName&amp;gt;Kazoo Server&amp;lt;/modelName&amp;gt;&lt;br /&gt;
        &amp;lt;modelURL&amp;gt;http://oss.linn.co.uk/trac/wiki/KazooServer&amp;lt;/modelURL&amp;gt;&lt;br /&gt;
        &amp;lt;UDN&amp;gt;uuid:ac3d630e37b5f11ff5cdd23c0f5a7400&amp;lt;/UDN&amp;gt;&lt;br /&gt;
        &amp;lt;iconList&amp;gt;&lt;br /&gt;
            &amp;lt;icon&amp;gt;&lt;br /&gt;
                &amp;lt;mimetype&amp;gt;image/png&amp;lt;/mimetype&amp;gt;&lt;br /&gt;
                &amp;lt;width&amp;gt;65&amp;lt;/width&amp;gt;&lt;br /&gt;
                &amp;lt;height&amp;gt;65&amp;lt;/height&amp;gt;&lt;br /&gt;
                &amp;lt;depth&amp;gt;32&amp;lt;/depth&amp;gt;&lt;br /&gt;
                &amp;lt;url&amp;gt;ac3d630e37b5f11ff5cdd23c0f5a7400/resource/icon/icon&amp;lt;/url&amp;gt;&lt;br /&gt;
            &amp;lt;/icon&amp;gt;&lt;br /&gt;
        &amp;lt;/iconList&amp;gt;&lt;br /&gt;
        &amp;lt;serviceList&amp;gt;&lt;br /&gt;
            &amp;lt;service&amp;gt;&lt;br /&gt;
                &amp;lt;serviceType&amp;gt;urn:av-openhome-org:service:PlaylistManager:1&amp;lt;/serviceType&amp;gt;&lt;br /&gt;
                &amp;lt;serviceId&amp;gt;urn:av-openhome-org:serviceId:PlaylistManager&amp;lt;/serviceId&amp;gt;&lt;br /&gt;
                &amp;lt;SCPDURL&amp;gt;/ac3d630e37b5f11ff5cdd23c0f5a7400/Upnp/av.openhome.org-PlaylistManager-1/service.xml&amp;lt;/SCPDURL&amp;gt;&lt;br /&gt;
                &amp;lt;controlURL&amp;gt;/ac3d630e37b5f11ff5cdd23c0f5a7400/av.openhome.org-PlaylistManager-1/control&amp;lt;/controlURL&amp;gt;&lt;br /&gt;
                &amp;lt;eventSubURL&amp;gt;/ac3d630e37b5f11ff5cdd23c0f5a7400/av.openhome.org-PlaylistManager-1/event&amp;lt;/eventSubURL&amp;gt;&lt;br /&gt;
            &amp;lt;/service&amp;gt;&lt;br /&gt;
            &amp;lt;service&amp;gt;&lt;br /&gt;
                &amp;lt;serviceType&amp;gt;urn:schemas-upnp-org:service:ContentDirectory:1&amp;lt;/serviceType&amp;gt;&lt;br /&gt;
                &amp;lt;serviceId&amp;gt;urn:upnp-org:serviceId:ContentDirectory&amp;lt;/serviceId&amp;gt;&lt;br /&gt;
                &amp;lt;SCPDURL&amp;gt;/ac3d630e37b5f11ff5cdd23c0f5a7400/Upnp/upnp.org-ContentDirectory-1/service.xml&amp;lt;/SCPDURL&amp;gt;&lt;br /&gt;
                &amp;lt;controlURL&amp;gt;/ac3d630e37b5f11ff5cdd23c0f5a7400/upnp.org-ContentDirectory-1/control&amp;lt;/controlURL&amp;gt;&lt;br /&gt;
                &amp;lt;eventSubURL&amp;gt;/ac3d630e37b5f11ff5cdd23c0f5a7400/upnp.org-ContentDirectory-1/event&amp;lt;/eventSubURL&amp;gt;&lt;br /&gt;
            &amp;lt;/service&amp;gt;&lt;br /&gt;
            &amp;lt;service&amp;gt;&lt;br /&gt;
                &amp;lt;serviceType&amp;gt;urn:schemas-upnp-org:service:ConnectionManager:1&amp;lt;/serviceType&amp;gt;&lt;br /&gt;
                &amp;lt;serviceId&amp;gt;urn:upnp-org:serviceId:ConnectionManager&amp;lt;/serviceId&amp;gt;&lt;br /&gt;
                &amp;lt;SCPDURL&amp;gt;/ac3d630e37b5f11ff5cdd23c0f5a7400/Upnp/upnp.org-ConnectionManager-1/service.xml&amp;lt;/SCPDURL&amp;gt;&lt;br /&gt;
                &amp;lt;controlURL&amp;gt;/ac3d630e37b5f11ff5cdd23c0f5a7400/upnp.org-ConnectionManager-1/control&amp;lt;/controlURL&amp;gt;&lt;br /&gt;
                &amp;lt;eventSubURL&amp;gt;/ac3d630e37b5f11ff5cdd23c0f5a7400/upnp.org-ConnectionManager-1/event&amp;lt;/eventSubURL&amp;gt;&lt;br /&gt;
            &amp;lt;/service&amp;gt;&lt;br /&gt;
        &amp;lt;/serviceList&amp;gt;&lt;br /&gt;
    &amp;lt;/device&amp;gt;&lt;br /&gt;
 &amp;lt;/root&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Index maps ==&lt;br /&gt;
&lt;br /&gt;
Large lists are difficult to navigate, especially on mobile devices. Mobile devices added the idea of an index map to improve this situation. The index map allows a users to jump to different sections in a large list, similar to what is possible with a scrollbar on desktops.&lt;br /&gt;
&lt;br /&gt;
In order for a control point to generate an index map for any particular level in a ContentDirectory&#039;s hierarchy it first needs to download all the objects in the container, figure out if they are sorted and then calculate the index map. This means that a user will need to wait, perhaps minutes, before an index map is able to be presented on the UI. &lt;br /&gt;
&lt;br /&gt;
The media server can optionally return an index map for container that are in alphabetical order. This implemented through a OpenHome vendor extension of the DIDL-Lite XML. Below shows an example DIDL-Lite with an index map included.&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;DIDL-Lite xmlns=&amp;quot;urn:schemas-upnp-org:metadata-1-0/DIDL-Lite/&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;container id=&amp;quot;db/ba37a2ac24efa676c8676aab71a6cdf074&amp;quot; parentID=&amp;quot;0&amp;quot; restricted=&amp;quot;true&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;dc:title xmlns:dc=&amp;quot;http://purl.org/dc/elements/1.1/&amp;quot;&amp;gt;Worlds Apart [Deluxe Edition]&amp;lt;/dc:title&amp;gt;&lt;br /&gt;
        &amp;lt;upnp:udn xmlns:upnp=&amp;quot;urn:schemas-upnp-org:metadata-1-0/upnp/&amp;quot;&amp;gt;ac3d630e37b5f11ff5cdd23c0f5a7400&amp;lt;/upnp:udn&amp;gt;&lt;br /&gt;
        &amp;lt;upnp:class xmlns:upnp=&amp;quot;urn:schemas-upnp-org:metadata-1-0/upnp/&amp;quot;&amp;gt;object.container.album.musicAlbum&amp;lt;/upnp:class&amp;gt;&lt;br /&gt;
        &amp;lt;upnp:artist xmlns:upnp=&amp;quot;urn:schemas-upnp-org:metadata-1-0/upnp/&amp;quot;&amp;gt;...And You Will Know Us by the Trail of Dead&amp;lt;/upnp:artist&amp;gt;&lt;br /&gt;
        &amp;lt;upnp:albumArtURI&amp;gt;http://10.2.1.170:4000/linn.co.uk.kazooserver/ms/artwork/37a2ac2?size=0&amp;lt;/upnp:albumArtURI&amp;gt;&lt;br /&gt;
    &amp;lt;/container&amp;gt;&lt;br /&gt;
    &amp;lt;desc nameSpace=&amp;quot;openhome.org&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;indexmap&amp;gt;0 10 10 10 10 10 0 0 0 0 10 12 1 10 10 10 12 17 18 1 0 20 0 20 20 2 2 24&amp;lt;/indexmap&amp;gt;&lt;br /&gt;
    &amp;lt;/desc&amp;gt;&lt;br /&gt;
 &amp;lt;/DIDL-Lite&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The index map contains a space separated list of 28 number representing the total number of items that begin with that letter. #, represents everything below A, largely digits and punctuation and + represents everything above Z, largely international characters not collatable within the roman alphabet.&lt;br /&gt;
&lt;br /&gt;
 # A B C D E F G H I J K L M N O P Q R S T U V W X Y Z +&lt;br /&gt;
&lt;br /&gt;
== Image Resolution ==&lt;br /&gt;
&lt;br /&gt;
Control points running on different platforms have different memory limits and display technologies. This means that a control point on a PC might want to display artwork at a high resolution, while a control point on a PDA might want to display artwork at a much lower resolution.&lt;br /&gt;
&lt;br /&gt;
Media servers often try to solve this problem using one of the following two methods:&lt;br /&gt;
&lt;br /&gt;
# A configurable parameter that scales all artwork to a user defined size&lt;br /&gt;
# A profile system where a user can create profiles for each class of control point they have and configure a parameter that scales all artwork to a user defined size per profile&lt;br /&gt;
&lt;br /&gt;
The first solution is highly problematic because it limits the resolution of artwork across the whole network. But a single network very often contains control points that can display high resolution images AND control points that can&#039;t.&lt;br /&gt;
&lt;br /&gt;
The second solution is just architecturally poor, turning the relationship between a control point and a media server on its head. Why should the media server try to infer what a control point needs through configuration when the control point is perfectly capable of telling the media server its exact requirements in every single circumstance.&lt;br /&gt;
&lt;br /&gt;
So, it is proposed that compliant media servers include a &#039;&#039;&#039;size&#039;&#039;&#039; element in their artwork uri&#039;s, where the size is the image&#039;s largest dimension. This allows a control point to ask for an image at a specified size.&lt;br /&gt;
&lt;br /&gt;
=== Example ===&lt;br /&gt;
&lt;br /&gt;
If the original artwork was 400x512, then a media server would provide the following albumArtURI: &amp;lt;uri&amp;gt;?size=512. If it is not possible for the media server to obtain the original resolution then the media server would provide the following albumArtURI: &amp;lt;uri&amp;gt;?size=0.&lt;br /&gt;
&lt;br /&gt;
The presence of the size element tells the control point:&lt;br /&gt;
&lt;br /&gt;
# the media server implements the image scaling extension&lt;br /&gt;
# the original size of the image.&lt;br /&gt;
&lt;br /&gt;
Now the control point can request the image at any resolution by using &amp;lt;uri&amp;gt;?size=x, where x is the size it wants.&lt;br /&gt;
&lt;br /&gt;
So, in this example, &amp;lt;uri&amp;gt;?size=1024 gets an 800x1024 image, and &amp;lt;uri&amp;gt;?size=200 gets a 156x200 image.&lt;br /&gt;
&lt;br /&gt;
== albumArtURI&amp;lt;br&amp;gt; ==&lt;br /&gt;
&lt;br /&gt;
The current specification only allows retrieval of artwork for a musicAlbum container through the property albumArtURI. When browsing a music library on a control point it quickly becomes clear that to implement a graphically rich control point the ContentDirectory service should provide a way to retrieve artwork for all of the content directory classes, not just musicAlbum containers.&lt;br /&gt;
&lt;br /&gt;
There has become a somewhat defacto standard where just about all media server provide an albumArtURI property for a musicItem item as well as for a musicAlbum container, however this is still not good enough to implement a graphically rich control point.&lt;br /&gt;
&lt;br /&gt;
It is proposed that an optional property is introduced to the object class called &#039;&#039;&#039;albumArtURI&#039;&#039;&amp;amp;nbsp;&#039;&#039;&#039;&#039;&#039;which may contain an attribute &#039;&#039;&#039;title&#039;&#039;&#039;,&amp;amp;nbsp;e.g. &amp;amp;lt;albumArtURI title=&amp;quot;Font Cover&amp;quot;&amp;amp;gt;http://Front Cover.jpg&amp;amp;lt;/albumArtURI&amp;amp;gt;.&amp;amp;nbsp;The object class can contain zero or more albumArtURIs elements.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Dynamic IP Addresses ==&lt;br /&gt;
&lt;br /&gt;
At present all media servers return URIs that contain a reference to their IP address, e.g. http://172.20.1.1/music.flac etc. This means that if the media server&#039;s IP address were to change across reboots, then any control point or media renderer with URIs that referenced the media server before the reboot will become invalid.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
It is proposed that a media server should always reference itself by host name and not by IP address in any XML that it sends to external devices, i.e. http://mynas/music.flac.&lt;br /&gt;
&lt;br /&gt;
== Disc Information ==&lt;br /&gt;
&lt;br /&gt;
A new property has been added to the musicTrack item called &#039;&#039;&#039;OriginalDiscNumber&#039;&#039;&#039; and a new property has been added to the musicAlbum item called &#039;&#039;&#039;OriginalDiscCount&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
== Replay Gain Information ==&lt;br /&gt;
&lt;br /&gt;
Four new properties have been added to the musicTrack item called &#039;&#039;&#039;ReplayGainAlbum&#039;&#039;&#039;, &#039;&#039;&#039;ReplayGainAlbumPeak&#039;&#039;&#039;, &#039;&#039;&#039;ReplayGainTrack&#039;&#039;&#039;, and &#039;&#039;&#039;ReplayGainTrackPeak&#039;&#039;&#039;.&lt;/div&gt;</summary>
		<author><name>Davidd</name></author>
	</entry>
	<entry>
		<id>https://docs.linn.co.uk/wiki/index.php?title=Developer:Media_Server_Extensions&amp;diff=11238</id>
		<title>Developer:Media Server Extensions</title>
		<link rel="alternate" type="text/html" href="https://docs.linn.co.uk/wiki/index.php?title=Developer:Media_Server_Extensions&amp;diff=11238"/>
		<updated>2015-03-16T10:23:47Z</updated>

		<summary type="html">&lt;p&gt;Davidd: /* Replay Gain Information */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Introduction =&lt;br /&gt;
&lt;br /&gt;
The ContentDirectory service has various limitations which become apparent when implementing control points on different hardware platforms. This document aims to outline some ideas that address the various shortcomings of the ContentDirectory specification.&lt;br /&gt;
&lt;br /&gt;
== Container map ==&lt;br /&gt;
&lt;br /&gt;
The current ContentDirectory specification makes it tricky for a control point to display the returned contents in an appropriate, aesthetically pleasing, manner for the content being viewed. This is because the ContentDirectory specification does not allow for a control point to know in advanced what content to expect when browsing through any particular hierarchy.&lt;br /&gt;
&lt;br /&gt;
An example of this might be, at a particular point in the browse hierarchy the ContentDirectory will return a list of albums which in turn will contain a list of tracks. A UI might wish to represent this list of albums as a grid and the album&#039;s tracks as a header and a list of the tracks. Currently it is not possible for the UI to know when it gets to a point in a hierarchy where the hierarchy represents a list of albums followed by a list of tracks.&lt;br /&gt;
&lt;br /&gt;
The container map extension allows a media server to express its container hierarchy in advance of the control point navigating it. This is done using an OpenHome vendor extension to the device XML.&lt;br /&gt;
&lt;br /&gt;
Three types of mapped container are defined: browse, link, and search.&lt;br /&gt;
&lt;br /&gt;
The browse map defines named top level containers that represent significant starting points for browsing that can meaningfully be presented in top level tabs of a control point UI. The browse map is expressed within the X_MAP_BROWSE element of X_MAP.&lt;br /&gt;
&lt;br /&gt;
The link map defines containers that can be meaningfully linked to from track or album details. For instance a track will typically have an artist defined. If an entry for &amp;quot;artist&amp;quot; is defined in the link map then it will be possible for the user of a control point to quickly access this artist-related container by clicking on the track&#039;s artist text. Similar links might be offered for &amp;quot;genre&amp;quot;, &amp;quot;composer&amp;quot;, &amp;quot;conductor&amp;quot;, etc. The link map is expressed within the X_MAP_LINK element of X_MAP.&lt;br /&gt;
&lt;br /&gt;
The search map defines the different kinds of search containers and the type of results that they produce. The search map is expressed within the X_MAP_SEARCH element of X_MAP.&lt;br /&gt;
&lt;br /&gt;
=== Browse map ===&lt;br /&gt;
&lt;br /&gt;
The X_MAP_BROWSE element must contain 1 or more X_MAP_BROWSE_ENTRY elements.&lt;br /&gt;
&lt;br /&gt;
The X_MAP_BROWSE_ENTRY has three child elements.&lt;br /&gt;
&lt;br /&gt;
X_MAP_BROWSE_ENTRY_NAME is a string that can be used by a control point to label a tab containing this browse hierarchy.&lt;br /&gt;
&lt;br /&gt;
X_MAP_BROWSE_ENTRY_ID is the UPnP container id that contains the root of this browse hierarchy. This id is then submitted to the ContentDirectory service using the Browse action as usual. The returned contents are navigated using subsequent Browse request as usual. The difference is that the control point knows in advance what kind of results to expect at each level.&lt;br /&gt;
&lt;br /&gt;
X_MAP_BROWSE_ENTRY_TYPE is a space separated list of strings that maps out the kind of containers that are to be found at each level of this browse hierarchy. For instance, &amp;quot;artist album&amp;quot; represents a browse hierarchy giving a container containing only artist containers, each of which contains only album containers, each of which contains only tracks.&lt;br /&gt;
&lt;br /&gt;
There should be an X_MAP_BROWSE_ENTRY for each root browse hierarchy defined by the media server.&lt;br /&gt;
&lt;br /&gt;
For example:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;X_MAP_BROWSE_ENTRY&amp;gt;&lt;br /&gt;
     &amp;lt;X_MAP_BROWSE_ENTRY_NAME&amp;gt;Genre&amp;lt;/X_MAP_BROWSE_ENTRY_NAME&amp;gt;&lt;br /&gt;
     &amp;lt;X_MAP_BROWSE_ENTRY_ID&amp;gt;db/browse/genre&amp;lt;/X_MAP_BROWSE_ENTRY_ID&amp;gt;&lt;br /&gt;
     &amp;lt;X_MAP_BROWSE_ENTRY_TYPE&amp;gt;genre artist album&amp;lt;/X_MAP_BROWSE_ENTRY_TYPE&amp;gt;&lt;br /&gt;
 &amp;lt;/X_MAP_BROWSE_ENTRY&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Link map ===&lt;br /&gt;
&lt;br /&gt;
The X_MAP_LINK element must contain 1 or more X_MAP_LINK_ENTRY elements.&lt;br /&gt;
&lt;br /&gt;
The X_MAP_LINK_ENTRY has three child elements.&lt;br /&gt;
&lt;br /&gt;
X_MAP_LINK_ENTRY_TAG is a string that defines which type of metadata is the target for this link. e.g. &amp;quot;artist&amp;quot;, &amp;quot;genre&amp;quot;, &amp;quot;composer&amp;quot;, etc. See the type section below. &lt;br /&gt;
&lt;br /&gt;
X_MAP_LINK_ENTRY_ID_PREFIX is a string that is prefix for a UPnP container id. The link can be taken by browsing to the container whose id is the result of appending the associated metadata value to this prefix. For instance, if the prefix for an &amp;quot;artist&amp;quot; link is defined as db/link/artist/, and a track returned anywhere in the media server&#039;s library has &amp;quot;Pink Floyd&amp;quot; as its artist. Then the linked container will have an id of db/link/artist/Pink Floyd.&lt;br /&gt;
&lt;br /&gt;
X_MAP_LINK_ENTRY_TYPE represents the type of browse hierarchy returned when taking this type of link. See X_MAP_BROWSE_ENTRY_TYPE for details.&lt;br /&gt;
&lt;br /&gt;
There should be an X_MAP_LINK_ENTRY for each piece of metadata that the media server allows to be linked.&lt;br /&gt;
&lt;br /&gt;
For example:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;X_MAP_LINK_ENTRY&amp;gt;&lt;br /&gt;
     &amp;lt;X_MAP_LINK_ENTRY_TAG&amp;gt;artist&amp;lt;/X_MAP_LINK_ENTRY_TAG&amp;gt;&lt;br /&gt;
     &amp;lt;X_MAP_LINK_ENTRY_ID_PREFIX&amp;gt;db/link/artist/&amp;lt;/X_MAP_LINK_ENTRY_ID_PREFIX&amp;gt;&lt;br /&gt;
     &amp;lt;X_MAP_LINK_ENTRY_TYPE&amp;gt;album&amp;lt;/X_MAP_LINK_ENTRY_TYPE&amp;gt;&lt;br /&gt;
 &amp;lt;/X_MAP_LINK_ENTRY&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The example above defines a browse hierarchy that is created when linking from an artist name. The hierarchy created provides a list of linked artist albums which in turn provide a list of tracks.&lt;br /&gt;
&lt;br /&gt;
=== Search map ===&lt;br /&gt;
&lt;br /&gt;
The X_MAP_SEARCH element must contain 1 or more X_MAP_SEARCH_ENTRY elements.&lt;br /&gt;
&lt;br /&gt;
The X_MAP_SEARCH_ENTRY has three child elements.&lt;br /&gt;
&lt;br /&gt;
X_MAP_SEARCH_ENTRY_NAME  is a string that can be used by a control point to label a tab containing these search results.&lt;br /&gt;
&lt;br /&gt;
X_MAP_SEARCH_ENTRY_ID_PREFIX is a string that is a prefix for a UPnP container id. The search results can be found by browsing to the container whose id is the result of appending the search string to this prefix. For instance, if the prefix for an &amp;quot;album&amp;quot; search is defined as db/search/album/, and the search string is &amp;quot;blue&amp;quot;, then the search results container will have an id of db/search/album/blue.&lt;br /&gt;
&lt;br /&gt;
X_MAP_SEARCH_ENTRY_TYPE represents the type of browse hierarchy returned when taking this type of search. See X_MAP_BROWSE_ENTRY_TYPE for details.&lt;br /&gt;
&lt;br /&gt;
There should be an X_MAP_SEARCH_ENTRY for each type of search offered by the media server.&lt;br /&gt;
&lt;br /&gt;
For example:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;X_MAP_SEARCH_ENTRY&amp;gt;&lt;br /&gt;
     &amp;lt;X_MAP_SEARCH_ENTRY_NAME&amp;gt;Artist&amp;lt;/X_MAP_SEARCH_ENTRY_NAME&amp;gt;&lt;br /&gt;
     &amp;lt;X_MAP_SEARCH_ENTRY_ID_PREFIX&amp;gt;db/search/artist/&amp;lt;/X_MAP_SEARCH_ENTRY_ID_PREFIX&amp;gt;&lt;br /&gt;
     &amp;lt;X_MAP_SEARCH_ENTRY_TYPE&amp;gt;artist album&amp;lt;/X_MAP_SEARCH_ENTRY_TYPE&amp;gt;&lt;br /&gt;
 &amp;lt;/X_MAP_SEARCH_ENTRY&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The example above defines a browse hierarchy that is created when searching for an artist. The hierarchy created provides a list of artists, which in turn provide a list of albums, which in turn provide a list of tracks.&lt;br /&gt;
&lt;br /&gt;
=== Types ===&lt;br /&gt;
&lt;br /&gt;
The list of allowed types for X_BROWSE_ENTRY_TYPE, X_MAP_LINK_ENTRY_TAG, X_LINK_ENTRY_TYPE, and X_SEARCH_ENTRY_TYPE&lt;br /&gt;
&lt;br /&gt;
 genre&lt;br /&gt;
 artist&lt;br /&gt;
 composer&lt;br /&gt;
 conductor&lt;br /&gt;
 album&lt;br /&gt;
 year&lt;br /&gt;
 mixed&lt;br /&gt;
&lt;br /&gt;
mixed is a special value that represents a container that has mixed entries. It is not a valid type for the X_MAP_LINK_ENTRY_TAG element.&lt;br /&gt;
&lt;br /&gt;
=== Example device XML ===&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;root xmlns=&amp;quot;urn:schemas-upnp-org:device-1-0&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;specVersion&amp;gt;&lt;br /&gt;
        &amp;lt;major&amp;gt;1&amp;lt;/major&amp;gt;&lt;br /&gt;
        &amp;lt;minor&amp;gt;1&amp;lt;/minor&amp;gt;&lt;br /&gt;
    &amp;lt;/specVersion&amp;gt;&lt;br /&gt;
    &amp;lt;device&amp;gt;&lt;br /&gt;
        &amp;lt;deviceType&amp;gt;urn:schemas-upnp-org:device:MediaServer:1&amp;lt;/deviceType&amp;gt;&lt;br /&gt;
        &amp;lt;dlna:X_DLNADOC xmlns:dlna=&amp;quot;urn:schemas-dlna-org:device-1-0&amp;quot;&amp;gt;DMS-1.50&amp;lt;/dlna:X_DLNADOC&amp;gt;&lt;br /&gt;
        &amp;lt;dlna:X_DLNACAP xmlns:dlna=&amp;quot;urn:schemas-dlna-org:device-1-0&amp;quot;&amp;gt;av-upload,image-upload,audio-upload&amp;lt;/dlna:X_DLNACAP&amp;gt;&lt;br /&gt;
        &amp;lt;openhome:X_MAP xmlns:openhome=&amp;quot;http://www.openhome.org&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;X_MAP_BROWSE&amp;gt;&lt;br /&gt;
                &amp;lt;X_MAP_BROWSE_ENTRY&amp;gt;&lt;br /&gt;
                    &amp;lt;X_MAP_BROWSE_ENTRY_NAME&amp;gt;Albums&amp;lt;/X_MAP_BROWSE_ENTRY_NAME&amp;gt;&lt;br /&gt;
                    &amp;lt;X_MAP_BROWSE_ENTRY_ID&amp;gt;db/browse/albums&amp;lt;/X_MAP_BROWSE_ENTRY_ID&amp;gt;&lt;br /&gt;
                    &amp;lt;X_MAP_BROWSE_ENTRY_TYPE&amp;gt;album&amp;lt;/X_MAP_BROWSE_ENTRY_TYPE&amp;gt;&lt;br /&gt;
                &amp;lt;/X_MAP_BROWSE_ENTRY&amp;gt;&lt;br /&gt;
                &amp;lt;X_MAP_BROWSE_ENTRY&amp;gt;&lt;br /&gt;
                    &amp;lt;X_MAP_BROWSE_ENTRY_NAME&amp;gt;Artists&amp;lt;/X_MAP_BROWSE_ENTRY_NAME&amp;gt;&lt;br /&gt;
                    &amp;lt;X_MAP_BROWSE_ENTRY_ID&amp;gt;db/browse/artists&amp;lt;/X_MAP_BROWSE_ENTRY_ID&amp;gt;&lt;br /&gt;
                    &amp;lt;X_MAP_BROWSE_ENTRY_TYPE&amp;gt;artist album&amp;lt;/X_MAP_BROWSE_ENTRY_TYPE&amp;gt;&lt;br /&gt;
                &amp;lt;/X_MAP_BROWSE_ENTRY&amp;gt;&lt;br /&gt;
                &amp;lt;X_MAP_BROWSE_ENTRY&amp;gt;&lt;br /&gt;
                    &amp;lt;X_MAP_BROWSE_ENTRY_NAME&amp;gt;Folders&amp;lt;/X_MAP_BROWSE_ENTRY_NAME&amp;gt;&lt;br /&gt;
                    &amp;lt;X_MAP_BROWSE_ENTRY_ID&amp;gt;db/browse/folders&amp;lt;/X_MAP_BROWSE_ENTRY_ID&amp;gt;&lt;br /&gt;
                    &amp;lt;X_MAP_BROWSE_ENTRY_TYPE&amp;gt;mixed&amp;lt;/X_MAP_BROWSE_ENTRY_TYPE&amp;gt;&lt;br /&gt;
                &amp;lt;/X_MAP_BROWSE_ENTRY&amp;gt;&lt;br /&gt;
            &amp;lt;/X_MAP_BROWSE&amp;gt;&lt;br /&gt;
            &amp;lt;X_MAP_LINK&amp;gt;&lt;br /&gt;
                &amp;lt;X_MAP_LINK_ENTRY&amp;gt;&lt;br /&gt;
                    &amp;lt;X_MAP_LINK_ENTRY_TAG&amp;gt;artist&amp;lt;/X_MAP_LINK_ENTRY_TAG&amp;gt;&lt;br /&gt;
                    &amp;lt;X_MAP_LINK_ENTRY_ID_PREFIX&amp;gt;db/link/artist/&amp;lt;/X_MAP_LINK_ENTRY_ID_PREFIX&amp;gt;&lt;br /&gt;
                    &amp;lt;X_MAP_LINK_ENTRY_TYPE&amp;gt;album&amp;lt;/X_MAP_LINK_ENTRY_TYPE&amp;gt;&lt;br /&gt;
                &amp;lt;/X_MAP_LINK_ENTRY&amp;gt;&lt;br /&gt;
                &amp;lt;X_MAP_LINK_ENTRY&amp;gt;&lt;br /&gt;
                    &amp;lt;X_MAP_LINK_ENTRY_TAG&amp;gt;composer&amp;lt;/X_MAP_LINK_ENTRY_TAG&amp;gt;&lt;br /&gt;
                    &amp;lt;X_MAP_LINK_ENTRY_ID_PREFIX&amp;gt;db/link/composer/&amp;lt;/X_MAP_LINK_ENTRY_ID_PREFIX&amp;gt;&lt;br /&gt;
                    &amp;lt;X_MAP_LINK_ENTRY_TYPE&amp;gt;album&amp;lt;/X_MAP_LINK_ENTRY_TYPE&amp;gt;&lt;br /&gt;
                &amp;lt;/X_MAP_LINK_ENTRY&amp;gt;&lt;br /&gt;
            &amp;lt;/X_MAP_LINK&amp;gt;&lt;br /&gt;
            &amp;lt;X_MAP_SEARCH&amp;gt;&lt;br /&gt;
                &amp;lt;X_MAP_SEARCH_ENTRY&amp;gt;&lt;br /&gt;
                    &amp;lt;X_MAP_SEARCH_ENTRY_NAME&amp;gt;Artist&amp;lt;/X_MAP_SEARCH_ENTRY_NAME&amp;gt;&lt;br /&gt;
                    &amp;lt;X_MAP_SEARCH_ENTRY_ID_PREFIX&amp;gt;db/search/artist/&amp;lt;/X_MAP_SEARCH_ENTRY_ID_PREFIX&amp;gt;&lt;br /&gt;
                    &amp;lt;X_MAP_SEARCH_ENTRY_TYPE&amp;gt;artist album&amp;lt;/X_MAP_SEARCH_ENTRY_TYPE&amp;gt;&lt;br /&gt;
                &amp;lt;/X_MAP_SEARCH_ENTRY&amp;gt;&lt;br /&gt;
                &amp;lt;X_MAP_SEARCH_ENTRY&amp;gt;&lt;br /&gt;
                    &amp;lt;X_MAP_SEARCH_ENTRY_NAME&amp;gt;Tracks&amp;lt;/X_MAP_SEARCH_ENTRY_NAME&amp;gt;&lt;br /&gt;
                    &amp;lt;X_MAP_SEARCH_ENTRY_ID_PREFIX&amp;gt;db/search/all/&amp;lt;/X_MAP_SEARCH_ENTRY_ID_PREFIX&amp;gt;&lt;br /&gt;
                    &amp;lt;X_MAP_SEARCH_ENTRY_TYPE&amp;gt;&amp;lt;/X_MAP_SEARCH_ENTRY_TYPE&amp;gt;&lt;br /&gt;
                &amp;lt;/X_MAP_SEARCH_ENTRY&amp;gt;&lt;br /&gt;
            &amp;lt;/X_MAP_SEARCH&amp;gt;&lt;br /&gt;
        &amp;lt;/openhome:X_MAP&amp;gt;&lt;br /&gt;
        &amp;lt;presentationURL&amp;gt;http://10.2.1.170:4000/res/linn.co.uk.kazooserver/index.html&amp;lt;/presentationURL&amp;gt;&lt;br /&gt;
        &amp;lt;friendlyName&amp;gt;Linn Kazoo Server [R&amp;amp;D Mac Mini]&amp;lt;/friendlyName&amp;gt;&lt;br /&gt;
        &amp;lt;manufacturer&amp;gt;Linn&amp;lt;/manufacturer&amp;gt;&lt;br /&gt;
        &amp;lt;manufacturerURL&amp;gt;http://www.linn.co.uk&amp;lt;/manufacturerURL&amp;gt;&lt;br /&gt;
        &amp;lt;modelName&amp;gt;Kazoo Server&amp;lt;/modelName&amp;gt;&lt;br /&gt;
        &amp;lt;modelURL&amp;gt;http://oss.linn.co.uk/trac/wiki/KazooServer&amp;lt;/modelURL&amp;gt;&lt;br /&gt;
        &amp;lt;UDN&amp;gt;uuid:ac3d630e37b5f11ff5cdd23c0f5a7400&amp;lt;/UDN&amp;gt;&lt;br /&gt;
        &amp;lt;iconList&amp;gt;&lt;br /&gt;
            &amp;lt;icon&amp;gt;&lt;br /&gt;
                &amp;lt;mimetype&amp;gt;image/png&amp;lt;/mimetype&amp;gt;&lt;br /&gt;
                &amp;lt;width&amp;gt;65&amp;lt;/width&amp;gt;&lt;br /&gt;
                &amp;lt;height&amp;gt;65&amp;lt;/height&amp;gt;&lt;br /&gt;
                &amp;lt;depth&amp;gt;32&amp;lt;/depth&amp;gt;&lt;br /&gt;
                &amp;lt;url&amp;gt;ac3d630e37b5f11ff5cdd23c0f5a7400/resource/icon/icon&amp;lt;/url&amp;gt;&lt;br /&gt;
            &amp;lt;/icon&amp;gt;&lt;br /&gt;
        &amp;lt;/iconList&amp;gt;&lt;br /&gt;
        &amp;lt;serviceList&amp;gt;&lt;br /&gt;
            &amp;lt;service&amp;gt;&lt;br /&gt;
                &amp;lt;serviceType&amp;gt;urn:av-openhome-org:service:PlaylistManager:1&amp;lt;/serviceType&amp;gt;&lt;br /&gt;
                &amp;lt;serviceId&amp;gt;urn:av-openhome-org:serviceId:PlaylistManager&amp;lt;/serviceId&amp;gt;&lt;br /&gt;
                &amp;lt;SCPDURL&amp;gt;/ac3d630e37b5f11ff5cdd23c0f5a7400/Upnp/av.openhome.org-PlaylistManager-1/service.xml&amp;lt;/SCPDURL&amp;gt;&lt;br /&gt;
                &amp;lt;controlURL&amp;gt;/ac3d630e37b5f11ff5cdd23c0f5a7400/av.openhome.org-PlaylistManager-1/control&amp;lt;/controlURL&amp;gt;&lt;br /&gt;
                &amp;lt;eventSubURL&amp;gt;/ac3d630e37b5f11ff5cdd23c0f5a7400/av.openhome.org-PlaylistManager-1/event&amp;lt;/eventSubURL&amp;gt;&lt;br /&gt;
            &amp;lt;/service&amp;gt;&lt;br /&gt;
            &amp;lt;service&amp;gt;&lt;br /&gt;
                &amp;lt;serviceType&amp;gt;urn:schemas-upnp-org:service:ContentDirectory:1&amp;lt;/serviceType&amp;gt;&lt;br /&gt;
                &amp;lt;serviceId&amp;gt;urn:upnp-org:serviceId:ContentDirectory&amp;lt;/serviceId&amp;gt;&lt;br /&gt;
                &amp;lt;SCPDURL&amp;gt;/ac3d630e37b5f11ff5cdd23c0f5a7400/Upnp/upnp.org-ContentDirectory-1/service.xml&amp;lt;/SCPDURL&amp;gt;&lt;br /&gt;
                &amp;lt;controlURL&amp;gt;/ac3d630e37b5f11ff5cdd23c0f5a7400/upnp.org-ContentDirectory-1/control&amp;lt;/controlURL&amp;gt;&lt;br /&gt;
                &amp;lt;eventSubURL&amp;gt;/ac3d630e37b5f11ff5cdd23c0f5a7400/upnp.org-ContentDirectory-1/event&amp;lt;/eventSubURL&amp;gt;&lt;br /&gt;
            &amp;lt;/service&amp;gt;&lt;br /&gt;
            &amp;lt;service&amp;gt;&lt;br /&gt;
                &amp;lt;serviceType&amp;gt;urn:schemas-upnp-org:service:ConnectionManager:1&amp;lt;/serviceType&amp;gt;&lt;br /&gt;
                &amp;lt;serviceId&amp;gt;urn:upnp-org:serviceId:ConnectionManager&amp;lt;/serviceId&amp;gt;&lt;br /&gt;
                &amp;lt;SCPDURL&amp;gt;/ac3d630e37b5f11ff5cdd23c0f5a7400/Upnp/upnp.org-ConnectionManager-1/service.xml&amp;lt;/SCPDURL&amp;gt;&lt;br /&gt;
                &amp;lt;controlURL&amp;gt;/ac3d630e37b5f11ff5cdd23c0f5a7400/upnp.org-ConnectionManager-1/control&amp;lt;/controlURL&amp;gt;&lt;br /&gt;
                &amp;lt;eventSubURL&amp;gt;/ac3d630e37b5f11ff5cdd23c0f5a7400/upnp.org-ConnectionManager-1/event&amp;lt;/eventSubURL&amp;gt;&lt;br /&gt;
            &amp;lt;/service&amp;gt;&lt;br /&gt;
        &amp;lt;/serviceList&amp;gt;&lt;br /&gt;
    &amp;lt;/device&amp;gt;&lt;br /&gt;
 &amp;lt;/root&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Index maps ==&lt;br /&gt;
&lt;br /&gt;
Large lists are difficult to navigate, especially on mobile devices. Mobile devices added the idea of an index map to improve this situation. The index map allows a users to jump to different sections in a large list, similar to what is possible with a scrollbar on desktops.&lt;br /&gt;
&lt;br /&gt;
In order for a control point to generate an index map for any particular level in a ContentDirectory&#039;s hierarchy it first needs to download all the objects in the container, figure out if they are sorted and then calculate the index map. This means that a user will need to wait, perhaps minutes, before an index map is able to be presented on the UI. &lt;br /&gt;
&lt;br /&gt;
The media server can optionally return an index map for container that are in alphabetical order. This implemented through a OpenHome vendor extension of the DIDL-Lite XML. Below shows an example DIDL-Lite with an index map included.&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;DIDL-Lite xmlns=&amp;quot;urn:schemas-upnp-org:metadata-1-0/DIDL-Lite/&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;container id=&amp;quot;db/ba37a2ac24efa676c8676aab71a6cdf074&amp;quot; parentID=&amp;quot;0&amp;quot; restricted=&amp;quot;true&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;dc:title xmlns:dc=&amp;quot;http://purl.org/dc/elements/1.1/&amp;quot;&amp;gt;Worlds Apart [Deluxe Edition]&amp;lt;/dc:title&amp;gt;&lt;br /&gt;
        &amp;lt;upnp:udn xmlns:upnp=&amp;quot;urn:schemas-upnp-org:metadata-1-0/upnp/&amp;quot;&amp;gt;ac3d630e37b5f11ff5cdd23c0f5a7400&amp;lt;/upnp:udn&amp;gt;&lt;br /&gt;
        &amp;lt;upnp:class xmlns:upnp=&amp;quot;urn:schemas-upnp-org:metadata-1-0/upnp/&amp;quot;&amp;gt;object.container.album.musicAlbum&amp;lt;/upnp:class&amp;gt;&lt;br /&gt;
        &amp;lt;upnp:artist xmlns:upnp=&amp;quot;urn:schemas-upnp-org:metadata-1-0/upnp/&amp;quot;&amp;gt;...And You Will Know Us by the Trail of Dead&amp;lt;/upnp:artist&amp;gt;&lt;br /&gt;
        &amp;lt;upnp:albumArtURI&amp;gt;http://10.2.1.170:4000/linn.co.uk.kazooserver/ms/artwork/37a2ac2?size=0&amp;lt;/upnp:albumArtURI&amp;gt;&lt;br /&gt;
    &amp;lt;/container&amp;gt;&lt;br /&gt;
    &amp;lt;desc nameSpace=&amp;quot;openhome.org&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;indexmap&amp;gt;0 10 10 10 10 10 0 0 0 0 10 12 1 10 10 10 12 17 18 1 0 20 0 20 20 2 2 24&amp;lt;/indexmap&amp;gt;&lt;br /&gt;
    &amp;lt;/desc&amp;gt;&lt;br /&gt;
 &amp;lt;/DIDL-Lite&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The index map contains a space separated list of 28 number representing the total number of items that begin with that letter. #, represents everything below A, largely digits and punctuation and + represents everything above Z, largely international characters not collatable within the roman alphabet.&lt;br /&gt;
&lt;br /&gt;
 # A B C D E F G H I J K L M N O P Q R S T U V W X Y Z +&lt;br /&gt;
&lt;br /&gt;
== Image Resolution ==&lt;br /&gt;
&lt;br /&gt;
Control points running on different platforms have different memory limits and display technologies. This means that a control point on a PC might want to display artwork at a high resolution, while a control point on a PDA might want to display artwork at a much lower resolution.&lt;br /&gt;
&lt;br /&gt;
Media servers often try to solve this problem using one of the following two methods:&lt;br /&gt;
&lt;br /&gt;
# A configurable parameter that scales all artwork to a user defined size&lt;br /&gt;
# A profile system where a user can create profiles for each class of control point they have and configure a parameter that scales all artwork to a user defined size per profile&lt;br /&gt;
&lt;br /&gt;
The first solution is highly problematic because it limits the resolution of artwork across the whole network. But a single network very often contains control points that can display high resolution images AND control points that can&#039;t.&lt;br /&gt;
&lt;br /&gt;
The second solution is just architecturally poor, turning the relationship between a control point and a media server on its head. Why should the media server try to infer what a control point needs through configuration when the control point is perfectly capable of telling the media server its exact requirements in every single circumstance.&lt;br /&gt;
&lt;br /&gt;
So, it is proposed that compliant media servers include a &#039;&#039;&#039;size&#039;&#039;&#039; element in their artwork uri&#039;s, where the size is the image&#039;s largest dimension. This allows a control point to ask for an image at a specified size.&lt;br /&gt;
&lt;br /&gt;
=== Example ===&lt;br /&gt;
&lt;br /&gt;
If the original artwork was 400x512, then a media server would provide the following albumArtURI: &amp;lt;uri&amp;gt;?size=512. If it is not possible for the media server to obtain the original resolution then the media server would provide the following albumArtURI: &amp;lt;uri&amp;gt;?size=0.&lt;br /&gt;
&lt;br /&gt;
The presence of the size element tells the control point:&lt;br /&gt;
&lt;br /&gt;
# the media server implements the image scaling extension&lt;br /&gt;
# the original size of the image.&lt;br /&gt;
&lt;br /&gt;
Now the control point can request the image at any resolution by using &amp;lt;uri&amp;gt;?size=x, where x is the size it wants.&lt;br /&gt;
&lt;br /&gt;
So, in this example, &amp;lt;uri&amp;gt;?size=1024 gets an 800x1024 image, and &amp;lt;uri&amp;gt;?size=200 gets a 156x200 image.&lt;br /&gt;
&lt;br /&gt;
== albumArtURI&amp;lt;br&amp;gt; ==&lt;br /&gt;
&lt;br /&gt;
The current specification only allows retrieval of artwork for a musicAlbum container through the property albumArtURI. When browsing a music library on a control point it quickly becomes clear that to implement a graphically rich control point the ContentDirectory service should provide a way to retrieve artwork for all of the content directory classes, not just musicAlbum containers.&lt;br /&gt;
&lt;br /&gt;
There has become a somewhat defacto standard where just about all media server provide an albumArtURI property for a musicItem item as well as for a musicAlbum container, however this is still not good enough to implement a graphically rich control point.&lt;br /&gt;
&lt;br /&gt;
It is proposed that an optional property is introduced to the object class called &#039;&#039;&#039;albumArtURI&#039;&#039;&amp;amp;nbsp;&#039;&#039;&#039;&#039;&#039;which may contain an attribute &#039;&#039;&#039;title&#039;&#039;&#039;,&amp;amp;nbsp;e.g. &amp;amp;lt;albumArtURI title=&amp;quot;Font Cover&amp;quot;&amp;amp;gt;http://Front Cover.jpg&amp;amp;lt;/albumArtURI&amp;amp;gt;.&amp;amp;nbsp;The object class can contain zero or more albumArtURIs elements.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Dynamic IP Addresses ==&lt;br /&gt;
&lt;br /&gt;
At present all media servers return URIs that contain a reference to their IP address, e.g. http://172.20.1.1/music.flac etc. This means that if the media server&#039;s IP address were to change across reboots, then any control point or media renderer with URIs that referenced the media server before the reboot will become invalid.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
It is proposed that a media server should always reference itself by host name and not by IP address in any XML that it sends to external devices, i.e. http://mynas/music.flac.&lt;br /&gt;
&lt;br /&gt;
== Disc Information ==&lt;br /&gt;
&lt;br /&gt;
It is proposed that two new properties are added to the musicTrack item called &#039;&#039;&#039;OriginalDiscNumber&#039;&#039;&#039; and &#039;&#039;&#039;OriginalDiscCount&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== Replay Gain Information ==&lt;br /&gt;
&lt;br /&gt;
Four new properties have been added to the musicTrack item called &#039;&#039;&#039;ReplayGainAlbum&#039;&#039;&#039;, &#039;&#039;&#039;ReplayGainAlbumPeak&#039;&#039;&#039;, &#039;&#039;&#039;ReplayGainTrack&#039;&#039;&#039;, and &#039;&#039;&#039;ReplayGainTrackPeak&#039;&#039;&#039;.&lt;/div&gt;</summary>
		<author><name>Davidd</name></author>
	</entry>
	<entry>
		<id>https://docs.linn.co.uk/wiki/index.php?title=Developer:Media_Server_Extensions&amp;diff=11237</id>
		<title>Developer:Media Server Extensions</title>
		<link rel="alternate" type="text/html" href="https://docs.linn.co.uk/wiki/index.php?title=Developer:Media_Server_Extensions&amp;diff=11237"/>
		<updated>2015-03-13T16:14:36Z</updated>

		<summary type="html">&lt;p&gt;Davidd: /* webURI */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Introduction =&lt;br /&gt;
&lt;br /&gt;
The ContentDirectory service has various limitations which become apparent when implementing control points on different hardware platforms. This document aims to outline some ideas that address the various shortcomings of the ContentDirectory specification.&lt;br /&gt;
&lt;br /&gt;
== Container map ==&lt;br /&gt;
&lt;br /&gt;
The current ContentDirectory specification makes it tricky for a control point to display the returned contents in an appropriate, aesthetically pleasing, manner for the content being viewed. This is because the ContentDirectory specification does not allow for a control point to know in advanced what content to expect when browsing through any particular hierarchy.&lt;br /&gt;
&lt;br /&gt;
An example of this might be, at a particular point in the browse hierarchy the ContentDirectory will return a list of albums which in turn will contain a list of tracks. A UI might wish to represent this list of albums as a grid and the album&#039;s tracks as a header and a list of the tracks. Currently it is not possible for the UI to know when it gets to a point in a hierarchy where the hierarchy represents a list of albums followed by a list of tracks.&lt;br /&gt;
&lt;br /&gt;
The container map extension allows a media server to express its container hierarchy in advance of the control point navigating it. This is done using an OpenHome vendor extension to the device XML.&lt;br /&gt;
&lt;br /&gt;
Three types of mapped container are defined: browse, link, and search.&lt;br /&gt;
&lt;br /&gt;
The browse map defines named top level containers that represent significant starting points for browsing that can meaningfully be presented in top level tabs of a control point UI. The browse map is expressed within the X_MAP_BROWSE element of X_MAP.&lt;br /&gt;
&lt;br /&gt;
The link map defines containers that can be meaningfully linked to from track or album details. For instance a track will typically have an artist defined. If an entry for &amp;quot;artist&amp;quot; is defined in the link map then it will be possible for the user of a control point to quickly access this artist-related container by clicking on the track&#039;s artist text. Similar links might be offered for &amp;quot;genre&amp;quot;, &amp;quot;composer&amp;quot;, &amp;quot;conductor&amp;quot;, etc. The link map is expressed within the X_MAP_LINK element of X_MAP.&lt;br /&gt;
&lt;br /&gt;
The search map defines the different kinds of search containers and the type of results that they produce. The search map is expressed within the X_MAP_SEARCH element of X_MAP.&lt;br /&gt;
&lt;br /&gt;
=== Browse map ===&lt;br /&gt;
&lt;br /&gt;
The X_MAP_BROWSE element must contain 1 or more X_MAP_BROWSE_ENTRY elements.&lt;br /&gt;
&lt;br /&gt;
The X_MAP_BROWSE_ENTRY has three child elements.&lt;br /&gt;
&lt;br /&gt;
X_MAP_BROWSE_ENTRY_NAME is a string that can be used by a control point to label a tab containing this browse hierarchy.&lt;br /&gt;
&lt;br /&gt;
X_MAP_BROWSE_ENTRY_ID is the UPnP container id that contains the root of this browse hierarchy. This id is then submitted to the ContentDirectory service using the Browse action as usual. The returned contents are navigated using subsequent Browse request as usual. The difference is that the control point knows in advance what kind of results to expect at each level.&lt;br /&gt;
&lt;br /&gt;
X_MAP_BROWSE_ENTRY_TYPE is a space separated list of strings that maps out the kind of containers that are to be found at each level of this browse hierarchy. For instance, &amp;quot;artist album&amp;quot; represents a browse hierarchy giving a container containing only artist containers, each of which contains only album containers, each of which contains only tracks.&lt;br /&gt;
&lt;br /&gt;
There should be an X_MAP_BROWSE_ENTRY for each root browse hierarchy defined by the media server.&lt;br /&gt;
&lt;br /&gt;
For example:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;X_MAP_BROWSE_ENTRY&amp;gt;&lt;br /&gt;
     &amp;lt;X_MAP_BROWSE_ENTRY_NAME&amp;gt;Genre&amp;lt;/X_MAP_BROWSE_ENTRY_NAME&amp;gt;&lt;br /&gt;
     &amp;lt;X_MAP_BROWSE_ENTRY_ID&amp;gt;db/browse/genre&amp;lt;/X_MAP_BROWSE_ENTRY_ID&amp;gt;&lt;br /&gt;
     &amp;lt;X_MAP_BROWSE_ENTRY_TYPE&amp;gt;genre artist album&amp;lt;/X_MAP_BROWSE_ENTRY_TYPE&amp;gt;&lt;br /&gt;
 &amp;lt;/X_MAP_BROWSE_ENTRY&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Link map ===&lt;br /&gt;
&lt;br /&gt;
The X_MAP_LINK element must contain 1 or more X_MAP_LINK_ENTRY elements.&lt;br /&gt;
&lt;br /&gt;
The X_MAP_LINK_ENTRY has three child elements.&lt;br /&gt;
&lt;br /&gt;
X_MAP_LINK_ENTRY_TAG is a string that defines which type of metadata is the target for this link. e.g. &amp;quot;artist&amp;quot;, &amp;quot;genre&amp;quot;, &amp;quot;composer&amp;quot;, etc. See the type section below. &lt;br /&gt;
&lt;br /&gt;
X_MAP_LINK_ENTRY_ID_PREFIX is a string that is prefix for a UPnP container id. The link can be taken by browsing to the container whose id is the result of appending the associated metadata value to this prefix. For instance, if the prefix for an &amp;quot;artist&amp;quot; link is defined as db/link/artist/, and a track returned anywhere in the media server&#039;s library has &amp;quot;Pink Floyd&amp;quot; as its artist. Then the linked container will have an id of db/link/artist/Pink Floyd.&lt;br /&gt;
&lt;br /&gt;
X_MAP_LINK_ENTRY_TYPE represents the type of browse hierarchy returned when taking this type of link. See X_MAP_BROWSE_ENTRY_TYPE for details.&lt;br /&gt;
&lt;br /&gt;
There should be an X_MAP_LINK_ENTRY for each piece of metadata that the media server allows to be linked.&lt;br /&gt;
&lt;br /&gt;
For example:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;X_MAP_LINK_ENTRY&amp;gt;&lt;br /&gt;
     &amp;lt;X_MAP_LINK_ENTRY_TAG&amp;gt;artist&amp;lt;/X_MAP_LINK_ENTRY_TAG&amp;gt;&lt;br /&gt;
     &amp;lt;X_MAP_LINK_ENTRY_ID_PREFIX&amp;gt;db/link/artist/&amp;lt;/X_MAP_LINK_ENTRY_ID_PREFIX&amp;gt;&lt;br /&gt;
     &amp;lt;X_MAP_LINK_ENTRY_TYPE&amp;gt;album&amp;lt;/X_MAP_LINK_ENTRY_TYPE&amp;gt;&lt;br /&gt;
 &amp;lt;/X_MAP_LINK_ENTRY&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The example above defines a browse hierarchy that is created when linking from an artist name. The hierarchy created provides a list of linked artist albums which in turn provide a list of tracks.&lt;br /&gt;
&lt;br /&gt;
=== Search map ===&lt;br /&gt;
&lt;br /&gt;
The X_MAP_SEARCH element must contain 1 or more X_MAP_SEARCH_ENTRY elements.&lt;br /&gt;
&lt;br /&gt;
The X_MAP_SEARCH_ENTRY has three child elements.&lt;br /&gt;
&lt;br /&gt;
X_MAP_SEARCH_ENTRY_NAME  is a string that can be used by a control point to label a tab containing these search results.&lt;br /&gt;
&lt;br /&gt;
X_MAP_SEARCH_ENTRY_ID_PREFIX is a string that is a prefix for a UPnP container id. The search results can be found by browsing to the container whose id is the result of appending the search string to this prefix. For instance, if the prefix for an &amp;quot;album&amp;quot; search is defined as db/search/album/, and the search string is &amp;quot;blue&amp;quot;, then the search results container will have an id of db/search/album/blue.&lt;br /&gt;
&lt;br /&gt;
X_MAP_SEARCH_ENTRY_TYPE represents the type of browse hierarchy returned when taking this type of search. See X_MAP_BROWSE_ENTRY_TYPE for details.&lt;br /&gt;
&lt;br /&gt;
There should be an X_MAP_SEARCH_ENTRY for each type of search offered by the media server.&lt;br /&gt;
&lt;br /&gt;
For example:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;X_MAP_SEARCH_ENTRY&amp;gt;&lt;br /&gt;
     &amp;lt;X_MAP_SEARCH_ENTRY_NAME&amp;gt;Artist&amp;lt;/X_MAP_SEARCH_ENTRY_NAME&amp;gt;&lt;br /&gt;
     &amp;lt;X_MAP_SEARCH_ENTRY_ID_PREFIX&amp;gt;db/search/artist/&amp;lt;/X_MAP_SEARCH_ENTRY_ID_PREFIX&amp;gt;&lt;br /&gt;
     &amp;lt;X_MAP_SEARCH_ENTRY_TYPE&amp;gt;artist album&amp;lt;/X_MAP_SEARCH_ENTRY_TYPE&amp;gt;&lt;br /&gt;
 &amp;lt;/X_MAP_SEARCH_ENTRY&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The example above defines a browse hierarchy that is created when searching for an artist. The hierarchy created provides a list of artists, which in turn provide a list of albums, which in turn provide a list of tracks.&lt;br /&gt;
&lt;br /&gt;
=== Types ===&lt;br /&gt;
&lt;br /&gt;
The list of allowed types for X_BROWSE_ENTRY_TYPE, X_MAP_LINK_ENTRY_TAG, X_LINK_ENTRY_TYPE, and X_SEARCH_ENTRY_TYPE&lt;br /&gt;
&lt;br /&gt;
 genre&lt;br /&gt;
 artist&lt;br /&gt;
 composer&lt;br /&gt;
 conductor&lt;br /&gt;
 album&lt;br /&gt;
 year&lt;br /&gt;
 mixed&lt;br /&gt;
&lt;br /&gt;
mixed is a special value that represents a container that has mixed entries. It is not a valid type for the X_MAP_LINK_ENTRY_TAG element.&lt;br /&gt;
&lt;br /&gt;
=== Example device XML ===&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;root xmlns=&amp;quot;urn:schemas-upnp-org:device-1-0&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;specVersion&amp;gt;&lt;br /&gt;
        &amp;lt;major&amp;gt;1&amp;lt;/major&amp;gt;&lt;br /&gt;
        &amp;lt;minor&amp;gt;1&amp;lt;/minor&amp;gt;&lt;br /&gt;
    &amp;lt;/specVersion&amp;gt;&lt;br /&gt;
    &amp;lt;device&amp;gt;&lt;br /&gt;
        &amp;lt;deviceType&amp;gt;urn:schemas-upnp-org:device:MediaServer:1&amp;lt;/deviceType&amp;gt;&lt;br /&gt;
        &amp;lt;dlna:X_DLNADOC xmlns:dlna=&amp;quot;urn:schemas-dlna-org:device-1-0&amp;quot;&amp;gt;DMS-1.50&amp;lt;/dlna:X_DLNADOC&amp;gt;&lt;br /&gt;
        &amp;lt;dlna:X_DLNACAP xmlns:dlna=&amp;quot;urn:schemas-dlna-org:device-1-0&amp;quot;&amp;gt;av-upload,image-upload,audio-upload&amp;lt;/dlna:X_DLNACAP&amp;gt;&lt;br /&gt;
        &amp;lt;openhome:X_MAP xmlns:openhome=&amp;quot;http://www.openhome.org&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;X_MAP_BROWSE&amp;gt;&lt;br /&gt;
                &amp;lt;X_MAP_BROWSE_ENTRY&amp;gt;&lt;br /&gt;
                    &amp;lt;X_MAP_BROWSE_ENTRY_NAME&amp;gt;Albums&amp;lt;/X_MAP_BROWSE_ENTRY_NAME&amp;gt;&lt;br /&gt;
                    &amp;lt;X_MAP_BROWSE_ENTRY_ID&amp;gt;db/browse/albums&amp;lt;/X_MAP_BROWSE_ENTRY_ID&amp;gt;&lt;br /&gt;
                    &amp;lt;X_MAP_BROWSE_ENTRY_TYPE&amp;gt;album&amp;lt;/X_MAP_BROWSE_ENTRY_TYPE&amp;gt;&lt;br /&gt;
                &amp;lt;/X_MAP_BROWSE_ENTRY&amp;gt;&lt;br /&gt;
                &amp;lt;X_MAP_BROWSE_ENTRY&amp;gt;&lt;br /&gt;
                    &amp;lt;X_MAP_BROWSE_ENTRY_NAME&amp;gt;Artists&amp;lt;/X_MAP_BROWSE_ENTRY_NAME&amp;gt;&lt;br /&gt;
                    &amp;lt;X_MAP_BROWSE_ENTRY_ID&amp;gt;db/browse/artists&amp;lt;/X_MAP_BROWSE_ENTRY_ID&amp;gt;&lt;br /&gt;
                    &amp;lt;X_MAP_BROWSE_ENTRY_TYPE&amp;gt;artist album&amp;lt;/X_MAP_BROWSE_ENTRY_TYPE&amp;gt;&lt;br /&gt;
                &amp;lt;/X_MAP_BROWSE_ENTRY&amp;gt;&lt;br /&gt;
                &amp;lt;X_MAP_BROWSE_ENTRY&amp;gt;&lt;br /&gt;
                    &amp;lt;X_MAP_BROWSE_ENTRY_NAME&amp;gt;Folders&amp;lt;/X_MAP_BROWSE_ENTRY_NAME&amp;gt;&lt;br /&gt;
                    &amp;lt;X_MAP_BROWSE_ENTRY_ID&amp;gt;db/browse/folders&amp;lt;/X_MAP_BROWSE_ENTRY_ID&amp;gt;&lt;br /&gt;
                    &amp;lt;X_MAP_BROWSE_ENTRY_TYPE&amp;gt;mixed&amp;lt;/X_MAP_BROWSE_ENTRY_TYPE&amp;gt;&lt;br /&gt;
                &amp;lt;/X_MAP_BROWSE_ENTRY&amp;gt;&lt;br /&gt;
            &amp;lt;/X_MAP_BROWSE&amp;gt;&lt;br /&gt;
            &amp;lt;X_MAP_LINK&amp;gt;&lt;br /&gt;
                &amp;lt;X_MAP_LINK_ENTRY&amp;gt;&lt;br /&gt;
                    &amp;lt;X_MAP_LINK_ENTRY_TAG&amp;gt;artist&amp;lt;/X_MAP_LINK_ENTRY_TAG&amp;gt;&lt;br /&gt;
                    &amp;lt;X_MAP_LINK_ENTRY_ID_PREFIX&amp;gt;db/link/artist/&amp;lt;/X_MAP_LINK_ENTRY_ID_PREFIX&amp;gt;&lt;br /&gt;
                    &amp;lt;X_MAP_LINK_ENTRY_TYPE&amp;gt;album&amp;lt;/X_MAP_LINK_ENTRY_TYPE&amp;gt;&lt;br /&gt;
                &amp;lt;/X_MAP_LINK_ENTRY&amp;gt;&lt;br /&gt;
                &amp;lt;X_MAP_LINK_ENTRY&amp;gt;&lt;br /&gt;
                    &amp;lt;X_MAP_LINK_ENTRY_TAG&amp;gt;composer&amp;lt;/X_MAP_LINK_ENTRY_TAG&amp;gt;&lt;br /&gt;
                    &amp;lt;X_MAP_LINK_ENTRY_ID_PREFIX&amp;gt;db/link/composer/&amp;lt;/X_MAP_LINK_ENTRY_ID_PREFIX&amp;gt;&lt;br /&gt;
                    &amp;lt;X_MAP_LINK_ENTRY_TYPE&amp;gt;album&amp;lt;/X_MAP_LINK_ENTRY_TYPE&amp;gt;&lt;br /&gt;
                &amp;lt;/X_MAP_LINK_ENTRY&amp;gt;&lt;br /&gt;
            &amp;lt;/X_MAP_LINK&amp;gt;&lt;br /&gt;
            &amp;lt;X_MAP_SEARCH&amp;gt;&lt;br /&gt;
                &amp;lt;X_MAP_SEARCH_ENTRY&amp;gt;&lt;br /&gt;
                    &amp;lt;X_MAP_SEARCH_ENTRY_NAME&amp;gt;Artist&amp;lt;/X_MAP_SEARCH_ENTRY_NAME&amp;gt;&lt;br /&gt;
                    &amp;lt;X_MAP_SEARCH_ENTRY_ID_PREFIX&amp;gt;db/search/artist/&amp;lt;/X_MAP_SEARCH_ENTRY_ID_PREFIX&amp;gt;&lt;br /&gt;
                    &amp;lt;X_MAP_SEARCH_ENTRY_TYPE&amp;gt;artist album&amp;lt;/X_MAP_SEARCH_ENTRY_TYPE&amp;gt;&lt;br /&gt;
                &amp;lt;/X_MAP_SEARCH_ENTRY&amp;gt;&lt;br /&gt;
                &amp;lt;X_MAP_SEARCH_ENTRY&amp;gt;&lt;br /&gt;
                    &amp;lt;X_MAP_SEARCH_ENTRY_NAME&amp;gt;Tracks&amp;lt;/X_MAP_SEARCH_ENTRY_NAME&amp;gt;&lt;br /&gt;
                    &amp;lt;X_MAP_SEARCH_ENTRY_ID_PREFIX&amp;gt;db/search/all/&amp;lt;/X_MAP_SEARCH_ENTRY_ID_PREFIX&amp;gt;&lt;br /&gt;
                    &amp;lt;X_MAP_SEARCH_ENTRY_TYPE&amp;gt;&amp;lt;/X_MAP_SEARCH_ENTRY_TYPE&amp;gt;&lt;br /&gt;
                &amp;lt;/X_MAP_SEARCH_ENTRY&amp;gt;&lt;br /&gt;
            &amp;lt;/X_MAP_SEARCH&amp;gt;&lt;br /&gt;
        &amp;lt;/openhome:X_MAP&amp;gt;&lt;br /&gt;
        &amp;lt;presentationURL&amp;gt;http://10.2.1.170:4000/res/linn.co.uk.kazooserver/index.html&amp;lt;/presentationURL&amp;gt;&lt;br /&gt;
        &amp;lt;friendlyName&amp;gt;Linn Kazoo Server [R&amp;amp;D Mac Mini]&amp;lt;/friendlyName&amp;gt;&lt;br /&gt;
        &amp;lt;manufacturer&amp;gt;Linn&amp;lt;/manufacturer&amp;gt;&lt;br /&gt;
        &amp;lt;manufacturerURL&amp;gt;http://www.linn.co.uk&amp;lt;/manufacturerURL&amp;gt;&lt;br /&gt;
        &amp;lt;modelName&amp;gt;Kazoo Server&amp;lt;/modelName&amp;gt;&lt;br /&gt;
        &amp;lt;modelURL&amp;gt;http://oss.linn.co.uk/trac/wiki/KazooServer&amp;lt;/modelURL&amp;gt;&lt;br /&gt;
        &amp;lt;UDN&amp;gt;uuid:ac3d630e37b5f11ff5cdd23c0f5a7400&amp;lt;/UDN&amp;gt;&lt;br /&gt;
        &amp;lt;iconList&amp;gt;&lt;br /&gt;
            &amp;lt;icon&amp;gt;&lt;br /&gt;
                &amp;lt;mimetype&amp;gt;image/png&amp;lt;/mimetype&amp;gt;&lt;br /&gt;
                &amp;lt;width&amp;gt;65&amp;lt;/width&amp;gt;&lt;br /&gt;
                &amp;lt;height&amp;gt;65&amp;lt;/height&amp;gt;&lt;br /&gt;
                &amp;lt;depth&amp;gt;32&amp;lt;/depth&amp;gt;&lt;br /&gt;
                &amp;lt;url&amp;gt;ac3d630e37b5f11ff5cdd23c0f5a7400/resource/icon/icon&amp;lt;/url&amp;gt;&lt;br /&gt;
            &amp;lt;/icon&amp;gt;&lt;br /&gt;
        &amp;lt;/iconList&amp;gt;&lt;br /&gt;
        &amp;lt;serviceList&amp;gt;&lt;br /&gt;
            &amp;lt;service&amp;gt;&lt;br /&gt;
                &amp;lt;serviceType&amp;gt;urn:av-openhome-org:service:PlaylistManager:1&amp;lt;/serviceType&amp;gt;&lt;br /&gt;
                &amp;lt;serviceId&amp;gt;urn:av-openhome-org:serviceId:PlaylistManager&amp;lt;/serviceId&amp;gt;&lt;br /&gt;
                &amp;lt;SCPDURL&amp;gt;/ac3d630e37b5f11ff5cdd23c0f5a7400/Upnp/av.openhome.org-PlaylistManager-1/service.xml&amp;lt;/SCPDURL&amp;gt;&lt;br /&gt;
                &amp;lt;controlURL&amp;gt;/ac3d630e37b5f11ff5cdd23c0f5a7400/av.openhome.org-PlaylistManager-1/control&amp;lt;/controlURL&amp;gt;&lt;br /&gt;
                &amp;lt;eventSubURL&amp;gt;/ac3d630e37b5f11ff5cdd23c0f5a7400/av.openhome.org-PlaylistManager-1/event&amp;lt;/eventSubURL&amp;gt;&lt;br /&gt;
            &amp;lt;/service&amp;gt;&lt;br /&gt;
            &amp;lt;service&amp;gt;&lt;br /&gt;
                &amp;lt;serviceType&amp;gt;urn:schemas-upnp-org:service:ContentDirectory:1&amp;lt;/serviceType&amp;gt;&lt;br /&gt;
                &amp;lt;serviceId&amp;gt;urn:upnp-org:serviceId:ContentDirectory&amp;lt;/serviceId&amp;gt;&lt;br /&gt;
                &amp;lt;SCPDURL&amp;gt;/ac3d630e37b5f11ff5cdd23c0f5a7400/Upnp/upnp.org-ContentDirectory-1/service.xml&amp;lt;/SCPDURL&amp;gt;&lt;br /&gt;
                &amp;lt;controlURL&amp;gt;/ac3d630e37b5f11ff5cdd23c0f5a7400/upnp.org-ContentDirectory-1/control&amp;lt;/controlURL&amp;gt;&lt;br /&gt;
                &amp;lt;eventSubURL&amp;gt;/ac3d630e37b5f11ff5cdd23c0f5a7400/upnp.org-ContentDirectory-1/event&amp;lt;/eventSubURL&amp;gt;&lt;br /&gt;
            &amp;lt;/service&amp;gt;&lt;br /&gt;
            &amp;lt;service&amp;gt;&lt;br /&gt;
                &amp;lt;serviceType&amp;gt;urn:schemas-upnp-org:service:ConnectionManager:1&amp;lt;/serviceType&amp;gt;&lt;br /&gt;
                &amp;lt;serviceId&amp;gt;urn:upnp-org:serviceId:ConnectionManager&amp;lt;/serviceId&amp;gt;&lt;br /&gt;
                &amp;lt;SCPDURL&amp;gt;/ac3d630e37b5f11ff5cdd23c0f5a7400/Upnp/upnp.org-ConnectionManager-1/service.xml&amp;lt;/SCPDURL&amp;gt;&lt;br /&gt;
                &amp;lt;controlURL&amp;gt;/ac3d630e37b5f11ff5cdd23c0f5a7400/upnp.org-ConnectionManager-1/control&amp;lt;/controlURL&amp;gt;&lt;br /&gt;
                &amp;lt;eventSubURL&amp;gt;/ac3d630e37b5f11ff5cdd23c0f5a7400/upnp.org-ConnectionManager-1/event&amp;lt;/eventSubURL&amp;gt;&lt;br /&gt;
            &amp;lt;/service&amp;gt;&lt;br /&gt;
        &amp;lt;/serviceList&amp;gt;&lt;br /&gt;
    &amp;lt;/device&amp;gt;&lt;br /&gt;
 &amp;lt;/root&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Index maps ==&lt;br /&gt;
&lt;br /&gt;
Large lists are difficult to navigate, especially on mobile devices. Mobile devices added the idea of an index map to improve this situation. The index map allows a users to jump to different sections in a large list, similar to what is possible with a scrollbar on desktops.&lt;br /&gt;
&lt;br /&gt;
In order for a control point to generate an index map for any particular level in a ContentDirectory&#039;s hierarchy it first needs to download all the objects in the container, figure out if they are sorted and then calculate the index map. This means that a user will need to wait, perhaps minutes, before an index map is able to be presented on the UI. &lt;br /&gt;
&lt;br /&gt;
The media server can optionally return an index map for container that are in alphabetical order. This implemented through a OpenHome vendor extension of the DIDL-Lite XML. Below shows an example DIDL-Lite with an index map included.&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;DIDL-Lite xmlns=&amp;quot;urn:schemas-upnp-org:metadata-1-0/DIDL-Lite/&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;container id=&amp;quot;db/ba37a2ac24efa676c8676aab71a6cdf074&amp;quot; parentID=&amp;quot;0&amp;quot; restricted=&amp;quot;true&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;dc:title xmlns:dc=&amp;quot;http://purl.org/dc/elements/1.1/&amp;quot;&amp;gt;Worlds Apart [Deluxe Edition]&amp;lt;/dc:title&amp;gt;&lt;br /&gt;
        &amp;lt;upnp:udn xmlns:upnp=&amp;quot;urn:schemas-upnp-org:metadata-1-0/upnp/&amp;quot;&amp;gt;ac3d630e37b5f11ff5cdd23c0f5a7400&amp;lt;/upnp:udn&amp;gt;&lt;br /&gt;
        &amp;lt;upnp:class xmlns:upnp=&amp;quot;urn:schemas-upnp-org:metadata-1-0/upnp/&amp;quot;&amp;gt;object.container.album.musicAlbum&amp;lt;/upnp:class&amp;gt;&lt;br /&gt;
        &amp;lt;upnp:artist xmlns:upnp=&amp;quot;urn:schemas-upnp-org:metadata-1-0/upnp/&amp;quot;&amp;gt;...And You Will Know Us by the Trail of Dead&amp;lt;/upnp:artist&amp;gt;&lt;br /&gt;
        &amp;lt;upnp:albumArtURI&amp;gt;http://10.2.1.170:4000/linn.co.uk.kazooserver/ms/artwork/37a2ac2?size=0&amp;lt;/upnp:albumArtURI&amp;gt;&lt;br /&gt;
    &amp;lt;/container&amp;gt;&lt;br /&gt;
    &amp;lt;desc nameSpace=&amp;quot;openhome.org&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;indexmap&amp;gt;0 10 10 10 10 10 0 0 0 0 10 12 1 10 10 10 12 17 18 1 0 20 0 20 20 2 2 24&amp;lt;/indexmap&amp;gt;&lt;br /&gt;
    &amp;lt;/desc&amp;gt;&lt;br /&gt;
 &amp;lt;/DIDL-Lite&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The index map contains a space separated list of 28 number representing the total number of items that begin with that letter. #, represents everything below A, largely digits and punctuation and + represents everything above Z, largely international characters not collatable within the roman alphabet.&lt;br /&gt;
&lt;br /&gt;
 # A B C D E F G H I J K L M N O P Q R S T U V W X Y Z +&lt;br /&gt;
&lt;br /&gt;
== Image Resolution ==&lt;br /&gt;
&lt;br /&gt;
Control points running on different platforms have different memory limits and display technologies. This means that a control point on a PC might want to display artwork at a high resolution, while a control point on a PDA might want to display artwork at a much lower resolution.&lt;br /&gt;
&lt;br /&gt;
Media servers often try to solve this problem using one of the following two methods:&lt;br /&gt;
&lt;br /&gt;
# A configurable parameter that scales all artwork to a user defined size&lt;br /&gt;
# A profile system where a user can create profiles for each class of control point they have and configure a parameter that scales all artwork to a user defined size per profile&lt;br /&gt;
&lt;br /&gt;
The first solution is highly problematic because it limits the resolution of artwork across the whole network. But a single network very often contains control points that can display high resolution images AND control points that can&#039;t.&lt;br /&gt;
&lt;br /&gt;
The second solution is just architecturally poor, turning the relationship between a control point and a media server on its head. Why should the media server try to infer what a control point needs through configuration when the control point is perfectly capable of telling the media server its exact requirements in every single circumstance.&lt;br /&gt;
&lt;br /&gt;
So, it is proposed that compliant media servers include a &#039;&#039;&#039;size&#039;&#039;&#039; element in their artwork uri&#039;s, where the size is the image&#039;s largest dimension. This allows a control point to ask for an image at a specified size.&lt;br /&gt;
&lt;br /&gt;
=== Example ===&lt;br /&gt;
&lt;br /&gt;
If the original artwork was 400x512, then a media server would provide the following albumArtURI: &amp;lt;uri&amp;gt;?size=512. If it is not possible for the media server to obtain the original resolution then the media server would provide the following albumArtURI: &amp;lt;uri&amp;gt;?size=0.&lt;br /&gt;
&lt;br /&gt;
The presence of the size element tells the control point:&lt;br /&gt;
&lt;br /&gt;
# the media server implements the image scaling extension&lt;br /&gt;
# the original size of the image.&lt;br /&gt;
&lt;br /&gt;
Now the control point can request the image at any resolution by using &amp;lt;uri&amp;gt;?size=x, where x is the size it wants.&lt;br /&gt;
&lt;br /&gt;
So, in this example, &amp;lt;uri&amp;gt;?size=1024 gets an 800x1024 image, and &amp;lt;uri&amp;gt;?size=200 gets a 156x200 image.&lt;br /&gt;
&lt;br /&gt;
== albumArtURI&amp;lt;br&amp;gt; ==&lt;br /&gt;
&lt;br /&gt;
The current specification only allows retrieval of artwork for a musicAlbum container through the property albumArtURI. When browsing a music library on a control point it quickly becomes clear that to implement a graphically rich control point the ContentDirectory service should provide a way to retrieve artwork for all of the content directory classes, not just musicAlbum containers.&lt;br /&gt;
&lt;br /&gt;
There has become a somewhat defacto standard where just about all media server provide an albumArtURI property for a musicItem item as well as for a musicAlbum container, however this is still not good enough to implement a graphically rich control point.&lt;br /&gt;
&lt;br /&gt;
It is proposed that an optional property is introduced to the object class called &#039;&#039;&#039;albumArtURI&#039;&#039;&amp;amp;nbsp;&#039;&#039;&#039;&#039;&#039;which may contain an attribute &#039;&#039;&#039;title&#039;&#039;&#039;,&amp;amp;nbsp;e.g. &amp;amp;lt;albumArtURI title=&amp;quot;Font Cover&amp;quot;&amp;amp;gt;http://Front Cover.jpg&amp;amp;lt;/albumArtURI&amp;amp;gt;.&amp;amp;nbsp;The object class can contain zero or more albumArtURIs elements.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Dynamic IP Addresses ==&lt;br /&gt;
&lt;br /&gt;
At present all media servers return URIs that contain a reference to their IP address, e.g. http://172.20.1.1/music.flac etc. This means that if the media server&#039;s IP address were to change across reboots, then any control point or media renderer with URIs that referenced the media server before the reboot will become invalid.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
It is proposed that a media server should always reference itself by host name and not by IP address in any XML that it sends to external devices, i.e. http://mynas/music.flac.&lt;br /&gt;
&lt;br /&gt;
== Disc Information ==&lt;br /&gt;
&lt;br /&gt;
It is proposed that two new properties are added to the musicTrack item called &#039;&#039;&#039;OriginalDiscNumber&#039;&#039;&#039; and &#039;&#039;&#039;OriginalDiscCount&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== Replay Gain Information ==&lt;br /&gt;
&lt;br /&gt;
It is proposed that four new properties are added to the musicTrack item called &#039;&#039;&#039;ReplayGainAlbum&#039;&#039;&#039;, &#039;&#039;&#039;ReplayGainAlbumPeak&#039;&#039;&#039;, &#039;&#039;&#039;ReplayGainTrack&#039;&#039;&#039;, and &#039;&#039;&#039;ReplayGainTrackPeak&#039;&#039;&#039;.&lt;/div&gt;</summary>
		<author><name>Davidd</name></author>
	</entry>
	<entry>
		<id>https://docs.linn.co.uk/wiki/index.php?title=Developer:Media_Server_Extensions&amp;diff=11194</id>
		<title>Developer:Media Server Extensions</title>
		<link rel="alternate" type="text/html" href="https://docs.linn.co.uk/wiki/index.php?title=Developer:Media_Server_Extensions&amp;diff=11194"/>
		<updated>2015-02-20T17:57:30Z</updated>

		<summary type="html">&lt;p&gt;Davidd: /* Low */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Introduction =&lt;br /&gt;
&lt;br /&gt;
The ContentDirectory service has various limitations which become apparent when implementing control points on different hardware platforms. This document aims to outline some ideas that address the various shortcomings of the ContentDirectory specification.&lt;br /&gt;
&lt;br /&gt;
== Container map ==&lt;br /&gt;
&lt;br /&gt;
The current ContentDirectory specification makes it tricky for a control point to display the returned contents in an appropriate, aesthetically pleasing, manner for the content being viewed. This is because the ContentDirectory specification does not allow for a control point to know in advanced what content to expect when browsing through any particular hierarchy.&lt;br /&gt;
&lt;br /&gt;
An example of this might be, at a particular point in the browse hierarchy the ContentDirectory will return a list of albums which in turn will contain a list of tracks. A UI might wish to represent this list of albums as a grid and the album&#039;s tracks as a header and a list of the tracks. Currently it is not possible for the UI to know when it gets to a point in a hierarchy where the hierarchy represents a list of albums followed by a list of tracks.&lt;br /&gt;
&lt;br /&gt;
The container map extension allows a media server to express its container hierarchy in advance of the control point navigating it. This is done using an OpenHome vendor extension to the device XML.&lt;br /&gt;
&lt;br /&gt;
Three types of mapped container are defined: browse, link, and search.&lt;br /&gt;
&lt;br /&gt;
The browse map defines named top level containers that represent significant starting points for browsing that can meaningfully be presented in top level tabs of a control point UI. The browse map is expressed within the X_MAP_BROWSE element of X_MAP.&lt;br /&gt;
&lt;br /&gt;
The link map defines containers that can be meaningfully linked to from track or album details. For instance a track will typically have an artist defined. If an entry for &amp;quot;artist&amp;quot; is defined in the link map then it will be possible for the user of a control point to quickly access this artist-related container by clicking on the track&#039;s artist text. Similar links might be offered for &amp;quot;genre&amp;quot;, &amp;quot;composer&amp;quot;, &amp;quot;conductor&amp;quot;, etc. The link map is expressed within the X_MAP_LINK element of X_MAP.&lt;br /&gt;
&lt;br /&gt;
The search map defines the different kinds of search containers and the type of results that they produce. The search map is expressed within the X_MAP_SEARCH element of X_MAP.&lt;br /&gt;
&lt;br /&gt;
=== Browse map ===&lt;br /&gt;
&lt;br /&gt;
The X_MAP_BROWSE element must contain 1 or more X_MAP_BROWSE_ENTRY elements.&lt;br /&gt;
&lt;br /&gt;
The X_MAP_BROWSE_ENTRY has three child elements.&lt;br /&gt;
&lt;br /&gt;
X_MAP_BROWSE_ENTRY_NAME is a string that can be used by a control point to label a tab containing this browse hierarchy.&lt;br /&gt;
&lt;br /&gt;
X_MAP_BROWSE_ENTRY_ID is the UPnP container id that contains the root of this browse hierarchy. This id is then submitted to the ContentDirectory service using the Browse action as usual. The returned contents are navigated using subsequent Browse request as usual. The difference is that the control point knows in advance what kind of results to expect at each level.&lt;br /&gt;
&lt;br /&gt;
X_MAP_BROWSE_ENTRY_TYPE is a space separated list of strings that maps out the kind of containers that are to be found at each level of this browse hierarchy. For instance, &amp;quot;artist album&amp;quot; represents a browse hierarchy giving a container containing only artist containers, each of which contains only album containers, each of which contains only tracks.&lt;br /&gt;
&lt;br /&gt;
There should be an X_MAP_BROWSE_ENTRY for each root browse hierarchy defined by the media server.&lt;br /&gt;
&lt;br /&gt;
For example:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;X_MAP_BROWSE_ENTRY&amp;gt;&lt;br /&gt;
     &amp;lt;X_MAP_BROWSE_ENTRY_NAME&amp;gt;Genre&amp;lt;/X_MAP_BROWSE_ENTRY_NAME&amp;gt;&lt;br /&gt;
     &amp;lt;X_MAP_BROWSE_ENTRY_ID&amp;gt;db/browse/genre&amp;lt;/X_MAP_BROWSE_ENTRY_ID&amp;gt;&lt;br /&gt;
     &amp;lt;X_MAP_BROWSE_ENTRY_TYPE&amp;gt;genre artist album&amp;lt;/X_MAP_BROWSE_ENTRY_TYPE&amp;gt;&lt;br /&gt;
 &amp;lt;/X_MAP_BROWSE_ENTRY&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Link map ===&lt;br /&gt;
&lt;br /&gt;
The X_MAP_LINK element must contain 1 or more X_MAP_LINK_ENTRY elements.&lt;br /&gt;
&lt;br /&gt;
The X_MAP_LINK_ENTRY has three child elements.&lt;br /&gt;
&lt;br /&gt;
X_MAP_LINK_ENTRY_TAG is a string that defines which type of metadata is the target for this link. e.g. &amp;quot;artist&amp;quot;, &amp;quot;genre&amp;quot;, &amp;quot;composer&amp;quot;, etc. See the type section below. &lt;br /&gt;
&lt;br /&gt;
X_MAP_LINK_ENTRY_ID_PREFIX is a string that is prefix for a UPnP container id. The link can be taken by browsing to the container whose id is the result of appending the associated metadata value to this prefix. For instance, if the prefix for an &amp;quot;artist&amp;quot; link is defined as db/link/artist/, and a track returned anywhere in the media server&#039;s library has &amp;quot;Pink Floyd&amp;quot; as its artist. Then the linked container will have an id of db/link/artist/Pink Floyd.&lt;br /&gt;
&lt;br /&gt;
X_MAP_LINK_ENTRY_TYPE represents the type of browse hierarchy returned when taking this type of link. See X_MAP_BROWSE_ENTRY_TYPE for details.&lt;br /&gt;
&lt;br /&gt;
There should be an X_MAP_LINK_ENTRY for each piece of metadata that the media server allows to be linked.&lt;br /&gt;
&lt;br /&gt;
For example:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;X_MAP_LINK_ENTRY&amp;gt;&lt;br /&gt;
     &amp;lt;X_MAP_LINK_ENTRY_TAG&amp;gt;artist&amp;lt;/X_MAP_LINK_ENTRY_TAG&amp;gt;&lt;br /&gt;
     &amp;lt;X_MAP_LINK_ENTRY_ID_PREFIX&amp;gt;db/link/artist/&amp;lt;/X_MAP_LINK_ENTRY_ID_PREFIX&amp;gt;&lt;br /&gt;
     &amp;lt;X_MAP_LINK_ENTRY_TYPE&amp;gt;album&amp;lt;/X_MAP_LINK_ENTRY_TYPE&amp;gt;&lt;br /&gt;
 &amp;lt;/X_MAP_LINK_ENTRY&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The example above defines a browse hierarchy that is created when linking from an artist name. The hierarchy created provides a list of linked artist albums which in turn provide a list of tracks.&lt;br /&gt;
&lt;br /&gt;
=== Search map ===&lt;br /&gt;
&lt;br /&gt;
The X_MAP_SEARCH element must contain 1 or more X_MAP_SEARCH_ENTRY elements.&lt;br /&gt;
&lt;br /&gt;
The X_MAP_SEARCH_ENTRY has three child elements.&lt;br /&gt;
&lt;br /&gt;
X_MAP_SEARCH_ENTRY_NAME  is a string that can be used by a control point to label a tab containing these search results.&lt;br /&gt;
&lt;br /&gt;
X_MAP_SEARCH_ENTRY_ID_PREFIX is a string that is a prefix for a UPnP container id. The search results can be found by browsing to the container whose id is the result of appending the search string to this prefix. For instance, if the prefix for an &amp;quot;album&amp;quot; search is defined as db/search/album/, and the search string is &amp;quot;blue&amp;quot;, then the search results container will have an id of db/search/album/blue.&lt;br /&gt;
&lt;br /&gt;
X_MAP_SEARCH_ENTRY_TYPE represents the type of browse hierarchy returned when taking this type of search. See X_MAP_BROWSE_ENTRY_TYPE for details.&lt;br /&gt;
&lt;br /&gt;
There should be an X_MAP_SEARCH_ENTRY for each type of search offered by the media server.&lt;br /&gt;
&lt;br /&gt;
For example:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;X_MAP_SEARCH_ENTRY&amp;gt;&lt;br /&gt;
     &amp;lt;X_MAP_SEARCH_ENTRY_NAME&amp;gt;Artist&amp;lt;/X_MAP_SEARCH_ENTRY_NAME&amp;gt;&lt;br /&gt;
     &amp;lt;X_MAP_SEARCH_ENTRY_ID_PREFIX&amp;gt;db/search/artist/&amp;lt;/X_MAP_SEARCH_ENTRY_ID_PREFIX&amp;gt;&lt;br /&gt;
     &amp;lt;X_MAP_SEARCH_ENTRY_TYPE&amp;gt;artist album&amp;lt;/X_MAP_SEARCH_ENTRY_TYPE&amp;gt;&lt;br /&gt;
 &amp;lt;/X_MAP_SEARCH_ENTRY&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The example above defines a browse hierarchy that is created when searching for an artist. The hierarchy created provides a list of artists, which in turn provide a list of albums, which in turn provide a list of tracks.&lt;br /&gt;
&lt;br /&gt;
=== Types ===&lt;br /&gt;
&lt;br /&gt;
The list of allowed types for X_BROWSE_ENTRY_TYPE, X_MAP_LINK_ENTRY_TAG, X_LINK_ENTRY_TYPE, and X_SEARCH_ENTRY_TYPE&lt;br /&gt;
&lt;br /&gt;
 genre&lt;br /&gt;
 artist&lt;br /&gt;
 composer&lt;br /&gt;
 conductor&lt;br /&gt;
 album&lt;br /&gt;
 year&lt;br /&gt;
 mixed&lt;br /&gt;
&lt;br /&gt;
mixed is a special value that represents a container that has mixed entries. It is not a valid type for the X_MAP_LINK_ENTRY_TAG element.&lt;br /&gt;
&lt;br /&gt;
=== Example device XML ===&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;root xmlns=&amp;quot;urn:schemas-upnp-org:device-1-0&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;specVersion&amp;gt;&lt;br /&gt;
        &amp;lt;major&amp;gt;1&amp;lt;/major&amp;gt;&lt;br /&gt;
        &amp;lt;minor&amp;gt;1&amp;lt;/minor&amp;gt;&lt;br /&gt;
    &amp;lt;/specVersion&amp;gt;&lt;br /&gt;
    &amp;lt;device&amp;gt;&lt;br /&gt;
        &amp;lt;deviceType&amp;gt;urn:schemas-upnp-org:device:MediaServer:1&amp;lt;/deviceType&amp;gt;&lt;br /&gt;
        &amp;lt;dlna:X_DLNADOC xmlns:dlna=&amp;quot;urn:schemas-dlna-org:device-1-0&amp;quot;&amp;gt;DMS-1.50&amp;lt;/dlna:X_DLNADOC&amp;gt;&lt;br /&gt;
        &amp;lt;dlna:X_DLNACAP xmlns:dlna=&amp;quot;urn:schemas-dlna-org:device-1-0&amp;quot;&amp;gt;av-upload,image-upload,audio-upload&amp;lt;/dlna:X_DLNACAP&amp;gt;&lt;br /&gt;
        &amp;lt;openhome:X_MAP xmlns:openhome=&amp;quot;http://www.openhome.org&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;X_MAP_BROWSE&amp;gt;&lt;br /&gt;
                &amp;lt;X_MAP_BROWSE_ENTRY&amp;gt;&lt;br /&gt;
                    &amp;lt;X_MAP_BROWSE_ENTRY_NAME&amp;gt;Albums&amp;lt;/X_MAP_BROWSE_ENTRY_NAME&amp;gt;&lt;br /&gt;
                    &amp;lt;X_MAP_BROWSE_ENTRY_ID&amp;gt;db/browse/albums&amp;lt;/X_MAP_BROWSE_ENTRY_ID&amp;gt;&lt;br /&gt;
                    &amp;lt;X_MAP_BROWSE_ENTRY_TYPE&amp;gt;album&amp;lt;/X_MAP_BROWSE_ENTRY_TYPE&amp;gt;&lt;br /&gt;
                &amp;lt;/X_MAP_BROWSE_ENTRY&amp;gt;&lt;br /&gt;
                &amp;lt;X_MAP_BROWSE_ENTRY&amp;gt;&lt;br /&gt;
                    &amp;lt;X_MAP_BROWSE_ENTRY_NAME&amp;gt;Artists&amp;lt;/X_MAP_BROWSE_ENTRY_NAME&amp;gt;&lt;br /&gt;
                    &amp;lt;X_MAP_BROWSE_ENTRY_ID&amp;gt;db/browse/artists&amp;lt;/X_MAP_BROWSE_ENTRY_ID&amp;gt;&lt;br /&gt;
                    &amp;lt;X_MAP_BROWSE_ENTRY_TYPE&amp;gt;artist album&amp;lt;/X_MAP_BROWSE_ENTRY_TYPE&amp;gt;&lt;br /&gt;
                &amp;lt;/X_MAP_BROWSE_ENTRY&amp;gt;&lt;br /&gt;
                &amp;lt;X_MAP_BROWSE_ENTRY&amp;gt;&lt;br /&gt;
                    &amp;lt;X_MAP_BROWSE_ENTRY_NAME&amp;gt;Folders&amp;lt;/X_MAP_BROWSE_ENTRY_NAME&amp;gt;&lt;br /&gt;
                    &amp;lt;X_MAP_BROWSE_ENTRY_ID&amp;gt;db/browse/folders&amp;lt;/X_MAP_BROWSE_ENTRY_ID&amp;gt;&lt;br /&gt;
                    &amp;lt;X_MAP_BROWSE_ENTRY_TYPE&amp;gt;mixed&amp;lt;/X_MAP_BROWSE_ENTRY_TYPE&amp;gt;&lt;br /&gt;
                &amp;lt;/X_MAP_BROWSE_ENTRY&amp;gt;&lt;br /&gt;
            &amp;lt;/X_MAP_BROWSE&amp;gt;&lt;br /&gt;
            &amp;lt;X_MAP_LINK&amp;gt;&lt;br /&gt;
                &amp;lt;X_MAP_LINK_ENTRY&amp;gt;&lt;br /&gt;
                    &amp;lt;X_MAP_LINK_ENTRY_TAG&amp;gt;artist&amp;lt;/X_MAP_LINK_ENTRY_TAG&amp;gt;&lt;br /&gt;
                    &amp;lt;X_MAP_LINK_ENTRY_ID_PREFIX&amp;gt;db/link/artist/&amp;lt;/X_MAP_LINK_ENTRY_ID_PREFIX&amp;gt;&lt;br /&gt;
                    &amp;lt;X_MAP_LINK_ENTRY_TYPE&amp;gt;album&amp;lt;/X_MAP_LINK_ENTRY_TYPE&amp;gt;&lt;br /&gt;
                &amp;lt;/X_MAP_LINK_ENTRY&amp;gt;&lt;br /&gt;
                &amp;lt;X_MAP_LINK_ENTRY&amp;gt;&lt;br /&gt;
                    &amp;lt;X_MAP_LINK_ENTRY_TAG&amp;gt;composer&amp;lt;/X_MAP_LINK_ENTRY_TAG&amp;gt;&lt;br /&gt;
                    &amp;lt;X_MAP_LINK_ENTRY_ID_PREFIX&amp;gt;db/link/composer/&amp;lt;/X_MAP_LINK_ENTRY_ID_PREFIX&amp;gt;&lt;br /&gt;
                    &amp;lt;X_MAP_LINK_ENTRY_TYPE&amp;gt;album&amp;lt;/X_MAP_LINK_ENTRY_TYPE&amp;gt;&lt;br /&gt;
                &amp;lt;/X_MAP_LINK_ENTRY&amp;gt;&lt;br /&gt;
            &amp;lt;/X_MAP_LINK&amp;gt;&lt;br /&gt;
            &amp;lt;X_MAP_SEARCH&amp;gt;&lt;br /&gt;
                &amp;lt;X_MAP_SEARCH_ENTRY&amp;gt;&lt;br /&gt;
                    &amp;lt;X_MAP_SEARCH_ENTRY_NAME&amp;gt;Artist&amp;lt;/X_MAP_SEARCH_ENTRY_NAME&amp;gt;&lt;br /&gt;
                    &amp;lt;X_MAP_SEARCH_ENTRY_ID_PREFIX&amp;gt;db/search/artist/&amp;lt;/X_MAP_SEARCH_ENTRY_ID_PREFIX&amp;gt;&lt;br /&gt;
                    &amp;lt;X_MAP_SEARCH_ENTRY_TYPE&amp;gt;artist album&amp;lt;/X_MAP_SEARCH_ENTRY_TYPE&amp;gt;&lt;br /&gt;
                &amp;lt;/X_MAP_SEARCH_ENTRY&amp;gt;&lt;br /&gt;
                &amp;lt;X_MAP_SEARCH_ENTRY&amp;gt;&lt;br /&gt;
                    &amp;lt;X_MAP_SEARCH_ENTRY_NAME&amp;gt;Tracks&amp;lt;/X_MAP_SEARCH_ENTRY_NAME&amp;gt;&lt;br /&gt;
                    &amp;lt;X_MAP_SEARCH_ENTRY_ID_PREFIX&amp;gt;db/search/all/&amp;lt;/X_MAP_SEARCH_ENTRY_ID_PREFIX&amp;gt;&lt;br /&gt;
                    &amp;lt;X_MAP_SEARCH_ENTRY_TYPE&amp;gt;&amp;lt;/X_MAP_SEARCH_ENTRY_TYPE&amp;gt;&lt;br /&gt;
                &amp;lt;/X_MAP_SEARCH_ENTRY&amp;gt;&lt;br /&gt;
            &amp;lt;/X_MAP_SEARCH&amp;gt;&lt;br /&gt;
        &amp;lt;/openhome:X_MAP&amp;gt;&lt;br /&gt;
        &amp;lt;presentationURL&amp;gt;http://10.2.1.170:4000/res/linn.co.uk.kazooserver/index.html&amp;lt;/presentationURL&amp;gt;&lt;br /&gt;
        &amp;lt;friendlyName&amp;gt;Linn Kazoo Server [R&amp;amp;D Mac Mini]&amp;lt;/friendlyName&amp;gt;&lt;br /&gt;
        &amp;lt;manufacturer&amp;gt;Linn&amp;lt;/manufacturer&amp;gt;&lt;br /&gt;
        &amp;lt;manufacturerURL&amp;gt;http://www.linn.co.uk&amp;lt;/manufacturerURL&amp;gt;&lt;br /&gt;
        &amp;lt;modelName&amp;gt;Kazoo Server&amp;lt;/modelName&amp;gt;&lt;br /&gt;
        &amp;lt;modelURL&amp;gt;http://oss.linn.co.uk/trac/wiki/KazooServer&amp;lt;/modelURL&amp;gt;&lt;br /&gt;
        &amp;lt;UDN&amp;gt;uuid:ac3d630e37b5f11ff5cdd23c0f5a7400&amp;lt;/UDN&amp;gt;&lt;br /&gt;
        &amp;lt;iconList&amp;gt;&lt;br /&gt;
            &amp;lt;icon&amp;gt;&lt;br /&gt;
                &amp;lt;mimetype&amp;gt;image/png&amp;lt;/mimetype&amp;gt;&lt;br /&gt;
                &amp;lt;width&amp;gt;65&amp;lt;/width&amp;gt;&lt;br /&gt;
                &amp;lt;height&amp;gt;65&amp;lt;/height&amp;gt;&lt;br /&gt;
                &amp;lt;depth&amp;gt;32&amp;lt;/depth&amp;gt;&lt;br /&gt;
                &amp;lt;url&amp;gt;ac3d630e37b5f11ff5cdd23c0f5a7400/resource/icon/icon&amp;lt;/url&amp;gt;&lt;br /&gt;
            &amp;lt;/icon&amp;gt;&lt;br /&gt;
        &amp;lt;/iconList&amp;gt;&lt;br /&gt;
        &amp;lt;serviceList&amp;gt;&lt;br /&gt;
            &amp;lt;service&amp;gt;&lt;br /&gt;
                &amp;lt;serviceType&amp;gt;urn:av-openhome-org:service:PlaylistManager:1&amp;lt;/serviceType&amp;gt;&lt;br /&gt;
                &amp;lt;serviceId&amp;gt;urn:av-openhome-org:serviceId:PlaylistManager&amp;lt;/serviceId&amp;gt;&lt;br /&gt;
                &amp;lt;SCPDURL&amp;gt;/ac3d630e37b5f11ff5cdd23c0f5a7400/Upnp/av.openhome.org-PlaylistManager-1/service.xml&amp;lt;/SCPDURL&amp;gt;&lt;br /&gt;
                &amp;lt;controlURL&amp;gt;/ac3d630e37b5f11ff5cdd23c0f5a7400/av.openhome.org-PlaylistManager-1/control&amp;lt;/controlURL&amp;gt;&lt;br /&gt;
                &amp;lt;eventSubURL&amp;gt;/ac3d630e37b5f11ff5cdd23c0f5a7400/av.openhome.org-PlaylistManager-1/event&amp;lt;/eventSubURL&amp;gt;&lt;br /&gt;
            &amp;lt;/service&amp;gt;&lt;br /&gt;
            &amp;lt;service&amp;gt;&lt;br /&gt;
                &amp;lt;serviceType&amp;gt;urn:schemas-upnp-org:service:ContentDirectory:1&amp;lt;/serviceType&amp;gt;&lt;br /&gt;
                &amp;lt;serviceId&amp;gt;urn:upnp-org:serviceId:ContentDirectory&amp;lt;/serviceId&amp;gt;&lt;br /&gt;
                &amp;lt;SCPDURL&amp;gt;/ac3d630e37b5f11ff5cdd23c0f5a7400/Upnp/upnp.org-ContentDirectory-1/service.xml&amp;lt;/SCPDURL&amp;gt;&lt;br /&gt;
                &amp;lt;controlURL&amp;gt;/ac3d630e37b5f11ff5cdd23c0f5a7400/upnp.org-ContentDirectory-1/control&amp;lt;/controlURL&amp;gt;&lt;br /&gt;
                &amp;lt;eventSubURL&amp;gt;/ac3d630e37b5f11ff5cdd23c0f5a7400/upnp.org-ContentDirectory-1/event&amp;lt;/eventSubURL&amp;gt;&lt;br /&gt;
            &amp;lt;/service&amp;gt;&lt;br /&gt;
            &amp;lt;service&amp;gt;&lt;br /&gt;
                &amp;lt;serviceType&amp;gt;urn:schemas-upnp-org:service:ConnectionManager:1&amp;lt;/serviceType&amp;gt;&lt;br /&gt;
                &amp;lt;serviceId&amp;gt;urn:upnp-org:serviceId:ConnectionManager&amp;lt;/serviceId&amp;gt;&lt;br /&gt;
                &amp;lt;SCPDURL&amp;gt;/ac3d630e37b5f11ff5cdd23c0f5a7400/Upnp/upnp.org-ConnectionManager-1/service.xml&amp;lt;/SCPDURL&amp;gt;&lt;br /&gt;
                &amp;lt;controlURL&amp;gt;/ac3d630e37b5f11ff5cdd23c0f5a7400/upnp.org-ConnectionManager-1/control&amp;lt;/controlURL&amp;gt;&lt;br /&gt;
                &amp;lt;eventSubURL&amp;gt;/ac3d630e37b5f11ff5cdd23c0f5a7400/upnp.org-ConnectionManager-1/event&amp;lt;/eventSubURL&amp;gt;&lt;br /&gt;
            &amp;lt;/service&amp;gt;&lt;br /&gt;
        &amp;lt;/serviceList&amp;gt;&lt;br /&gt;
    &amp;lt;/device&amp;gt;&lt;br /&gt;
 &amp;lt;/root&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Index maps ==&lt;br /&gt;
&lt;br /&gt;
Large lists are difficult to navigate, especially on mobile devices. Mobile devices added the idea of an index map to improve this situation. The index map allows a users to jump to different sections in a large list, similar to what is possible with a scrollbar on desktops.&lt;br /&gt;
&lt;br /&gt;
In order for a control point to generate an index map for any particular level in a ContentDirectory&#039;s hierarchy it first needs to download all the objects in the container, figure out if they are sorted and then calculate the index map. This means that a user will need to wait, perhaps minutes, before an index map is able to be presented on the UI. &lt;br /&gt;
&lt;br /&gt;
The media server can optionally return an index map for container that are in alphabetical order. This implemented through a OpenHome vendor extension of the DIDL-Lite XML. Below shows an example DIDL-Lite with an index map included.&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;DIDL-Lite xmlns=&amp;quot;urn:schemas-upnp-org:metadata-1-0/DIDL-Lite/&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;container id=&amp;quot;db/ba37a2ac24efa676c8676aab71a6cdf074&amp;quot; parentID=&amp;quot;0&amp;quot; restricted=&amp;quot;true&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;dc:title xmlns:dc=&amp;quot;http://purl.org/dc/elements/1.1/&amp;quot;&amp;gt;Worlds Apart [Deluxe Edition]&amp;lt;/dc:title&amp;gt;&lt;br /&gt;
        &amp;lt;upnp:udn xmlns:upnp=&amp;quot;urn:schemas-upnp-org:metadata-1-0/upnp/&amp;quot;&amp;gt;ac3d630e37b5f11ff5cdd23c0f5a7400&amp;lt;/upnp:udn&amp;gt;&lt;br /&gt;
        &amp;lt;upnp:class xmlns:upnp=&amp;quot;urn:schemas-upnp-org:metadata-1-0/upnp/&amp;quot;&amp;gt;object.container.album.musicAlbum&amp;lt;/upnp:class&amp;gt;&lt;br /&gt;
        &amp;lt;upnp:artist xmlns:upnp=&amp;quot;urn:schemas-upnp-org:metadata-1-0/upnp/&amp;quot;&amp;gt;...And You Will Know Us by the Trail of Dead&amp;lt;/upnp:artist&amp;gt;&lt;br /&gt;
        &amp;lt;upnp:albumArtURI&amp;gt;http://10.2.1.170:4000/linn.co.uk.kazooserver/ms/artwork/37a2ac2?size=0&amp;lt;/upnp:albumArtURI&amp;gt;&lt;br /&gt;
    &amp;lt;/container&amp;gt;&lt;br /&gt;
    &amp;lt;desc nameSpace=&amp;quot;openhome.org&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;indexmap&amp;gt;0 10 10 10 10 10 0 0 0 0 10 12 1 10 10 10 12 17 18 1 0 20 0 20 20 2 2 24&amp;lt;/indexmap&amp;gt;&lt;br /&gt;
    &amp;lt;/desc&amp;gt;&lt;br /&gt;
 &amp;lt;/DIDL-Lite&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The index map contains a space separated list of 28 number representing the total number of items that begin with that letter. #, represents everything below A, largely digits and punctuation and + represents everything above Z, largely international characters not collatable within the roman alphabet.&lt;br /&gt;
&lt;br /&gt;
 # A B C D E F G H I J K L M N O P Q R S T U V W X Y Z +&lt;br /&gt;
&lt;br /&gt;
== Image Resolution ==&lt;br /&gt;
&lt;br /&gt;
Control points running on different platforms have different memory limits and display technologies. This means that a control point on a PC might want to display artwork at a high resolution, while a control point on a PDA might want to display artwork at a much lower resolution.&lt;br /&gt;
&lt;br /&gt;
Media servers often try to solve this problem using one of the following two methods:&lt;br /&gt;
&lt;br /&gt;
# A configurable parameter that scales all artwork to a user defined size&lt;br /&gt;
# A profile system where a user can create profiles for each class of control point they have and configure a parameter that scales all artwork to a user defined size per profile&lt;br /&gt;
&lt;br /&gt;
The first solution is highly problematic because it limits the resolution of artwork across the whole network. But a single network very often contains control points that can display high resolution images AND control points that can&#039;t.&lt;br /&gt;
&lt;br /&gt;
The second solution is just architecturally poor, turning the relationship between a control point and a media server on its head. Why should the media server try to infer what a control point needs through configuration when the control point is perfectly capable of telling the media server its exact requirements in every single circumstance.&lt;br /&gt;
&lt;br /&gt;
So, it is proposed that compliant media servers include a &#039;&#039;&#039;size&#039;&#039;&#039; element in their artwork uri&#039;s, where the size is the image&#039;s largest dimension. This allows a control point to ask for an image at a specified size.&lt;br /&gt;
&lt;br /&gt;
=== Example ===&lt;br /&gt;
&lt;br /&gt;
If the original artwork was 400x512, then a media server would provide the following albumArtURI: &amp;lt;uri&amp;gt;?size=512. If it is not possible for the media server to obtain the original resolution then the media server would provide the following albumArtURI: &amp;lt;uri&amp;gt;?size=0.&lt;br /&gt;
&lt;br /&gt;
The presence of the size element tells the control point:&lt;br /&gt;
&lt;br /&gt;
# the media server implements the image scaling extension&lt;br /&gt;
# the original size of the image.&lt;br /&gt;
&lt;br /&gt;
Now the control point can request the image at any resolution by using &amp;lt;uri&amp;gt;?size=x, where x is the size it wants.&lt;br /&gt;
&lt;br /&gt;
So, in this example, &amp;lt;uri&amp;gt;?size=1024 gets an 800x1024 image, and &amp;lt;uri&amp;gt;?size=200 gets a 156x200 image.&lt;br /&gt;
&lt;br /&gt;
== albumArtURI&amp;lt;br&amp;gt; ==&lt;br /&gt;
&lt;br /&gt;
The current specification only allows retrieval of artwork for a musicAlbum container through the property albumArtURI. When browsing a music library on a control point it quickly becomes clear that to implement a graphically rich control point the ContentDirectory service should provide a way to retrieve artwork for all of the content directory classes, not just musicAlbum containers.&lt;br /&gt;
&lt;br /&gt;
There has become a somewhat defacto standard where just about all media server provide an albumArtURI property for a musicItem item as well as for a musicAlbum container, however this is still not good enough to implement a graphically rich control point.&lt;br /&gt;
&lt;br /&gt;
It is proposed that an optional property is introduced to the object class called &#039;&#039;&#039;albumArtURI&#039;&#039;&amp;amp;nbsp;&#039;&#039;&#039;&#039;&#039;which may contain an attribute &#039;&#039;&#039;title&#039;&#039;&#039;,&amp;amp;nbsp;e.g. &amp;amp;lt;albumArtURI title=&amp;quot;Font Cover&amp;quot;&amp;amp;gt;http://Front Cover.jpg&amp;amp;lt;/albumArtURI&amp;amp;gt;.&amp;amp;nbsp;The object class can contain zero or more albumArtURIs elements.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Dynamic IP Addresses ==&lt;br /&gt;
&lt;br /&gt;
At present all media servers return URIs that contain a reference to their IP address, e.g. http://172.20.1.1/music.flac etc. This means that if the media server&#039;s IP address were to change across reboots, then any control point or media renderer with URIs that referenced the media server before the reboot will become invalid.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
It is proposed that a media server should always reference itself by host name and not by IP address in any XML that it sends to external devices, i.e. http://mynas/music.flac.&lt;br /&gt;
&lt;br /&gt;
== Disc Information ==&lt;br /&gt;
&lt;br /&gt;
It is proposed that two new properties are added to the musicTrack item called &#039;&#039;&#039;OriginalDiscNumber&#039;&#039;&#039; and &#039;&#039;&#039;OriginalDiscCount&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== Replay Gain Information ==&lt;br /&gt;
&lt;br /&gt;
It is proposed that four new properties are added to the musicTrack item called &#039;&#039;&#039;ReplayGainAlbum&#039;&#039;&#039;, &#039;&#039;&#039;ReplayGainAlbumPeak&#039;&#039;&#039;, &#039;&#039;&#039;ReplayGainTrack&#039;&#039;&#039;, and &#039;&#039;&#039;ReplayGainTrackPeak&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
== webURI ==&lt;br /&gt;
&lt;br /&gt;
The current specification does not easily allow a control point to provide rich information about objects in the browse hierarchy.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
It is proposed to add an optionally property to the object class called &#039;&#039;&#039;webURI&amp;amp;nbsp;&#039;&#039;&#039;which will contain a URI to a website that provides a rich collection of information about the object, e.g. for a musicArtist container it would provided a link to a website that provided information about the artist.&lt;/div&gt;</summary>
		<author><name>Davidd</name></author>
	</entry>
	<entry>
		<id>https://docs.linn.co.uk/wiki/index.php?title=Developer:Media_Server_Extensions&amp;diff=11193</id>
		<title>Developer:Media Server Extensions</title>
		<link rel="alternate" type="text/html" href="https://docs.linn.co.uk/wiki/index.php?title=Developer:Media_Server_Extensions&amp;diff=11193"/>
		<updated>2015-02-20T17:57:19Z</updated>

		<summary type="html">&lt;p&gt;Davidd: /* Medium */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Introduction =&lt;br /&gt;
&lt;br /&gt;
The ContentDirectory service has various limitations which become apparent when implementing control points on different hardware platforms. This document aims to outline some ideas that address the various shortcomings of the ContentDirectory specification.&lt;br /&gt;
&lt;br /&gt;
== Container map ==&lt;br /&gt;
&lt;br /&gt;
The current ContentDirectory specification makes it tricky for a control point to display the returned contents in an appropriate, aesthetically pleasing, manner for the content being viewed. This is because the ContentDirectory specification does not allow for a control point to know in advanced what content to expect when browsing through any particular hierarchy.&lt;br /&gt;
&lt;br /&gt;
An example of this might be, at a particular point in the browse hierarchy the ContentDirectory will return a list of albums which in turn will contain a list of tracks. A UI might wish to represent this list of albums as a grid and the album&#039;s tracks as a header and a list of the tracks. Currently it is not possible for the UI to know when it gets to a point in a hierarchy where the hierarchy represents a list of albums followed by a list of tracks.&lt;br /&gt;
&lt;br /&gt;
The container map extension allows a media server to express its container hierarchy in advance of the control point navigating it. This is done using an OpenHome vendor extension to the device XML.&lt;br /&gt;
&lt;br /&gt;
Three types of mapped container are defined: browse, link, and search.&lt;br /&gt;
&lt;br /&gt;
The browse map defines named top level containers that represent significant starting points for browsing that can meaningfully be presented in top level tabs of a control point UI. The browse map is expressed within the X_MAP_BROWSE element of X_MAP.&lt;br /&gt;
&lt;br /&gt;
The link map defines containers that can be meaningfully linked to from track or album details. For instance a track will typically have an artist defined. If an entry for &amp;quot;artist&amp;quot; is defined in the link map then it will be possible for the user of a control point to quickly access this artist-related container by clicking on the track&#039;s artist text. Similar links might be offered for &amp;quot;genre&amp;quot;, &amp;quot;composer&amp;quot;, &amp;quot;conductor&amp;quot;, etc. The link map is expressed within the X_MAP_LINK element of X_MAP.&lt;br /&gt;
&lt;br /&gt;
The search map defines the different kinds of search containers and the type of results that they produce. The search map is expressed within the X_MAP_SEARCH element of X_MAP.&lt;br /&gt;
&lt;br /&gt;
=== Browse map ===&lt;br /&gt;
&lt;br /&gt;
The X_MAP_BROWSE element must contain 1 or more X_MAP_BROWSE_ENTRY elements.&lt;br /&gt;
&lt;br /&gt;
The X_MAP_BROWSE_ENTRY has three child elements.&lt;br /&gt;
&lt;br /&gt;
X_MAP_BROWSE_ENTRY_NAME is a string that can be used by a control point to label a tab containing this browse hierarchy.&lt;br /&gt;
&lt;br /&gt;
X_MAP_BROWSE_ENTRY_ID is the UPnP container id that contains the root of this browse hierarchy. This id is then submitted to the ContentDirectory service using the Browse action as usual. The returned contents are navigated using subsequent Browse request as usual. The difference is that the control point knows in advance what kind of results to expect at each level.&lt;br /&gt;
&lt;br /&gt;
X_MAP_BROWSE_ENTRY_TYPE is a space separated list of strings that maps out the kind of containers that are to be found at each level of this browse hierarchy. For instance, &amp;quot;artist album&amp;quot; represents a browse hierarchy giving a container containing only artist containers, each of which contains only album containers, each of which contains only tracks.&lt;br /&gt;
&lt;br /&gt;
There should be an X_MAP_BROWSE_ENTRY for each root browse hierarchy defined by the media server.&lt;br /&gt;
&lt;br /&gt;
For example:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;X_MAP_BROWSE_ENTRY&amp;gt;&lt;br /&gt;
     &amp;lt;X_MAP_BROWSE_ENTRY_NAME&amp;gt;Genre&amp;lt;/X_MAP_BROWSE_ENTRY_NAME&amp;gt;&lt;br /&gt;
     &amp;lt;X_MAP_BROWSE_ENTRY_ID&amp;gt;db/browse/genre&amp;lt;/X_MAP_BROWSE_ENTRY_ID&amp;gt;&lt;br /&gt;
     &amp;lt;X_MAP_BROWSE_ENTRY_TYPE&amp;gt;genre artist album&amp;lt;/X_MAP_BROWSE_ENTRY_TYPE&amp;gt;&lt;br /&gt;
 &amp;lt;/X_MAP_BROWSE_ENTRY&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Link map ===&lt;br /&gt;
&lt;br /&gt;
The X_MAP_LINK element must contain 1 or more X_MAP_LINK_ENTRY elements.&lt;br /&gt;
&lt;br /&gt;
The X_MAP_LINK_ENTRY has three child elements.&lt;br /&gt;
&lt;br /&gt;
X_MAP_LINK_ENTRY_TAG is a string that defines which type of metadata is the target for this link. e.g. &amp;quot;artist&amp;quot;, &amp;quot;genre&amp;quot;, &amp;quot;composer&amp;quot;, etc. See the type section below. &lt;br /&gt;
&lt;br /&gt;
X_MAP_LINK_ENTRY_ID_PREFIX is a string that is prefix for a UPnP container id. The link can be taken by browsing to the container whose id is the result of appending the associated metadata value to this prefix. For instance, if the prefix for an &amp;quot;artist&amp;quot; link is defined as db/link/artist/, and a track returned anywhere in the media server&#039;s library has &amp;quot;Pink Floyd&amp;quot; as its artist. Then the linked container will have an id of db/link/artist/Pink Floyd.&lt;br /&gt;
&lt;br /&gt;
X_MAP_LINK_ENTRY_TYPE represents the type of browse hierarchy returned when taking this type of link. See X_MAP_BROWSE_ENTRY_TYPE for details.&lt;br /&gt;
&lt;br /&gt;
There should be an X_MAP_LINK_ENTRY for each piece of metadata that the media server allows to be linked.&lt;br /&gt;
&lt;br /&gt;
For example:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;X_MAP_LINK_ENTRY&amp;gt;&lt;br /&gt;
     &amp;lt;X_MAP_LINK_ENTRY_TAG&amp;gt;artist&amp;lt;/X_MAP_LINK_ENTRY_TAG&amp;gt;&lt;br /&gt;
     &amp;lt;X_MAP_LINK_ENTRY_ID_PREFIX&amp;gt;db/link/artist/&amp;lt;/X_MAP_LINK_ENTRY_ID_PREFIX&amp;gt;&lt;br /&gt;
     &amp;lt;X_MAP_LINK_ENTRY_TYPE&amp;gt;album&amp;lt;/X_MAP_LINK_ENTRY_TYPE&amp;gt;&lt;br /&gt;
 &amp;lt;/X_MAP_LINK_ENTRY&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The example above defines a browse hierarchy that is created when linking from an artist name. The hierarchy created provides a list of linked artist albums which in turn provide a list of tracks.&lt;br /&gt;
&lt;br /&gt;
=== Search map ===&lt;br /&gt;
&lt;br /&gt;
The X_MAP_SEARCH element must contain 1 or more X_MAP_SEARCH_ENTRY elements.&lt;br /&gt;
&lt;br /&gt;
The X_MAP_SEARCH_ENTRY has three child elements.&lt;br /&gt;
&lt;br /&gt;
X_MAP_SEARCH_ENTRY_NAME  is a string that can be used by a control point to label a tab containing these search results.&lt;br /&gt;
&lt;br /&gt;
X_MAP_SEARCH_ENTRY_ID_PREFIX is a string that is a prefix for a UPnP container id. The search results can be found by browsing to the container whose id is the result of appending the search string to this prefix. For instance, if the prefix for an &amp;quot;album&amp;quot; search is defined as db/search/album/, and the search string is &amp;quot;blue&amp;quot;, then the search results container will have an id of db/search/album/blue.&lt;br /&gt;
&lt;br /&gt;
X_MAP_SEARCH_ENTRY_TYPE represents the type of browse hierarchy returned when taking this type of search. See X_MAP_BROWSE_ENTRY_TYPE for details.&lt;br /&gt;
&lt;br /&gt;
There should be an X_MAP_SEARCH_ENTRY for each type of search offered by the media server.&lt;br /&gt;
&lt;br /&gt;
For example:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;X_MAP_SEARCH_ENTRY&amp;gt;&lt;br /&gt;
     &amp;lt;X_MAP_SEARCH_ENTRY_NAME&amp;gt;Artist&amp;lt;/X_MAP_SEARCH_ENTRY_NAME&amp;gt;&lt;br /&gt;
     &amp;lt;X_MAP_SEARCH_ENTRY_ID_PREFIX&amp;gt;db/search/artist/&amp;lt;/X_MAP_SEARCH_ENTRY_ID_PREFIX&amp;gt;&lt;br /&gt;
     &amp;lt;X_MAP_SEARCH_ENTRY_TYPE&amp;gt;artist album&amp;lt;/X_MAP_SEARCH_ENTRY_TYPE&amp;gt;&lt;br /&gt;
 &amp;lt;/X_MAP_SEARCH_ENTRY&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The example above defines a browse hierarchy that is created when searching for an artist. The hierarchy created provides a list of artists, which in turn provide a list of albums, which in turn provide a list of tracks.&lt;br /&gt;
&lt;br /&gt;
=== Types ===&lt;br /&gt;
&lt;br /&gt;
The list of allowed types for X_BROWSE_ENTRY_TYPE, X_MAP_LINK_ENTRY_TAG, X_LINK_ENTRY_TYPE, and X_SEARCH_ENTRY_TYPE&lt;br /&gt;
&lt;br /&gt;
 genre&lt;br /&gt;
 artist&lt;br /&gt;
 composer&lt;br /&gt;
 conductor&lt;br /&gt;
 album&lt;br /&gt;
 year&lt;br /&gt;
 mixed&lt;br /&gt;
&lt;br /&gt;
mixed is a special value that represents a container that has mixed entries. It is not a valid type for the X_MAP_LINK_ENTRY_TAG element.&lt;br /&gt;
&lt;br /&gt;
=== Example device XML ===&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;root xmlns=&amp;quot;urn:schemas-upnp-org:device-1-0&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;specVersion&amp;gt;&lt;br /&gt;
        &amp;lt;major&amp;gt;1&amp;lt;/major&amp;gt;&lt;br /&gt;
        &amp;lt;minor&amp;gt;1&amp;lt;/minor&amp;gt;&lt;br /&gt;
    &amp;lt;/specVersion&amp;gt;&lt;br /&gt;
    &amp;lt;device&amp;gt;&lt;br /&gt;
        &amp;lt;deviceType&amp;gt;urn:schemas-upnp-org:device:MediaServer:1&amp;lt;/deviceType&amp;gt;&lt;br /&gt;
        &amp;lt;dlna:X_DLNADOC xmlns:dlna=&amp;quot;urn:schemas-dlna-org:device-1-0&amp;quot;&amp;gt;DMS-1.50&amp;lt;/dlna:X_DLNADOC&amp;gt;&lt;br /&gt;
        &amp;lt;dlna:X_DLNACAP xmlns:dlna=&amp;quot;urn:schemas-dlna-org:device-1-0&amp;quot;&amp;gt;av-upload,image-upload,audio-upload&amp;lt;/dlna:X_DLNACAP&amp;gt;&lt;br /&gt;
        &amp;lt;openhome:X_MAP xmlns:openhome=&amp;quot;http://www.openhome.org&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;X_MAP_BROWSE&amp;gt;&lt;br /&gt;
                &amp;lt;X_MAP_BROWSE_ENTRY&amp;gt;&lt;br /&gt;
                    &amp;lt;X_MAP_BROWSE_ENTRY_NAME&amp;gt;Albums&amp;lt;/X_MAP_BROWSE_ENTRY_NAME&amp;gt;&lt;br /&gt;
                    &amp;lt;X_MAP_BROWSE_ENTRY_ID&amp;gt;db/browse/albums&amp;lt;/X_MAP_BROWSE_ENTRY_ID&amp;gt;&lt;br /&gt;
                    &amp;lt;X_MAP_BROWSE_ENTRY_TYPE&amp;gt;album&amp;lt;/X_MAP_BROWSE_ENTRY_TYPE&amp;gt;&lt;br /&gt;
                &amp;lt;/X_MAP_BROWSE_ENTRY&amp;gt;&lt;br /&gt;
                &amp;lt;X_MAP_BROWSE_ENTRY&amp;gt;&lt;br /&gt;
                    &amp;lt;X_MAP_BROWSE_ENTRY_NAME&amp;gt;Artists&amp;lt;/X_MAP_BROWSE_ENTRY_NAME&amp;gt;&lt;br /&gt;
                    &amp;lt;X_MAP_BROWSE_ENTRY_ID&amp;gt;db/browse/artists&amp;lt;/X_MAP_BROWSE_ENTRY_ID&amp;gt;&lt;br /&gt;
                    &amp;lt;X_MAP_BROWSE_ENTRY_TYPE&amp;gt;artist album&amp;lt;/X_MAP_BROWSE_ENTRY_TYPE&amp;gt;&lt;br /&gt;
                &amp;lt;/X_MAP_BROWSE_ENTRY&amp;gt;&lt;br /&gt;
                &amp;lt;X_MAP_BROWSE_ENTRY&amp;gt;&lt;br /&gt;
                    &amp;lt;X_MAP_BROWSE_ENTRY_NAME&amp;gt;Folders&amp;lt;/X_MAP_BROWSE_ENTRY_NAME&amp;gt;&lt;br /&gt;
                    &amp;lt;X_MAP_BROWSE_ENTRY_ID&amp;gt;db/browse/folders&amp;lt;/X_MAP_BROWSE_ENTRY_ID&amp;gt;&lt;br /&gt;
                    &amp;lt;X_MAP_BROWSE_ENTRY_TYPE&amp;gt;mixed&amp;lt;/X_MAP_BROWSE_ENTRY_TYPE&amp;gt;&lt;br /&gt;
                &amp;lt;/X_MAP_BROWSE_ENTRY&amp;gt;&lt;br /&gt;
            &amp;lt;/X_MAP_BROWSE&amp;gt;&lt;br /&gt;
            &amp;lt;X_MAP_LINK&amp;gt;&lt;br /&gt;
                &amp;lt;X_MAP_LINK_ENTRY&amp;gt;&lt;br /&gt;
                    &amp;lt;X_MAP_LINK_ENTRY_TAG&amp;gt;artist&amp;lt;/X_MAP_LINK_ENTRY_TAG&amp;gt;&lt;br /&gt;
                    &amp;lt;X_MAP_LINK_ENTRY_ID_PREFIX&amp;gt;db/link/artist/&amp;lt;/X_MAP_LINK_ENTRY_ID_PREFIX&amp;gt;&lt;br /&gt;
                    &amp;lt;X_MAP_LINK_ENTRY_TYPE&amp;gt;album&amp;lt;/X_MAP_LINK_ENTRY_TYPE&amp;gt;&lt;br /&gt;
                &amp;lt;/X_MAP_LINK_ENTRY&amp;gt;&lt;br /&gt;
                &amp;lt;X_MAP_LINK_ENTRY&amp;gt;&lt;br /&gt;
                    &amp;lt;X_MAP_LINK_ENTRY_TAG&amp;gt;composer&amp;lt;/X_MAP_LINK_ENTRY_TAG&amp;gt;&lt;br /&gt;
                    &amp;lt;X_MAP_LINK_ENTRY_ID_PREFIX&amp;gt;db/link/composer/&amp;lt;/X_MAP_LINK_ENTRY_ID_PREFIX&amp;gt;&lt;br /&gt;
                    &amp;lt;X_MAP_LINK_ENTRY_TYPE&amp;gt;album&amp;lt;/X_MAP_LINK_ENTRY_TYPE&amp;gt;&lt;br /&gt;
                &amp;lt;/X_MAP_LINK_ENTRY&amp;gt;&lt;br /&gt;
            &amp;lt;/X_MAP_LINK&amp;gt;&lt;br /&gt;
            &amp;lt;X_MAP_SEARCH&amp;gt;&lt;br /&gt;
                &amp;lt;X_MAP_SEARCH_ENTRY&amp;gt;&lt;br /&gt;
                    &amp;lt;X_MAP_SEARCH_ENTRY_NAME&amp;gt;Artist&amp;lt;/X_MAP_SEARCH_ENTRY_NAME&amp;gt;&lt;br /&gt;
                    &amp;lt;X_MAP_SEARCH_ENTRY_ID_PREFIX&amp;gt;db/search/artist/&amp;lt;/X_MAP_SEARCH_ENTRY_ID_PREFIX&amp;gt;&lt;br /&gt;
                    &amp;lt;X_MAP_SEARCH_ENTRY_TYPE&amp;gt;artist album&amp;lt;/X_MAP_SEARCH_ENTRY_TYPE&amp;gt;&lt;br /&gt;
                &amp;lt;/X_MAP_SEARCH_ENTRY&amp;gt;&lt;br /&gt;
                &amp;lt;X_MAP_SEARCH_ENTRY&amp;gt;&lt;br /&gt;
                    &amp;lt;X_MAP_SEARCH_ENTRY_NAME&amp;gt;Tracks&amp;lt;/X_MAP_SEARCH_ENTRY_NAME&amp;gt;&lt;br /&gt;
                    &amp;lt;X_MAP_SEARCH_ENTRY_ID_PREFIX&amp;gt;db/search/all/&amp;lt;/X_MAP_SEARCH_ENTRY_ID_PREFIX&amp;gt;&lt;br /&gt;
                    &amp;lt;X_MAP_SEARCH_ENTRY_TYPE&amp;gt;&amp;lt;/X_MAP_SEARCH_ENTRY_TYPE&amp;gt;&lt;br /&gt;
                &amp;lt;/X_MAP_SEARCH_ENTRY&amp;gt;&lt;br /&gt;
            &amp;lt;/X_MAP_SEARCH&amp;gt;&lt;br /&gt;
        &amp;lt;/openhome:X_MAP&amp;gt;&lt;br /&gt;
        &amp;lt;presentationURL&amp;gt;http://10.2.1.170:4000/res/linn.co.uk.kazooserver/index.html&amp;lt;/presentationURL&amp;gt;&lt;br /&gt;
        &amp;lt;friendlyName&amp;gt;Linn Kazoo Server [R&amp;amp;D Mac Mini]&amp;lt;/friendlyName&amp;gt;&lt;br /&gt;
        &amp;lt;manufacturer&amp;gt;Linn&amp;lt;/manufacturer&amp;gt;&lt;br /&gt;
        &amp;lt;manufacturerURL&amp;gt;http://www.linn.co.uk&amp;lt;/manufacturerURL&amp;gt;&lt;br /&gt;
        &amp;lt;modelName&amp;gt;Kazoo Server&amp;lt;/modelName&amp;gt;&lt;br /&gt;
        &amp;lt;modelURL&amp;gt;http://oss.linn.co.uk/trac/wiki/KazooServer&amp;lt;/modelURL&amp;gt;&lt;br /&gt;
        &amp;lt;UDN&amp;gt;uuid:ac3d630e37b5f11ff5cdd23c0f5a7400&amp;lt;/UDN&amp;gt;&lt;br /&gt;
        &amp;lt;iconList&amp;gt;&lt;br /&gt;
            &amp;lt;icon&amp;gt;&lt;br /&gt;
                &amp;lt;mimetype&amp;gt;image/png&amp;lt;/mimetype&amp;gt;&lt;br /&gt;
                &amp;lt;width&amp;gt;65&amp;lt;/width&amp;gt;&lt;br /&gt;
                &amp;lt;height&amp;gt;65&amp;lt;/height&amp;gt;&lt;br /&gt;
                &amp;lt;depth&amp;gt;32&amp;lt;/depth&amp;gt;&lt;br /&gt;
                &amp;lt;url&amp;gt;ac3d630e37b5f11ff5cdd23c0f5a7400/resource/icon/icon&amp;lt;/url&amp;gt;&lt;br /&gt;
            &amp;lt;/icon&amp;gt;&lt;br /&gt;
        &amp;lt;/iconList&amp;gt;&lt;br /&gt;
        &amp;lt;serviceList&amp;gt;&lt;br /&gt;
            &amp;lt;service&amp;gt;&lt;br /&gt;
                &amp;lt;serviceType&amp;gt;urn:av-openhome-org:service:PlaylistManager:1&amp;lt;/serviceType&amp;gt;&lt;br /&gt;
                &amp;lt;serviceId&amp;gt;urn:av-openhome-org:serviceId:PlaylistManager&amp;lt;/serviceId&amp;gt;&lt;br /&gt;
                &amp;lt;SCPDURL&amp;gt;/ac3d630e37b5f11ff5cdd23c0f5a7400/Upnp/av.openhome.org-PlaylistManager-1/service.xml&amp;lt;/SCPDURL&amp;gt;&lt;br /&gt;
                &amp;lt;controlURL&amp;gt;/ac3d630e37b5f11ff5cdd23c0f5a7400/av.openhome.org-PlaylistManager-1/control&amp;lt;/controlURL&amp;gt;&lt;br /&gt;
                &amp;lt;eventSubURL&amp;gt;/ac3d630e37b5f11ff5cdd23c0f5a7400/av.openhome.org-PlaylistManager-1/event&amp;lt;/eventSubURL&amp;gt;&lt;br /&gt;
            &amp;lt;/service&amp;gt;&lt;br /&gt;
            &amp;lt;service&amp;gt;&lt;br /&gt;
                &amp;lt;serviceType&amp;gt;urn:schemas-upnp-org:service:ContentDirectory:1&amp;lt;/serviceType&amp;gt;&lt;br /&gt;
                &amp;lt;serviceId&amp;gt;urn:upnp-org:serviceId:ContentDirectory&amp;lt;/serviceId&amp;gt;&lt;br /&gt;
                &amp;lt;SCPDURL&amp;gt;/ac3d630e37b5f11ff5cdd23c0f5a7400/Upnp/upnp.org-ContentDirectory-1/service.xml&amp;lt;/SCPDURL&amp;gt;&lt;br /&gt;
                &amp;lt;controlURL&amp;gt;/ac3d630e37b5f11ff5cdd23c0f5a7400/upnp.org-ContentDirectory-1/control&amp;lt;/controlURL&amp;gt;&lt;br /&gt;
                &amp;lt;eventSubURL&amp;gt;/ac3d630e37b5f11ff5cdd23c0f5a7400/upnp.org-ContentDirectory-1/event&amp;lt;/eventSubURL&amp;gt;&lt;br /&gt;
            &amp;lt;/service&amp;gt;&lt;br /&gt;
            &amp;lt;service&amp;gt;&lt;br /&gt;
                &amp;lt;serviceType&amp;gt;urn:schemas-upnp-org:service:ConnectionManager:1&amp;lt;/serviceType&amp;gt;&lt;br /&gt;
                &amp;lt;serviceId&amp;gt;urn:upnp-org:serviceId:ConnectionManager&amp;lt;/serviceId&amp;gt;&lt;br /&gt;
                &amp;lt;SCPDURL&amp;gt;/ac3d630e37b5f11ff5cdd23c0f5a7400/Upnp/upnp.org-ConnectionManager-1/service.xml&amp;lt;/SCPDURL&amp;gt;&lt;br /&gt;
                &amp;lt;controlURL&amp;gt;/ac3d630e37b5f11ff5cdd23c0f5a7400/upnp.org-ConnectionManager-1/control&amp;lt;/controlURL&amp;gt;&lt;br /&gt;
                &amp;lt;eventSubURL&amp;gt;/ac3d630e37b5f11ff5cdd23c0f5a7400/upnp.org-ConnectionManager-1/event&amp;lt;/eventSubURL&amp;gt;&lt;br /&gt;
            &amp;lt;/service&amp;gt;&lt;br /&gt;
        &amp;lt;/serviceList&amp;gt;&lt;br /&gt;
    &amp;lt;/device&amp;gt;&lt;br /&gt;
 &amp;lt;/root&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Index maps ==&lt;br /&gt;
&lt;br /&gt;
Large lists are difficult to navigate, especially on mobile devices. Mobile devices added the idea of an index map to improve this situation. The index map allows a users to jump to different sections in a large list, similar to what is possible with a scrollbar on desktops.&lt;br /&gt;
&lt;br /&gt;
In order for a control point to generate an index map for any particular level in a ContentDirectory&#039;s hierarchy it first needs to download all the objects in the container, figure out if they are sorted and then calculate the index map. This means that a user will need to wait, perhaps minutes, before an index map is able to be presented on the UI. &lt;br /&gt;
&lt;br /&gt;
The media server can optionally return an index map for container that are in alphabetical order. This implemented through a OpenHome vendor extension of the DIDL-Lite XML. Below shows an example DIDL-Lite with an index map included.&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;DIDL-Lite xmlns=&amp;quot;urn:schemas-upnp-org:metadata-1-0/DIDL-Lite/&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;container id=&amp;quot;db/ba37a2ac24efa676c8676aab71a6cdf074&amp;quot; parentID=&amp;quot;0&amp;quot; restricted=&amp;quot;true&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;dc:title xmlns:dc=&amp;quot;http://purl.org/dc/elements/1.1/&amp;quot;&amp;gt;Worlds Apart [Deluxe Edition]&amp;lt;/dc:title&amp;gt;&lt;br /&gt;
        &amp;lt;upnp:udn xmlns:upnp=&amp;quot;urn:schemas-upnp-org:metadata-1-0/upnp/&amp;quot;&amp;gt;ac3d630e37b5f11ff5cdd23c0f5a7400&amp;lt;/upnp:udn&amp;gt;&lt;br /&gt;
        &amp;lt;upnp:class xmlns:upnp=&amp;quot;urn:schemas-upnp-org:metadata-1-0/upnp/&amp;quot;&amp;gt;object.container.album.musicAlbum&amp;lt;/upnp:class&amp;gt;&lt;br /&gt;
        &amp;lt;upnp:artist xmlns:upnp=&amp;quot;urn:schemas-upnp-org:metadata-1-0/upnp/&amp;quot;&amp;gt;...And You Will Know Us by the Trail of Dead&amp;lt;/upnp:artist&amp;gt;&lt;br /&gt;
        &amp;lt;upnp:albumArtURI&amp;gt;http://10.2.1.170:4000/linn.co.uk.kazooserver/ms/artwork/37a2ac2?size=0&amp;lt;/upnp:albumArtURI&amp;gt;&lt;br /&gt;
    &amp;lt;/container&amp;gt;&lt;br /&gt;
    &amp;lt;desc nameSpace=&amp;quot;openhome.org&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;indexmap&amp;gt;0 10 10 10 10 10 0 0 0 0 10 12 1 10 10 10 12 17 18 1 0 20 0 20 20 2 2 24&amp;lt;/indexmap&amp;gt;&lt;br /&gt;
    &amp;lt;/desc&amp;gt;&lt;br /&gt;
 &amp;lt;/DIDL-Lite&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The index map contains a space separated list of 28 number representing the total number of items that begin with that letter. #, represents everything below A, largely digits and punctuation and + represents everything above Z, largely international characters not collatable within the roman alphabet.&lt;br /&gt;
&lt;br /&gt;
 # A B C D E F G H I J K L M N O P Q R S T U V W X Y Z +&lt;br /&gt;
&lt;br /&gt;
== Image Resolution ==&lt;br /&gt;
&lt;br /&gt;
Control points running on different platforms have different memory limits and display technologies. This means that a control point on a PC might want to display artwork at a high resolution, while a control point on a PDA might want to display artwork at a much lower resolution.&lt;br /&gt;
&lt;br /&gt;
Media servers often try to solve this problem using one of the following two methods:&lt;br /&gt;
&lt;br /&gt;
# A configurable parameter that scales all artwork to a user defined size&lt;br /&gt;
# A profile system where a user can create profiles for each class of control point they have and configure a parameter that scales all artwork to a user defined size per profile&lt;br /&gt;
&lt;br /&gt;
The first solution is highly problematic because it limits the resolution of artwork across the whole network. But a single network very often contains control points that can display high resolution images AND control points that can&#039;t.&lt;br /&gt;
&lt;br /&gt;
The second solution is just architecturally poor, turning the relationship between a control point and a media server on its head. Why should the media server try to infer what a control point needs through configuration when the control point is perfectly capable of telling the media server its exact requirements in every single circumstance.&lt;br /&gt;
&lt;br /&gt;
So, it is proposed that compliant media servers include a &#039;&#039;&#039;size&#039;&#039;&#039; element in their artwork uri&#039;s, where the size is the image&#039;s largest dimension. This allows a control point to ask for an image at a specified size.&lt;br /&gt;
&lt;br /&gt;
=== Example ===&lt;br /&gt;
&lt;br /&gt;
If the original artwork was 400x512, then a media server would provide the following albumArtURI: &amp;lt;uri&amp;gt;?size=512. If it is not possible for the media server to obtain the original resolution then the media server would provide the following albumArtURI: &amp;lt;uri&amp;gt;?size=0.&lt;br /&gt;
&lt;br /&gt;
The presence of the size element tells the control point:&lt;br /&gt;
&lt;br /&gt;
# the media server implements the image scaling extension&lt;br /&gt;
# the original size of the image.&lt;br /&gt;
&lt;br /&gt;
Now the control point can request the image at any resolution by using &amp;lt;uri&amp;gt;?size=x, where x is the size it wants.&lt;br /&gt;
&lt;br /&gt;
So, in this example, &amp;lt;uri&amp;gt;?size=1024 gets an 800x1024 image, and &amp;lt;uri&amp;gt;?size=200 gets a 156x200 image.&lt;br /&gt;
&lt;br /&gt;
== albumArtURI&amp;lt;br&amp;gt; ==&lt;br /&gt;
&lt;br /&gt;
The current specification only allows retrieval of artwork for a musicAlbum container through the property albumArtURI. When browsing a music library on a control point it quickly becomes clear that to implement a graphically rich control point the ContentDirectory service should provide a way to retrieve artwork for all of the content directory classes, not just musicAlbum containers.&lt;br /&gt;
&lt;br /&gt;
There has become a somewhat defacto standard where just about all media server provide an albumArtURI property for a musicItem item as well as for a musicAlbum container, however this is still not good enough to implement a graphically rich control point.&lt;br /&gt;
&lt;br /&gt;
It is proposed that an optional property is introduced to the object class called &#039;&#039;&#039;albumArtURI&#039;&#039;&amp;amp;nbsp;&#039;&#039;&#039;&#039;&#039;which may contain an attribute &#039;&#039;&#039;title&#039;&#039;&#039;,&amp;amp;nbsp;e.g. &amp;amp;lt;albumArtURI title=&amp;quot;Font Cover&amp;quot;&amp;amp;gt;http://Front Cover.jpg&amp;amp;lt;/albumArtURI&amp;amp;gt;.&amp;amp;nbsp;The object class can contain zero or more albumArtURIs elements.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Low =&lt;br /&gt;
&lt;br /&gt;
== Dynamic IP Addresses ==&lt;br /&gt;
&lt;br /&gt;
At present all media servers return URIs that contain a reference to their IP address, e.g. http://172.20.1.1/music.flac etc. This means that if the media server&#039;s IP address were to change across reboots, then any control point or media renderer with URIs that referenced the media server before the reboot will become invalid.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
It is proposed that a media server should always reference itself by host name and not by IP address in any XML that it sends to external devices, i.e. http://mynas/music.flac.&lt;br /&gt;
&lt;br /&gt;
== Disc Information ==&lt;br /&gt;
&lt;br /&gt;
It is proposed that two new properties are added to the musicTrack item called &#039;&#039;&#039;OriginalDiscNumber&#039;&#039;&#039; and &#039;&#039;&#039;OriginalDiscCount&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== Replay Gain Information ==&lt;br /&gt;
&lt;br /&gt;
It is proposed that four new properties are added to the musicTrack item called &#039;&#039;&#039;ReplayGainAlbum&#039;&#039;&#039;, &#039;&#039;&#039;ReplayGainAlbumPeak&#039;&#039;&#039;, &#039;&#039;&#039;ReplayGainTrack&#039;&#039;&#039;, and &#039;&#039;&#039;ReplayGainTrackPeak&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
== webURI ==&lt;br /&gt;
&lt;br /&gt;
The current specification does not easily allow a control point to provide rich information about objects in the browse hierarchy.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
It is proposed to add an optionally property to the object class called &#039;&#039;&#039;webURI&amp;amp;nbsp;&#039;&#039;&#039;which will contain a URI to a website that provides a rich collection of information about the object, e.g. for a musicArtist container it would provided a link to a website that provided information about the artist.&lt;/div&gt;</summary>
		<author><name>Davidd</name></author>
	</entry>
	<entry>
		<id>https://docs.linn.co.uk/wiki/index.php?title=Developer:Media_Server_Extensions&amp;diff=11192</id>
		<title>Developer:Media Server Extensions</title>
		<link rel="alternate" type="text/html" href="https://docs.linn.co.uk/wiki/index.php?title=Developer:Media_Server_Extensions&amp;diff=11192"/>
		<updated>2015-02-20T17:57:11Z</updated>

		<summary type="html">&lt;p&gt;Davidd: /* High */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Introduction =&lt;br /&gt;
&lt;br /&gt;
The ContentDirectory service has various limitations which become apparent when implementing control points on different hardware platforms. This document aims to outline some ideas that address the various shortcomings of the ContentDirectory specification.&lt;br /&gt;
&lt;br /&gt;
== Container map ==&lt;br /&gt;
&lt;br /&gt;
The current ContentDirectory specification makes it tricky for a control point to display the returned contents in an appropriate, aesthetically pleasing, manner for the content being viewed. This is because the ContentDirectory specification does not allow for a control point to know in advanced what content to expect when browsing through any particular hierarchy.&lt;br /&gt;
&lt;br /&gt;
An example of this might be, at a particular point in the browse hierarchy the ContentDirectory will return a list of albums which in turn will contain a list of tracks. A UI might wish to represent this list of albums as a grid and the album&#039;s tracks as a header and a list of the tracks. Currently it is not possible for the UI to know when it gets to a point in a hierarchy where the hierarchy represents a list of albums followed by a list of tracks.&lt;br /&gt;
&lt;br /&gt;
The container map extension allows a media server to express its container hierarchy in advance of the control point navigating it. This is done using an OpenHome vendor extension to the device XML.&lt;br /&gt;
&lt;br /&gt;
Three types of mapped container are defined: browse, link, and search.&lt;br /&gt;
&lt;br /&gt;
The browse map defines named top level containers that represent significant starting points for browsing that can meaningfully be presented in top level tabs of a control point UI. The browse map is expressed within the X_MAP_BROWSE element of X_MAP.&lt;br /&gt;
&lt;br /&gt;
The link map defines containers that can be meaningfully linked to from track or album details. For instance a track will typically have an artist defined. If an entry for &amp;quot;artist&amp;quot; is defined in the link map then it will be possible for the user of a control point to quickly access this artist-related container by clicking on the track&#039;s artist text. Similar links might be offered for &amp;quot;genre&amp;quot;, &amp;quot;composer&amp;quot;, &amp;quot;conductor&amp;quot;, etc. The link map is expressed within the X_MAP_LINK element of X_MAP.&lt;br /&gt;
&lt;br /&gt;
The search map defines the different kinds of search containers and the type of results that they produce. The search map is expressed within the X_MAP_SEARCH element of X_MAP.&lt;br /&gt;
&lt;br /&gt;
=== Browse map ===&lt;br /&gt;
&lt;br /&gt;
The X_MAP_BROWSE element must contain 1 or more X_MAP_BROWSE_ENTRY elements.&lt;br /&gt;
&lt;br /&gt;
The X_MAP_BROWSE_ENTRY has three child elements.&lt;br /&gt;
&lt;br /&gt;
X_MAP_BROWSE_ENTRY_NAME is a string that can be used by a control point to label a tab containing this browse hierarchy.&lt;br /&gt;
&lt;br /&gt;
X_MAP_BROWSE_ENTRY_ID is the UPnP container id that contains the root of this browse hierarchy. This id is then submitted to the ContentDirectory service using the Browse action as usual. The returned contents are navigated using subsequent Browse request as usual. The difference is that the control point knows in advance what kind of results to expect at each level.&lt;br /&gt;
&lt;br /&gt;
X_MAP_BROWSE_ENTRY_TYPE is a space separated list of strings that maps out the kind of containers that are to be found at each level of this browse hierarchy. For instance, &amp;quot;artist album&amp;quot; represents a browse hierarchy giving a container containing only artist containers, each of which contains only album containers, each of which contains only tracks.&lt;br /&gt;
&lt;br /&gt;
There should be an X_MAP_BROWSE_ENTRY for each root browse hierarchy defined by the media server.&lt;br /&gt;
&lt;br /&gt;
For example:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;X_MAP_BROWSE_ENTRY&amp;gt;&lt;br /&gt;
     &amp;lt;X_MAP_BROWSE_ENTRY_NAME&amp;gt;Genre&amp;lt;/X_MAP_BROWSE_ENTRY_NAME&amp;gt;&lt;br /&gt;
     &amp;lt;X_MAP_BROWSE_ENTRY_ID&amp;gt;db/browse/genre&amp;lt;/X_MAP_BROWSE_ENTRY_ID&amp;gt;&lt;br /&gt;
     &amp;lt;X_MAP_BROWSE_ENTRY_TYPE&amp;gt;genre artist album&amp;lt;/X_MAP_BROWSE_ENTRY_TYPE&amp;gt;&lt;br /&gt;
 &amp;lt;/X_MAP_BROWSE_ENTRY&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Link map ===&lt;br /&gt;
&lt;br /&gt;
The X_MAP_LINK element must contain 1 or more X_MAP_LINK_ENTRY elements.&lt;br /&gt;
&lt;br /&gt;
The X_MAP_LINK_ENTRY has three child elements.&lt;br /&gt;
&lt;br /&gt;
X_MAP_LINK_ENTRY_TAG is a string that defines which type of metadata is the target for this link. e.g. &amp;quot;artist&amp;quot;, &amp;quot;genre&amp;quot;, &amp;quot;composer&amp;quot;, etc. See the type section below. &lt;br /&gt;
&lt;br /&gt;
X_MAP_LINK_ENTRY_ID_PREFIX is a string that is prefix for a UPnP container id. The link can be taken by browsing to the container whose id is the result of appending the associated metadata value to this prefix. For instance, if the prefix for an &amp;quot;artist&amp;quot; link is defined as db/link/artist/, and a track returned anywhere in the media server&#039;s library has &amp;quot;Pink Floyd&amp;quot; as its artist. Then the linked container will have an id of db/link/artist/Pink Floyd.&lt;br /&gt;
&lt;br /&gt;
X_MAP_LINK_ENTRY_TYPE represents the type of browse hierarchy returned when taking this type of link. See X_MAP_BROWSE_ENTRY_TYPE for details.&lt;br /&gt;
&lt;br /&gt;
There should be an X_MAP_LINK_ENTRY for each piece of metadata that the media server allows to be linked.&lt;br /&gt;
&lt;br /&gt;
For example:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;X_MAP_LINK_ENTRY&amp;gt;&lt;br /&gt;
     &amp;lt;X_MAP_LINK_ENTRY_TAG&amp;gt;artist&amp;lt;/X_MAP_LINK_ENTRY_TAG&amp;gt;&lt;br /&gt;
     &amp;lt;X_MAP_LINK_ENTRY_ID_PREFIX&amp;gt;db/link/artist/&amp;lt;/X_MAP_LINK_ENTRY_ID_PREFIX&amp;gt;&lt;br /&gt;
     &amp;lt;X_MAP_LINK_ENTRY_TYPE&amp;gt;album&amp;lt;/X_MAP_LINK_ENTRY_TYPE&amp;gt;&lt;br /&gt;
 &amp;lt;/X_MAP_LINK_ENTRY&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The example above defines a browse hierarchy that is created when linking from an artist name. The hierarchy created provides a list of linked artist albums which in turn provide a list of tracks.&lt;br /&gt;
&lt;br /&gt;
=== Search map ===&lt;br /&gt;
&lt;br /&gt;
The X_MAP_SEARCH element must contain 1 or more X_MAP_SEARCH_ENTRY elements.&lt;br /&gt;
&lt;br /&gt;
The X_MAP_SEARCH_ENTRY has three child elements.&lt;br /&gt;
&lt;br /&gt;
X_MAP_SEARCH_ENTRY_NAME  is a string that can be used by a control point to label a tab containing these search results.&lt;br /&gt;
&lt;br /&gt;
X_MAP_SEARCH_ENTRY_ID_PREFIX is a string that is a prefix for a UPnP container id. The search results can be found by browsing to the container whose id is the result of appending the search string to this prefix. For instance, if the prefix for an &amp;quot;album&amp;quot; search is defined as db/search/album/, and the search string is &amp;quot;blue&amp;quot;, then the search results container will have an id of db/search/album/blue.&lt;br /&gt;
&lt;br /&gt;
X_MAP_SEARCH_ENTRY_TYPE represents the type of browse hierarchy returned when taking this type of search. See X_MAP_BROWSE_ENTRY_TYPE for details.&lt;br /&gt;
&lt;br /&gt;
There should be an X_MAP_SEARCH_ENTRY for each type of search offered by the media server.&lt;br /&gt;
&lt;br /&gt;
For example:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;X_MAP_SEARCH_ENTRY&amp;gt;&lt;br /&gt;
     &amp;lt;X_MAP_SEARCH_ENTRY_NAME&amp;gt;Artist&amp;lt;/X_MAP_SEARCH_ENTRY_NAME&amp;gt;&lt;br /&gt;
     &amp;lt;X_MAP_SEARCH_ENTRY_ID_PREFIX&amp;gt;db/search/artist/&amp;lt;/X_MAP_SEARCH_ENTRY_ID_PREFIX&amp;gt;&lt;br /&gt;
     &amp;lt;X_MAP_SEARCH_ENTRY_TYPE&amp;gt;artist album&amp;lt;/X_MAP_SEARCH_ENTRY_TYPE&amp;gt;&lt;br /&gt;
 &amp;lt;/X_MAP_SEARCH_ENTRY&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The example above defines a browse hierarchy that is created when searching for an artist. The hierarchy created provides a list of artists, which in turn provide a list of albums, which in turn provide a list of tracks.&lt;br /&gt;
&lt;br /&gt;
=== Types ===&lt;br /&gt;
&lt;br /&gt;
The list of allowed types for X_BROWSE_ENTRY_TYPE, X_MAP_LINK_ENTRY_TAG, X_LINK_ENTRY_TYPE, and X_SEARCH_ENTRY_TYPE&lt;br /&gt;
&lt;br /&gt;
 genre&lt;br /&gt;
 artist&lt;br /&gt;
 composer&lt;br /&gt;
 conductor&lt;br /&gt;
 album&lt;br /&gt;
 year&lt;br /&gt;
 mixed&lt;br /&gt;
&lt;br /&gt;
mixed is a special value that represents a container that has mixed entries. It is not a valid type for the X_MAP_LINK_ENTRY_TAG element.&lt;br /&gt;
&lt;br /&gt;
=== Example device XML ===&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;root xmlns=&amp;quot;urn:schemas-upnp-org:device-1-0&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;specVersion&amp;gt;&lt;br /&gt;
        &amp;lt;major&amp;gt;1&amp;lt;/major&amp;gt;&lt;br /&gt;
        &amp;lt;minor&amp;gt;1&amp;lt;/minor&amp;gt;&lt;br /&gt;
    &amp;lt;/specVersion&amp;gt;&lt;br /&gt;
    &amp;lt;device&amp;gt;&lt;br /&gt;
        &amp;lt;deviceType&amp;gt;urn:schemas-upnp-org:device:MediaServer:1&amp;lt;/deviceType&amp;gt;&lt;br /&gt;
        &amp;lt;dlna:X_DLNADOC xmlns:dlna=&amp;quot;urn:schemas-dlna-org:device-1-0&amp;quot;&amp;gt;DMS-1.50&amp;lt;/dlna:X_DLNADOC&amp;gt;&lt;br /&gt;
        &amp;lt;dlna:X_DLNACAP xmlns:dlna=&amp;quot;urn:schemas-dlna-org:device-1-0&amp;quot;&amp;gt;av-upload,image-upload,audio-upload&amp;lt;/dlna:X_DLNACAP&amp;gt;&lt;br /&gt;
        &amp;lt;openhome:X_MAP xmlns:openhome=&amp;quot;http://www.openhome.org&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;X_MAP_BROWSE&amp;gt;&lt;br /&gt;
                &amp;lt;X_MAP_BROWSE_ENTRY&amp;gt;&lt;br /&gt;
                    &amp;lt;X_MAP_BROWSE_ENTRY_NAME&amp;gt;Albums&amp;lt;/X_MAP_BROWSE_ENTRY_NAME&amp;gt;&lt;br /&gt;
                    &amp;lt;X_MAP_BROWSE_ENTRY_ID&amp;gt;db/browse/albums&amp;lt;/X_MAP_BROWSE_ENTRY_ID&amp;gt;&lt;br /&gt;
                    &amp;lt;X_MAP_BROWSE_ENTRY_TYPE&amp;gt;album&amp;lt;/X_MAP_BROWSE_ENTRY_TYPE&amp;gt;&lt;br /&gt;
                &amp;lt;/X_MAP_BROWSE_ENTRY&amp;gt;&lt;br /&gt;
                &amp;lt;X_MAP_BROWSE_ENTRY&amp;gt;&lt;br /&gt;
                    &amp;lt;X_MAP_BROWSE_ENTRY_NAME&amp;gt;Artists&amp;lt;/X_MAP_BROWSE_ENTRY_NAME&amp;gt;&lt;br /&gt;
                    &amp;lt;X_MAP_BROWSE_ENTRY_ID&amp;gt;db/browse/artists&amp;lt;/X_MAP_BROWSE_ENTRY_ID&amp;gt;&lt;br /&gt;
                    &amp;lt;X_MAP_BROWSE_ENTRY_TYPE&amp;gt;artist album&amp;lt;/X_MAP_BROWSE_ENTRY_TYPE&amp;gt;&lt;br /&gt;
                &amp;lt;/X_MAP_BROWSE_ENTRY&amp;gt;&lt;br /&gt;
                &amp;lt;X_MAP_BROWSE_ENTRY&amp;gt;&lt;br /&gt;
                    &amp;lt;X_MAP_BROWSE_ENTRY_NAME&amp;gt;Folders&amp;lt;/X_MAP_BROWSE_ENTRY_NAME&amp;gt;&lt;br /&gt;
                    &amp;lt;X_MAP_BROWSE_ENTRY_ID&amp;gt;db/browse/folders&amp;lt;/X_MAP_BROWSE_ENTRY_ID&amp;gt;&lt;br /&gt;
                    &amp;lt;X_MAP_BROWSE_ENTRY_TYPE&amp;gt;mixed&amp;lt;/X_MAP_BROWSE_ENTRY_TYPE&amp;gt;&lt;br /&gt;
                &amp;lt;/X_MAP_BROWSE_ENTRY&amp;gt;&lt;br /&gt;
            &amp;lt;/X_MAP_BROWSE&amp;gt;&lt;br /&gt;
            &amp;lt;X_MAP_LINK&amp;gt;&lt;br /&gt;
                &amp;lt;X_MAP_LINK_ENTRY&amp;gt;&lt;br /&gt;
                    &amp;lt;X_MAP_LINK_ENTRY_TAG&amp;gt;artist&amp;lt;/X_MAP_LINK_ENTRY_TAG&amp;gt;&lt;br /&gt;
                    &amp;lt;X_MAP_LINK_ENTRY_ID_PREFIX&amp;gt;db/link/artist/&amp;lt;/X_MAP_LINK_ENTRY_ID_PREFIX&amp;gt;&lt;br /&gt;
                    &amp;lt;X_MAP_LINK_ENTRY_TYPE&amp;gt;album&amp;lt;/X_MAP_LINK_ENTRY_TYPE&amp;gt;&lt;br /&gt;
                &amp;lt;/X_MAP_LINK_ENTRY&amp;gt;&lt;br /&gt;
                &amp;lt;X_MAP_LINK_ENTRY&amp;gt;&lt;br /&gt;
                    &amp;lt;X_MAP_LINK_ENTRY_TAG&amp;gt;composer&amp;lt;/X_MAP_LINK_ENTRY_TAG&amp;gt;&lt;br /&gt;
                    &amp;lt;X_MAP_LINK_ENTRY_ID_PREFIX&amp;gt;db/link/composer/&amp;lt;/X_MAP_LINK_ENTRY_ID_PREFIX&amp;gt;&lt;br /&gt;
                    &amp;lt;X_MAP_LINK_ENTRY_TYPE&amp;gt;album&amp;lt;/X_MAP_LINK_ENTRY_TYPE&amp;gt;&lt;br /&gt;
                &amp;lt;/X_MAP_LINK_ENTRY&amp;gt;&lt;br /&gt;
            &amp;lt;/X_MAP_LINK&amp;gt;&lt;br /&gt;
            &amp;lt;X_MAP_SEARCH&amp;gt;&lt;br /&gt;
                &amp;lt;X_MAP_SEARCH_ENTRY&amp;gt;&lt;br /&gt;
                    &amp;lt;X_MAP_SEARCH_ENTRY_NAME&amp;gt;Artist&amp;lt;/X_MAP_SEARCH_ENTRY_NAME&amp;gt;&lt;br /&gt;
                    &amp;lt;X_MAP_SEARCH_ENTRY_ID_PREFIX&amp;gt;db/search/artist/&amp;lt;/X_MAP_SEARCH_ENTRY_ID_PREFIX&amp;gt;&lt;br /&gt;
                    &amp;lt;X_MAP_SEARCH_ENTRY_TYPE&amp;gt;artist album&amp;lt;/X_MAP_SEARCH_ENTRY_TYPE&amp;gt;&lt;br /&gt;
                &amp;lt;/X_MAP_SEARCH_ENTRY&amp;gt;&lt;br /&gt;
                &amp;lt;X_MAP_SEARCH_ENTRY&amp;gt;&lt;br /&gt;
                    &amp;lt;X_MAP_SEARCH_ENTRY_NAME&amp;gt;Tracks&amp;lt;/X_MAP_SEARCH_ENTRY_NAME&amp;gt;&lt;br /&gt;
                    &amp;lt;X_MAP_SEARCH_ENTRY_ID_PREFIX&amp;gt;db/search/all/&amp;lt;/X_MAP_SEARCH_ENTRY_ID_PREFIX&amp;gt;&lt;br /&gt;
                    &amp;lt;X_MAP_SEARCH_ENTRY_TYPE&amp;gt;&amp;lt;/X_MAP_SEARCH_ENTRY_TYPE&amp;gt;&lt;br /&gt;
                &amp;lt;/X_MAP_SEARCH_ENTRY&amp;gt;&lt;br /&gt;
            &amp;lt;/X_MAP_SEARCH&amp;gt;&lt;br /&gt;
        &amp;lt;/openhome:X_MAP&amp;gt;&lt;br /&gt;
        &amp;lt;presentationURL&amp;gt;http://10.2.1.170:4000/res/linn.co.uk.kazooserver/index.html&amp;lt;/presentationURL&amp;gt;&lt;br /&gt;
        &amp;lt;friendlyName&amp;gt;Linn Kazoo Server [R&amp;amp;D Mac Mini]&amp;lt;/friendlyName&amp;gt;&lt;br /&gt;
        &amp;lt;manufacturer&amp;gt;Linn&amp;lt;/manufacturer&amp;gt;&lt;br /&gt;
        &amp;lt;manufacturerURL&amp;gt;http://www.linn.co.uk&amp;lt;/manufacturerURL&amp;gt;&lt;br /&gt;
        &amp;lt;modelName&amp;gt;Kazoo Server&amp;lt;/modelName&amp;gt;&lt;br /&gt;
        &amp;lt;modelURL&amp;gt;http://oss.linn.co.uk/trac/wiki/KazooServer&amp;lt;/modelURL&amp;gt;&lt;br /&gt;
        &amp;lt;UDN&amp;gt;uuid:ac3d630e37b5f11ff5cdd23c0f5a7400&amp;lt;/UDN&amp;gt;&lt;br /&gt;
        &amp;lt;iconList&amp;gt;&lt;br /&gt;
            &amp;lt;icon&amp;gt;&lt;br /&gt;
                &amp;lt;mimetype&amp;gt;image/png&amp;lt;/mimetype&amp;gt;&lt;br /&gt;
                &amp;lt;width&amp;gt;65&amp;lt;/width&amp;gt;&lt;br /&gt;
                &amp;lt;height&amp;gt;65&amp;lt;/height&amp;gt;&lt;br /&gt;
                &amp;lt;depth&amp;gt;32&amp;lt;/depth&amp;gt;&lt;br /&gt;
                &amp;lt;url&amp;gt;ac3d630e37b5f11ff5cdd23c0f5a7400/resource/icon/icon&amp;lt;/url&amp;gt;&lt;br /&gt;
            &amp;lt;/icon&amp;gt;&lt;br /&gt;
        &amp;lt;/iconList&amp;gt;&lt;br /&gt;
        &amp;lt;serviceList&amp;gt;&lt;br /&gt;
            &amp;lt;service&amp;gt;&lt;br /&gt;
                &amp;lt;serviceType&amp;gt;urn:av-openhome-org:service:PlaylistManager:1&amp;lt;/serviceType&amp;gt;&lt;br /&gt;
                &amp;lt;serviceId&amp;gt;urn:av-openhome-org:serviceId:PlaylistManager&amp;lt;/serviceId&amp;gt;&lt;br /&gt;
                &amp;lt;SCPDURL&amp;gt;/ac3d630e37b5f11ff5cdd23c0f5a7400/Upnp/av.openhome.org-PlaylistManager-1/service.xml&amp;lt;/SCPDURL&amp;gt;&lt;br /&gt;
                &amp;lt;controlURL&amp;gt;/ac3d630e37b5f11ff5cdd23c0f5a7400/av.openhome.org-PlaylistManager-1/control&amp;lt;/controlURL&amp;gt;&lt;br /&gt;
                &amp;lt;eventSubURL&amp;gt;/ac3d630e37b5f11ff5cdd23c0f5a7400/av.openhome.org-PlaylistManager-1/event&amp;lt;/eventSubURL&amp;gt;&lt;br /&gt;
            &amp;lt;/service&amp;gt;&lt;br /&gt;
            &amp;lt;service&amp;gt;&lt;br /&gt;
                &amp;lt;serviceType&amp;gt;urn:schemas-upnp-org:service:ContentDirectory:1&amp;lt;/serviceType&amp;gt;&lt;br /&gt;
                &amp;lt;serviceId&amp;gt;urn:upnp-org:serviceId:ContentDirectory&amp;lt;/serviceId&amp;gt;&lt;br /&gt;
                &amp;lt;SCPDURL&amp;gt;/ac3d630e37b5f11ff5cdd23c0f5a7400/Upnp/upnp.org-ContentDirectory-1/service.xml&amp;lt;/SCPDURL&amp;gt;&lt;br /&gt;
                &amp;lt;controlURL&amp;gt;/ac3d630e37b5f11ff5cdd23c0f5a7400/upnp.org-ContentDirectory-1/control&amp;lt;/controlURL&amp;gt;&lt;br /&gt;
                &amp;lt;eventSubURL&amp;gt;/ac3d630e37b5f11ff5cdd23c0f5a7400/upnp.org-ContentDirectory-1/event&amp;lt;/eventSubURL&amp;gt;&lt;br /&gt;
            &amp;lt;/service&amp;gt;&lt;br /&gt;
            &amp;lt;service&amp;gt;&lt;br /&gt;
                &amp;lt;serviceType&amp;gt;urn:schemas-upnp-org:service:ConnectionManager:1&amp;lt;/serviceType&amp;gt;&lt;br /&gt;
                &amp;lt;serviceId&amp;gt;urn:upnp-org:serviceId:ConnectionManager&amp;lt;/serviceId&amp;gt;&lt;br /&gt;
                &amp;lt;SCPDURL&amp;gt;/ac3d630e37b5f11ff5cdd23c0f5a7400/Upnp/upnp.org-ConnectionManager-1/service.xml&amp;lt;/SCPDURL&amp;gt;&lt;br /&gt;
                &amp;lt;controlURL&amp;gt;/ac3d630e37b5f11ff5cdd23c0f5a7400/upnp.org-ConnectionManager-1/control&amp;lt;/controlURL&amp;gt;&lt;br /&gt;
                &amp;lt;eventSubURL&amp;gt;/ac3d630e37b5f11ff5cdd23c0f5a7400/upnp.org-ConnectionManager-1/event&amp;lt;/eventSubURL&amp;gt;&lt;br /&gt;
            &amp;lt;/service&amp;gt;&lt;br /&gt;
        &amp;lt;/serviceList&amp;gt;&lt;br /&gt;
    &amp;lt;/device&amp;gt;&lt;br /&gt;
 &amp;lt;/root&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Index maps ==&lt;br /&gt;
&lt;br /&gt;
Large lists are difficult to navigate, especially on mobile devices. Mobile devices added the idea of an index map to improve this situation. The index map allows a users to jump to different sections in a large list, similar to what is possible with a scrollbar on desktops.&lt;br /&gt;
&lt;br /&gt;
In order for a control point to generate an index map for any particular level in a ContentDirectory&#039;s hierarchy it first needs to download all the objects in the container, figure out if they are sorted and then calculate the index map. This means that a user will need to wait, perhaps minutes, before an index map is able to be presented on the UI. &lt;br /&gt;
&lt;br /&gt;
The media server can optionally return an index map for container that are in alphabetical order. This implemented through a OpenHome vendor extension of the DIDL-Lite XML. Below shows an example DIDL-Lite with an index map included.&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;DIDL-Lite xmlns=&amp;quot;urn:schemas-upnp-org:metadata-1-0/DIDL-Lite/&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;container id=&amp;quot;db/ba37a2ac24efa676c8676aab71a6cdf074&amp;quot; parentID=&amp;quot;0&amp;quot; restricted=&amp;quot;true&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;dc:title xmlns:dc=&amp;quot;http://purl.org/dc/elements/1.1/&amp;quot;&amp;gt;Worlds Apart [Deluxe Edition]&amp;lt;/dc:title&amp;gt;&lt;br /&gt;
        &amp;lt;upnp:udn xmlns:upnp=&amp;quot;urn:schemas-upnp-org:metadata-1-0/upnp/&amp;quot;&amp;gt;ac3d630e37b5f11ff5cdd23c0f5a7400&amp;lt;/upnp:udn&amp;gt;&lt;br /&gt;
        &amp;lt;upnp:class xmlns:upnp=&amp;quot;urn:schemas-upnp-org:metadata-1-0/upnp/&amp;quot;&amp;gt;object.container.album.musicAlbum&amp;lt;/upnp:class&amp;gt;&lt;br /&gt;
        &amp;lt;upnp:artist xmlns:upnp=&amp;quot;urn:schemas-upnp-org:metadata-1-0/upnp/&amp;quot;&amp;gt;...And You Will Know Us by the Trail of Dead&amp;lt;/upnp:artist&amp;gt;&lt;br /&gt;
        &amp;lt;upnp:albumArtURI&amp;gt;http://10.2.1.170:4000/linn.co.uk.kazooserver/ms/artwork/37a2ac2?size=0&amp;lt;/upnp:albumArtURI&amp;gt;&lt;br /&gt;
    &amp;lt;/container&amp;gt;&lt;br /&gt;
    &amp;lt;desc nameSpace=&amp;quot;openhome.org&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;indexmap&amp;gt;0 10 10 10 10 10 0 0 0 0 10 12 1 10 10 10 12 17 18 1 0 20 0 20 20 2 2 24&amp;lt;/indexmap&amp;gt;&lt;br /&gt;
    &amp;lt;/desc&amp;gt;&lt;br /&gt;
 &amp;lt;/DIDL-Lite&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The index map contains a space separated list of 28 number representing the total number of items that begin with that letter. #, represents everything below A, largely digits and punctuation and + represents everything above Z, largely international characters not collatable within the roman alphabet.&lt;br /&gt;
&lt;br /&gt;
 # A B C D E F G H I J K L M N O P Q R S T U V W X Y Z +&lt;br /&gt;
&lt;br /&gt;
== Image Resolution ==&lt;br /&gt;
&lt;br /&gt;
Control points running on different platforms have different memory limits and display technologies. This means that a control point on a PC might want to display artwork at a high resolution, while a control point on a PDA might want to display artwork at a much lower resolution.&lt;br /&gt;
&lt;br /&gt;
Media servers often try to solve this problem using one of the following two methods:&lt;br /&gt;
&lt;br /&gt;
# A configurable parameter that scales all artwork to a user defined size&lt;br /&gt;
# A profile system where a user can create profiles for each class of control point they have and configure a parameter that scales all artwork to a user defined size per profile&lt;br /&gt;
&lt;br /&gt;
The first solution is highly problematic because it limits the resolution of artwork across the whole network. But a single network very often contains control points that can display high resolution images AND control points that can&#039;t.&lt;br /&gt;
&lt;br /&gt;
The second solution is just architecturally poor, turning the relationship between a control point and a media server on its head. Why should the media server try to infer what a control point needs through configuration when the control point is perfectly capable of telling the media server its exact requirements in every single circumstance.&lt;br /&gt;
&lt;br /&gt;
So, it is proposed that compliant media servers include a &#039;&#039;&#039;size&#039;&#039;&#039; element in their artwork uri&#039;s, where the size is the image&#039;s largest dimension. This allows a control point to ask for an image at a specified size.&lt;br /&gt;
&lt;br /&gt;
=== Example ===&lt;br /&gt;
&lt;br /&gt;
If the original artwork was 400x512, then a media server would provide the following albumArtURI: &amp;lt;uri&amp;gt;?size=512. If it is not possible for the media server to obtain the original resolution then the media server would provide the following albumArtURI: &amp;lt;uri&amp;gt;?size=0.&lt;br /&gt;
&lt;br /&gt;
The presence of the size element tells the control point:&lt;br /&gt;
&lt;br /&gt;
# the media server implements the image scaling extension&lt;br /&gt;
# the original size of the image.&lt;br /&gt;
&lt;br /&gt;
Now the control point can request the image at any resolution by using &amp;lt;uri&amp;gt;?size=x, where x is the size it wants.&lt;br /&gt;
&lt;br /&gt;
So, in this example, &amp;lt;uri&amp;gt;?size=1024 gets an 800x1024 image, and &amp;lt;uri&amp;gt;?size=200 gets a 156x200 image.&lt;br /&gt;
&lt;br /&gt;
== albumArtURI&amp;lt;br&amp;gt; ==&lt;br /&gt;
&lt;br /&gt;
The current specification only allows retrieval of artwork for a musicAlbum container through the property albumArtURI. When browsing a music library on a control point it quickly becomes clear that to implement a graphically rich control point the ContentDirectory service should provide a way to retrieve artwork for all of the content directory classes, not just musicAlbum containers.&lt;br /&gt;
&lt;br /&gt;
There has become a somewhat defacto standard where just about all media server provide an albumArtURI property for a musicItem item as well as for a musicAlbum container, however this is still not good enough to implement a graphically rich control point.&lt;br /&gt;
&lt;br /&gt;
It is proposed that an optional property is introduced to the object class called &#039;&#039;&#039;albumArtURI&#039;&#039;&amp;amp;nbsp;&#039;&#039;&#039;&#039;&#039;which may contain an attribute &#039;&#039;&#039;title&#039;&#039;&#039;,&amp;amp;nbsp;e.g. &amp;amp;lt;albumArtURI title=&amp;quot;Font Cover&amp;quot;&amp;amp;gt;http://Front Cover.jpg&amp;amp;lt;/albumArtURI&amp;amp;gt;.&amp;amp;nbsp;The object class can contain zero or more albumArtURIs elements.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Medium =&lt;br /&gt;
= Low =&lt;br /&gt;
&lt;br /&gt;
== Dynamic IP Addresses ==&lt;br /&gt;
&lt;br /&gt;
At present all media servers return URIs that contain a reference to their IP address, e.g. http://172.20.1.1/music.flac etc. This means that if the media server&#039;s IP address were to change across reboots, then any control point or media renderer with URIs that referenced the media server before the reboot will become invalid.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
It is proposed that a media server should always reference itself by host name and not by IP address in any XML that it sends to external devices, i.e. http://mynas/music.flac.&lt;br /&gt;
&lt;br /&gt;
== Disc Information ==&lt;br /&gt;
&lt;br /&gt;
It is proposed that two new properties are added to the musicTrack item called &#039;&#039;&#039;OriginalDiscNumber&#039;&#039;&#039; and &#039;&#039;&#039;OriginalDiscCount&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== Replay Gain Information ==&lt;br /&gt;
&lt;br /&gt;
It is proposed that four new properties are added to the musicTrack item called &#039;&#039;&#039;ReplayGainAlbum&#039;&#039;&#039;, &#039;&#039;&#039;ReplayGainAlbumPeak&#039;&#039;&#039;, &#039;&#039;&#039;ReplayGainTrack&#039;&#039;&#039;, and &#039;&#039;&#039;ReplayGainTrackPeak&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
== webURI ==&lt;br /&gt;
&lt;br /&gt;
The current specification does not easily allow a control point to provide rich information about objects in the browse hierarchy.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
It is proposed to add an optionally property to the object class called &#039;&#039;&#039;webURI&amp;amp;nbsp;&#039;&#039;&#039;which will contain a URI to a website that provides a rich collection of information about the object, e.g. for a musicArtist container it would provided a link to a website that provided information about the artist.&lt;/div&gt;</summary>
		<author><name>Davidd</name></author>
	</entry>
	<entry>
		<id>https://docs.linn.co.uk/wiki/index.php?title=Developer:Media_Server_Extensions&amp;diff=11191</id>
		<title>Developer:Media Server Extensions</title>
		<link rel="alternate" type="text/html" href="https://docs.linn.co.uk/wiki/index.php?title=Developer:Media_Server_Extensions&amp;diff=11191"/>
		<updated>2015-02-20T17:56:49Z</updated>

		<summary type="html">&lt;p&gt;Davidd: /* Introduction */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Introduction =&lt;br /&gt;
&lt;br /&gt;
The ContentDirectory service has various limitations which become apparent when implementing control points on different hardware platforms. This document aims to outline some ideas that address the various shortcomings of the ContentDirectory specification.&lt;br /&gt;
&lt;br /&gt;
= High =&lt;br /&gt;
&lt;br /&gt;
== Container map ==&lt;br /&gt;
&lt;br /&gt;
The current ContentDirectory specification makes it tricky for a control point to display the returned contents in an appropriate, aesthetically pleasing, manner for the content being viewed. This is because the ContentDirectory specification does not allow for a control point to know in advanced what content to expect when browsing through any particular hierarchy.&lt;br /&gt;
&lt;br /&gt;
An example of this might be, at a particular point in the browse hierarchy the ContentDirectory will return a list of albums which in turn will contain a list of tracks. A UI might wish to represent this list of albums as a grid and the album&#039;s tracks as a header and a list of the tracks. Currently it is not possible for the UI to know when it gets to a point in a hierarchy where the hierarchy represents a list of albums followed by a list of tracks.&lt;br /&gt;
&lt;br /&gt;
The container map extension allows a media server to express its container hierarchy in advance of the control point navigating it. This is done using an OpenHome vendor extension to the device XML.&lt;br /&gt;
&lt;br /&gt;
Three types of mapped container are defined: browse, link, and search.&lt;br /&gt;
&lt;br /&gt;
The browse map defines named top level containers that represent significant starting points for browsing that can meaningfully be presented in top level tabs of a control point UI. The browse map is expressed within the X_MAP_BROWSE element of X_MAP.&lt;br /&gt;
&lt;br /&gt;
The link map defines containers that can be meaningfully linked to from track or album details. For instance a track will typically have an artist defined. If an entry for &amp;quot;artist&amp;quot; is defined in the link map then it will be possible for the user of a control point to quickly access this artist-related container by clicking on the track&#039;s artist text. Similar links might be offered for &amp;quot;genre&amp;quot;, &amp;quot;composer&amp;quot;, &amp;quot;conductor&amp;quot;, etc. The link map is expressed within the X_MAP_LINK element of X_MAP.&lt;br /&gt;
&lt;br /&gt;
The search map defines the different kinds of search containers and the type of results that they produce. The search map is expressed within the X_MAP_SEARCH element of X_MAP.&lt;br /&gt;
&lt;br /&gt;
=== Browse map ===&lt;br /&gt;
&lt;br /&gt;
The X_MAP_BROWSE element must contain 1 or more X_MAP_BROWSE_ENTRY elements.&lt;br /&gt;
&lt;br /&gt;
The X_MAP_BROWSE_ENTRY has three child elements.&lt;br /&gt;
&lt;br /&gt;
X_MAP_BROWSE_ENTRY_NAME is a string that can be used by a control point to label a tab containing this browse hierarchy.&lt;br /&gt;
&lt;br /&gt;
X_MAP_BROWSE_ENTRY_ID is the UPnP container id that contains the root of this browse hierarchy. This id is then submitted to the ContentDirectory service using the Browse action as usual. The returned contents are navigated using subsequent Browse request as usual. The difference is that the control point knows in advance what kind of results to expect at each level.&lt;br /&gt;
&lt;br /&gt;
X_MAP_BROWSE_ENTRY_TYPE is a space separated list of strings that maps out the kind of containers that are to be found at each level of this browse hierarchy. For instance, &amp;quot;artist album&amp;quot; represents a browse hierarchy giving a container containing only artist containers, each of which contains only album containers, each of which contains only tracks.&lt;br /&gt;
&lt;br /&gt;
There should be an X_MAP_BROWSE_ENTRY for each root browse hierarchy defined by the media server.&lt;br /&gt;
&lt;br /&gt;
For example:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;X_MAP_BROWSE_ENTRY&amp;gt;&lt;br /&gt;
     &amp;lt;X_MAP_BROWSE_ENTRY_NAME&amp;gt;Genre&amp;lt;/X_MAP_BROWSE_ENTRY_NAME&amp;gt;&lt;br /&gt;
     &amp;lt;X_MAP_BROWSE_ENTRY_ID&amp;gt;db/browse/genre&amp;lt;/X_MAP_BROWSE_ENTRY_ID&amp;gt;&lt;br /&gt;
     &amp;lt;X_MAP_BROWSE_ENTRY_TYPE&amp;gt;genre artist album&amp;lt;/X_MAP_BROWSE_ENTRY_TYPE&amp;gt;&lt;br /&gt;
 &amp;lt;/X_MAP_BROWSE_ENTRY&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Link map ===&lt;br /&gt;
&lt;br /&gt;
The X_MAP_LINK element must contain 1 or more X_MAP_LINK_ENTRY elements.&lt;br /&gt;
&lt;br /&gt;
The X_MAP_LINK_ENTRY has three child elements.&lt;br /&gt;
&lt;br /&gt;
X_MAP_LINK_ENTRY_TAG is a string that defines which type of metadata is the target for this link. e.g. &amp;quot;artist&amp;quot;, &amp;quot;genre&amp;quot;, &amp;quot;composer&amp;quot;, etc. See the type section below. &lt;br /&gt;
&lt;br /&gt;
X_MAP_LINK_ENTRY_ID_PREFIX is a string that is prefix for a UPnP container id. The link can be taken by browsing to the container whose id is the result of appending the associated metadata value to this prefix. For instance, if the prefix for an &amp;quot;artist&amp;quot; link is defined as db/link/artist/, and a track returned anywhere in the media server&#039;s library has &amp;quot;Pink Floyd&amp;quot; as its artist. Then the linked container will have an id of db/link/artist/Pink Floyd.&lt;br /&gt;
&lt;br /&gt;
X_MAP_LINK_ENTRY_TYPE represents the type of browse hierarchy returned when taking this type of link. See X_MAP_BROWSE_ENTRY_TYPE for details.&lt;br /&gt;
&lt;br /&gt;
There should be an X_MAP_LINK_ENTRY for each piece of metadata that the media server allows to be linked.&lt;br /&gt;
&lt;br /&gt;
For example:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;X_MAP_LINK_ENTRY&amp;gt;&lt;br /&gt;
     &amp;lt;X_MAP_LINK_ENTRY_TAG&amp;gt;artist&amp;lt;/X_MAP_LINK_ENTRY_TAG&amp;gt;&lt;br /&gt;
     &amp;lt;X_MAP_LINK_ENTRY_ID_PREFIX&amp;gt;db/link/artist/&amp;lt;/X_MAP_LINK_ENTRY_ID_PREFIX&amp;gt;&lt;br /&gt;
     &amp;lt;X_MAP_LINK_ENTRY_TYPE&amp;gt;album&amp;lt;/X_MAP_LINK_ENTRY_TYPE&amp;gt;&lt;br /&gt;
 &amp;lt;/X_MAP_LINK_ENTRY&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The example above defines a browse hierarchy that is created when linking from an artist name. The hierarchy created provides a list of linked artist albums which in turn provide a list of tracks.&lt;br /&gt;
&lt;br /&gt;
=== Search map ===&lt;br /&gt;
&lt;br /&gt;
The X_MAP_SEARCH element must contain 1 or more X_MAP_SEARCH_ENTRY elements.&lt;br /&gt;
&lt;br /&gt;
The X_MAP_SEARCH_ENTRY has three child elements.&lt;br /&gt;
&lt;br /&gt;
X_MAP_SEARCH_ENTRY_NAME  is a string that can be used by a control point to label a tab containing these search results.&lt;br /&gt;
&lt;br /&gt;
X_MAP_SEARCH_ENTRY_ID_PREFIX is a string that is a prefix for a UPnP container id. The search results can be found by browsing to the container whose id is the result of appending the search string to this prefix. For instance, if the prefix for an &amp;quot;album&amp;quot; search is defined as db/search/album/, and the search string is &amp;quot;blue&amp;quot;, then the search results container will have an id of db/search/album/blue.&lt;br /&gt;
&lt;br /&gt;
X_MAP_SEARCH_ENTRY_TYPE represents the type of browse hierarchy returned when taking this type of search. See X_MAP_BROWSE_ENTRY_TYPE for details.&lt;br /&gt;
&lt;br /&gt;
There should be an X_MAP_SEARCH_ENTRY for each type of search offered by the media server.&lt;br /&gt;
&lt;br /&gt;
For example:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;X_MAP_SEARCH_ENTRY&amp;gt;&lt;br /&gt;
     &amp;lt;X_MAP_SEARCH_ENTRY_NAME&amp;gt;Artist&amp;lt;/X_MAP_SEARCH_ENTRY_NAME&amp;gt;&lt;br /&gt;
     &amp;lt;X_MAP_SEARCH_ENTRY_ID_PREFIX&amp;gt;db/search/artist/&amp;lt;/X_MAP_SEARCH_ENTRY_ID_PREFIX&amp;gt;&lt;br /&gt;
     &amp;lt;X_MAP_SEARCH_ENTRY_TYPE&amp;gt;artist album&amp;lt;/X_MAP_SEARCH_ENTRY_TYPE&amp;gt;&lt;br /&gt;
 &amp;lt;/X_MAP_SEARCH_ENTRY&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The example above defines a browse hierarchy that is created when searching for an artist. The hierarchy created provides a list of artists, which in turn provide a list of albums, which in turn provide a list of tracks.&lt;br /&gt;
&lt;br /&gt;
=== Types ===&lt;br /&gt;
&lt;br /&gt;
The list of allowed types for X_BROWSE_ENTRY_TYPE, X_MAP_LINK_ENTRY_TAG, X_LINK_ENTRY_TYPE, and X_SEARCH_ENTRY_TYPE&lt;br /&gt;
&lt;br /&gt;
 genre&lt;br /&gt;
 artist&lt;br /&gt;
 composer&lt;br /&gt;
 conductor&lt;br /&gt;
 album&lt;br /&gt;
 year&lt;br /&gt;
 mixed&lt;br /&gt;
&lt;br /&gt;
mixed is a special value that represents a container that has mixed entries. It is not a valid type for the X_MAP_LINK_ENTRY_TAG element.&lt;br /&gt;
&lt;br /&gt;
=== Example device XML ===&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;root xmlns=&amp;quot;urn:schemas-upnp-org:device-1-0&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;specVersion&amp;gt;&lt;br /&gt;
        &amp;lt;major&amp;gt;1&amp;lt;/major&amp;gt;&lt;br /&gt;
        &amp;lt;minor&amp;gt;1&amp;lt;/minor&amp;gt;&lt;br /&gt;
    &amp;lt;/specVersion&amp;gt;&lt;br /&gt;
    &amp;lt;device&amp;gt;&lt;br /&gt;
        &amp;lt;deviceType&amp;gt;urn:schemas-upnp-org:device:MediaServer:1&amp;lt;/deviceType&amp;gt;&lt;br /&gt;
        &amp;lt;dlna:X_DLNADOC xmlns:dlna=&amp;quot;urn:schemas-dlna-org:device-1-0&amp;quot;&amp;gt;DMS-1.50&amp;lt;/dlna:X_DLNADOC&amp;gt;&lt;br /&gt;
        &amp;lt;dlna:X_DLNACAP xmlns:dlna=&amp;quot;urn:schemas-dlna-org:device-1-0&amp;quot;&amp;gt;av-upload,image-upload,audio-upload&amp;lt;/dlna:X_DLNACAP&amp;gt;&lt;br /&gt;
        &amp;lt;openhome:X_MAP xmlns:openhome=&amp;quot;http://www.openhome.org&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;X_MAP_BROWSE&amp;gt;&lt;br /&gt;
                &amp;lt;X_MAP_BROWSE_ENTRY&amp;gt;&lt;br /&gt;
                    &amp;lt;X_MAP_BROWSE_ENTRY_NAME&amp;gt;Albums&amp;lt;/X_MAP_BROWSE_ENTRY_NAME&amp;gt;&lt;br /&gt;
                    &amp;lt;X_MAP_BROWSE_ENTRY_ID&amp;gt;db/browse/albums&amp;lt;/X_MAP_BROWSE_ENTRY_ID&amp;gt;&lt;br /&gt;
                    &amp;lt;X_MAP_BROWSE_ENTRY_TYPE&amp;gt;album&amp;lt;/X_MAP_BROWSE_ENTRY_TYPE&amp;gt;&lt;br /&gt;
                &amp;lt;/X_MAP_BROWSE_ENTRY&amp;gt;&lt;br /&gt;
                &amp;lt;X_MAP_BROWSE_ENTRY&amp;gt;&lt;br /&gt;
                    &amp;lt;X_MAP_BROWSE_ENTRY_NAME&amp;gt;Artists&amp;lt;/X_MAP_BROWSE_ENTRY_NAME&amp;gt;&lt;br /&gt;
                    &amp;lt;X_MAP_BROWSE_ENTRY_ID&amp;gt;db/browse/artists&amp;lt;/X_MAP_BROWSE_ENTRY_ID&amp;gt;&lt;br /&gt;
                    &amp;lt;X_MAP_BROWSE_ENTRY_TYPE&amp;gt;artist album&amp;lt;/X_MAP_BROWSE_ENTRY_TYPE&amp;gt;&lt;br /&gt;
                &amp;lt;/X_MAP_BROWSE_ENTRY&amp;gt;&lt;br /&gt;
                &amp;lt;X_MAP_BROWSE_ENTRY&amp;gt;&lt;br /&gt;
                    &amp;lt;X_MAP_BROWSE_ENTRY_NAME&amp;gt;Folders&amp;lt;/X_MAP_BROWSE_ENTRY_NAME&amp;gt;&lt;br /&gt;
                    &amp;lt;X_MAP_BROWSE_ENTRY_ID&amp;gt;db/browse/folders&amp;lt;/X_MAP_BROWSE_ENTRY_ID&amp;gt;&lt;br /&gt;
                    &amp;lt;X_MAP_BROWSE_ENTRY_TYPE&amp;gt;mixed&amp;lt;/X_MAP_BROWSE_ENTRY_TYPE&amp;gt;&lt;br /&gt;
                &amp;lt;/X_MAP_BROWSE_ENTRY&amp;gt;&lt;br /&gt;
            &amp;lt;/X_MAP_BROWSE&amp;gt;&lt;br /&gt;
            &amp;lt;X_MAP_LINK&amp;gt;&lt;br /&gt;
                &amp;lt;X_MAP_LINK_ENTRY&amp;gt;&lt;br /&gt;
                    &amp;lt;X_MAP_LINK_ENTRY_TAG&amp;gt;artist&amp;lt;/X_MAP_LINK_ENTRY_TAG&amp;gt;&lt;br /&gt;
                    &amp;lt;X_MAP_LINK_ENTRY_ID_PREFIX&amp;gt;db/link/artist/&amp;lt;/X_MAP_LINK_ENTRY_ID_PREFIX&amp;gt;&lt;br /&gt;
                    &amp;lt;X_MAP_LINK_ENTRY_TYPE&amp;gt;album&amp;lt;/X_MAP_LINK_ENTRY_TYPE&amp;gt;&lt;br /&gt;
                &amp;lt;/X_MAP_LINK_ENTRY&amp;gt;&lt;br /&gt;
                &amp;lt;X_MAP_LINK_ENTRY&amp;gt;&lt;br /&gt;
                    &amp;lt;X_MAP_LINK_ENTRY_TAG&amp;gt;composer&amp;lt;/X_MAP_LINK_ENTRY_TAG&amp;gt;&lt;br /&gt;
                    &amp;lt;X_MAP_LINK_ENTRY_ID_PREFIX&amp;gt;db/link/composer/&amp;lt;/X_MAP_LINK_ENTRY_ID_PREFIX&amp;gt;&lt;br /&gt;
                    &amp;lt;X_MAP_LINK_ENTRY_TYPE&amp;gt;album&amp;lt;/X_MAP_LINK_ENTRY_TYPE&amp;gt;&lt;br /&gt;
                &amp;lt;/X_MAP_LINK_ENTRY&amp;gt;&lt;br /&gt;
            &amp;lt;/X_MAP_LINK&amp;gt;&lt;br /&gt;
            &amp;lt;X_MAP_SEARCH&amp;gt;&lt;br /&gt;
                &amp;lt;X_MAP_SEARCH_ENTRY&amp;gt;&lt;br /&gt;
                    &amp;lt;X_MAP_SEARCH_ENTRY_NAME&amp;gt;Artist&amp;lt;/X_MAP_SEARCH_ENTRY_NAME&amp;gt;&lt;br /&gt;
                    &amp;lt;X_MAP_SEARCH_ENTRY_ID_PREFIX&amp;gt;db/search/artist/&amp;lt;/X_MAP_SEARCH_ENTRY_ID_PREFIX&amp;gt;&lt;br /&gt;
                    &amp;lt;X_MAP_SEARCH_ENTRY_TYPE&amp;gt;artist album&amp;lt;/X_MAP_SEARCH_ENTRY_TYPE&amp;gt;&lt;br /&gt;
                &amp;lt;/X_MAP_SEARCH_ENTRY&amp;gt;&lt;br /&gt;
                &amp;lt;X_MAP_SEARCH_ENTRY&amp;gt;&lt;br /&gt;
                    &amp;lt;X_MAP_SEARCH_ENTRY_NAME&amp;gt;Tracks&amp;lt;/X_MAP_SEARCH_ENTRY_NAME&amp;gt;&lt;br /&gt;
                    &amp;lt;X_MAP_SEARCH_ENTRY_ID_PREFIX&amp;gt;db/search/all/&amp;lt;/X_MAP_SEARCH_ENTRY_ID_PREFIX&amp;gt;&lt;br /&gt;
                    &amp;lt;X_MAP_SEARCH_ENTRY_TYPE&amp;gt;&amp;lt;/X_MAP_SEARCH_ENTRY_TYPE&amp;gt;&lt;br /&gt;
                &amp;lt;/X_MAP_SEARCH_ENTRY&amp;gt;&lt;br /&gt;
            &amp;lt;/X_MAP_SEARCH&amp;gt;&lt;br /&gt;
        &amp;lt;/openhome:X_MAP&amp;gt;&lt;br /&gt;
        &amp;lt;presentationURL&amp;gt;http://10.2.1.170:4000/res/linn.co.uk.kazooserver/index.html&amp;lt;/presentationURL&amp;gt;&lt;br /&gt;
        &amp;lt;friendlyName&amp;gt;Linn Kazoo Server [R&amp;amp;D Mac Mini]&amp;lt;/friendlyName&amp;gt;&lt;br /&gt;
        &amp;lt;manufacturer&amp;gt;Linn&amp;lt;/manufacturer&amp;gt;&lt;br /&gt;
        &amp;lt;manufacturerURL&amp;gt;http://www.linn.co.uk&amp;lt;/manufacturerURL&amp;gt;&lt;br /&gt;
        &amp;lt;modelName&amp;gt;Kazoo Server&amp;lt;/modelName&amp;gt;&lt;br /&gt;
        &amp;lt;modelURL&amp;gt;http://oss.linn.co.uk/trac/wiki/KazooServer&amp;lt;/modelURL&amp;gt;&lt;br /&gt;
        &amp;lt;UDN&amp;gt;uuid:ac3d630e37b5f11ff5cdd23c0f5a7400&amp;lt;/UDN&amp;gt;&lt;br /&gt;
        &amp;lt;iconList&amp;gt;&lt;br /&gt;
            &amp;lt;icon&amp;gt;&lt;br /&gt;
                &amp;lt;mimetype&amp;gt;image/png&amp;lt;/mimetype&amp;gt;&lt;br /&gt;
                &amp;lt;width&amp;gt;65&amp;lt;/width&amp;gt;&lt;br /&gt;
                &amp;lt;height&amp;gt;65&amp;lt;/height&amp;gt;&lt;br /&gt;
                &amp;lt;depth&amp;gt;32&amp;lt;/depth&amp;gt;&lt;br /&gt;
                &amp;lt;url&amp;gt;ac3d630e37b5f11ff5cdd23c0f5a7400/resource/icon/icon&amp;lt;/url&amp;gt;&lt;br /&gt;
            &amp;lt;/icon&amp;gt;&lt;br /&gt;
        &amp;lt;/iconList&amp;gt;&lt;br /&gt;
        &amp;lt;serviceList&amp;gt;&lt;br /&gt;
            &amp;lt;service&amp;gt;&lt;br /&gt;
                &amp;lt;serviceType&amp;gt;urn:av-openhome-org:service:PlaylistManager:1&amp;lt;/serviceType&amp;gt;&lt;br /&gt;
                &amp;lt;serviceId&amp;gt;urn:av-openhome-org:serviceId:PlaylistManager&amp;lt;/serviceId&amp;gt;&lt;br /&gt;
                &amp;lt;SCPDURL&amp;gt;/ac3d630e37b5f11ff5cdd23c0f5a7400/Upnp/av.openhome.org-PlaylistManager-1/service.xml&amp;lt;/SCPDURL&amp;gt;&lt;br /&gt;
                &amp;lt;controlURL&amp;gt;/ac3d630e37b5f11ff5cdd23c0f5a7400/av.openhome.org-PlaylistManager-1/control&amp;lt;/controlURL&amp;gt;&lt;br /&gt;
                &amp;lt;eventSubURL&amp;gt;/ac3d630e37b5f11ff5cdd23c0f5a7400/av.openhome.org-PlaylistManager-1/event&amp;lt;/eventSubURL&amp;gt;&lt;br /&gt;
            &amp;lt;/service&amp;gt;&lt;br /&gt;
            &amp;lt;service&amp;gt;&lt;br /&gt;
                &amp;lt;serviceType&amp;gt;urn:schemas-upnp-org:service:ContentDirectory:1&amp;lt;/serviceType&amp;gt;&lt;br /&gt;
                &amp;lt;serviceId&amp;gt;urn:upnp-org:serviceId:ContentDirectory&amp;lt;/serviceId&amp;gt;&lt;br /&gt;
                &amp;lt;SCPDURL&amp;gt;/ac3d630e37b5f11ff5cdd23c0f5a7400/Upnp/upnp.org-ContentDirectory-1/service.xml&amp;lt;/SCPDURL&amp;gt;&lt;br /&gt;
                &amp;lt;controlURL&amp;gt;/ac3d630e37b5f11ff5cdd23c0f5a7400/upnp.org-ContentDirectory-1/control&amp;lt;/controlURL&amp;gt;&lt;br /&gt;
                &amp;lt;eventSubURL&amp;gt;/ac3d630e37b5f11ff5cdd23c0f5a7400/upnp.org-ContentDirectory-1/event&amp;lt;/eventSubURL&amp;gt;&lt;br /&gt;
            &amp;lt;/service&amp;gt;&lt;br /&gt;
            &amp;lt;service&amp;gt;&lt;br /&gt;
                &amp;lt;serviceType&amp;gt;urn:schemas-upnp-org:service:ConnectionManager:1&amp;lt;/serviceType&amp;gt;&lt;br /&gt;
                &amp;lt;serviceId&amp;gt;urn:upnp-org:serviceId:ConnectionManager&amp;lt;/serviceId&amp;gt;&lt;br /&gt;
                &amp;lt;SCPDURL&amp;gt;/ac3d630e37b5f11ff5cdd23c0f5a7400/Upnp/upnp.org-ConnectionManager-1/service.xml&amp;lt;/SCPDURL&amp;gt;&lt;br /&gt;
                &amp;lt;controlURL&amp;gt;/ac3d630e37b5f11ff5cdd23c0f5a7400/upnp.org-ConnectionManager-1/control&amp;lt;/controlURL&amp;gt;&lt;br /&gt;
                &amp;lt;eventSubURL&amp;gt;/ac3d630e37b5f11ff5cdd23c0f5a7400/upnp.org-ConnectionManager-1/event&amp;lt;/eventSubURL&amp;gt;&lt;br /&gt;
            &amp;lt;/service&amp;gt;&lt;br /&gt;
        &amp;lt;/serviceList&amp;gt;&lt;br /&gt;
    &amp;lt;/device&amp;gt;&lt;br /&gt;
 &amp;lt;/root&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Index maps ==&lt;br /&gt;
&lt;br /&gt;
Large lists are difficult to navigate, especially on mobile devices. Mobile devices added the idea of an index map to improve this situation. The index map allows a users to jump to different sections in a large list, similar to what is possible with a scrollbar on desktops.&lt;br /&gt;
&lt;br /&gt;
In order for a control point to generate an index map for any particular level in a ContentDirectory&#039;s hierarchy it first needs to download all the objects in the container, figure out if they are sorted and then calculate the index map. This means that a user will need to wait, perhaps minutes, before an index map is able to be presented on the UI. &lt;br /&gt;
&lt;br /&gt;
The media server can optionally return an index map for container that are in alphabetical order. This implemented through a OpenHome vendor extension of the DIDL-Lite XML. Below shows an example DIDL-Lite with an index map included.&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;DIDL-Lite xmlns=&amp;quot;urn:schemas-upnp-org:metadata-1-0/DIDL-Lite/&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;container id=&amp;quot;db/ba37a2ac24efa676c8676aab71a6cdf074&amp;quot; parentID=&amp;quot;0&amp;quot; restricted=&amp;quot;true&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;dc:title xmlns:dc=&amp;quot;http://purl.org/dc/elements/1.1/&amp;quot;&amp;gt;Worlds Apart [Deluxe Edition]&amp;lt;/dc:title&amp;gt;&lt;br /&gt;
        &amp;lt;upnp:udn xmlns:upnp=&amp;quot;urn:schemas-upnp-org:metadata-1-0/upnp/&amp;quot;&amp;gt;ac3d630e37b5f11ff5cdd23c0f5a7400&amp;lt;/upnp:udn&amp;gt;&lt;br /&gt;
        &amp;lt;upnp:class xmlns:upnp=&amp;quot;urn:schemas-upnp-org:metadata-1-0/upnp/&amp;quot;&amp;gt;object.container.album.musicAlbum&amp;lt;/upnp:class&amp;gt;&lt;br /&gt;
        &amp;lt;upnp:artist xmlns:upnp=&amp;quot;urn:schemas-upnp-org:metadata-1-0/upnp/&amp;quot;&amp;gt;...And You Will Know Us by the Trail of Dead&amp;lt;/upnp:artist&amp;gt;&lt;br /&gt;
        &amp;lt;upnp:albumArtURI&amp;gt;http://10.2.1.170:4000/linn.co.uk.kazooserver/ms/artwork/37a2ac2?size=0&amp;lt;/upnp:albumArtURI&amp;gt;&lt;br /&gt;
    &amp;lt;/container&amp;gt;&lt;br /&gt;
    &amp;lt;desc nameSpace=&amp;quot;openhome.org&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;indexmap&amp;gt;0 10 10 10 10 10 0 0 0 0 10 12 1 10 10 10 12 17 18 1 0 20 0 20 20 2 2 24&amp;lt;/indexmap&amp;gt;&lt;br /&gt;
    &amp;lt;/desc&amp;gt;&lt;br /&gt;
 &amp;lt;/DIDL-Lite&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The index map contains a space separated list of 28 number representing the total number of items that begin with that letter. #, represents everything below A, largely digits and punctuation and + represents everything above Z, largely international characters not collatable within the roman alphabet.&lt;br /&gt;
&lt;br /&gt;
 # A B C D E F G H I J K L M N O P Q R S T U V W X Y Z +&lt;br /&gt;
&lt;br /&gt;
== Image Resolution ==&lt;br /&gt;
&lt;br /&gt;
Control points running on different platforms have different memory limits and display technologies. This means that a control point on a PC might want to display artwork at a high resolution, while a control point on a PDA might want to display artwork at a much lower resolution.&lt;br /&gt;
&lt;br /&gt;
Media servers often try to solve this problem using one of the following two methods:&lt;br /&gt;
&lt;br /&gt;
# A configurable parameter that scales all artwork to a user defined size&lt;br /&gt;
# A profile system where a user can create profiles for each class of control point they have and configure a parameter that scales all artwork to a user defined size per profile&lt;br /&gt;
&lt;br /&gt;
The first solution is highly problematic because it limits the resolution of artwork across the whole network. But a single network very often contains control points that can display high resolution images AND control points that can&#039;t.&lt;br /&gt;
&lt;br /&gt;
The second solution is just architecturally poor, turning the relationship between a control point and a media server on its head. Why should the media server try to infer what a control point needs through configuration when the control point is perfectly capable of telling the media server its exact requirements in every single circumstance.&lt;br /&gt;
&lt;br /&gt;
So, it is proposed that compliant media servers include a &#039;&#039;&#039;size&#039;&#039;&#039; element in their artwork uri&#039;s, where the size is the image&#039;s largest dimension. This allows a control point to ask for an image at a specified size.&lt;br /&gt;
&lt;br /&gt;
=== Example ===&lt;br /&gt;
&lt;br /&gt;
If the original artwork was 400x512, then a media server would provide the following albumArtURI: &amp;lt;uri&amp;gt;?size=512. If it is not possible for the media server to obtain the original resolution then the media server would provide the following albumArtURI: &amp;lt;uri&amp;gt;?size=0.&lt;br /&gt;
&lt;br /&gt;
The presence of the size element tells the control point:&lt;br /&gt;
&lt;br /&gt;
# the media server implements the image scaling extension&lt;br /&gt;
# the original size of the image.&lt;br /&gt;
&lt;br /&gt;
Now the control point can request the image at any resolution by using &amp;lt;uri&amp;gt;?size=x, where x is the size it wants.&lt;br /&gt;
&lt;br /&gt;
So, in this example, &amp;lt;uri&amp;gt;?size=1024 gets an 800x1024 image, and &amp;lt;uri&amp;gt;?size=200 gets a 156x200 image.&lt;br /&gt;
&lt;br /&gt;
== albumArtURI&amp;lt;br&amp;gt; ==&lt;br /&gt;
&lt;br /&gt;
The current specification only allows retrieval of artwork for a musicAlbum container through the property albumArtURI. When browsing a music library on a control point it quickly becomes clear that to implement a graphically rich control point the ContentDirectory service should provide a way to retrieve artwork for all of the content directory classes, not just musicAlbum containers.&lt;br /&gt;
&lt;br /&gt;
There has become a somewhat defacto standard where just about all media server provide an albumArtURI property for a musicItem item as well as for a musicAlbum container, however this is still not good enough to implement a graphically rich control point.&lt;br /&gt;
&lt;br /&gt;
It is proposed that an optional property is introduced to the object class called &#039;&#039;&#039;albumArtURI&#039;&#039;&amp;amp;nbsp;&#039;&#039;&#039;&#039;&#039;which may contain an attribute &#039;&#039;&#039;title&#039;&#039;&#039;,&amp;amp;nbsp;e.g. &amp;amp;lt;albumArtURI title=&amp;quot;Font Cover&amp;quot;&amp;amp;gt;http://Front Cover.jpg&amp;amp;lt;/albumArtURI&amp;amp;gt;.&amp;amp;nbsp;The object class can contain zero or more albumArtURIs elements.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Medium =&lt;br /&gt;
= Low =&lt;br /&gt;
&lt;br /&gt;
== Dynamic IP Addresses ==&lt;br /&gt;
&lt;br /&gt;
At present all media servers return URIs that contain a reference to their IP address, e.g. http://172.20.1.1/music.flac etc. This means that if the media server&#039;s IP address were to change across reboots, then any control point or media renderer with URIs that referenced the media server before the reboot will become invalid.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
It is proposed that a media server should always reference itself by host name and not by IP address in any XML that it sends to external devices, i.e. http://mynas/music.flac.&lt;br /&gt;
&lt;br /&gt;
== Disc Information ==&lt;br /&gt;
&lt;br /&gt;
It is proposed that two new properties are added to the musicTrack item called &#039;&#039;&#039;OriginalDiscNumber&#039;&#039;&#039; and &#039;&#039;&#039;OriginalDiscCount&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== Replay Gain Information ==&lt;br /&gt;
&lt;br /&gt;
It is proposed that four new properties are added to the musicTrack item called &#039;&#039;&#039;ReplayGainAlbum&#039;&#039;&#039;, &#039;&#039;&#039;ReplayGainAlbumPeak&#039;&#039;&#039;, &#039;&#039;&#039;ReplayGainTrack&#039;&#039;&#039;, and &#039;&#039;&#039;ReplayGainTrackPeak&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
== webURI ==&lt;br /&gt;
&lt;br /&gt;
The current specification does not easily allow a control point to provide rich information about objects in the browse hierarchy.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
It is proposed to add an optionally property to the object class called &#039;&#039;&#039;webURI&amp;amp;nbsp;&#039;&#039;&#039;which will contain a URI to a website that provides a rich collection of information about the object, e.g. for a musicArtist container it would provided a link to a website that provided information about the artist.&lt;/div&gt;</summary>
		<author><name>Davidd</name></author>
	</entry>
	<entry>
		<id>https://docs.linn.co.uk/wiki/index.php?title=Developer:Media_Server_Extensions&amp;diff=11190</id>
		<title>Developer:Media Server Extensions</title>
		<link rel="alternate" type="text/html" href="https://docs.linn.co.uk/wiki/index.php?title=Developer:Media_Server_Extensions&amp;diff=11190"/>
		<updated>2015-02-20T17:55:44Z</updated>

		<summary type="html">&lt;p&gt;Davidd: /* Index maps */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Introduction =&lt;br /&gt;
&lt;br /&gt;
The ContentDirectory service has various limitations which become apparent when implementing control points on different hardware platforms. This document aims to outline some ideas that address the various shortcomings of the ContentDirectory specification. The ideas have been categorised in low, medium and high priority groups.&lt;br /&gt;
&lt;br /&gt;
= High =&lt;br /&gt;
&lt;br /&gt;
== Container map ==&lt;br /&gt;
&lt;br /&gt;
The current ContentDirectory specification makes it tricky for a control point to display the returned contents in an appropriate, aesthetically pleasing, manner for the content being viewed. This is because the ContentDirectory specification does not allow for a control point to know in advanced what content to expect when browsing through any particular hierarchy.&lt;br /&gt;
&lt;br /&gt;
An example of this might be, at a particular point in the browse hierarchy the ContentDirectory will return a list of albums which in turn will contain a list of tracks. A UI might wish to represent this list of albums as a grid and the album&#039;s tracks as a header and a list of the tracks. Currently it is not possible for the UI to know when it gets to a point in a hierarchy where the hierarchy represents a list of albums followed by a list of tracks.&lt;br /&gt;
&lt;br /&gt;
The container map extension allows a media server to express its container hierarchy in advance of the control point navigating it. This is done using an OpenHome vendor extension to the device XML.&lt;br /&gt;
&lt;br /&gt;
Three types of mapped container are defined: browse, link, and search.&lt;br /&gt;
&lt;br /&gt;
The browse map defines named top level containers that represent significant starting points for browsing that can meaningfully be presented in top level tabs of a control point UI. The browse map is expressed within the X_MAP_BROWSE element of X_MAP.&lt;br /&gt;
&lt;br /&gt;
The link map defines containers that can be meaningfully linked to from track or album details. For instance a track will typically have an artist defined. If an entry for &amp;quot;artist&amp;quot; is defined in the link map then it will be possible for the user of a control point to quickly access this artist-related container by clicking on the track&#039;s artist text. Similar links might be offered for &amp;quot;genre&amp;quot;, &amp;quot;composer&amp;quot;, &amp;quot;conductor&amp;quot;, etc. The link map is expressed within the X_MAP_LINK element of X_MAP.&lt;br /&gt;
&lt;br /&gt;
The search map defines the different kinds of search containers and the type of results that they produce. The search map is expressed within the X_MAP_SEARCH element of X_MAP.&lt;br /&gt;
&lt;br /&gt;
=== Browse map ===&lt;br /&gt;
&lt;br /&gt;
The X_MAP_BROWSE element must contain 1 or more X_MAP_BROWSE_ENTRY elements.&lt;br /&gt;
&lt;br /&gt;
The X_MAP_BROWSE_ENTRY has three child elements.&lt;br /&gt;
&lt;br /&gt;
X_MAP_BROWSE_ENTRY_NAME is a string that can be used by a control point to label a tab containing this browse hierarchy.&lt;br /&gt;
&lt;br /&gt;
X_MAP_BROWSE_ENTRY_ID is the UPnP container id that contains the root of this browse hierarchy. This id is then submitted to the ContentDirectory service using the Browse action as usual. The returned contents are navigated using subsequent Browse request as usual. The difference is that the control point knows in advance what kind of results to expect at each level.&lt;br /&gt;
&lt;br /&gt;
X_MAP_BROWSE_ENTRY_TYPE is a space separated list of strings that maps out the kind of containers that are to be found at each level of this browse hierarchy. For instance, &amp;quot;artist album&amp;quot; represents a browse hierarchy giving a container containing only artist containers, each of which contains only album containers, each of which contains only tracks.&lt;br /&gt;
&lt;br /&gt;
There should be an X_MAP_BROWSE_ENTRY for each root browse hierarchy defined by the media server.&lt;br /&gt;
&lt;br /&gt;
For example:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;X_MAP_BROWSE_ENTRY&amp;gt;&lt;br /&gt;
     &amp;lt;X_MAP_BROWSE_ENTRY_NAME&amp;gt;Genre&amp;lt;/X_MAP_BROWSE_ENTRY_NAME&amp;gt;&lt;br /&gt;
     &amp;lt;X_MAP_BROWSE_ENTRY_ID&amp;gt;db/browse/genre&amp;lt;/X_MAP_BROWSE_ENTRY_ID&amp;gt;&lt;br /&gt;
     &amp;lt;X_MAP_BROWSE_ENTRY_TYPE&amp;gt;genre artist album&amp;lt;/X_MAP_BROWSE_ENTRY_TYPE&amp;gt;&lt;br /&gt;
 &amp;lt;/X_MAP_BROWSE_ENTRY&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Link map ===&lt;br /&gt;
&lt;br /&gt;
The X_MAP_LINK element must contain 1 or more X_MAP_LINK_ENTRY elements.&lt;br /&gt;
&lt;br /&gt;
The X_MAP_LINK_ENTRY has three child elements.&lt;br /&gt;
&lt;br /&gt;
X_MAP_LINK_ENTRY_TAG is a string that defines which type of metadata is the target for this link. e.g. &amp;quot;artist&amp;quot;, &amp;quot;genre&amp;quot;, &amp;quot;composer&amp;quot;, etc. See the type section below. &lt;br /&gt;
&lt;br /&gt;
X_MAP_LINK_ENTRY_ID_PREFIX is a string that is prefix for a UPnP container id. The link can be taken by browsing to the container whose id is the result of appending the associated metadata value to this prefix. For instance, if the prefix for an &amp;quot;artist&amp;quot; link is defined as db/link/artist/, and a track returned anywhere in the media server&#039;s library has &amp;quot;Pink Floyd&amp;quot; as its artist. Then the linked container will have an id of db/link/artist/Pink Floyd.&lt;br /&gt;
&lt;br /&gt;
X_MAP_LINK_ENTRY_TYPE represents the type of browse hierarchy returned when taking this type of link. See X_MAP_BROWSE_ENTRY_TYPE for details.&lt;br /&gt;
&lt;br /&gt;
There should be an X_MAP_LINK_ENTRY for each piece of metadata that the media server allows to be linked.&lt;br /&gt;
&lt;br /&gt;
For example:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;X_MAP_LINK_ENTRY&amp;gt;&lt;br /&gt;
     &amp;lt;X_MAP_LINK_ENTRY_TAG&amp;gt;artist&amp;lt;/X_MAP_LINK_ENTRY_TAG&amp;gt;&lt;br /&gt;
     &amp;lt;X_MAP_LINK_ENTRY_ID_PREFIX&amp;gt;db/link/artist/&amp;lt;/X_MAP_LINK_ENTRY_ID_PREFIX&amp;gt;&lt;br /&gt;
     &amp;lt;X_MAP_LINK_ENTRY_TYPE&amp;gt;album&amp;lt;/X_MAP_LINK_ENTRY_TYPE&amp;gt;&lt;br /&gt;
 &amp;lt;/X_MAP_LINK_ENTRY&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The example above defines a browse hierarchy that is created when linking from an artist name. The hierarchy created provides a list of linked artist albums which in turn provide a list of tracks.&lt;br /&gt;
&lt;br /&gt;
=== Search map ===&lt;br /&gt;
&lt;br /&gt;
The X_MAP_SEARCH element must contain 1 or more X_MAP_SEARCH_ENTRY elements.&lt;br /&gt;
&lt;br /&gt;
The X_MAP_SEARCH_ENTRY has three child elements.&lt;br /&gt;
&lt;br /&gt;
X_MAP_SEARCH_ENTRY_NAME  is a string that can be used by a control point to label a tab containing these search results.&lt;br /&gt;
&lt;br /&gt;
X_MAP_SEARCH_ENTRY_ID_PREFIX is a string that is a prefix for a UPnP container id. The search results can be found by browsing to the container whose id is the result of appending the search string to this prefix. For instance, if the prefix for an &amp;quot;album&amp;quot; search is defined as db/search/album/, and the search string is &amp;quot;blue&amp;quot;, then the search results container will have an id of db/search/album/blue.&lt;br /&gt;
&lt;br /&gt;
X_MAP_SEARCH_ENTRY_TYPE represents the type of browse hierarchy returned when taking this type of search. See X_MAP_BROWSE_ENTRY_TYPE for details.&lt;br /&gt;
&lt;br /&gt;
There should be an X_MAP_SEARCH_ENTRY for each type of search offered by the media server.&lt;br /&gt;
&lt;br /&gt;
For example:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;X_MAP_SEARCH_ENTRY&amp;gt;&lt;br /&gt;
     &amp;lt;X_MAP_SEARCH_ENTRY_NAME&amp;gt;Artist&amp;lt;/X_MAP_SEARCH_ENTRY_NAME&amp;gt;&lt;br /&gt;
     &amp;lt;X_MAP_SEARCH_ENTRY_ID_PREFIX&amp;gt;db/search/artist/&amp;lt;/X_MAP_SEARCH_ENTRY_ID_PREFIX&amp;gt;&lt;br /&gt;
     &amp;lt;X_MAP_SEARCH_ENTRY_TYPE&amp;gt;artist album&amp;lt;/X_MAP_SEARCH_ENTRY_TYPE&amp;gt;&lt;br /&gt;
 &amp;lt;/X_MAP_SEARCH_ENTRY&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The example above defines a browse hierarchy that is created when searching for an artist. The hierarchy created provides a list of artists, which in turn provide a list of albums, which in turn provide a list of tracks.&lt;br /&gt;
&lt;br /&gt;
=== Types ===&lt;br /&gt;
&lt;br /&gt;
The list of allowed types for X_BROWSE_ENTRY_TYPE, X_MAP_LINK_ENTRY_TAG, X_LINK_ENTRY_TYPE, and X_SEARCH_ENTRY_TYPE&lt;br /&gt;
&lt;br /&gt;
 genre&lt;br /&gt;
 artist&lt;br /&gt;
 composer&lt;br /&gt;
 conductor&lt;br /&gt;
 album&lt;br /&gt;
 year&lt;br /&gt;
 mixed&lt;br /&gt;
&lt;br /&gt;
mixed is a special value that represents a container that has mixed entries. It is not a valid type for the X_MAP_LINK_ENTRY_TAG element.&lt;br /&gt;
&lt;br /&gt;
=== Example device XML ===&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;root xmlns=&amp;quot;urn:schemas-upnp-org:device-1-0&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;specVersion&amp;gt;&lt;br /&gt;
        &amp;lt;major&amp;gt;1&amp;lt;/major&amp;gt;&lt;br /&gt;
        &amp;lt;minor&amp;gt;1&amp;lt;/minor&amp;gt;&lt;br /&gt;
    &amp;lt;/specVersion&amp;gt;&lt;br /&gt;
    &amp;lt;device&amp;gt;&lt;br /&gt;
        &amp;lt;deviceType&amp;gt;urn:schemas-upnp-org:device:MediaServer:1&amp;lt;/deviceType&amp;gt;&lt;br /&gt;
        &amp;lt;dlna:X_DLNADOC xmlns:dlna=&amp;quot;urn:schemas-dlna-org:device-1-0&amp;quot;&amp;gt;DMS-1.50&amp;lt;/dlna:X_DLNADOC&amp;gt;&lt;br /&gt;
        &amp;lt;dlna:X_DLNACAP xmlns:dlna=&amp;quot;urn:schemas-dlna-org:device-1-0&amp;quot;&amp;gt;av-upload,image-upload,audio-upload&amp;lt;/dlna:X_DLNACAP&amp;gt;&lt;br /&gt;
        &amp;lt;openhome:X_MAP xmlns:openhome=&amp;quot;http://www.openhome.org&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;X_MAP_BROWSE&amp;gt;&lt;br /&gt;
                &amp;lt;X_MAP_BROWSE_ENTRY&amp;gt;&lt;br /&gt;
                    &amp;lt;X_MAP_BROWSE_ENTRY_NAME&amp;gt;Albums&amp;lt;/X_MAP_BROWSE_ENTRY_NAME&amp;gt;&lt;br /&gt;
                    &amp;lt;X_MAP_BROWSE_ENTRY_ID&amp;gt;db/browse/albums&amp;lt;/X_MAP_BROWSE_ENTRY_ID&amp;gt;&lt;br /&gt;
                    &amp;lt;X_MAP_BROWSE_ENTRY_TYPE&amp;gt;album&amp;lt;/X_MAP_BROWSE_ENTRY_TYPE&amp;gt;&lt;br /&gt;
                &amp;lt;/X_MAP_BROWSE_ENTRY&amp;gt;&lt;br /&gt;
                &amp;lt;X_MAP_BROWSE_ENTRY&amp;gt;&lt;br /&gt;
                    &amp;lt;X_MAP_BROWSE_ENTRY_NAME&amp;gt;Artists&amp;lt;/X_MAP_BROWSE_ENTRY_NAME&amp;gt;&lt;br /&gt;
                    &amp;lt;X_MAP_BROWSE_ENTRY_ID&amp;gt;db/browse/artists&amp;lt;/X_MAP_BROWSE_ENTRY_ID&amp;gt;&lt;br /&gt;
                    &amp;lt;X_MAP_BROWSE_ENTRY_TYPE&amp;gt;artist album&amp;lt;/X_MAP_BROWSE_ENTRY_TYPE&amp;gt;&lt;br /&gt;
                &amp;lt;/X_MAP_BROWSE_ENTRY&amp;gt;&lt;br /&gt;
                &amp;lt;X_MAP_BROWSE_ENTRY&amp;gt;&lt;br /&gt;
                    &amp;lt;X_MAP_BROWSE_ENTRY_NAME&amp;gt;Folders&amp;lt;/X_MAP_BROWSE_ENTRY_NAME&amp;gt;&lt;br /&gt;
                    &amp;lt;X_MAP_BROWSE_ENTRY_ID&amp;gt;db/browse/folders&amp;lt;/X_MAP_BROWSE_ENTRY_ID&amp;gt;&lt;br /&gt;
                    &amp;lt;X_MAP_BROWSE_ENTRY_TYPE&amp;gt;mixed&amp;lt;/X_MAP_BROWSE_ENTRY_TYPE&amp;gt;&lt;br /&gt;
                &amp;lt;/X_MAP_BROWSE_ENTRY&amp;gt;&lt;br /&gt;
            &amp;lt;/X_MAP_BROWSE&amp;gt;&lt;br /&gt;
            &amp;lt;X_MAP_LINK&amp;gt;&lt;br /&gt;
                &amp;lt;X_MAP_LINK_ENTRY&amp;gt;&lt;br /&gt;
                    &amp;lt;X_MAP_LINK_ENTRY_TAG&amp;gt;artist&amp;lt;/X_MAP_LINK_ENTRY_TAG&amp;gt;&lt;br /&gt;
                    &amp;lt;X_MAP_LINK_ENTRY_ID_PREFIX&amp;gt;db/link/artist/&amp;lt;/X_MAP_LINK_ENTRY_ID_PREFIX&amp;gt;&lt;br /&gt;
                    &amp;lt;X_MAP_LINK_ENTRY_TYPE&amp;gt;album&amp;lt;/X_MAP_LINK_ENTRY_TYPE&amp;gt;&lt;br /&gt;
                &amp;lt;/X_MAP_LINK_ENTRY&amp;gt;&lt;br /&gt;
                &amp;lt;X_MAP_LINK_ENTRY&amp;gt;&lt;br /&gt;
                    &amp;lt;X_MAP_LINK_ENTRY_TAG&amp;gt;composer&amp;lt;/X_MAP_LINK_ENTRY_TAG&amp;gt;&lt;br /&gt;
                    &amp;lt;X_MAP_LINK_ENTRY_ID_PREFIX&amp;gt;db/link/composer/&amp;lt;/X_MAP_LINK_ENTRY_ID_PREFIX&amp;gt;&lt;br /&gt;
                    &amp;lt;X_MAP_LINK_ENTRY_TYPE&amp;gt;album&amp;lt;/X_MAP_LINK_ENTRY_TYPE&amp;gt;&lt;br /&gt;
                &amp;lt;/X_MAP_LINK_ENTRY&amp;gt;&lt;br /&gt;
            &amp;lt;/X_MAP_LINK&amp;gt;&lt;br /&gt;
            &amp;lt;X_MAP_SEARCH&amp;gt;&lt;br /&gt;
                &amp;lt;X_MAP_SEARCH_ENTRY&amp;gt;&lt;br /&gt;
                    &amp;lt;X_MAP_SEARCH_ENTRY_NAME&amp;gt;Artist&amp;lt;/X_MAP_SEARCH_ENTRY_NAME&amp;gt;&lt;br /&gt;
                    &amp;lt;X_MAP_SEARCH_ENTRY_ID_PREFIX&amp;gt;db/search/artist/&amp;lt;/X_MAP_SEARCH_ENTRY_ID_PREFIX&amp;gt;&lt;br /&gt;
                    &amp;lt;X_MAP_SEARCH_ENTRY_TYPE&amp;gt;artist album&amp;lt;/X_MAP_SEARCH_ENTRY_TYPE&amp;gt;&lt;br /&gt;
                &amp;lt;/X_MAP_SEARCH_ENTRY&amp;gt;&lt;br /&gt;
                &amp;lt;X_MAP_SEARCH_ENTRY&amp;gt;&lt;br /&gt;
                    &amp;lt;X_MAP_SEARCH_ENTRY_NAME&amp;gt;Tracks&amp;lt;/X_MAP_SEARCH_ENTRY_NAME&amp;gt;&lt;br /&gt;
                    &amp;lt;X_MAP_SEARCH_ENTRY_ID_PREFIX&amp;gt;db/search/all/&amp;lt;/X_MAP_SEARCH_ENTRY_ID_PREFIX&amp;gt;&lt;br /&gt;
                    &amp;lt;X_MAP_SEARCH_ENTRY_TYPE&amp;gt;&amp;lt;/X_MAP_SEARCH_ENTRY_TYPE&amp;gt;&lt;br /&gt;
                &amp;lt;/X_MAP_SEARCH_ENTRY&amp;gt;&lt;br /&gt;
            &amp;lt;/X_MAP_SEARCH&amp;gt;&lt;br /&gt;
        &amp;lt;/openhome:X_MAP&amp;gt;&lt;br /&gt;
        &amp;lt;presentationURL&amp;gt;http://10.2.1.170:4000/res/linn.co.uk.kazooserver/index.html&amp;lt;/presentationURL&amp;gt;&lt;br /&gt;
        &amp;lt;friendlyName&amp;gt;Linn Kazoo Server [R&amp;amp;D Mac Mini]&amp;lt;/friendlyName&amp;gt;&lt;br /&gt;
        &amp;lt;manufacturer&amp;gt;Linn&amp;lt;/manufacturer&amp;gt;&lt;br /&gt;
        &amp;lt;manufacturerURL&amp;gt;http://www.linn.co.uk&amp;lt;/manufacturerURL&amp;gt;&lt;br /&gt;
        &amp;lt;modelName&amp;gt;Kazoo Server&amp;lt;/modelName&amp;gt;&lt;br /&gt;
        &amp;lt;modelURL&amp;gt;http://oss.linn.co.uk/trac/wiki/KazooServer&amp;lt;/modelURL&amp;gt;&lt;br /&gt;
        &amp;lt;UDN&amp;gt;uuid:ac3d630e37b5f11ff5cdd23c0f5a7400&amp;lt;/UDN&amp;gt;&lt;br /&gt;
        &amp;lt;iconList&amp;gt;&lt;br /&gt;
            &amp;lt;icon&amp;gt;&lt;br /&gt;
                &amp;lt;mimetype&amp;gt;image/png&amp;lt;/mimetype&amp;gt;&lt;br /&gt;
                &amp;lt;width&amp;gt;65&amp;lt;/width&amp;gt;&lt;br /&gt;
                &amp;lt;height&amp;gt;65&amp;lt;/height&amp;gt;&lt;br /&gt;
                &amp;lt;depth&amp;gt;32&amp;lt;/depth&amp;gt;&lt;br /&gt;
                &amp;lt;url&amp;gt;ac3d630e37b5f11ff5cdd23c0f5a7400/resource/icon/icon&amp;lt;/url&amp;gt;&lt;br /&gt;
            &amp;lt;/icon&amp;gt;&lt;br /&gt;
        &amp;lt;/iconList&amp;gt;&lt;br /&gt;
        &amp;lt;serviceList&amp;gt;&lt;br /&gt;
            &amp;lt;service&amp;gt;&lt;br /&gt;
                &amp;lt;serviceType&amp;gt;urn:av-openhome-org:service:PlaylistManager:1&amp;lt;/serviceType&amp;gt;&lt;br /&gt;
                &amp;lt;serviceId&amp;gt;urn:av-openhome-org:serviceId:PlaylistManager&amp;lt;/serviceId&amp;gt;&lt;br /&gt;
                &amp;lt;SCPDURL&amp;gt;/ac3d630e37b5f11ff5cdd23c0f5a7400/Upnp/av.openhome.org-PlaylistManager-1/service.xml&amp;lt;/SCPDURL&amp;gt;&lt;br /&gt;
                &amp;lt;controlURL&amp;gt;/ac3d630e37b5f11ff5cdd23c0f5a7400/av.openhome.org-PlaylistManager-1/control&amp;lt;/controlURL&amp;gt;&lt;br /&gt;
                &amp;lt;eventSubURL&amp;gt;/ac3d630e37b5f11ff5cdd23c0f5a7400/av.openhome.org-PlaylistManager-1/event&amp;lt;/eventSubURL&amp;gt;&lt;br /&gt;
            &amp;lt;/service&amp;gt;&lt;br /&gt;
            &amp;lt;service&amp;gt;&lt;br /&gt;
                &amp;lt;serviceType&amp;gt;urn:schemas-upnp-org:service:ContentDirectory:1&amp;lt;/serviceType&amp;gt;&lt;br /&gt;
                &amp;lt;serviceId&amp;gt;urn:upnp-org:serviceId:ContentDirectory&amp;lt;/serviceId&amp;gt;&lt;br /&gt;
                &amp;lt;SCPDURL&amp;gt;/ac3d630e37b5f11ff5cdd23c0f5a7400/Upnp/upnp.org-ContentDirectory-1/service.xml&amp;lt;/SCPDURL&amp;gt;&lt;br /&gt;
                &amp;lt;controlURL&amp;gt;/ac3d630e37b5f11ff5cdd23c0f5a7400/upnp.org-ContentDirectory-1/control&amp;lt;/controlURL&amp;gt;&lt;br /&gt;
                &amp;lt;eventSubURL&amp;gt;/ac3d630e37b5f11ff5cdd23c0f5a7400/upnp.org-ContentDirectory-1/event&amp;lt;/eventSubURL&amp;gt;&lt;br /&gt;
            &amp;lt;/service&amp;gt;&lt;br /&gt;
            &amp;lt;service&amp;gt;&lt;br /&gt;
                &amp;lt;serviceType&amp;gt;urn:schemas-upnp-org:service:ConnectionManager:1&amp;lt;/serviceType&amp;gt;&lt;br /&gt;
                &amp;lt;serviceId&amp;gt;urn:upnp-org:serviceId:ConnectionManager&amp;lt;/serviceId&amp;gt;&lt;br /&gt;
                &amp;lt;SCPDURL&amp;gt;/ac3d630e37b5f11ff5cdd23c0f5a7400/Upnp/upnp.org-ConnectionManager-1/service.xml&amp;lt;/SCPDURL&amp;gt;&lt;br /&gt;
                &amp;lt;controlURL&amp;gt;/ac3d630e37b5f11ff5cdd23c0f5a7400/upnp.org-ConnectionManager-1/control&amp;lt;/controlURL&amp;gt;&lt;br /&gt;
                &amp;lt;eventSubURL&amp;gt;/ac3d630e37b5f11ff5cdd23c0f5a7400/upnp.org-ConnectionManager-1/event&amp;lt;/eventSubURL&amp;gt;&lt;br /&gt;
            &amp;lt;/service&amp;gt;&lt;br /&gt;
        &amp;lt;/serviceList&amp;gt;&lt;br /&gt;
    &amp;lt;/device&amp;gt;&lt;br /&gt;
 &amp;lt;/root&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Index maps ==&lt;br /&gt;
&lt;br /&gt;
Large lists are difficult to navigate, especially on mobile devices. Mobile devices added the idea of an index map to improve this situation. The index map allows a users to jump to different sections in a large list, similar to what is possible with a scrollbar on desktops.&lt;br /&gt;
&lt;br /&gt;
In order for a control point to generate an index map for any particular level in a ContentDirectory&#039;s hierarchy it first needs to download all the objects in the container, figure out if they are sorted and then calculate the index map. This means that a user will need to wait, perhaps minutes, before an index map is able to be presented on the UI. &lt;br /&gt;
&lt;br /&gt;
The media server can optionally return an index map for container that are in alphabetical order. This implemented through a OpenHome vendor extension of the DIDL-Lite XML. Below shows an example DIDL-Lite with an index map included.&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;DIDL-Lite xmlns=&amp;quot;urn:schemas-upnp-org:metadata-1-0/DIDL-Lite/&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;container id=&amp;quot;db/ba37a2ac24efa676c8676aab71a6cdf074&amp;quot; parentID=&amp;quot;0&amp;quot; restricted=&amp;quot;true&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;dc:title xmlns:dc=&amp;quot;http://purl.org/dc/elements/1.1/&amp;quot;&amp;gt;Worlds Apart [Deluxe Edition]&amp;lt;/dc:title&amp;gt;&lt;br /&gt;
        &amp;lt;upnp:udn xmlns:upnp=&amp;quot;urn:schemas-upnp-org:metadata-1-0/upnp/&amp;quot;&amp;gt;ac3d630e37b5f11ff5cdd23c0f5a7400&amp;lt;/upnp:udn&amp;gt;&lt;br /&gt;
        &amp;lt;upnp:class xmlns:upnp=&amp;quot;urn:schemas-upnp-org:metadata-1-0/upnp/&amp;quot;&amp;gt;object.container.album.musicAlbum&amp;lt;/upnp:class&amp;gt;&lt;br /&gt;
        &amp;lt;upnp:artist xmlns:upnp=&amp;quot;urn:schemas-upnp-org:metadata-1-0/upnp/&amp;quot;&amp;gt;...And You Will Know Us by the Trail of Dead&amp;lt;/upnp:artist&amp;gt;&lt;br /&gt;
        &amp;lt;upnp:albumArtURI&amp;gt;http://10.2.1.170:4000/linn.co.uk.kazooserver/ms/artwork/37a2ac2?size=0&amp;lt;/upnp:albumArtURI&amp;gt;&lt;br /&gt;
    &amp;lt;/container&amp;gt;&lt;br /&gt;
    &amp;lt;desc nameSpace=&amp;quot;openhome.org&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;indexmap&amp;gt;0 10 10 10 10 10 0 0 0 0 10 12 1 10 10 10 12 17 18 1 0 20 0 20 20 2 2 24&amp;lt;/indexmap&amp;gt;&lt;br /&gt;
    &amp;lt;/desc&amp;gt;&lt;br /&gt;
 &amp;lt;/DIDL-Lite&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The index map contains a space separated list of 28 number representing the total number of items that begin with that letter. #, represents everything below A, largely digits and punctuation and + represents everything above Z, largely international characters not collatable within the roman alphabet.&lt;br /&gt;
&lt;br /&gt;
 # A B C D E F G H I J K L M N O P Q R S T U V W X Y Z +&lt;br /&gt;
&lt;br /&gt;
== Image Resolution ==&lt;br /&gt;
&lt;br /&gt;
Control points running on different platforms have different memory limits and display technologies. This means that a control point on a PC might want to display artwork at a high resolution, while a control point on a PDA might want to display artwork at a much lower resolution.&lt;br /&gt;
&lt;br /&gt;
Media servers often try to solve this problem using one of the following two methods:&lt;br /&gt;
&lt;br /&gt;
# A configurable parameter that scales all artwork to a user defined size&lt;br /&gt;
# A profile system where a user can create profiles for each class of control point they have and configure a parameter that scales all artwork to a user defined size per profile&lt;br /&gt;
&lt;br /&gt;
The first solution is highly problematic because it limits the resolution of artwork across the whole network. But a single network very often contains control points that can display high resolution images AND control points that can&#039;t.&lt;br /&gt;
&lt;br /&gt;
The second solution is just architecturally poor, turning the relationship between a control point and a media server on its head. Why should the media server try to infer what a control point needs through configuration when the control point is perfectly capable of telling the media server its exact requirements in every single circumstance.&lt;br /&gt;
&lt;br /&gt;
So, it is proposed that compliant media servers include a &#039;&#039;&#039;size&#039;&#039;&#039; element in their artwork uri&#039;s, where the size is the image&#039;s largest dimension. This allows a control point to ask for an image at a specified size.&lt;br /&gt;
&lt;br /&gt;
=== Example ===&lt;br /&gt;
&lt;br /&gt;
If the original artwork was 400x512, then a media server would provide the following albumArtURI: &amp;lt;uri&amp;gt;?size=512. If it is not possible for the media server to obtain the original resolution then the media server would provide the following albumArtURI: &amp;lt;uri&amp;gt;?size=0.&lt;br /&gt;
&lt;br /&gt;
The presence of the size element tells the control point:&lt;br /&gt;
&lt;br /&gt;
# the media server implements the image scaling extension&lt;br /&gt;
# the original size of the image.&lt;br /&gt;
&lt;br /&gt;
Now the control point can request the image at any resolution by using &amp;lt;uri&amp;gt;?size=x, where x is the size it wants.&lt;br /&gt;
&lt;br /&gt;
So, in this example, &amp;lt;uri&amp;gt;?size=1024 gets an 800x1024 image, and &amp;lt;uri&amp;gt;?size=200 gets a 156x200 image.&lt;br /&gt;
&lt;br /&gt;
== albumArtURI&amp;lt;br&amp;gt; ==&lt;br /&gt;
&lt;br /&gt;
The current specification only allows retrieval of artwork for a musicAlbum container through the property albumArtURI. When browsing a music library on a control point it quickly becomes clear that to implement a graphically rich control point the ContentDirectory service should provide a way to retrieve artwork for all of the content directory classes, not just musicAlbum containers.&lt;br /&gt;
&lt;br /&gt;
There has become a somewhat defacto standard where just about all media server provide an albumArtURI property for a musicItem item as well as for a musicAlbum container, however this is still not good enough to implement a graphically rich control point.&lt;br /&gt;
&lt;br /&gt;
It is proposed that an optional property is introduced to the object class called &#039;&#039;&#039;albumArtURI&#039;&#039;&amp;amp;nbsp;&#039;&#039;&#039;&#039;&#039;which may contain an attribute &#039;&#039;&#039;title&#039;&#039;&#039;,&amp;amp;nbsp;e.g. &amp;amp;lt;albumArtURI title=&amp;quot;Font Cover&amp;quot;&amp;amp;gt;http://Front Cover.jpg&amp;amp;lt;/albumArtURI&amp;amp;gt;.&amp;amp;nbsp;The object class can contain zero or more albumArtURIs elements.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Medium =&lt;br /&gt;
= Low =&lt;br /&gt;
&lt;br /&gt;
== Dynamic IP Addresses ==&lt;br /&gt;
&lt;br /&gt;
At present all media servers return URIs that contain a reference to their IP address, e.g. http://172.20.1.1/music.flac etc. This means that if the media server&#039;s IP address were to change across reboots, then any control point or media renderer with URIs that referenced the media server before the reboot will become invalid.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
It is proposed that a media server should always reference itself by host name and not by IP address in any XML that it sends to external devices, i.e. http://mynas/music.flac.&lt;br /&gt;
&lt;br /&gt;
== Disc Information ==&lt;br /&gt;
&lt;br /&gt;
It is proposed that two new properties are added to the musicTrack item called &#039;&#039;&#039;OriginalDiscNumber&#039;&#039;&#039; and &#039;&#039;&#039;OriginalDiscCount&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== Replay Gain Information ==&lt;br /&gt;
&lt;br /&gt;
It is proposed that four new properties are added to the musicTrack item called &#039;&#039;&#039;ReplayGainAlbum&#039;&#039;&#039;, &#039;&#039;&#039;ReplayGainAlbumPeak&#039;&#039;&#039;, &#039;&#039;&#039;ReplayGainTrack&#039;&#039;&#039;, and &#039;&#039;&#039;ReplayGainTrackPeak&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
== webURI ==&lt;br /&gt;
&lt;br /&gt;
The current specification does not easily allow a control point to provide rich information about objects in the browse hierarchy.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
It is proposed to add an optionally property to the object class called &#039;&#039;&#039;webURI&amp;amp;nbsp;&#039;&#039;&#039;which will contain a URI to a website that provides a rich collection of information about the object, e.g. for a musicArtist container it would provided a link to a website that provided information about the artist.&lt;/div&gt;</summary>
		<author><name>Davidd</name></author>
	</entry>
	<entry>
		<id>https://docs.linn.co.uk/wiki/index.php?title=Developer:Media_Server_Extensions&amp;diff=11189</id>
		<title>Developer:Media Server Extensions</title>
		<link rel="alternate" type="text/html" href="https://docs.linn.co.uk/wiki/index.php?title=Developer:Media_Server_Extensions&amp;diff=11189"/>
		<updated>2015-02-20T17:43:33Z</updated>

		<summary type="html">&lt;p&gt;Davidd: /* Index maps */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Introduction =&lt;br /&gt;
&lt;br /&gt;
The ContentDirectory service has various limitations which become apparent when implementing control points on different hardware platforms. This document aims to outline some ideas that address the various shortcomings of the ContentDirectory specification. The ideas have been categorised in low, medium and high priority groups.&lt;br /&gt;
&lt;br /&gt;
= High =&lt;br /&gt;
&lt;br /&gt;
== Container map ==&lt;br /&gt;
&lt;br /&gt;
The current ContentDirectory specification makes it tricky for a control point to display the returned contents in an appropriate, aesthetically pleasing, manner for the content being viewed. This is because the ContentDirectory specification does not allow for a control point to know in advanced what content to expect when browsing through any particular hierarchy.&lt;br /&gt;
&lt;br /&gt;
An example of this might be, at a particular point in the browse hierarchy the ContentDirectory will return a list of albums which in turn will contain a list of tracks. A UI might wish to represent this list of albums as a grid and the album&#039;s tracks as a header and a list of the tracks. Currently it is not possible for the UI to know when it gets to a point in a hierarchy where the hierarchy represents a list of albums followed by a list of tracks.&lt;br /&gt;
&lt;br /&gt;
The container map extension allows a media server to express its container hierarchy in advance of the control point navigating it. This is done using an OpenHome vendor extension to the device XML.&lt;br /&gt;
&lt;br /&gt;
Three types of mapped container are defined: browse, link, and search.&lt;br /&gt;
&lt;br /&gt;
The browse map defines named top level containers that represent significant starting points for browsing that can meaningfully be presented in top level tabs of a control point UI. The browse map is expressed within the X_MAP_BROWSE element of X_MAP.&lt;br /&gt;
&lt;br /&gt;
The link map defines containers that can be meaningfully linked to from track or album details. For instance a track will typically have an artist defined. If an entry for &amp;quot;artist&amp;quot; is defined in the link map then it will be possible for the user of a control point to quickly access this artist-related container by clicking on the track&#039;s artist text. Similar links might be offered for &amp;quot;genre&amp;quot;, &amp;quot;composer&amp;quot;, &amp;quot;conductor&amp;quot;, etc. The link map is expressed within the X_MAP_LINK element of X_MAP.&lt;br /&gt;
&lt;br /&gt;
The search map defines the different kinds of search containers and the type of results that they produce. The search map is expressed within the X_MAP_SEARCH element of X_MAP.&lt;br /&gt;
&lt;br /&gt;
=== Browse map ===&lt;br /&gt;
&lt;br /&gt;
The X_MAP_BROWSE element must contain 1 or more X_MAP_BROWSE_ENTRY elements.&lt;br /&gt;
&lt;br /&gt;
The X_MAP_BROWSE_ENTRY has three child elements.&lt;br /&gt;
&lt;br /&gt;
X_MAP_BROWSE_ENTRY_NAME is a string that can be used by a control point to label a tab containing this browse hierarchy.&lt;br /&gt;
&lt;br /&gt;
X_MAP_BROWSE_ENTRY_ID is the UPnP container id that contains the root of this browse hierarchy. This id is then submitted to the ContentDirectory service using the Browse action as usual. The returned contents are navigated using subsequent Browse request as usual. The difference is that the control point knows in advance what kind of results to expect at each level.&lt;br /&gt;
&lt;br /&gt;
X_MAP_BROWSE_ENTRY_TYPE is a space separated list of strings that maps out the kind of containers that are to be found at each level of this browse hierarchy. For instance, &amp;quot;artist album&amp;quot; represents a browse hierarchy giving a container containing only artist containers, each of which contains only album containers, each of which contains only tracks.&lt;br /&gt;
&lt;br /&gt;
There should be an X_MAP_BROWSE_ENTRY for each root browse hierarchy defined by the media server.&lt;br /&gt;
&lt;br /&gt;
For example:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;X_MAP_BROWSE_ENTRY&amp;gt;&lt;br /&gt;
     &amp;lt;X_MAP_BROWSE_ENTRY_NAME&amp;gt;Genre&amp;lt;/X_MAP_BROWSE_ENTRY_NAME&amp;gt;&lt;br /&gt;
     &amp;lt;X_MAP_BROWSE_ENTRY_ID&amp;gt;db/browse/genre&amp;lt;/X_MAP_BROWSE_ENTRY_ID&amp;gt;&lt;br /&gt;
     &amp;lt;X_MAP_BROWSE_ENTRY_TYPE&amp;gt;genre artist album&amp;lt;/X_MAP_BROWSE_ENTRY_TYPE&amp;gt;&lt;br /&gt;
 &amp;lt;/X_MAP_BROWSE_ENTRY&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Link map ===&lt;br /&gt;
&lt;br /&gt;
The X_MAP_LINK element must contain 1 or more X_MAP_LINK_ENTRY elements.&lt;br /&gt;
&lt;br /&gt;
The X_MAP_LINK_ENTRY has three child elements.&lt;br /&gt;
&lt;br /&gt;
X_MAP_LINK_ENTRY_TAG is a string that defines which type of metadata is the target for this link. e.g. &amp;quot;artist&amp;quot;, &amp;quot;genre&amp;quot;, &amp;quot;composer&amp;quot;, etc. See the type section below. &lt;br /&gt;
&lt;br /&gt;
X_MAP_LINK_ENTRY_ID_PREFIX is a string that is prefix for a UPnP container id. The link can be taken by browsing to the container whose id is the result of appending the associated metadata value to this prefix. For instance, if the prefix for an &amp;quot;artist&amp;quot; link is defined as db/link/artist/, and a track returned anywhere in the media server&#039;s library has &amp;quot;Pink Floyd&amp;quot; as its artist. Then the linked container will have an id of db/link/artist/Pink Floyd.&lt;br /&gt;
&lt;br /&gt;
X_MAP_LINK_ENTRY_TYPE represents the type of browse hierarchy returned when taking this type of link. See X_MAP_BROWSE_ENTRY_TYPE for details.&lt;br /&gt;
&lt;br /&gt;
There should be an X_MAP_LINK_ENTRY for each piece of metadata that the media server allows to be linked.&lt;br /&gt;
&lt;br /&gt;
For example:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;X_MAP_LINK_ENTRY&amp;gt;&lt;br /&gt;
     &amp;lt;X_MAP_LINK_ENTRY_TAG&amp;gt;artist&amp;lt;/X_MAP_LINK_ENTRY_TAG&amp;gt;&lt;br /&gt;
     &amp;lt;X_MAP_LINK_ENTRY_ID_PREFIX&amp;gt;db/link/artist/&amp;lt;/X_MAP_LINK_ENTRY_ID_PREFIX&amp;gt;&lt;br /&gt;
     &amp;lt;X_MAP_LINK_ENTRY_TYPE&amp;gt;album&amp;lt;/X_MAP_LINK_ENTRY_TYPE&amp;gt;&lt;br /&gt;
 &amp;lt;/X_MAP_LINK_ENTRY&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The example above defines a browse hierarchy that is created when linking from an artist name. The hierarchy created provides a list of linked artist albums which in turn provide a list of tracks.&lt;br /&gt;
&lt;br /&gt;
=== Search map ===&lt;br /&gt;
&lt;br /&gt;
The X_MAP_SEARCH element must contain 1 or more X_MAP_SEARCH_ENTRY elements.&lt;br /&gt;
&lt;br /&gt;
The X_MAP_SEARCH_ENTRY has three child elements.&lt;br /&gt;
&lt;br /&gt;
X_MAP_SEARCH_ENTRY_NAME  is a string that can be used by a control point to label a tab containing these search results.&lt;br /&gt;
&lt;br /&gt;
X_MAP_SEARCH_ENTRY_ID_PREFIX is a string that is a prefix for a UPnP container id. The search results can be found by browsing to the container whose id is the result of appending the search string to this prefix. For instance, if the prefix for an &amp;quot;album&amp;quot; search is defined as db/search/album/, and the search string is &amp;quot;blue&amp;quot;, then the search results container will have an id of db/search/album/blue.&lt;br /&gt;
&lt;br /&gt;
X_MAP_SEARCH_ENTRY_TYPE represents the type of browse hierarchy returned when taking this type of search. See X_MAP_BROWSE_ENTRY_TYPE for details.&lt;br /&gt;
&lt;br /&gt;
There should be an X_MAP_SEARCH_ENTRY for each type of search offered by the media server.&lt;br /&gt;
&lt;br /&gt;
For example:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;X_MAP_SEARCH_ENTRY&amp;gt;&lt;br /&gt;
     &amp;lt;X_MAP_SEARCH_ENTRY_NAME&amp;gt;Artist&amp;lt;/X_MAP_SEARCH_ENTRY_NAME&amp;gt;&lt;br /&gt;
     &amp;lt;X_MAP_SEARCH_ENTRY_ID_PREFIX&amp;gt;db/search/artist/&amp;lt;/X_MAP_SEARCH_ENTRY_ID_PREFIX&amp;gt;&lt;br /&gt;
     &amp;lt;X_MAP_SEARCH_ENTRY_TYPE&amp;gt;artist album&amp;lt;/X_MAP_SEARCH_ENTRY_TYPE&amp;gt;&lt;br /&gt;
 &amp;lt;/X_MAP_SEARCH_ENTRY&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The example above defines a browse hierarchy that is created when searching for an artist. The hierarchy created provides a list of artists, which in turn provide a list of albums, which in turn provide a list of tracks.&lt;br /&gt;
&lt;br /&gt;
=== Types ===&lt;br /&gt;
&lt;br /&gt;
The list of allowed types for X_BROWSE_ENTRY_TYPE, X_MAP_LINK_ENTRY_TAG, X_LINK_ENTRY_TYPE, and X_SEARCH_ENTRY_TYPE&lt;br /&gt;
&lt;br /&gt;
 genre&lt;br /&gt;
 artist&lt;br /&gt;
 composer&lt;br /&gt;
 conductor&lt;br /&gt;
 album&lt;br /&gt;
 year&lt;br /&gt;
 mixed&lt;br /&gt;
&lt;br /&gt;
mixed is a special value that represents a container that has mixed entries. It is not a valid type for the X_MAP_LINK_ENTRY_TAG element.&lt;br /&gt;
&lt;br /&gt;
=== Example device XML ===&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;root xmlns=&amp;quot;urn:schemas-upnp-org:device-1-0&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;specVersion&amp;gt;&lt;br /&gt;
        &amp;lt;major&amp;gt;1&amp;lt;/major&amp;gt;&lt;br /&gt;
        &amp;lt;minor&amp;gt;1&amp;lt;/minor&amp;gt;&lt;br /&gt;
    &amp;lt;/specVersion&amp;gt;&lt;br /&gt;
    &amp;lt;device&amp;gt;&lt;br /&gt;
        &amp;lt;deviceType&amp;gt;urn:schemas-upnp-org:device:MediaServer:1&amp;lt;/deviceType&amp;gt;&lt;br /&gt;
        &amp;lt;dlna:X_DLNADOC xmlns:dlna=&amp;quot;urn:schemas-dlna-org:device-1-0&amp;quot;&amp;gt;DMS-1.50&amp;lt;/dlna:X_DLNADOC&amp;gt;&lt;br /&gt;
        &amp;lt;dlna:X_DLNACAP xmlns:dlna=&amp;quot;urn:schemas-dlna-org:device-1-0&amp;quot;&amp;gt;av-upload,image-upload,audio-upload&amp;lt;/dlna:X_DLNACAP&amp;gt;&lt;br /&gt;
        &amp;lt;openhome:X_MAP xmlns:openhome=&amp;quot;http://www.openhome.org&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;X_MAP_BROWSE&amp;gt;&lt;br /&gt;
                &amp;lt;X_MAP_BROWSE_ENTRY&amp;gt;&lt;br /&gt;
                    &amp;lt;X_MAP_BROWSE_ENTRY_NAME&amp;gt;Albums&amp;lt;/X_MAP_BROWSE_ENTRY_NAME&amp;gt;&lt;br /&gt;
                    &amp;lt;X_MAP_BROWSE_ENTRY_ID&amp;gt;db/browse/albums&amp;lt;/X_MAP_BROWSE_ENTRY_ID&amp;gt;&lt;br /&gt;
                    &amp;lt;X_MAP_BROWSE_ENTRY_TYPE&amp;gt;album&amp;lt;/X_MAP_BROWSE_ENTRY_TYPE&amp;gt;&lt;br /&gt;
                &amp;lt;/X_MAP_BROWSE_ENTRY&amp;gt;&lt;br /&gt;
                &amp;lt;X_MAP_BROWSE_ENTRY&amp;gt;&lt;br /&gt;
                    &amp;lt;X_MAP_BROWSE_ENTRY_NAME&amp;gt;Artists&amp;lt;/X_MAP_BROWSE_ENTRY_NAME&amp;gt;&lt;br /&gt;
                    &amp;lt;X_MAP_BROWSE_ENTRY_ID&amp;gt;db/browse/artists&amp;lt;/X_MAP_BROWSE_ENTRY_ID&amp;gt;&lt;br /&gt;
                    &amp;lt;X_MAP_BROWSE_ENTRY_TYPE&amp;gt;artist album&amp;lt;/X_MAP_BROWSE_ENTRY_TYPE&amp;gt;&lt;br /&gt;
                &amp;lt;/X_MAP_BROWSE_ENTRY&amp;gt;&lt;br /&gt;
                &amp;lt;X_MAP_BROWSE_ENTRY&amp;gt;&lt;br /&gt;
                    &amp;lt;X_MAP_BROWSE_ENTRY_NAME&amp;gt;Folders&amp;lt;/X_MAP_BROWSE_ENTRY_NAME&amp;gt;&lt;br /&gt;
                    &amp;lt;X_MAP_BROWSE_ENTRY_ID&amp;gt;db/browse/folders&amp;lt;/X_MAP_BROWSE_ENTRY_ID&amp;gt;&lt;br /&gt;
                    &amp;lt;X_MAP_BROWSE_ENTRY_TYPE&amp;gt;mixed&amp;lt;/X_MAP_BROWSE_ENTRY_TYPE&amp;gt;&lt;br /&gt;
                &amp;lt;/X_MAP_BROWSE_ENTRY&amp;gt;&lt;br /&gt;
            &amp;lt;/X_MAP_BROWSE&amp;gt;&lt;br /&gt;
            &amp;lt;X_MAP_LINK&amp;gt;&lt;br /&gt;
                &amp;lt;X_MAP_LINK_ENTRY&amp;gt;&lt;br /&gt;
                    &amp;lt;X_MAP_LINK_ENTRY_TAG&amp;gt;artist&amp;lt;/X_MAP_LINK_ENTRY_TAG&amp;gt;&lt;br /&gt;
                    &amp;lt;X_MAP_LINK_ENTRY_ID_PREFIX&amp;gt;db/link/artist/&amp;lt;/X_MAP_LINK_ENTRY_ID_PREFIX&amp;gt;&lt;br /&gt;
                    &amp;lt;X_MAP_LINK_ENTRY_TYPE&amp;gt;album&amp;lt;/X_MAP_LINK_ENTRY_TYPE&amp;gt;&lt;br /&gt;
                &amp;lt;/X_MAP_LINK_ENTRY&amp;gt;&lt;br /&gt;
                &amp;lt;X_MAP_LINK_ENTRY&amp;gt;&lt;br /&gt;
                    &amp;lt;X_MAP_LINK_ENTRY_TAG&amp;gt;composer&amp;lt;/X_MAP_LINK_ENTRY_TAG&amp;gt;&lt;br /&gt;
                    &amp;lt;X_MAP_LINK_ENTRY_ID_PREFIX&amp;gt;db/link/composer/&amp;lt;/X_MAP_LINK_ENTRY_ID_PREFIX&amp;gt;&lt;br /&gt;
                    &amp;lt;X_MAP_LINK_ENTRY_TYPE&amp;gt;album&amp;lt;/X_MAP_LINK_ENTRY_TYPE&amp;gt;&lt;br /&gt;
                &amp;lt;/X_MAP_LINK_ENTRY&amp;gt;&lt;br /&gt;
            &amp;lt;/X_MAP_LINK&amp;gt;&lt;br /&gt;
            &amp;lt;X_MAP_SEARCH&amp;gt;&lt;br /&gt;
                &amp;lt;X_MAP_SEARCH_ENTRY&amp;gt;&lt;br /&gt;
                    &amp;lt;X_MAP_SEARCH_ENTRY_NAME&amp;gt;Artist&amp;lt;/X_MAP_SEARCH_ENTRY_NAME&amp;gt;&lt;br /&gt;
                    &amp;lt;X_MAP_SEARCH_ENTRY_ID_PREFIX&amp;gt;db/search/artist/&amp;lt;/X_MAP_SEARCH_ENTRY_ID_PREFIX&amp;gt;&lt;br /&gt;
                    &amp;lt;X_MAP_SEARCH_ENTRY_TYPE&amp;gt;artist album&amp;lt;/X_MAP_SEARCH_ENTRY_TYPE&amp;gt;&lt;br /&gt;
                &amp;lt;/X_MAP_SEARCH_ENTRY&amp;gt;&lt;br /&gt;
                &amp;lt;X_MAP_SEARCH_ENTRY&amp;gt;&lt;br /&gt;
                    &amp;lt;X_MAP_SEARCH_ENTRY_NAME&amp;gt;Tracks&amp;lt;/X_MAP_SEARCH_ENTRY_NAME&amp;gt;&lt;br /&gt;
                    &amp;lt;X_MAP_SEARCH_ENTRY_ID_PREFIX&amp;gt;db/search/all/&amp;lt;/X_MAP_SEARCH_ENTRY_ID_PREFIX&amp;gt;&lt;br /&gt;
                    &amp;lt;X_MAP_SEARCH_ENTRY_TYPE&amp;gt;&amp;lt;/X_MAP_SEARCH_ENTRY_TYPE&amp;gt;&lt;br /&gt;
                &amp;lt;/X_MAP_SEARCH_ENTRY&amp;gt;&lt;br /&gt;
            &amp;lt;/X_MAP_SEARCH&amp;gt;&lt;br /&gt;
        &amp;lt;/openhome:X_MAP&amp;gt;&lt;br /&gt;
        &amp;lt;presentationURL&amp;gt;http://10.2.1.170:4000/res/linn.co.uk.kazooserver/index.html&amp;lt;/presentationURL&amp;gt;&lt;br /&gt;
        &amp;lt;friendlyName&amp;gt;Linn Kazoo Server [R&amp;amp;D Mac Mini]&amp;lt;/friendlyName&amp;gt;&lt;br /&gt;
        &amp;lt;manufacturer&amp;gt;Linn&amp;lt;/manufacturer&amp;gt;&lt;br /&gt;
        &amp;lt;manufacturerURL&amp;gt;http://www.linn.co.uk&amp;lt;/manufacturerURL&amp;gt;&lt;br /&gt;
        &amp;lt;modelName&amp;gt;Kazoo Server&amp;lt;/modelName&amp;gt;&lt;br /&gt;
        &amp;lt;modelURL&amp;gt;http://oss.linn.co.uk/trac/wiki/KazooServer&amp;lt;/modelURL&amp;gt;&lt;br /&gt;
        &amp;lt;UDN&amp;gt;uuid:ac3d630e37b5f11ff5cdd23c0f5a7400&amp;lt;/UDN&amp;gt;&lt;br /&gt;
        &amp;lt;iconList&amp;gt;&lt;br /&gt;
            &amp;lt;icon&amp;gt;&lt;br /&gt;
                &amp;lt;mimetype&amp;gt;image/png&amp;lt;/mimetype&amp;gt;&lt;br /&gt;
                &amp;lt;width&amp;gt;65&amp;lt;/width&amp;gt;&lt;br /&gt;
                &amp;lt;height&amp;gt;65&amp;lt;/height&amp;gt;&lt;br /&gt;
                &amp;lt;depth&amp;gt;32&amp;lt;/depth&amp;gt;&lt;br /&gt;
                &amp;lt;url&amp;gt;ac3d630e37b5f11ff5cdd23c0f5a7400/resource/icon/icon&amp;lt;/url&amp;gt;&lt;br /&gt;
            &amp;lt;/icon&amp;gt;&lt;br /&gt;
        &amp;lt;/iconList&amp;gt;&lt;br /&gt;
        &amp;lt;serviceList&amp;gt;&lt;br /&gt;
            &amp;lt;service&amp;gt;&lt;br /&gt;
                &amp;lt;serviceType&amp;gt;urn:av-openhome-org:service:PlaylistManager:1&amp;lt;/serviceType&amp;gt;&lt;br /&gt;
                &amp;lt;serviceId&amp;gt;urn:av-openhome-org:serviceId:PlaylistManager&amp;lt;/serviceId&amp;gt;&lt;br /&gt;
                &amp;lt;SCPDURL&amp;gt;/ac3d630e37b5f11ff5cdd23c0f5a7400/Upnp/av.openhome.org-PlaylistManager-1/service.xml&amp;lt;/SCPDURL&amp;gt;&lt;br /&gt;
                &amp;lt;controlURL&amp;gt;/ac3d630e37b5f11ff5cdd23c0f5a7400/av.openhome.org-PlaylistManager-1/control&amp;lt;/controlURL&amp;gt;&lt;br /&gt;
                &amp;lt;eventSubURL&amp;gt;/ac3d630e37b5f11ff5cdd23c0f5a7400/av.openhome.org-PlaylistManager-1/event&amp;lt;/eventSubURL&amp;gt;&lt;br /&gt;
            &amp;lt;/service&amp;gt;&lt;br /&gt;
            &amp;lt;service&amp;gt;&lt;br /&gt;
                &amp;lt;serviceType&amp;gt;urn:schemas-upnp-org:service:ContentDirectory:1&amp;lt;/serviceType&amp;gt;&lt;br /&gt;
                &amp;lt;serviceId&amp;gt;urn:upnp-org:serviceId:ContentDirectory&amp;lt;/serviceId&amp;gt;&lt;br /&gt;
                &amp;lt;SCPDURL&amp;gt;/ac3d630e37b5f11ff5cdd23c0f5a7400/Upnp/upnp.org-ContentDirectory-1/service.xml&amp;lt;/SCPDURL&amp;gt;&lt;br /&gt;
                &amp;lt;controlURL&amp;gt;/ac3d630e37b5f11ff5cdd23c0f5a7400/upnp.org-ContentDirectory-1/control&amp;lt;/controlURL&amp;gt;&lt;br /&gt;
                &amp;lt;eventSubURL&amp;gt;/ac3d630e37b5f11ff5cdd23c0f5a7400/upnp.org-ContentDirectory-1/event&amp;lt;/eventSubURL&amp;gt;&lt;br /&gt;
            &amp;lt;/service&amp;gt;&lt;br /&gt;
            &amp;lt;service&amp;gt;&lt;br /&gt;
                &amp;lt;serviceType&amp;gt;urn:schemas-upnp-org:service:ConnectionManager:1&amp;lt;/serviceType&amp;gt;&lt;br /&gt;
                &amp;lt;serviceId&amp;gt;urn:upnp-org:serviceId:ConnectionManager&amp;lt;/serviceId&amp;gt;&lt;br /&gt;
                &amp;lt;SCPDURL&amp;gt;/ac3d630e37b5f11ff5cdd23c0f5a7400/Upnp/upnp.org-ConnectionManager-1/service.xml&amp;lt;/SCPDURL&amp;gt;&lt;br /&gt;
                &amp;lt;controlURL&amp;gt;/ac3d630e37b5f11ff5cdd23c0f5a7400/upnp.org-ConnectionManager-1/control&amp;lt;/controlURL&amp;gt;&lt;br /&gt;
                &amp;lt;eventSubURL&amp;gt;/ac3d630e37b5f11ff5cdd23c0f5a7400/upnp.org-ConnectionManager-1/event&amp;lt;/eventSubURL&amp;gt;&lt;br /&gt;
            &amp;lt;/service&amp;gt;&lt;br /&gt;
        &amp;lt;/serviceList&amp;gt;&lt;br /&gt;
    &amp;lt;/device&amp;gt;&lt;br /&gt;
 &amp;lt;/root&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Index maps ==&lt;br /&gt;
&lt;br /&gt;
Large lists are difficult to navigate, especially on mobile devices. Mobile devices added the idea of an index map to improve this situation. The index map allows a users to jump to different sections in a large list, similar to what is possible with a scrollbar on desktops.&lt;br /&gt;
&lt;br /&gt;
In order for a control point to generate an index map for any particular level in a ContentDirectory&#039;s hierarchy it first needs to download all the objects in the container, figure out if they are sorted and then calculate the index map. This means that a user will need to wait, perhaps minutes, before an index map is able to be presented on the UI. &lt;br /&gt;
&lt;br /&gt;
The proposal is to allow the media server to calculate an index map and return it as part of the DIDL-Lite XML. Below shows some example DIDL-Lite with an index map included.&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;DIDL-Lite xmlns=&amp;quot;urn:schemas-upnp-org:metadata-1-0/DIDL-Lite/&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;container id=&amp;quot;db/ba37a2ac24efa676c8676aab71a6cdf074&amp;quot; parentID=&amp;quot;0&amp;quot; restricted=&amp;quot;true&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;dc:title xmlns:dc=&amp;quot;http://purl.org/dc/elements/1.1/&amp;quot;&amp;gt;Worlds Apart [Deluxe Edition]&amp;lt;/dc:title&amp;gt;&lt;br /&gt;
        &amp;lt;upnp:udn xmlns:upnp=&amp;quot;urn:schemas-upnp-org:metadata-1-0/upnp/&amp;quot;&amp;gt;ac3d630e37b5f11ff5cdd23c0f5a7400&amp;lt;/upnp:udn&amp;gt;&lt;br /&gt;
        &amp;lt;upnp:class xmlns:upnp=&amp;quot;urn:schemas-upnp-org:metadata-1-0/upnp/&amp;quot;&amp;gt;object.container.album.musicAlbum&amp;lt;/upnp:class&amp;gt;&lt;br /&gt;
        &amp;lt;upnp:artist xmlns:upnp=&amp;quot;urn:schemas-upnp-org:metadata-1-0/upnp/&amp;quot;&amp;gt;...And You Will Know Us by the Trail of Dead&amp;lt;/upnp:artist&amp;gt;&lt;br /&gt;
        &amp;lt;upnp:albumArtURI&amp;gt;http://10.2.1.170:4000/linn.co.uk.kazooserver/ms/artwork/37a2ac2?size=0&amp;lt;/upnp:albumArtURI&amp;gt;&lt;br /&gt;
    &amp;lt;/container&amp;gt;&lt;br /&gt;
    &amp;lt;desc nameSpace=&amp;quot;openhome.org&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;indexmap&amp;gt;0 10 20 30 40 50 60 70 80 90 100 110 120 130 140 150 160 170 180 190 200 210 220 230 240 250 260 270&amp;lt;/indexmap&amp;gt;&lt;br /&gt;
    &amp;lt;/desc&amp;gt;&lt;br /&gt;
 &amp;lt;/DIDL-Lite&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The index map contains two, space separated, lists. These lists must contain the same number of elements. The example above is for a container who&#039;s contents are alphabetically sorted. But an index map could just as easily define a container who&#039;s contents are sorted by decade, e.g 1960 - 2015,&lt;br /&gt;
&lt;br /&gt;
 # A B C D E F G H I J K L M N O P Q R S T U V W X Y Z +&lt;br /&gt;
&lt;br /&gt;
== Image Resolution ==&lt;br /&gt;
&lt;br /&gt;
Control points running on different platforms have different memory limits and display technologies. This means that a control point on a PC might want to display artwork at a high resolution, while a control point on a PDA might want to display artwork at a much lower resolution.&lt;br /&gt;
&lt;br /&gt;
Media servers often try to solve this problem using one of the following two methods:&lt;br /&gt;
&lt;br /&gt;
# A configurable parameter that scales all artwork to a user defined size&lt;br /&gt;
# A profile system where a user can create profiles for each class of control point they have and configure a parameter that scales all artwork to a user defined size per profile&lt;br /&gt;
&lt;br /&gt;
The first solution is highly problematic because it limits the resolution of artwork across the whole network. But a single network very often contains control points that can display high resolution images AND control points that can&#039;t.&lt;br /&gt;
&lt;br /&gt;
The second solution is just architecturally poor, turning the relationship between a control point and a media server on its head. Why should the media server try to infer what a control point needs through configuration when the control point is perfectly capable of telling the media server its exact requirements in every single circumstance.&lt;br /&gt;
&lt;br /&gt;
So, it is proposed that compliant media servers include a &#039;&#039;&#039;size&#039;&#039;&#039; element in their artwork uri&#039;s, where the size is the image&#039;s largest dimension. This allows a control point to ask for an image at a specified size.&lt;br /&gt;
&lt;br /&gt;
=== Example ===&lt;br /&gt;
&lt;br /&gt;
If the original artwork was 400x512, then a media server would provide the following albumArtURI: &amp;lt;uri&amp;gt;?size=512. If it is not possible for the media server to obtain the original resolution then the media server would provide the following albumArtURI: &amp;lt;uri&amp;gt;?size=0.&lt;br /&gt;
&lt;br /&gt;
The presence of the size element tells the control point:&lt;br /&gt;
&lt;br /&gt;
# the media server implements the image scaling extension&lt;br /&gt;
# the original size of the image.&lt;br /&gt;
&lt;br /&gt;
Now the control point can request the image at any resolution by using &amp;lt;uri&amp;gt;?size=x, where x is the size it wants.&lt;br /&gt;
&lt;br /&gt;
So, in this example, &amp;lt;uri&amp;gt;?size=1024 gets an 800x1024 image, and &amp;lt;uri&amp;gt;?size=200 gets a 156x200 image.&lt;br /&gt;
&lt;br /&gt;
== albumArtURI&amp;lt;br&amp;gt; ==&lt;br /&gt;
&lt;br /&gt;
The current specification only allows retrieval of artwork for a musicAlbum container through the property albumArtURI. When browsing a music library on a control point it quickly becomes clear that to implement a graphically rich control point the ContentDirectory service should provide a way to retrieve artwork for all of the content directory classes, not just musicAlbum containers.&lt;br /&gt;
&lt;br /&gt;
There has become a somewhat defacto standard where just about all media server provide an albumArtURI property for a musicItem item as well as for a musicAlbum container, however this is still not good enough to implement a graphically rich control point.&lt;br /&gt;
&lt;br /&gt;
It is proposed that an optional property is introduced to the object class called &#039;&#039;&#039;albumArtURI&#039;&#039;&amp;amp;nbsp;&#039;&#039;&#039;&#039;&#039;which may contain an attribute &#039;&#039;&#039;title&#039;&#039;&#039;,&amp;amp;nbsp;e.g. &amp;amp;lt;albumArtURI title=&amp;quot;Font Cover&amp;quot;&amp;amp;gt;http://Front Cover.jpg&amp;amp;lt;/albumArtURI&amp;amp;gt;.&amp;amp;nbsp;The object class can contain zero or more albumArtURIs elements.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Medium =&lt;br /&gt;
= Low =&lt;br /&gt;
&lt;br /&gt;
== Dynamic IP Addresses ==&lt;br /&gt;
&lt;br /&gt;
At present all media servers return URIs that contain a reference to their IP address, e.g. http://172.20.1.1/music.flac etc. This means that if the media server&#039;s IP address were to change across reboots, then any control point or media renderer with URIs that referenced the media server before the reboot will become invalid.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
It is proposed that a media server should always reference itself by host name and not by IP address in any XML that it sends to external devices, i.e. http://mynas/music.flac.&lt;br /&gt;
&lt;br /&gt;
== Disc Information ==&lt;br /&gt;
&lt;br /&gt;
It is proposed that two new properties are added to the musicTrack item called &#039;&#039;&#039;OriginalDiscNumber&#039;&#039;&#039; and &#039;&#039;&#039;OriginalDiscCount&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== Replay Gain Information ==&lt;br /&gt;
&lt;br /&gt;
It is proposed that four new properties are added to the musicTrack item called &#039;&#039;&#039;ReplayGainAlbum&#039;&#039;&#039;, &#039;&#039;&#039;ReplayGainAlbumPeak&#039;&#039;&#039;, &#039;&#039;&#039;ReplayGainTrack&#039;&#039;&#039;, and &#039;&#039;&#039;ReplayGainTrackPeak&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
== webURI ==&lt;br /&gt;
&lt;br /&gt;
The current specification does not easily allow a control point to provide rich information about objects in the browse hierarchy.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
It is proposed to add an optionally property to the object class called &#039;&#039;&#039;webURI&amp;amp;nbsp;&#039;&#039;&#039;which will contain a URI to a website that provides a rich collection of information about the object, e.g. for a musicArtist container it would provided a link to a website that provided information about the artist.&lt;/div&gt;</summary>
		<author><name>Davidd</name></author>
	</entry>
	<entry>
		<id>https://docs.linn.co.uk/wiki/index.php?title=Developer:Media_Server_Extensions&amp;diff=11188</id>
		<title>Developer:Media Server Extensions</title>
		<link rel="alternate" type="text/html" href="https://docs.linn.co.uk/wiki/index.php?title=Developer:Media_Server_Extensions&amp;diff=11188"/>
		<updated>2015-02-20T17:43:07Z</updated>

		<summary type="html">&lt;p&gt;Davidd: /* Index maps */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Introduction =&lt;br /&gt;
&lt;br /&gt;
The ContentDirectory service has various limitations which become apparent when implementing control points on different hardware platforms. This document aims to outline some ideas that address the various shortcomings of the ContentDirectory specification. The ideas have been categorised in low, medium and high priority groups.&lt;br /&gt;
&lt;br /&gt;
= High =&lt;br /&gt;
&lt;br /&gt;
== Container map ==&lt;br /&gt;
&lt;br /&gt;
The current ContentDirectory specification makes it tricky for a control point to display the returned contents in an appropriate, aesthetically pleasing, manner for the content being viewed. This is because the ContentDirectory specification does not allow for a control point to know in advanced what content to expect when browsing through any particular hierarchy.&lt;br /&gt;
&lt;br /&gt;
An example of this might be, at a particular point in the browse hierarchy the ContentDirectory will return a list of albums which in turn will contain a list of tracks. A UI might wish to represent this list of albums as a grid and the album&#039;s tracks as a header and a list of the tracks. Currently it is not possible for the UI to know when it gets to a point in a hierarchy where the hierarchy represents a list of albums followed by a list of tracks.&lt;br /&gt;
&lt;br /&gt;
The container map extension allows a media server to express its container hierarchy in advance of the control point navigating it. This is done using an OpenHome vendor extension to the device XML.&lt;br /&gt;
&lt;br /&gt;
Three types of mapped container are defined: browse, link, and search.&lt;br /&gt;
&lt;br /&gt;
The browse map defines named top level containers that represent significant starting points for browsing that can meaningfully be presented in top level tabs of a control point UI. The browse map is expressed within the X_MAP_BROWSE element of X_MAP.&lt;br /&gt;
&lt;br /&gt;
The link map defines containers that can be meaningfully linked to from track or album details. For instance a track will typically have an artist defined. If an entry for &amp;quot;artist&amp;quot; is defined in the link map then it will be possible for the user of a control point to quickly access this artist-related container by clicking on the track&#039;s artist text. Similar links might be offered for &amp;quot;genre&amp;quot;, &amp;quot;composer&amp;quot;, &amp;quot;conductor&amp;quot;, etc. The link map is expressed within the X_MAP_LINK element of X_MAP.&lt;br /&gt;
&lt;br /&gt;
The search map defines the different kinds of search containers and the type of results that they produce. The search map is expressed within the X_MAP_SEARCH element of X_MAP.&lt;br /&gt;
&lt;br /&gt;
=== Browse map ===&lt;br /&gt;
&lt;br /&gt;
The X_MAP_BROWSE element must contain 1 or more X_MAP_BROWSE_ENTRY elements.&lt;br /&gt;
&lt;br /&gt;
The X_MAP_BROWSE_ENTRY has three child elements.&lt;br /&gt;
&lt;br /&gt;
X_MAP_BROWSE_ENTRY_NAME is a string that can be used by a control point to label a tab containing this browse hierarchy.&lt;br /&gt;
&lt;br /&gt;
X_MAP_BROWSE_ENTRY_ID is the UPnP container id that contains the root of this browse hierarchy. This id is then submitted to the ContentDirectory service using the Browse action as usual. The returned contents are navigated using subsequent Browse request as usual. The difference is that the control point knows in advance what kind of results to expect at each level.&lt;br /&gt;
&lt;br /&gt;
X_MAP_BROWSE_ENTRY_TYPE is a space separated list of strings that maps out the kind of containers that are to be found at each level of this browse hierarchy. For instance, &amp;quot;artist album&amp;quot; represents a browse hierarchy giving a container containing only artist containers, each of which contains only album containers, each of which contains only tracks.&lt;br /&gt;
&lt;br /&gt;
There should be an X_MAP_BROWSE_ENTRY for each root browse hierarchy defined by the media server.&lt;br /&gt;
&lt;br /&gt;
For example:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;X_MAP_BROWSE_ENTRY&amp;gt;&lt;br /&gt;
     &amp;lt;X_MAP_BROWSE_ENTRY_NAME&amp;gt;Genre&amp;lt;/X_MAP_BROWSE_ENTRY_NAME&amp;gt;&lt;br /&gt;
     &amp;lt;X_MAP_BROWSE_ENTRY_ID&amp;gt;db/browse/genre&amp;lt;/X_MAP_BROWSE_ENTRY_ID&amp;gt;&lt;br /&gt;
     &amp;lt;X_MAP_BROWSE_ENTRY_TYPE&amp;gt;genre artist album&amp;lt;/X_MAP_BROWSE_ENTRY_TYPE&amp;gt;&lt;br /&gt;
 &amp;lt;/X_MAP_BROWSE_ENTRY&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Link map ===&lt;br /&gt;
&lt;br /&gt;
The X_MAP_LINK element must contain 1 or more X_MAP_LINK_ENTRY elements.&lt;br /&gt;
&lt;br /&gt;
The X_MAP_LINK_ENTRY has three child elements.&lt;br /&gt;
&lt;br /&gt;
X_MAP_LINK_ENTRY_TAG is a string that defines which type of metadata is the target for this link. e.g. &amp;quot;artist&amp;quot;, &amp;quot;genre&amp;quot;, &amp;quot;composer&amp;quot;, etc. See the type section below. &lt;br /&gt;
&lt;br /&gt;
X_MAP_LINK_ENTRY_ID_PREFIX is a string that is prefix for a UPnP container id. The link can be taken by browsing to the container whose id is the result of appending the associated metadata value to this prefix. For instance, if the prefix for an &amp;quot;artist&amp;quot; link is defined as db/link/artist/, and a track returned anywhere in the media server&#039;s library has &amp;quot;Pink Floyd&amp;quot; as its artist. Then the linked container will have an id of db/link/artist/Pink Floyd.&lt;br /&gt;
&lt;br /&gt;
X_MAP_LINK_ENTRY_TYPE represents the type of browse hierarchy returned when taking this type of link. See X_MAP_BROWSE_ENTRY_TYPE for details.&lt;br /&gt;
&lt;br /&gt;
There should be an X_MAP_LINK_ENTRY for each piece of metadata that the media server allows to be linked.&lt;br /&gt;
&lt;br /&gt;
For example:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;X_MAP_LINK_ENTRY&amp;gt;&lt;br /&gt;
     &amp;lt;X_MAP_LINK_ENTRY_TAG&amp;gt;artist&amp;lt;/X_MAP_LINK_ENTRY_TAG&amp;gt;&lt;br /&gt;
     &amp;lt;X_MAP_LINK_ENTRY_ID_PREFIX&amp;gt;db/link/artist/&amp;lt;/X_MAP_LINK_ENTRY_ID_PREFIX&amp;gt;&lt;br /&gt;
     &amp;lt;X_MAP_LINK_ENTRY_TYPE&amp;gt;album&amp;lt;/X_MAP_LINK_ENTRY_TYPE&amp;gt;&lt;br /&gt;
 &amp;lt;/X_MAP_LINK_ENTRY&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The example above defines a browse hierarchy that is created when linking from an artist name. The hierarchy created provides a list of linked artist albums which in turn provide a list of tracks.&lt;br /&gt;
&lt;br /&gt;
=== Search map ===&lt;br /&gt;
&lt;br /&gt;
The X_MAP_SEARCH element must contain 1 or more X_MAP_SEARCH_ENTRY elements.&lt;br /&gt;
&lt;br /&gt;
The X_MAP_SEARCH_ENTRY has three child elements.&lt;br /&gt;
&lt;br /&gt;
X_MAP_SEARCH_ENTRY_NAME  is a string that can be used by a control point to label a tab containing these search results.&lt;br /&gt;
&lt;br /&gt;
X_MAP_SEARCH_ENTRY_ID_PREFIX is a string that is a prefix for a UPnP container id. The search results can be found by browsing to the container whose id is the result of appending the search string to this prefix. For instance, if the prefix for an &amp;quot;album&amp;quot; search is defined as db/search/album/, and the search string is &amp;quot;blue&amp;quot;, then the search results container will have an id of db/search/album/blue.&lt;br /&gt;
&lt;br /&gt;
X_MAP_SEARCH_ENTRY_TYPE represents the type of browse hierarchy returned when taking this type of search. See X_MAP_BROWSE_ENTRY_TYPE for details.&lt;br /&gt;
&lt;br /&gt;
There should be an X_MAP_SEARCH_ENTRY for each type of search offered by the media server.&lt;br /&gt;
&lt;br /&gt;
For example:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;X_MAP_SEARCH_ENTRY&amp;gt;&lt;br /&gt;
     &amp;lt;X_MAP_SEARCH_ENTRY_NAME&amp;gt;Artist&amp;lt;/X_MAP_SEARCH_ENTRY_NAME&amp;gt;&lt;br /&gt;
     &amp;lt;X_MAP_SEARCH_ENTRY_ID_PREFIX&amp;gt;db/search/artist/&amp;lt;/X_MAP_SEARCH_ENTRY_ID_PREFIX&amp;gt;&lt;br /&gt;
     &amp;lt;X_MAP_SEARCH_ENTRY_TYPE&amp;gt;artist album&amp;lt;/X_MAP_SEARCH_ENTRY_TYPE&amp;gt;&lt;br /&gt;
 &amp;lt;/X_MAP_SEARCH_ENTRY&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The example above defines a browse hierarchy that is created when searching for an artist. The hierarchy created provides a list of artists, which in turn provide a list of albums, which in turn provide a list of tracks.&lt;br /&gt;
&lt;br /&gt;
=== Types ===&lt;br /&gt;
&lt;br /&gt;
The list of allowed types for X_BROWSE_ENTRY_TYPE, X_MAP_LINK_ENTRY_TAG, X_LINK_ENTRY_TYPE, and X_SEARCH_ENTRY_TYPE&lt;br /&gt;
&lt;br /&gt;
 genre&lt;br /&gt;
 artist&lt;br /&gt;
 composer&lt;br /&gt;
 conductor&lt;br /&gt;
 album&lt;br /&gt;
 year&lt;br /&gt;
 mixed&lt;br /&gt;
&lt;br /&gt;
mixed is a special value that represents a container that has mixed entries. It is not a valid type for the X_MAP_LINK_ENTRY_TAG element.&lt;br /&gt;
&lt;br /&gt;
=== Example device XML ===&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;root xmlns=&amp;quot;urn:schemas-upnp-org:device-1-0&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;specVersion&amp;gt;&lt;br /&gt;
        &amp;lt;major&amp;gt;1&amp;lt;/major&amp;gt;&lt;br /&gt;
        &amp;lt;minor&amp;gt;1&amp;lt;/minor&amp;gt;&lt;br /&gt;
    &amp;lt;/specVersion&amp;gt;&lt;br /&gt;
    &amp;lt;device&amp;gt;&lt;br /&gt;
        &amp;lt;deviceType&amp;gt;urn:schemas-upnp-org:device:MediaServer:1&amp;lt;/deviceType&amp;gt;&lt;br /&gt;
        &amp;lt;dlna:X_DLNADOC xmlns:dlna=&amp;quot;urn:schemas-dlna-org:device-1-0&amp;quot;&amp;gt;DMS-1.50&amp;lt;/dlna:X_DLNADOC&amp;gt;&lt;br /&gt;
        &amp;lt;dlna:X_DLNACAP xmlns:dlna=&amp;quot;urn:schemas-dlna-org:device-1-0&amp;quot;&amp;gt;av-upload,image-upload,audio-upload&amp;lt;/dlna:X_DLNACAP&amp;gt;&lt;br /&gt;
        &amp;lt;openhome:X_MAP xmlns:openhome=&amp;quot;http://www.openhome.org&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;X_MAP_BROWSE&amp;gt;&lt;br /&gt;
                &amp;lt;X_MAP_BROWSE_ENTRY&amp;gt;&lt;br /&gt;
                    &amp;lt;X_MAP_BROWSE_ENTRY_NAME&amp;gt;Albums&amp;lt;/X_MAP_BROWSE_ENTRY_NAME&amp;gt;&lt;br /&gt;
                    &amp;lt;X_MAP_BROWSE_ENTRY_ID&amp;gt;db/browse/albums&amp;lt;/X_MAP_BROWSE_ENTRY_ID&amp;gt;&lt;br /&gt;
                    &amp;lt;X_MAP_BROWSE_ENTRY_TYPE&amp;gt;album&amp;lt;/X_MAP_BROWSE_ENTRY_TYPE&amp;gt;&lt;br /&gt;
                &amp;lt;/X_MAP_BROWSE_ENTRY&amp;gt;&lt;br /&gt;
                &amp;lt;X_MAP_BROWSE_ENTRY&amp;gt;&lt;br /&gt;
                    &amp;lt;X_MAP_BROWSE_ENTRY_NAME&amp;gt;Artists&amp;lt;/X_MAP_BROWSE_ENTRY_NAME&amp;gt;&lt;br /&gt;
                    &amp;lt;X_MAP_BROWSE_ENTRY_ID&amp;gt;db/browse/artists&amp;lt;/X_MAP_BROWSE_ENTRY_ID&amp;gt;&lt;br /&gt;
                    &amp;lt;X_MAP_BROWSE_ENTRY_TYPE&amp;gt;artist album&amp;lt;/X_MAP_BROWSE_ENTRY_TYPE&amp;gt;&lt;br /&gt;
                &amp;lt;/X_MAP_BROWSE_ENTRY&amp;gt;&lt;br /&gt;
                &amp;lt;X_MAP_BROWSE_ENTRY&amp;gt;&lt;br /&gt;
                    &amp;lt;X_MAP_BROWSE_ENTRY_NAME&amp;gt;Folders&amp;lt;/X_MAP_BROWSE_ENTRY_NAME&amp;gt;&lt;br /&gt;
                    &amp;lt;X_MAP_BROWSE_ENTRY_ID&amp;gt;db/browse/folders&amp;lt;/X_MAP_BROWSE_ENTRY_ID&amp;gt;&lt;br /&gt;
                    &amp;lt;X_MAP_BROWSE_ENTRY_TYPE&amp;gt;mixed&amp;lt;/X_MAP_BROWSE_ENTRY_TYPE&amp;gt;&lt;br /&gt;
                &amp;lt;/X_MAP_BROWSE_ENTRY&amp;gt;&lt;br /&gt;
            &amp;lt;/X_MAP_BROWSE&amp;gt;&lt;br /&gt;
            &amp;lt;X_MAP_LINK&amp;gt;&lt;br /&gt;
                &amp;lt;X_MAP_LINK_ENTRY&amp;gt;&lt;br /&gt;
                    &amp;lt;X_MAP_LINK_ENTRY_TAG&amp;gt;artist&amp;lt;/X_MAP_LINK_ENTRY_TAG&amp;gt;&lt;br /&gt;
                    &amp;lt;X_MAP_LINK_ENTRY_ID_PREFIX&amp;gt;db/link/artist/&amp;lt;/X_MAP_LINK_ENTRY_ID_PREFIX&amp;gt;&lt;br /&gt;
                    &amp;lt;X_MAP_LINK_ENTRY_TYPE&amp;gt;album&amp;lt;/X_MAP_LINK_ENTRY_TYPE&amp;gt;&lt;br /&gt;
                &amp;lt;/X_MAP_LINK_ENTRY&amp;gt;&lt;br /&gt;
                &amp;lt;X_MAP_LINK_ENTRY&amp;gt;&lt;br /&gt;
                    &amp;lt;X_MAP_LINK_ENTRY_TAG&amp;gt;composer&amp;lt;/X_MAP_LINK_ENTRY_TAG&amp;gt;&lt;br /&gt;
                    &amp;lt;X_MAP_LINK_ENTRY_ID_PREFIX&amp;gt;db/link/composer/&amp;lt;/X_MAP_LINK_ENTRY_ID_PREFIX&amp;gt;&lt;br /&gt;
                    &amp;lt;X_MAP_LINK_ENTRY_TYPE&amp;gt;album&amp;lt;/X_MAP_LINK_ENTRY_TYPE&amp;gt;&lt;br /&gt;
                &amp;lt;/X_MAP_LINK_ENTRY&amp;gt;&lt;br /&gt;
            &amp;lt;/X_MAP_LINK&amp;gt;&lt;br /&gt;
            &amp;lt;X_MAP_SEARCH&amp;gt;&lt;br /&gt;
                &amp;lt;X_MAP_SEARCH_ENTRY&amp;gt;&lt;br /&gt;
                    &amp;lt;X_MAP_SEARCH_ENTRY_NAME&amp;gt;Artist&amp;lt;/X_MAP_SEARCH_ENTRY_NAME&amp;gt;&lt;br /&gt;
                    &amp;lt;X_MAP_SEARCH_ENTRY_ID_PREFIX&amp;gt;db/search/artist/&amp;lt;/X_MAP_SEARCH_ENTRY_ID_PREFIX&amp;gt;&lt;br /&gt;
                    &amp;lt;X_MAP_SEARCH_ENTRY_TYPE&amp;gt;artist album&amp;lt;/X_MAP_SEARCH_ENTRY_TYPE&amp;gt;&lt;br /&gt;
                &amp;lt;/X_MAP_SEARCH_ENTRY&amp;gt;&lt;br /&gt;
                &amp;lt;X_MAP_SEARCH_ENTRY&amp;gt;&lt;br /&gt;
                    &amp;lt;X_MAP_SEARCH_ENTRY_NAME&amp;gt;Tracks&amp;lt;/X_MAP_SEARCH_ENTRY_NAME&amp;gt;&lt;br /&gt;
                    &amp;lt;X_MAP_SEARCH_ENTRY_ID_PREFIX&amp;gt;db/search/all/&amp;lt;/X_MAP_SEARCH_ENTRY_ID_PREFIX&amp;gt;&lt;br /&gt;
                    &amp;lt;X_MAP_SEARCH_ENTRY_TYPE&amp;gt;&amp;lt;/X_MAP_SEARCH_ENTRY_TYPE&amp;gt;&lt;br /&gt;
                &amp;lt;/X_MAP_SEARCH_ENTRY&amp;gt;&lt;br /&gt;
            &amp;lt;/X_MAP_SEARCH&amp;gt;&lt;br /&gt;
        &amp;lt;/openhome:X_MAP&amp;gt;&lt;br /&gt;
        &amp;lt;presentationURL&amp;gt;http://10.2.1.170:4000/res/linn.co.uk.kazooserver/index.html&amp;lt;/presentationURL&amp;gt;&lt;br /&gt;
        &amp;lt;friendlyName&amp;gt;Linn Kazoo Server [R&amp;amp;D Mac Mini]&amp;lt;/friendlyName&amp;gt;&lt;br /&gt;
        &amp;lt;manufacturer&amp;gt;Linn&amp;lt;/manufacturer&amp;gt;&lt;br /&gt;
        &amp;lt;manufacturerURL&amp;gt;http://www.linn.co.uk&amp;lt;/manufacturerURL&amp;gt;&lt;br /&gt;
        &amp;lt;modelName&amp;gt;Kazoo Server&amp;lt;/modelName&amp;gt;&lt;br /&gt;
        &amp;lt;modelURL&amp;gt;http://oss.linn.co.uk/trac/wiki/KazooServer&amp;lt;/modelURL&amp;gt;&lt;br /&gt;
        &amp;lt;UDN&amp;gt;uuid:ac3d630e37b5f11ff5cdd23c0f5a7400&amp;lt;/UDN&amp;gt;&lt;br /&gt;
        &amp;lt;iconList&amp;gt;&lt;br /&gt;
            &amp;lt;icon&amp;gt;&lt;br /&gt;
                &amp;lt;mimetype&amp;gt;image/png&amp;lt;/mimetype&amp;gt;&lt;br /&gt;
                &amp;lt;width&amp;gt;65&amp;lt;/width&amp;gt;&lt;br /&gt;
                &amp;lt;height&amp;gt;65&amp;lt;/height&amp;gt;&lt;br /&gt;
                &amp;lt;depth&amp;gt;32&amp;lt;/depth&amp;gt;&lt;br /&gt;
                &amp;lt;url&amp;gt;ac3d630e37b5f11ff5cdd23c0f5a7400/resource/icon/icon&amp;lt;/url&amp;gt;&lt;br /&gt;
            &amp;lt;/icon&amp;gt;&lt;br /&gt;
        &amp;lt;/iconList&amp;gt;&lt;br /&gt;
        &amp;lt;serviceList&amp;gt;&lt;br /&gt;
            &amp;lt;service&amp;gt;&lt;br /&gt;
                &amp;lt;serviceType&amp;gt;urn:av-openhome-org:service:PlaylistManager:1&amp;lt;/serviceType&amp;gt;&lt;br /&gt;
                &amp;lt;serviceId&amp;gt;urn:av-openhome-org:serviceId:PlaylistManager&amp;lt;/serviceId&amp;gt;&lt;br /&gt;
                &amp;lt;SCPDURL&amp;gt;/ac3d630e37b5f11ff5cdd23c0f5a7400/Upnp/av.openhome.org-PlaylistManager-1/service.xml&amp;lt;/SCPDURL&amp;gt;&lt;br /&gt;
                &amp;lt;controlURL&amp;gt;/ac3d630e37b5f11ff5cdd23c0f5a7400/av.openhome.org-PlaylistManager-1/control&amp;lt;/controlURL&amp;gt;&lt;br /&gt;
                &amp;lt;eventSubURL&amp;gt;/ac3d630e37b5f11ff5cdd23c0f5a7400/av.openhome.org-PlaylistManager-1/event&amp;lt;/eventSubURL&amp;gt;&lt;br /&gt;
            &amp;lt;/service&amp;gt;&lt;br /&gt;
            &amp;lt;service&amp;gt;&lt;br /&gt;
                &amp;lt;serviceType&amp;gt;urn:schemas-upnp-org:service:ContentDirectory:1&amp;lt;/serviceType&amp;gt;&lt;br /&gt;
                &amp;lt;serviceId&amp;gt;urn:upnp-org:serviceId:ContentDirectory&amp;lt;/serviceId&amp;gt;&lt;br /&gt;
                &amp;lt;SCPDURL&amp;gt;/ac3d630e37b5f11ff5cdd23c0f5a7400/Upnp/upnp.org-ContentDirectory-1/service.xml&amp;lt;/SCPDURL&amp;gt;&lt;br /&gt;
                &amp;lt;controlURL&amp;gt;/ac3d630e37b5f11ff5cdd23c0f5a7400/upnp.org-ContentDirectory-1/control&amp;lt;/controlURL&amp;gt;&lt;br /&gt;
                &amp;lt;eventSubURL&amp;gt;/ac3d630e37b5f11ff5cdd23c0f5a7400/upnp.org-ContentDirectory-1/event&amp;lt;/eventSubURL&amp;gt;&lt;br /&gt;
            &amp;lt;/service&amp;gt;&lt;br /&gt;
            &amp;lt;service&amp;gt;&lt;br /&gt;
                &amp;lt;serviceType&amp;gt;urn:schemas-upnp-org:service:ConnectionManager:1&amp;lt;/serviceType&amp;gt;&lt;br /&gt;
                &amp;lt;serviceId&amp;gt;urn:upnp-org:serviceId:ConnectionManager&amp;lt;/serviceId&amp;gt;&lt;br /&gt;
                &amp;lt;SCPDURL&amp;gt;/ac3d630e37b5f11ff5cdd23c0f5a7400/Upnp/upnp.org-ConnectionManager-1/service.xml&amp;lt;/SCPDURL&amp;gt;&lt;br /&gt;
                &amp;lt;controlURL&amp;gt;/ac3d630e37b5f11ff5cdd23c0f5a7400/upnp.org-ConnectionManager-1/control&amp;lt;/controlURL&amp;gt;&lt;br /&gt;
                &amp;lt;eventSubURL&amp;gt;/ac3d630e37b5f11ff5cdd23c0f5a7400/upnp.org-ConnectionManager-1/event&amp;lt;/eventSubURL&amp;gt;&lt;br /&gt;
            &amp;lt;/service&amp;gt;&lt;br /&gt;
        &amp;lt;/serviceList&amp;gt;&lt;br /&gt;
    &amp;lt;/device&amp;gt;&lt;br /&gt;
 &amp;lt;/root&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Index maps ==&lt;br /&gt;
&lt;br /&gt;
Large lists are difficult to navigate, especially on mobile devices. Mobile devices added the idea of an index map to improve this situation. The index map allows a users to jump to different sections in a large list, similar to what is possible with a scrollbar on desktops.&lt;br /&gt;
&lt;br /&gt;
In order for a control point to generate an index map for any particular level in a ContentDirectory&#039;s hierarchy it first needs to download all the objects in the container, figure out if they are sorted and then calculate the index map. This means that a user will need to wait, perhaps minutes, before an index map is able to be presented on the UI. &lt;br /&gt;
&lt;br /&gt;
The proposal is to allow the media server to calculate an index map and return it as part of the DIDL-Lite XML. Below shows some example DIDL-Lite with an index map included.&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;DIDL-Lite xmlns=&amp;quot;urn:schemas-upnp-org:metadata-1-0/DIDL-Lite/&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;container id=&amp;quot;db/ba37a2ac24efa676c8676aab71a6cdf074&amp;quot; parentID=&amp;quot;0&amp;quot; restricted=&amp;quot;true&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;dc:title xmlns:dc=&amp;quot;http://purl.org/dc/elements/1.1/&amp;quot;&amp;gt;Worlds Apart [Deluxe Edition]&amp;lt;/dc:title&amp;gt;&lt;br /&gt;
        &amp;lt;upnp:udn xmlns:upnp=&amp;quot;urn:schemas-upnp-org:metadata-1-0/upnp/&amp;quot;&amp;gt;ac3d630e37b5f11ff5cdd23c0f5a7400&amp;lt;/upnp:udn&amp;gt;&lt;br /&gt;
        &amp;lt;upnp:class xmlns:upnp=&amp;quot;urn:schemas-upnp-org:metadata-1-0/upnp/&amp;quot;&amp;gt;object.container.album.musicAlbum&amp;lt;/upnp:class&amp;gt;&lt;br /&gt;
        &amp;lt;upnp:artist xmlns:upnp=&amp;quot;urn:schemas-upnp-org:metadata-1-0/upnp/&amp;quot;&amp;gt;...And You Will Know Us by the Trail of Dead&amp;lt;/upnp:artist&amp;gt;&lt;br /&gt;
        &amp;lt;upnp:albumArtURI&amp;gt;http://10.2.1.170:4000/linn.co.uk.kazooserver/ms/artwork/37a2ac2?size=0&amp;lt;/upnp:albumArtURI&amp;gt;&lt;br /&gt;
    &amp;lt;/container&amp;gt;&lt;br /&gt;
    &amp;lt;desc nameSpace=&amp;quot;openhome.org&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;indexmap&amp;gt;0 10 20 30 40 50 60 70 80 90 100 110 120 130 140 150 160 170 180 190 200 210 220 230 240 250 260 270&amp;lt;/indexmap&amp;gt;&lt;br /&gt;
    &amp;lt;/desc&amp;gt;&lt;br /&gt;
 &amp;lt;/DIDL-Lite&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The index map contains two, space separated, lists. These lists must contain the same number of elements. The example above is for a container who&#039;s contents are alphabetically sorted. But an index map could just as easily define a container who&#039;s contents are sorted by decade, e.g 1960 - 2015,&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;desc nameSpace=&amp;quot;openhome.org&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;indexmap&amp;gt;&lt;br /&gt;
        &amp;lt;labels&amp;gt;60 70 80 90 00 10&amp;lt;/labels&amp;gt;&lt;br /&gt;
        &amp;lt;indices&amp;gt;0 10 20 30 40 50&amp;lt;/indices&amp;gt;&lt;br /&gt;
    &amp;lt;/indexmap&amp;gt;&lt;br /&gt;
 &amp;lt;/desc&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Image Resolution ==&lt;br /&gt;
&lt;br /&gt;
Control points running on different platforms have different memory limits and display technologies. This means that a control point on a PC might want to display artwork at a high resolution, while a control point on a PDA might want to display artwork at a much lower resolution.&lt;br /&gt;
&lt;br /&gt;
Media servers often try to solve this problem using one of the following two methods:&lt;br /&gt;
&lt;br /&gt;
# A configurable parameter that scales all artwork to a user defined size&lt;br /&gt;
# A profile system where a user can create profiles for each class of control point they have and configure a parameter that scales all artwork to a user defined size per profile&lt;br /&gt;
&lt;br /&gt;
The first solution is highly problematic because it limits the resolution of artwork across the whole network. But a single network very often contains control points that can display high resolution images AND control points that can&#039;t.&lt;br /&gt;
&lt;br /&gt;
The second solution is just architecturally poor, turning the relationship between a control point and a media server on its head. Why should the media server try to infer what a control point needs through configuration when the control point is perfectly capable of telling the media server its exact requirements in every single circumstance.&lt;br /&gt;
&lt;br /&gt;
So, it is proposed that compliant media servers include a &#039;&#039;&#039;size&#039;&#039;&#039; element in their artwork uri&#039;s, where the size is the image&#039;s largest dimension. This allows a control point to ask for an image at a specified size.&lt;br /&gt;
&lt;br /&gt;
=== Example ===&lt;br /&gt;
&lt;br /&gt;
If the original artwork was 400x512, then a media server would provide the following albumArtURI: &amp;lt;uri&amp;gt;?size=512. If it is not possible for the media server to obtain the original resolution then the media server would provide the following albumArtURI: &amp;lt;uri&amp;gt;?size=0.&lt;br /&gt;
&lt;br /&gt;
The presence of the size element tells the control point:&lt;br /&gt;
&lt;br /&gt;
# the media server implements the image scaling extension&lt;br /&gt;
# the original size of the image.&lt;br /&gt;
&lt;br /&gt;
Now the control point can request the image at any resolution by using &amp;lt;uri&amp;gt;?size=x, where x is the size it wants.&lt;br /&gt;
&lt;br /&gt;
So, in this example, &amp;lt;uri&amp;gt;?size=1024 gets an 800x1024 image, and &amp;lt;uri&amp;gt;?size=200 gets a 156x200 image.&lt;br /&gt;
&lt;br /&gt;
== albumArtURI&amp;lt;br&amp;gt; ==&lt;br /&gt;
&lt;br /&gt;
The current specification only allows retrieval of artwork for a musicAlbum container through the property albumArtURI. When browsing a music library on a control point it quickly becomes clear that to implement a graphically rich control point the ContentDirectory service should provide a way to retrieve artwork for all of the content directory classes, not just musicAlbum containers.&lt;br /&gt;
&lt;br /&gt;
There has become a somewhat defacto standard where just about all media server provide an albumArtURI property for a musicItem item as well as for a musicAlbum container, however this is still not good enough to implement a graphically rich control point.&lt;br /&gt;
&lt;br /&gt;
It is proposed that an optional property is introduced to the object class called &#039;&#039;&#039;albumArtURI&#039;&#039;&amp;amp;nbsp;&#039;&#039;&#039;&#039;&#039;which may contain an attribute &#039;&#039;&#039;title&#039;&#039;&#039;,&amp;amp;nbsp;e.g. &amp;amp;lt;albumArtURI title=&amp;quot;Font Cover&amp;quot;&amp;amp;gt;http://Front Cover.jpg&amp;amp;lt;/albumArtURI&amp;amp;gt;.&amp;amp;nbsp;The object class can contain zero or more albumArtURIs elements.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Medium =&lt;br /&gt;
= Low =&lt;br /&gt;
&lt;br /&gt;
== Dynamic IP Addresses ==&lt;br /&gt;
&lt;br /&gt;
At present all media servers return URIs that contain a reference to their IP address, e.g. http://172.20.1.1/music.flac etc. This means that if the media server&#039;s IP address were to change across reboots, then any control point or media renderer with URIs that referenced the media server before the reboot will become invalid.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
It is proposed that a media server should always reference itself by host name and not by IP address in any XML that it sends to external devices, i.e. http://mynas/music.flac.&lt;br /&gt;
&lt;br /&gt;
== Disc Information ==&lt;br /&gt;
&lt;br /&gt;
It is proposed that two new properties are added to the musicTrack item called &#039;&#039;&#039;OriginalDiscNumber&#039;&#039;&#039; and &#039;&#039;&#039;OriginalDiscCount&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== Replay Gain Information ==&lt;br /&gt;
&lt;br /&gt;
It is proposed that four new properties are added to the musicTrack item called &#039;&#039;&#039;ReplayGainAlbum&#039;&#039;&#039;, &#039;&#039;&#039;ReplayGainAlbumPeak&#039;&#039;&#039;, &#039;&#039;&#039;ReplayGainTrack&#039;&#039;&#039;, and &#039;&#039;&#039;ReplayGainTrackPeak&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
== webURI ==&lt;br /&gt;
&lt;br /&gt;
The current specification does not easily allow a control point to provide rich information about objects in the browse hierarchy.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
It is proposed to add an optionally property to the object class called &#039;&#039;&#039;webURI&amp;amp;nbsp;&#039;&#039;&#039;which will contain a URI to a website that provides a rich collection of information about the object, e.g. for a musicArtist container it would provided a link to a website that provided information about the artist.&lt;/div&gt;</summary>
		<author><name>Davidd</name></author>
	</entry>
	<entry>
		<id>https://docs.linn.co.uk/wiki/index.php?title=Developer:Media_Server_Extensions&amp;diff=11187</id>
		<title>Developer:Media Server Extensions</title>
		<link rel="alternate" type="text/html" href="https://docs.linn.co.uk/wiki/index.php?title=Developer:Media_Server_Extensions&amp;diff=11187"/>
		<updated>2015-02-20T17:39:29Z</updated>

		<summary type="html">&lt;p&gt;Davidd: /* Search map */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Introduction =&lt;br /&gt;
&lt;br /&gt;
The ContentDirectory service has various limitations which become apparent when implementing control points on different hardware platforms. This document aims to outline some ideas that address the various shortcomings of the ContentDirectory specification. The ideas have been categorised in low, medium and high priority groups.&lt;br /&gt;
&lt;br /&gt;
= High =&lt;br /&gt;
&lt;br /&gt;
== Container map ==&lt;br /&gt;
&lt;br /&gt;
The current ContentDirectory specification makes it tricky for a control point to display the returned contents in an appropriate, aesthetically pleasing, manner for the content being viewed. This is because the ContentDirectory specification does not allow for a control point to know in advanced what content to expect when browsing through any particular hierarchy.&lt;br /&gt;
&lt;br /&gt;
An example of this might be, at a particular point in the browse hierarchy the ContentDirectory will return a list of albums which in turn will contain a list of tracks. A UI might wish to represent this list of albums as a grid and the album&#039;s tracks as a header and a list of the tracks. Currently it is not possible for the UI to know when it gets to a point in a hierarchy where the hierarchy represents a list of albums followed by a list of tracks.&lt;br /&gt;
&lt;br /&gt;
The container map extension allows a media server to express its container hierarchy in advance of the control point navigating it. This is done using an OpenHome vendor extension to the device XML.&lt;br /&gt;
&lt;br /&gt;
Three types of mapped container are defined: browse, link, and search.&lt;br /&gt;
&lt;br /&gt;
The browse map defines named top level containers that represent significant starting points for browsing that can meaningfully be presented in top level tabs of a control point UI. The browse map is expressed within the X_MAP_BROWSE element of X_MAP.&lt;br /&gt;
&lt;br /&gt;
The link map defines containers that can be meaningfully linked to from track or album details. For instance a track will typically have an artist defined. If an entry for &amp;quot;artist&amp;quot; is defined in the link map then it will be possible for the user of a control point to quickly access this artist-related container by clicking on the track&#039;s artist text. Similar links might be offered for &amp;quot;genre&amp;quot;, &amp;quot;composer&amp;quot;, &amp;quot;conductor&amp;quot;, etc. The link map is expressed within the X_MAP_LINK element of X_MAP.&lt;br /&gt;
&lt;br /&gt;
The search map defines the different kinds of search containers and the type of results that they produce. The search map is expressed within the X_MAP_SEARCH element of X_MAP.&lt;br /&gt;
&lt;br /&gt;
=== Browse map ===&lt;br /&gt;
&lt;br /&gt;
The X_MAP_BROWSE element must contain 1 or more X_MAP_BROWSE_ENTRY elements.&lt;br /&gt;
&lt;br /&gt;
The X_MAP_BROWSE_ENTRY has three child elements.&lt;br /&gt;
&lt;br /&gt;
X_MAP_BROWSE_ENTRY_NAME is a string that can be used by a control point to label a tab containing this browse hierarchy.&lt;br /&gt;
&lt;br /&gt;
X_MAP_BROWSE_ENTRY_ID is the UPnP container id that contains the root of this browse hierarchy. This id is then submitted to the ContentDirectory service using the Browse action as usual. The returned contents are navigated using subsequent Browse request as usual. The difference is that the control point knows in advance what kind of results to expect at each level.&lt;br /&gt;
&lt;br /&gt;
X_MAP_BROWSE_ENTRY_TYPE is a space separated list of strings that maps out the kind of containers that are to be found at each level of this browse hierarchy. For instance, &amp;quot;artist album&amp;quot; represents a browse hierarchy giving a container containing only artist containers, each of which contains only album containers, each of which contains only tracks.&lt;br /&gt;
&lt;br /&gt;
There should be an X_MAP_BROWSE_ENTRY for each root browse hierarchy defined by the media server.&lt;br /&gt;
&lt;br /&gt;
For example:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;X_MAP_BROWSE_ENTRY&amp;gt;&lt;br /&gt;
     &amp;lt;X_MAP_BROWSE_ENTRY_NAME&amp;gt;Genre&amp;lt;/X_MAP_BROWSE_ENTRY_NAME&amp;gt;&lt;br /&gt;
     &amp;lt;X_MAP_BROWSE_ENTRY_ID&amp;gt;db/browse/genre&amp;lt;/X_MAP_BROWSE_ENTRY_ID&amp;gt;&lt;br /&gt;
     &amp;lt;X_MAP_BROWSE_ENTRY_TYPE&amp;gt;genre artist album&amp;lt;/X_MAP_BROWSE_ENTRY_TYPE&amp;gt;&lt;br /&gt;
 &amp;lt;/X_MAP_BROWSE_ENTRY&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Link map ===&lt;br /&gt;
&lt;br /&gt;
The X_MAP_LINK element must contain 1 or more X_MAP_LINK_ENTRY elements.&lt;br /&gt;
&lt;br /&gt;
The X_MAP_LINK_ENTRY has three child elements.&lt;br /&gt;
&lt;br /&gt;
X_MAP_LINK_ENTRY_TAG is a string that defines which type of metadata is the target for this link. e.g. &amp;quot;artist&amp;quot;, &amp;quot;genre&amp;quot;, &amp;quot;composer&amp;quot;, etc. See the type section below. &lt;br /&gt;
&lt;br /&gt;
X_MAP_LINK_ENTRY_ID_PREFIX is a string that is prefix for a UPnP container id. The link can be taken by browsing to the container whose id is the result of appending the associated metadata value to this prefix. For instance, if the prefix for an &amp;quot;artist&amp;quot; link is defined as db/link/artist/, and a track returned anywhere in the media server&#039;s library has &amp;quot;Pink Floyd&amp;quot; as its artist. Then the linked container will have an id of db/link/artist/Pink Floyd.&lt;br /&gt;
&lt;br /&gt;
X_MAP_LINK_ENTRY_TYPE represents the type of browse hierarchy returned when taking this type of link. See X_MAP_BROWSE_ENTRY_TYPE for details.&lt;br /&gt;
&lt;br /&gt;
There should be an X_MAP_LINK_ENTRY for each piece of metadata that the media server allows to be linked.&lt;br /&gt;
&lt;br /&gt;
For example:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;X_MAP_LINK_ENTRY&amp;gt;&lt;br /&gt;
     &amp;lt;X_MAP_LINK_ENTRY_TAG&amp;gt;artist&amp;lt;/X_MAP_LINK_ENTRY_TAG&amp;gt;&lt;br /&gt;
     &amp;lt;X_MAP_LINK_ENTRY_ID_PREFIX&amp;gt;db/link/artist/&amp;lt;/X_MAP_LINK_ENTRY_ID_PREFIX&amp;gt;&lt;br /&gt;
     &amp;lt;X_MAP_LINK_ENTRY_TYPE&amp;gt;album&amp;lt;/X_MAP_LINK_ENTRY_TYPE&amp;gt;&lt;br /&gt;
 &amp;lt;/X_MAP_LINK_ENTRY&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The example above defines a browse hierarchy that is created when linking from an artist name. The hierarchy created provides a list of linked artist albums which in turn provide a list of tracks.&lt;br /&gt;
&lt;br /&gt;
=== Search map ===&lt;br /&gt;
&lt;br /&gt;
The X_MAP_SEARCH element must contain 1 or more X_MAP_SEARCH_ENTRY elements.&lt;br /&gt;
&lt;br /&gt;
The X_MAP_SEARCH_ENTRY has three child elements.&lt;br /&gt;
&lt;br /&gt;
X_MAP_SEARCH_ENTRY_NAME  is a string that can be used by a control point to label a tab containing these search results.&lt;br /&gt;
&lt;br /&gt;
X_MAP_SEARCH_ENTRY_ID_PREFIX is a string that is a prefix for a UPnP container id. The search results can be found by browsing to the container whose id is the result of appending the search string to this prefix. For instance, if the prefix for an &amp;quot;album&amp;quot; search is defined as db/search/album/, and the search string is &amp;quot;blue&amp;quot;, then the search results container will have an id of db/search/album/blue.&lt;br /&gt;
&lt;br /&gt;
X_MAP_SEARCH_ENTRY_TYPE represents the type of browse hierarchy returned when taking this type of search. See X_MAP_BROWSE_ENTRY_TYPE for details.&lt;br /&gt;
&lt;br /&gt;
There should be an X_MAP_SEARCH_ENTRY for each type of search offered by the media server.&lt;br /&gt;
&lt;br /&gt;
For example:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;X_MAP_SEARCH_ENTRY&amp;gt;&lt;br /&gt;
     &amp;lt;X_MAP_SEARCH_ENTRY_NAME&amp;gt;Artist&amp;lt;/X_MAP_SEARCH_ENTRY_NAME&amp;gt;&lt;br /&gt;
     &amp;lt;X_MAP_SEARCH_ENTRY_ID_PREFIX&amp;gt;db/search/artist/&amp;lt;/X_MAP_SEARCH_ENTRY_ID_PREFIX&amp;gt;&lt;br /&gt;
     &amp;lt;X_MAP_SEARCH_ENTRY_TYPE&amp;gt;artist album&amp;lt;/X_MAP_SEARCH_ENTRY_TYPE&amp;gt;&lt;br /&gt;
 &amp;lt;/X_MAP_SEARCH_ENTRY&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The example above defines a browse hierarchy that is created when searching for an artist. The hierarchy created provides a list of artists, which in turn provide a list of albums, which in turn provide a list of tracks.&lt;br /&gt;
&lt;br /&gt;
=== Types ===&lt;br /&gt;
&lt;br /&gt;
The list of allowed types for X_BROWSE_ENTRY_TYPE, X_MAP_LINK_ENTRY_TAG, X_LINK_ENTRY_TYPE, and X_SEARCH_ENTRY_TYPE&lt;br /&gt;
&lt;br /&gt;
 genre&lt;br /&gt;
 artist&lt;br /&gt;
 composer&lt;br /&gt;
 conductor&lt;br /&gt;
 album&lt;br /&gt;
 year&lt;br /&gt;
 mixed&lt;br /&gt;
&lt;br /&gt;
mixed is a special value that represents a container that has mixed entries. It is not a valid type for the X_MAP_LINK_ENTRY_TAG element.&lt;br /&gt;
&lt;br /&gt;
=== Example device XML ===&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;root xmlns=&amp;quot;urn:schemas-upnp-org:device-1-0&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;specVersion&amp;gt;&lt;br /&gt;
        &amp;lt;major&amp;gt;1&amp;lt;/major&amp;gt;&lt;br /&gt;
        &amp;lt;minor&amp;gt;1&amp;lt;/minor&amp;gt;&lt;br /&gt;
    &amp;lt;/specVersion&amp;gt;&lt;br /&gt;
    &amp;lt;device&amp;gt;&lt;br /&gt;
        &amp;lt;deviceType&amp;gt;urn:schemas-upnp-org:device:MediaServer:1&amp;lt;/deviceType&amp;gt;&lt;br /&gt;
        &amp;lt;dlna:X_DLNADOC xmlns:dlna=&amp;quot;urn:schemas-dlna-org:device-1-0&amp;quot;&amp;gt;DMS-1.50&amp;lt;/dlna:X_DLNADOC&amp;gt;&lt;br /&gt;
        &amp;lt;dlna:X_DLNACAP xmlns:dlna=&amp;quot;urn:schemas-dlna-org:device-1-0&amp;quot;&amp;gt;av-upload,image-upload,audio-upload&amp;lt;/dlna:X_DLNACAP&amp;gt;&lt;br /&gt;
        &amp;lt;openhome:X_MAP xmlns:openhome=&amp;quot;http://www.openhome.org&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;X_MAP_BROWSE&amp;gt;&lt;br /&gt;
                &amp;lt;X_MAP_BROWSE_ENTRY&amp;gt;&lt;br /&gt;
                    &amp;lt;X_MAP_BROWSE_ENTRY_NAME&amp;gt;Albums&amp;lt;/X_MAP_BROWSE_ENTRY_NAME&amp;gt;&lt;br /&gt;
                    &amp;lt;X_MAP_BROWSE_ENTRY_ID&amp;gt;db/browse/albums&amp;lt;/X_MAP_BROWSE_ENTRY_ID&amp;gt;&lt;br /&gt;
                    &amp;lt;X_MAP_BROWSE_ENTRY_TYPE&amp;gt;album&amp;lt;/X_MAP_BROWSE_ENTRY_TYPE&amp;gt;&lt;br /&gt;
                &amp;lt;/X_MAP_BROWSE_ENTRY&amp;gt;&lt;br /&gt;
                &amp;lt;X_MAP_BROWSE_ENTRY&amp;gt;&lt;br /&gt;
                    &amp;lt;X_MAP_BROWSE_ENTRY_NAME&amp;gt;Artists&amp;lt;/X_MAP_BROWSE_ENTRY_NAME&amp;gt;&lt;br /&gt;
                    &amp;lt;X_MAP_BROWSE_ENTRY_ID&amp;gt;db/browse/artists&amp;lt;/X_MAP_BROWSE_ENTRY_ID&amp;gt;&lt;br /&gt;
                    &amp;lt;X_MAP_BROWSE_ENTRY_TYPE&amp;gt;artist album&amp;lt;/X_MAP_BROWSE_ENTRY_TYPE&amp;gt;&lt;br /&gt;
                &amp;lt;/X_MAP_BROWSE_ENTRY&amp;gt;&lt;br /&gt;
                &amp;lt;X_MAP_BROWSE_ENTRY&amp;gt;&lt;br /&gt;
                    &amp;lt;X_MAP_BROWSE_ENTRY_NAME&amp;gt;Folders&amp;lt;/X_MAP_BROWSE_ENTRY_NAME&amp;gt;&lt;br /&gt;
                    &amp;lt;X_MAP_BROWSE_ENTRY_ID&amp;gt;db/browse/folders&amp;lt;/X_MAP_BROWSE_ENTRY_ID&amp;gt;&lt;br /&gt;
                    &amp;lt;X_MAP_BROWSE_ENTRY_TYPE&amp;gt;mixed&amp;lt;/X_MAP_BROWSE_ENTRY_TYPE&amp;gt;&lt;br /&gt;
                &amp;lt;/X_MAP_BROWSE_ENTRY&amp;gt;&lt;br /&gt;
            &amp;lt;/X_MAP_BROWSE&amp;gt;&lt;br /&gt;
            &amp;lt;X_MAP_LINK&amp;gt;&lt;br /&gt;
                &amp;lt;X_MAP_LINK_ENTRY&amp;gt;&lt;br /&gt;
                    &amp;lt;X_MAP_LINK_ENTRY_TAG&amp;gt;artist&amp;lt;/X_MAP_LINK_ENTRY_TAG&amp;gt;&lt;br /&gt;
                    &amp;lt;X_MAP_LINK_ENTRY_ID_PREFIX&amp;gt;db/link/artist/&amp;lt;/X_MAP_LINK_ENTRY_ID_PREFIX&amp;gt;&lt;br /&gt;
                    &amp;lt;X_MAP_LINK_ENTRY_TYPE&amp;gt;album&amp;lt;/X_MAP_LINK_ENTRY_TYPE&amp;gt;&lt;br /&gt;
                &amp;lt;/X_MAP_LINK_ENTRY&amp;gt;&lt;br /&gt;
                &amp;lt;X_MAP_LINK_ENTRY&amp;gt;&lt;br /&gt;
                    &amp;lt;X_MAP_LINK_ENTRY_TAG&amp;gt;composer&amp;lt;/X_MAP_LINK_ENTRY_TAG&amp;gt;&lt;br /&gt;
                    &amp;lt;X_MAP_LINK_ENTRY_ID_PREFIX&amp;gt;db/link/composer/&amp;lt;/X_MAP_LINK_ENTRY_ID_PREFIX&amp;gt;&lt;br /&gt;
                    &amp;lt;X_MAP_LINK_ENTRY_TYPE&amp;gt;album&amp;lt;/X_MAP_LINK_ENTRY_TYPE&amp;gt;&lt;br /&gt;
                &amp;lt;/X_MAP_LINK_ENTRY&amp;gt;&lt;br /&gt;
            &amp;lt;/X_MAP_LINK&amp;gt;&lt;br /&gt;
            &amp;lt;X_MAP_SEARCH&amp;gt;&lt;br /&gt;
                &amp;lt;X_MAP_SEARCH_ENTRY&amp;gt;&lt;br /&gt;
                    &amp;lt;X_MAP_SEARCH_ENTRY_NAME&amp;gt;Artist&amp;lt;/X_MAP_SEARCH_ENTRY_NAME&amp;gt;&lt;br /&gt;
                    &amp;lt;X_MAP_SEARCH_ENTRY_ID_PREFIX&amp;gt;db/search/artist/&amp;lt;/X_MAP_SEARCH_ENTRY_ID_PREFIX&amp;gt;&lt;br /&gt;
                    &amp;lt;X_MAP_SEARCH_ENTRY_TYPE&amp;gt;artist album&amp;lt;/X_MAP_SEARCH_ENTRY_TYPE&amp;gt;&lt;br /&gt;
                &amp;lt;/X_MAP_SEARCH_ENTRY&amp;gt;&lt;br /&gt;
                &amp;lt;X_MAP_SEARCH_ENTRY&amp;gt;&lt;br /&gt;
                    &amp;lt;X_MAP_SEARCH_ENTRY_NAME&amp;gt;Tracks&amp;lt;/X_MAP_SEARCH_ENTRY_NAME&amp;gt;&lt;br /&gt;
                    &amp;lt;X_MAP_SEARCH_ENTRY_ID_PREFIX&amp;gt;db/search/all/&amp;lt;/X_MAP_SEARCH_ENTRY_ID_PREFIX&amp;gt;&lt;br /&gt;
                    &amp;lt;X_MAP_SEARCH_ENTRY_TYPE&amp;gt;&amp;lt;/X_MAP_SEARCH_ENTRY_TYPE&amp;gt;&lt;br /&gt;
                &amp;lt;/X_MAP_SEARCH_ENTRY&amp;gt;&lt;br /&gt;
            &amp;lt;/X_MAP_SEARCH&amp;gt;&lt;br /&gt;
        &amp;lt;/openhome:X_MAP&amp;gt;&lt;br /&gt;
        &amp;lt;presentationURL&amp;gt;http://10.2.1.170:4000/res/linn.co.uk.kazooserver/index.html&amp;lt;/presentationURL&amp;gt;&lt;br /&gt;
        &amp;lt;friendlyName&amp;gt;Linn Kazoo Server [R&amp;amp;D Mac Mini]&amp;lt;/friendlyName&amp;gt;&lt;br /&gt;
        &amp;lt;manufacturer&amp;gt;Linn&amp;lt;/manufacturer&amp;gt;&lt;br /&gt;
        &amp;lt;manufacturerURL&amp;gt;http://www.linn.co.uk&amp;lt;/manufacturerURL&amp;gt;&lt;br /&gt;
        &amp;lt;modelName&amp;gt;Kazoo Server&amp;lt;/modelName&amp;gt;&lt;br /&gt;
        &amp;lt;modelURL&amp;gt;http://oss.linn.co.uk/trac/wiki/KazooServer&amp;lt;/modelURL&amp;gt;&lt;br /&gt;
        &amp;lt;UDN&amp;gt;uuid:ac3d630e37b5f11ff5cdd23c0f5a7400&amp;lt;/UDN&amp;gt;&lt;br /&gt;
        &amp;lt;iconList&amp;gt;&lt;br /&gt;
            &amp;lt;icon&amp;gt;&lt;br /&gt;
                &amp;lt;mimetype&amp;gt;image/png&amp;lt;/mimetype&amp;gt;&lt;br /&gt;
                &amp;lt;width&amp;gt;65&amp;lt;/width&amp;gt;&lt;br /&gt;
                &amp;lt;height&amp;gt;65&amp;lt;/height&amp;gt;&lt;br /&gt;
                &amp;lt;depth&amp;gt;32&amp;lt;/depth&amp;gt;&lt;br /&gt;
                &amp;lt;url&amp;gt;ac3d630e37b5f11ff5cdd23c0f5a7400/resource/icon/icon&amp;lt;/url&amp;gt;&lt;br /&gt;
            &amp;lt;/icon&amp;gt;&lt;br /&gt;
        &amp;lt;/iconList&amp;gt;&lt;br /&gt;
        &amp;lt;serviceList&amp;gt;&lt;br /&gt;
            &amp;lt;service&amp;gt;&lt;br /&gt;
                &amp;lt;serviceType&amp;gt;urn:av-openhome-org:service:PlaylistManager:1&amp;lt;/serviceType&amp;gt;&lt;br /&gt;
                &amp;lt;serviceId&amp;gt;urn:av-openhome-org:serviceId:PlaylistManager&amp;lt;/serviceId&amp;gt;&lt;br /&gt;
                &amp;lt;SCPDURL&amp;gt;/ac3d630e37b5f11ff5cdd23c0f5a7400/Upnp/av.openhome.org-PlaylistManager-1/service.xml&amp;lt;/SCPDURL&amp;gt;&lt;br /&gt;
                &amp;lt;controlURL&amp;gt;/ac3d630e37b5f11ff5cdd23c0f5a7400/av.openhome.org-PlaylistManager-1/control&amp;lt;/controlURL&amp;gt;&lt;br /&gt;
                &amp;lt;eventSubURL&amp;gt;/ac3d630e37b5f11ff5cdd23c0f5a7400/av.openhome.org-PlaylistManager-1/event&amp;lt;/eventSubURL&amp;gt;&lt;br /&gt;
            &amp;lt;/service&amp;gt;&lt;br /&gt;
            &amp;lt;service&amp;gt;&lt;br /&gt;
                &amp;lt;serviceType&amp;gt;urn:schemas-upnp-org:service:ContentDirectory:1&amp;lt;/serviceType&amp;gt;&lt;br /&gt;
                &amp;lt;serviceId&amp;gt;urn:upnp-org:serviceId:ContentDirectory&amp;lt;/serviceId&amp;gt;&lt;br /&gt;
                &amp;lt;SCPDURL&amp;gt;/ac3d630e37b5f11ff5cdd23c0f5a7400/Upnp/upnp.org-ContentDirectory-1/service.xml&amp;lt;/SCPDURL&amp;gt;&lt;br /&gt;
                &amp;lt;controlURL&amp;gt;/ac3d630e37b5f11ff5cdd23c0f5a7400/upnp.org-ContentDirectory-1/control&amp;lt;/controlURL&amp;gt;&lt;br /&gt;
                &amp;lt;eventSubURL&amp;gt;/ac3d630e37b5f11ff5cdd23c0f5a7400/upnp.org-ContentDirectory-1/event&amp;lt;/eventSubURL&amp;gt;&lt;br /&gt;
            &amp;lt;/service&amp;gt;&lt;br /&gt;
            &amp;lt;service&amp;gt;&lt;br /&gt;
                &amp;lt;serviceType&amp;gt;urn:schemas-upnp-org:service:ConnectionManager:1&amp;lt;/serviceType&amp;gt;&lt;br /&gt;
                &amp;lt;serviceId&amp;gt;urn:upnp-org:serviceId:ConnectionManager&amp;lt;/serviceId&amp;gt;&lt;br /&gt;
                &amp;lt;SCPDURL&amp;gt;/ac3d630e37b5f11ff5cdd23c0f5a7400/Upnp/upnp.org-ConnectionManager-1/service.xml&amp;lt;/SCPDURL&amp;gt;&lt;br /&gt;
                &amp;lt;controlURL&amp;gt;/ac3d630e37b5f11ff5cdd23c0f5a7400/upnp.org-ConnectionManager-1/control&amp;lt;/controlURL&amp;gt;&lt;br /&gt;
                &amp;lt;eventSubURL&amp;gt;/ac3d630e37b5f11ff5cdd23c0f5a7400/upnp.org-ConnectionManager-1/event&amp;lt;/eventSubURL&amp;gt;&lt;br /&gt;
            &amp;lt;/service&amp;gt;&lt;br /&gt;
        &amp;lt;/serviceList&amp;gt;&lt;br /&gt;
    &amp;lt;/device&amp;gt;&lt;br /&gt;
 &amp;lt;/root&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Index maps ==&lt;br /&gt;
&lt;br /&gt;
Large lists are difficult to navigate, especially on mobile devices. Mobile devices added the idea of an index map to improve this situation. The index map allows a users to jump to different sections in a large list, similar to what is possible with a scrollbar on desktops.&lt;br /&gt;
&lt;br /&gt;
In order for a control point to generate an index map for any particular level in a ContentDirectory&#039;s hierarchy it first needs to download all the objects in the container, figure out if they are sorted and then calculate the index map. This means that a user will need to wait, perhaps minutes, before an index map is able to be presented on the UI. &lt;br /&gt;
&lt;br /&gt;
The proposal is to allow the media server to calculate an index map and return it as part of the DIDL-Lite XML. Below shows some example DIDL-Lite with an index map included.&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;DIDL-Lite xmlns=&amp;quot;urn:schemas-upnp-org:metadata-1-0/DIDL-Lite/&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;container id=&amp;quot;db/ba37a2ac24efa676c8676aab71a6cdf074&amp;quot; parentID=&amp;quot;0&amp;quot; restricted=&amp;quot;true&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;dc:title xmlns:dc=&amp;quot;http://purl.org/dc/elements/1.1/&amp;quot;&amp;gt;Worlds Apart [Deluxe Edition]&amp;lt;/dc:title&amp;gt;&lt;br /&gt;
        &amp;lt;upnp:udn xmlns:upnp=&amp;quot;urn:schemas-upnp-org:metadata-1-0/upnp/&amp;quot;&amp;gt;ac3d630e37b5f11ff5cdd23c0f5a7400&amp;lt;/upnp:udn&amp;gt;&lt;br /&gt;
        &amp;lt;upnp:class xmlns:upnp=&amp;quot;urn:schemas-upnp-org:metadata-1-0/upnp/&amp;quot;&amp;gt;object.container.album.musicAlbum&amp;lt;/upnp:class&amp;gt;&lt;br /&gt;
        &amp;lt;upnp:artist xmlns:upnp=&amp;quot;urn:schemas-upnp-org:metadata-1-0/upnp/&amp;quot;&amp;gt;...And You Will Know Us by the Trail of Dead&amp;lt;/upnp:artist&amp;gt;&lt;br /&gt;
        &amp;lt;upnp:albumArtURI&amp;gt;http://10.2.1.170:4000/linn.co.uk.kazooserver/ms/artwork/37a2ac2?size=0&amp;lt;/upnp:albumArtURI&amp;gt;&lt;br /&gt;
    &amp;lt;/container&amp;gt;&lt;br /&gt;
    &amp;lt;desc nameSpace=&amp;quot;openhome.org&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;indexmap&amp;gt;&lt;br /&gt;
            &amp;lt;labels&amp;gt;# A B C D E F G H I J K L M N O P Q R S T U V W X Y Z +&amp;lt;/labels&amp;gt;&lt;br /&gt;
            &amp;lt;indices&amp;gt;0 10 20 30 40 50 60 70 80 90 100 110 120 130 140 150 160 170 180 190 200 210 220 230 240 250 260 270&amp;lt;/indices&amp;gt;&lt;br /&gt;
        &amp;lt;/indexmap&amp;gt;&lt;br /&gt;
    &amp;lt;/desc&amp;gt;&lt;br /&gt;
 &amp;lt;/DIDL-Lite&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The index map contains two, space separated, lists. These lists must contain the same number of elements. The example above is for a container who&#039;s contents are alphabetically sorted. But an index map could just as easily define a container who&#039;s contents are sorted by decade, e.g 1960 - 2015,&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;desc nameSpace=&amp;quot;openhome.org&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;indexmap&amp;gt;&lt;br /&gt;
        &amp;lt;labels&amp;gt;60 70 80 90 00 10&amp;lt;/labels&amp;gt;&lt;br /&gt;
        &amp;lt;indices&amp;gt;0 10 20 30 40 50&amp;lt;/indices&amp;gt;&lt;br /&gt;
    &amp;lt;/indexmap&amp;gt;&lt;br /&gt;
 &amp;lt;/desc&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Image Resolution ==&lt;br /&gt;
&lt;br /&gt;
Control points running on different platforms have different memory limits and display technologies. This means that a control point on a PC might want to display artwork at a high resolution, while a control point on a PDA might want to display artwork at a much lower resolution.&lt;br /&gt;
&lt;br /&gt;
Media servers often try to solve this problem using one of the following two methods:&lt;br /&gt;
&lt;br /&gt;
# A configurable parameter that scales all artwork to a user defined size&lt;br /&gt;
# A profile system where a user can create profiles for each class of control point they have and configure a parameter that scales all artwork to a user defined size per profile&lt;br /&gt;
&lt;br /&gt;
The first solution is highly problematic because it limits the resolution of artwork across the whole network. But a single network very often contains control points that can display high resolution images AND control points that can&#039;t.&lt;br /&gt;
&lt;br /&gt;
The second solution is just architecturally poor, turning the relationship between a control point and a media server on its head. Why should the media server try to infer what a control point needs through configuration when the control point is perfectly capable of telling the media server its exact requirements in every single circumstance.&lt;br /&gt;
&lt;br /&gt;
So, it is proposed that compliant media servers include a &#039;&#039;&#039;size&#039;&#039;&#039; element in their artwork uri&#039;s, where the size is the image&#039;s largest dimension. This allows a control point to ask for an image at a specified size.&lt;br /&gt;
&lt;br /&gt;
=== Example ===&lt;br /&gt;
&lt;br /&gt;
If the original artwork was 400x512, then a media server would provide the following albumArtURI: &amp;lt;uri&amp;gt;?size=512. If it is not possible for the media server to obtain the original resolution then the media server would provide the following albumArtURI: &amp;lt;uri&amp;gt;?size=0.&lt;br /&gt;
&lt;br /&gt;
The presence of the size element tells the control point:&lt;br /&gt;
&lt;br /&gt;
# the media server implements the image scaling extension&lt;br /&gt;
# the original size of the image.&lt;br /&gt;
&lt;br /&gt;
Now the control point can request the image at any resolution by using &amp;lt;uri&amp;gt;?size=x, where x is the size it wants.&lt;br /&gt;
&lt;br /&gt;
So, in this example, &amp;lt;uri&amp;gt;?size=1024 gets an 800x1024 image, and &amp;lt;uri&amp;gt;?size=200 gets a 156x200 image.&lt;br /&gt;
&lt;br /&gt;
== albumArtURI&amp;lt;br&amp;gt; ==&lt;br /&gt;
&lt;br /&gt;
The current specification only allows retrieval of artwork for a musicAlbum container through the property albumArtURI. When browsing a music library on a control point it quickly becomes clear that to implement a graphically rich control point the ContentDirectory service should provide a way to retrieve artwork for all of the content directory classes, not just musicAlbum containers.&lt;br /&gt;
&lt;br /&gt;
There has become a somewhat defacto standard where just about all media server provide an albumArtURI property for a musicItem item as well as for a musicAlbum container, however this is still not good enough to implement a graphically rich control point.&lt;br /&gt;
&lt;br /&gt;
It is proposed that an optional property is introduced to the object class called &#039;&#039;&#039;albumArtURI&#039;&#039;&amp;amp;nbsp;&#039;&#039;&#039;&#039;&#039;which may contain an attribute &#039;&#039;&#039;title&#039;&#039;&#039;,&amp;amp;nbsp;e.g. &amp;amp;lt;albumArtURI title=&amp;quot;Font Cover&amp;quot;&amp;amp;gt;http://Front Cover.jpg&amp;amp;lt;/albumArtURI&amp;amp;gt;.&amp;amp;nbsp;The object class can contain zero or more albumArtURIs elements.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Medium =&lt;br /&gt;
= Low =&lt;br /&gt;
&lt;br /&gt;
== Dynamic IP Addresses ==&lt;br /&gt;
&lt;br /&gt;
At present all media servers return URIs that contain a reference to their IP address, e.g. http://172.20.1.1/music.flac etc. This means that if the media server&#039;s IP address were to change across reboots, then any control point or media renderer with URIs that referenced the media server before the reboot will become invalid.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
It is proposed that a media server should always reference itself by host name and not by IP address in any XML that it sends to external devices, i.e. http://mynas/music.flac.&lt;br /&gt;
&lt;br /&gt;
== Disc Information ==&lt;br /&gt;
&lt;br /&gt;
It is proposed that two new properties are added to the musicTrack item called &#039;&#039;&#039;OriginalDiscNumber&#039;&#039;&#039; and &#039;&#039;&#039;OriginalDiscCount&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== Replay Gain Information ==&lt;br /&gt;
&lt;br /&gt;
It is proposed that four new properties are added to the musicTrack item called &#039;&#039;&#039;ReplayGainAlbum&#039;&#039;&#039;, &#039;&#039;&#039;ReplayGainAlbumPeak&#039;&#039;&#039;, &#039;&#039;&#039;ReplayGainTrack&#039;&#039;&#039;, and &#039;&#039;&#039;ReplayGainTrackPeak&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
== webURI ==&lt;br /&gt;
&lt;br /&gt;
The current specification does not easily allow a control point to provide rich information about objects in the browse hierarchy.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
It is proposed to add an optionally property to the object class called &#039;&#039;&#039;webURI&amp;amp;nbsp;&#039;&#039;&#039;which will contain a URI to a website that provides a rich collection of information about the object, e.g. for a musicArtist container it would provided a link to a website that provided information about the artist.&lt;/div&gt;</summary>
		<author><name>Davidd</name></author>
	</entry>
	<entry>
		<id>https://docs.linn.co.uk/wiki/index.php?title=Developer:Media_Server_Extensions&amp;diff=11186</id>
		<title>Developer:Media Server Extensions</title>
		<link rel="alternate" type="text/html" href="https://docs.linn.co.uk/wiki/index.php?title=Developer:Media_Server_Extensions&amp;diff=11186"/>
		<updated>2015-02-20T17:36:59Z</updated>

		<summary type="html">&lt;p&gt;Davidd: /* Search map */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Introduction =&lt;br /&gt;
&lt;br /&gt;
The ContentDirectory service has various limitations which become apparent when implementing control points on different hardware platforms. This document aims to outline some ideas that address the various shortcomings of the ContentDirectory specification. The ideas have been categorised in low, medium and high priority groups.&lt;br /&gt;
&lt;br /&gt;
= High =&lt;br /&gt;
&lt;br /&gt;
== Container map ==&lt;br /&gt;
&lt;br /&gt;
The current ContentDirectory specification makes it tricky for a control point to display the returned contents in an appropriate, aesthetically pleasing, manner for the content being viewed. This is because the ContentDirectory specification does not allow for a control point to know in advanced what content to expect when browsing through any particular hierarchy.&lt;br /&gt;
&lt;br /&gt;
An example of this might be, at a particular point in the browse hierarchy the ContentDirectory will return a list of albums which in turn will contain a list of tracks. A UI might wish to represent this list of albums as a grid and the album&#039;s tracks as a header and a list of the tracks. Currently it is not possible for the UI to know when it gets to a point in a hierarchy where the hierarchy represents a list of albums followed by a list of tracks.&lt;br /&gt;
&lt;br /&gt;
The container map extension allows a media server to express its container hierarchy in advance of the control point navigating it. This is done using an OpenHome vendor extension to the device XML.&lt;br /&gt;
&lt;br /&gt;
Three types of mapped container are defined: browse, link, and search.&lt;br /&gt;
&lt;br /&gt;
The browse map defines named top level containers that represent significant starting points for browsing that can meaningfully be presented in top level tabs of a control point UI. The browse map is expressed within the X_MAP_BROWSE element of X_MAP.&lt;br /&gt;
&lt;br /&gt;
The link map defines containers that can be meaningfully linked to from track or album details. For instance a track will typically have an artist defined. If an entry for &amp;quot;artist&amp;quot; is defined in the link map then it will be possible for the user of a control point to quickly access this artist-related container by clicking on the track&#039;s artist text. Similar links might be offered for &amp;quot;genre&amp;quot;, &amp;quot;composer&amp;quot;, &amp;quot;conductor&amp;quot;, etc. The link map is expressed within the X_MAP_LINK element of X_MAP.&lt;br /&gt;
&lt;br /&gt;
The search map defines the different kinds of search containers and the type of results that they produce. The search map is expressed within the X_MAP_SEARCH element of X_MAP.&lt;br /&gt;
&lt;br /&gt;
=== Browse map ===&lt;br /&gt;
&lt;br /&gt;
The X_MAP_BROWSE element must contain 1 or more X_MAP_BROWSE_ENTRY elements.&lt;br /&gt;
&lt;br /&gt;
The X_MAP_BROWSE_ENTRY has three child elements.&lt;br /&gt;
&lt;br /&gt;
X_MAP_BROWSE_ENTRY_NAME is a string that can be used by a control point to label a tab containing this browse hierarchy.&lt;br /&gt;
&lt;br /&gt;
X_MAP_BROWSE_ENTRY_ID is the UPnP container id that contains the root of this browse hierarchy. This id is then submitted to the ContentDirectory service using the Browse action as usual. The returned contents are navigated using subsequent Browse request as usual. The difference is that the control point knows in advance what kind of results to expect at each level.&lt;br /&gt;
&lt;br /&gt;
X_MAP_BROWSE_ENTRY_TYPE is a space separated list of strings that maps out the kind of containers that are to be found at each level of this browse hierarchy. For instance, &amp;quot;artist album&amp;quot; represents a browse hierarchy giving a container containing only artist containers, each of which contains only album containers, each of which contains only tracks.&lt;br /&gt;
&lt;br /&gt;
There should be an X_MAP_BROWSE_ENTRY for each root browse hierarchy defined by the media server.&lt;br /&gt;
&lt;br /&gt;
For example:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;X_MAP_BROWSE_ENTRY&amp;gt;&lt;br /&gt;
     &amp;lt;X_MAP_BROWSE_ENTRY_NAME&amp;gt;Genre&amp;lt;/X_MAP_BROWSE_ENTRY_NAME&amp;gt;&lt;br /&gt;
     &amp;lt;X_MAP_BROWSE_ENTRY_ID&amp;gt;db/browse/genre&amp;lt;/X_MAP_BROWSE_ENTRY_ID&amp;gt;&lt;br /&gt;
     &amp;lt;X_MAP_BROWSE_ENTRY_TYPE&amp;gt;genre artist album&amp;lt;/X_MAP_BROWSE_ENTRY_TYPE&amp;gt;&lt;br /&gt;
 &amp;lt;/X_MAP_BROWSE_ENTRY&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Link map ===&lt;br /&gt;
&lt;br /&gt;
The X_MAP_LINK element must contain 1 or more X_MAP_LINK_ENTRY elements.&lt;br /&gt;
&lt;br /&gt;
The X_MAP_LINK_ENTRY has three child elements.&lt;br /&gt;
&lt;br /&gt;
X_MAP_LINK_ENTRY_TAG is a string that defines which type of metadata is the target for this link. e.g. &amp;quot;artist&amp;quot;, &amp;quot;genre&amp;quot;, &amp;quot;composer&amp;quot;, etc. See the type section below. &lt;br /&gt;
&lt;br /&gt;
X_MAP_LINK_ENTRY_ID_PREFIX is a string that is prefix for a UPnP container id. The link can be taken by browsing to the container whose id is the result of appending the associated metadata value to this prefix. For instance, if the prefix for an &amp;quot;artist&amp;quot; link is defined as db/link/artist/, and a track returned anywhere in the media server&#039;s library has &amp;quot;Pink Floyd&amp;quot; as its artist. Then the linked container will have an id of db/link/artist/Pink Floyd.&lt;br /&gt;
&lt;br /&gt;
X_MAP_LINK_ENTRY_TYPE represents the type of browse hierarchy returned when taking this type of link. See X_MAP_BROWSE_ENTRY_TYPE for details.&lt;br /&gt;
&lt;br /&gt;
There should be an X_MAP_LINK_ENTRY for each piece of metadata that the media server allows to be linked.&lt;br /&gt;
&lt;br /&gt;
For example:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;X_MAP_LINK_ENTRY&amp;gt;&lt;br /&gt;
     &amp;lt;X_MAP_LINK_ENTRY_TAG&amp;gt;artist&amp;lt;/X_MAP_LINK_ENTRY_TAG&amp;gt;&lt;br /&gt;
     &amp;lt;X_MAP_LINK_ENTRY_ID_PREFIX&amp;gt;db/link/artist/&amp;lt;/X_MAP_LINK_ENTRY_ID_PREFIX&amp;gt;&lt;br /&gt;
     &amp;lt;X_MAP_LINK_ENTRY_TYPE&amp;gt;album&amp;lt;/X_MAP_LINK_ENTRY_TYPE&amp;gt;&lt;br /&gt;
 &amp;lt;/X_MAP_LINK_ENTRY&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The example above defines a browse hierarchy that is created when linking from an artist name. The hierarchy created provides a list of linked artist albums which in turn provide a list of tracks.&lt;br /&gt;
&lt;br /&gt;
=== Search map ===&lt;br /&gt;
&lt;br /&gt;
The X_MAP_SEARCH element must contain 1 or more X_MAP_SEARCH_ENTRY elements.&lt;br /&gt;
&lt;br /&gt;
The X_MAP_SEARCH_ENTRY has three child elements.&lt;br /&gt;
&lt;br /&gt;
X_MAP_SEARCH_ENTRY_NAME  is a string that can be used by a control point to label a tab containing these search results.&lt;br /&gt;
&lt;br /&gt;
X_MAP_SEARCH_ENTRY_ID_PREFIX is a string that is a prefix for a UPnP container id. The search results can be found by browsing to the container whose id is the result of appending the search string to this prefix. For instance, if the prefix for an &amp;quot;album&amp;quot; search is defined as db/search/album/, and the search string is &amp;quot;blue&amp;quot;, then the search results container will have an id of db/search/album/blue.&lt;br /&gt;
&lt;br /&gt;
X_MAP_SEARCH_ENTRY_TYPE is a space separated list of strings used by a control point to decide how to represent the browse hierarchy in the UI. The list of valid types is described in the Types section below.&lt;br /&gt;
&lt;br /&gt;
There should be an X_MAP_SEARCH_ENTRY for each piece of metadata that the media server allows to be linked.&lt;br /&gt;
&lt;br /&gt;
Any example of an X_MAP_SEARCH_ENTRY is shown below,&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;X_MAP_SEARCH_ENTRY&amp;gt;&lt;br /&gt;
     &amp;lt;X_MAP_SEARCH_ENTRY_NAME&amp;gt;Artist&amp;lt;/X_MAP_SEARCH_ENTRY_NAME&amp;gt;&lt;br /&gt;
     &amp;lt;X_MAP_SEARCH_ENTRY_ID_PREFIX&amp;gt;db/search/artist/&amp;lt;/X_MAP_SEARCH_ENTRY_ID_PREFIX&amp;gt;&lt;br /&gt;
     &amp;lt;X_MAP_SEARCH_ENTRY_TYPE&amp;gt;artist album&amp;lt;/X_MAP_SEARCH_ENTRY_TYPE&amp;gt;&lt;br /&gt;
 &amp;lt;/X_MAP_SEARCH_ENTRY&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The example above defines a browse hierarchy that is created when searching for an artist. The hierarchy created provides a list of artists, which in turn provide a list of albums, which in turn provide a list of tracks.&lt;br /&gt;
&lt;br /&gt;
X_MAP_SEARCH_ENTRY_NAME contains the text for a label in the UI of &amp;quot;Artists&amp;quot;&lt;br /&gt;
&lt;br /&gt;
X_MAP_SEARCH_ENTRY_ID_PREFIX contains the ID prefix to use in the ContentDirectory Browse action to obtain the list of artists. The browse ID is constructed by appending the search text to the prefix, i.e. &amp;quot;db/link/artist/&amp;lt;search text&amp;gt;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
X_MAP_SEARCH_ENTRY_TYPE contains a single entry indicating that the first level contains items that represent artists, the next level will contain albums, and the next level will contain tracks.&lt;br /&gt;
&lt;br /&gt;
=== Types ===&lt;br /&gt;
&lt;br /&gt;
The list of allowed types for X_BROWSE_ENTRY_TYPE, X_MAP_LINK_ENTRY_TAG, X_LINK_ENTRY_TYPE, and X_SEARCH_ENTRY_TYPE&lt;br /&gt;
&lt;br /&gt;
 genre&lt;br /&gt;
 artist&lt;br /&gt;
 composer&lt;br /&gt;
 conductor&lt;br /&gt;
 album&lt;br /&gt;
 year&lt;br /&gt;
 mixed&lt;br /&gt;
&lt;br /&gt;
mixed is a special value that represents a container that has mixed entries. It is not a valid type for the X_MAP_LINK_ENTRY_TAG element.&lt;br /&gt;
&lt;br /&gt;
=== Example device XML ===&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;root xmlns=&amp;quot;urn:schemas-upnp-org:device-1-0&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;specVersion&amp;gt;&lt;br /&gt;
        &amp;lt;major&amp;gt;1&amp;lt;/major&amp;gt;&lt;br /&gt;
        &amp;lt;minor&amp;gt;1&amp;lt;/minor&amp;gt;&lt;br /&gt;
    &amp;lt;/specVersion&amp;gt;&lt;br /&gt;
    &amp;lt;device&amp;gt;&lt;br /&gt;
        &amp;lt;deviceType&amp;gt;urn:schemas-upnp-org:device:MediaServer:1&amp;lt;/deviceType&amp;gt;&lt;br /&gt;
        &amp;lt;dlna:X_DLNADOC xmlns:dlna=&amp;quot;urn:schemas-dlna-org:device-1-0&amp;quot;&amp;gt;DMS-1.50&amp;lt;/dlna:X_DLNADOC&amp;gt;&lt;br /&gt;
        &amp;lt;dlna:X_DLNACAP xmlns:dlna=&amp;quot;urn:schemas-dlna-org:device-1-0&amp;quot;&amp;gt;av-upload,image-upload,audio-upload&amp;lt;/dlna:X_DLNACAP&amp;gt;&lt;br /&gt;
        &amp;lt;openhome:X_MAP xmlns:openhome=&amp;quot;http://www.openhome.org&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;X_MAP_BROWSE&amp;gt;&lt;br /&gt;
                &amp;lt;X_MAP_BROWSE_ENTRY&amp;gt;&lt;br /&gt;
                    &amp;lt;X_MAP_BROWSE_ENTRY_NAME&amp;gt;Albums&amp;lt;/X_MAP_BROWSE_ENTRY_NAME&amp;gt;&lt;br /&gt;
                    &amp;lt;X_MAP_BROWSE_ENTRY_ID&amp;gt;db/browse/albums&amp;lt;/X_MAP_BROWSE_ENTRY_ID&amp;gt;&lt;br /&gt;
                    &amp;lt;X_MAP_BROWSE_ENTRY_TYPE&amp;gt;album&amp;lt;/X_MAP_BROWSE_ENTRY_TYPE&amp;gt;&lt;br /&gt;
                &amp;lt;/X_MAP_BROWSE_ENTRY&amp;gt;&lt;br /&gt;
                &amp;lt;X_MAP_BROWSE_ENTRY&amp;gt;&lt;br /&gt;
                    &amp;lt;X_MAP_BROWSE_ENTRY_NAME&amp;gt;Artists&amp;lt;/X_MAP_BROWSE_ENTRY_NAME&amp;gt;&lt;br /&gt;
                    &amp;lt;X_MAP_BROWSE_ENTRY_ID&amp;gt;db/browse/artists&amp;lt;/X_MAP_BROWSE_ENTRY_ID&amp;gt;&lt;br /&gt;
                    &amp;lt;X_MAP_BROWSE_ENTRY_TYPE&amp;gt;artist album&amp;lt;/X_MAP_BROWSE_ENTRY_TYPE&amp;gt;&lt;br /&gt;
                &amp;lt;/X_MAP_BROWSE_ENTRY&amp;gt;&lt;br /&gt;
                &amp;lt;X_MAP_BROWSE_ENTRY&amp;gt;&lt;br /&gt;
                    &amp;lt;X_MAP_BROWSE_ENTRY_NAME&amp;gt;Folders&amp;lt;/X_MAP_BROWSE_ENTRY_NAME&amp;gt;&lt;br /&gt;
                    &amp;lt;X_MAP_BROWSE_ENTRY_ID&amp;gt;db/browse/folders&amp;lt;/X_MAP_BROWSE_ENTRY_ID&amp;gt;&lt;br /&gt;
                    &amp;lt;X_MAP_BROWSE_ENTRY_TYPE&amp;gt;mixed&amp;lt;/X_MAP_BROWSE_ENTRY_TYPE&amp;gt;&lt;br /&gt;
                &amp;lt;/X_MAP_BROWSE_ENTRY&amp;gt;&lt;br /&gt;
            &amp;lt;/X_MAP_BROWSE&amp;gt;&lt;br /&gt;
            &amp;lt;X_MAP_LINK&amp;gt;&lt;br /&gt;
                &amp;lt;X_MAP_LINK_ENTRY&amp;gt;&lt;br /&gt;
                    &amp;lt;X_MAP_LINK_ENTRY_TAG&amp;gt;artist&amp;lt;/X_MAP_LINK_ENTRY_TAG&amp;gt;&lt;br /&gt;
                    &amp;lt;X_MAP_LINK_ENTRY_ID_PREFIX&amp;gt;db/link/artist/&amp;lt;/X_MAP_LINK_ENTRY_ID_PREFIX&amp;gt;&lt;br /&gt;
                    &amp;lt;X_MAP_LINK_ENTRY_TYPE&amp;gt;album&amp;lt;/X_MAP_LINK_ENTRY_TYPE&amp;gt;&lt;br /&gt;
                &amp;lt;/X_MAP_LINK_ENTRY&amp;gt;&lt;br /&gt;
                &amp;lt;X_MAP_LINK_ENTRY&amp;gt;&lt;br /&gt;
                    &amp;lt;X_MAP_LINK_ENTRY_TAG&amp;gt;composer&amp;lt;/X_MAP_LINK_ENTRY_TAG&amp;gt;&lt;br /&gt;
                    &amp;lt;X_MAP_LINK_ENTRY_ID_PREFIX&amp;gt;db/link/composer/&amp;lt;/X_MAP_LINK_ENTRY_ID_PREFIX&amp;gt;&lt;br /&gt;
                    &amp;lt;X_MAP_LINK_ENTRY_TYPE&amp;gt;album&amp;lt;/X_MAP_LINK_ENTRY_TYPE&amp;gt;&lt;br /&gt;
                &amp;lt;/X_MAP_LINK_ENTRY&amp;gt;&lt;br /&gt;
            &amp;lt;/X_MAP_LINK&amp;gt;&lt;br /&gt;
            &amp;lt;X_MAP_SEARCH&amp;gt;&lt;br /&gt;
                &amp;lt;X_MAP_SEARCH_ENTRY&amp;gt;&lt;br /&gt;
                    &amp;lt;X_MAP_SEARCH_ENTRY_NAME&amp;gt;Artist&amp;lt;/X_MAP_SEARCH_ENTRY_NAME&amp;gt;&lt;br /&gt;
                    &amp;lt;X_MAP_SEARCH_ENTRY_ID_PREFIX&amp;gt;db/search/artist/&amp;lt;/X_MAP_SEARCH_ENTRY_ID_PREFIX&amp;gt;&lt;br /&gt;
                    &amp;lt;X_MAP_SEARCH_ENTRY_TYPE&amp;gt;artist album&amp;lt;/X_MAP_SEARCH_ENTRY_TYPE&amp;gt;&lt;br /&gt;
                &amp;lt;/X_MAP_SEARCH_ENTRY&amp;gt;&lt;br /&gt;
                &amp;lt;X_MAP_SEARCH_ENTRY&amp;gt;&lt;br /&gt;
                    &amp;lt;X_MAP_SEARCH_ENTRY_NAME&amp;gt;Tracks&amp;lt;/X_MAP_SEARCH_ENTRY_NAME&amp;gt;&lt;br /&gt;
                    &amp;lt;X_MAP_SEARCH_ENTRY_ID_PREFIX&amp;gt;db/search/all/&amp;lt;/X_MAP_SEARCH_ENTRY_ID_PREFIX&amp;gt;&lt;br /&gt;
                    &amp;lt;X_MAP_SEARCH_ENTRY_TYPE&amp;gt;&amp;lt;/X_MAP_SEARCH_ENTRY_TYPE&amp;gt;&lt;br /&gt;
                &amp;lt;/X_MAP_SEARCH_ENTRY&amp;gt;&lt;br /&gt;
            &amp;lt;/X_MAP_SEARCH&amp;gt;&lt;br /&gt;
        &amp;lt;/openhome:X_MAP&amp;gt;&lt;br /&gt;
        &amp;lt;presentationURL&amp;gt;http://10.2.1.170:4000/res/linn.co.uk.kazooserver/index.html&amp;lt;/presentationURL&amp;gt;&lt;br /&gt;
        &amp;lt;friendlyName&amp;gt;Linn Kazoo Server [R&amp;amp;D Mac Mini]&amp;lt;/friendlyName&amp;gt;&lt;br /&gt;
        &amp;lt;manufacturer&amp;gt;Linn&amp;lt;/manufacturer&amp;gt;&lt;br /&gt;
        &amp;lt;manufacturerURL&amp;gt;http://www.linn.co.uk&amp;lt;/manufacturerURL&amp;gt;&lt;br /&gt;
        &amp;lt;modelName&amp;gt;Kazoo Server&amp;lt;/modelName&amp;gt;&lt;br /&gt;
        &amp;lt;modelURL&amp;gt;http://oss.linn.co.uk/trac/wiki/KazooServer&amp;lt;/modelURL&amp;gt;&lt;br /&gt;
        &amp;lt;UDN&amp;gt;uuid:ac3d630e37b5f11ff5cdd23c0f5a7400&amp;lt;/UDN&amp;gt;&lt;br /&gt;
        &amp;lt;iconList&amp;gt;&lt;br /&gt;
            &amp;lt;icon&amp;gt;&lt;br /&gt;
                &amp;lt;mimetype&amp;gt;image/png&amp;lt;/mimetype&amp;gt;&lt;br /&gt;
                &amp;lt;width&amp;gt;65&amp;lt;/width&amp;gt;&lt;br /&gt;
                &amp;lt;height&amp;gt;65&amp;lt;/height&amp;gt;&lt;br /&gt;
                &amp;lt;depth&amp;gt;32&amp;lt;/depth&amp;gt;&lt;br /&gt;
                &amp;lt;url&amp;gt;ac3d630e37b5f11ff5cdd23c0f5a7400/resource/icon/icon&amp;lt;/url&amp;gt;&lt;br /&gt;
            &amp;lt;/icon&amp;gt;&lt;br /&gt;
        &amp;lt;/iconList&amp;gt;&lt;br /&gt;
        &amp;lt;serviceList&amp;gt;&lt;br /&gt;
            &amp;lt;service&amp;gt;&lt;br /&gt;
                &amp;lt;serviceType&amp;gt;urn:av-openhome-org:service:PlaylistManager:1&amp;lt;/serviceType&amp;gt;&lt;br /&gt;
                &amp;lt;serviceId&amp;gt;urn:av-openhome-org:serviceId:PlaylistManager&amp;lt;/serviceId&amp;gt;&lt;br /&gt;
                &amp;lt;SCPDURL&amp;gt;/ac3d630e37b5f11ff5cdd23c0f5a7400/Upnp/av.openhome.org-PlaylistManager-1/service.xml&amp;lt;/SCPDURL&amp;gt;&lt;br /&gt;
                &amp;lt;controlURL&amp;gt;/ac3d630e37b5f11ff5cdd23c0f5a7400/av.openhome.org-PlaylistManager-1/control&amp;lt;/controlURL&amp;gt;&lt;br /&gt;
                &amp;lt;eventSubURL&amp;gt;/ac3d630e37b5f11ff5cdd23c0f5a7400/av.openhome.org-PlaylistManager-1/event&amp;lt;/eventSubURL&amp;gt;&lt;br /&gt;
            &amp;lt;/service&amp;gt;&lt;br /&gt;
            &amp;lt;service&amp;gt;&lt;br /&gt;
                &amp;lt;serviceType&amp;gt;urn:schemas-upnp-org:service:ContentDirectory:1&amp;lt;/serviceType&amp;gt;&lt;br /&gt;
                &amp;lt;serviceId&amp;gt;urn:upnp-org:serviceId:ContentDirectory&amp;lt;/serviceId&amp;gt;&lt;br /&gt;
                &amp;lt;SCPDURL&amp;gt;/ac3d630e37b5f11ff5cdd23c0f5a7400/Upnp/upnp.org-ContentDirectory-1/service.xml&amp;lt;/SCPDURL&amp;gt;&lt;br /&gt;
                &amp;lt;controlURL&amp;gt;/ac3d630e37b5f11ff5cdd23c0f5a7400/upnp.org-ContentDirectory-1/control&amp;lt;/controlURL&amp;gt;&lt;br /&gt;
                &amp;lt;eventSubURL&amp;gt;/ac3d630e37b5f11ff5cdd23c0f5a7400/upnp.org-ContentDirectory-1/event&amp;lt;/eventSubURL&amp;gt;&lt;br /&gt;
            &amp;lt;/service&amp;gt;&lt;br /&gt;
            &amp;lt;service&amp;gt;&lt;br /&gt;
                &amp;lt;serviceType&amp;gt;urn:schemas-upnp-org:service:ConnectionManager:1&amp;lt;/serviceType&amp;gt;&lt;br /&gt;
                &amp;lt;serviceId&amp;gt;urn:upnp-org:serviceId:ConnectionManager&amp;lt;/serviceId&amp;gt;&lt;br /&gt;
                &amp;lt;SCPDURL&amp;gt;/ac3d630e37b5f11ff5cdd23c0f5a7400/Upnp/upnp.org-ConnectionManager-1/service.xml&amp;lt;/SCPDURL&amp;gt;&lt;br /&gt;
                &amp;lt;controlURL&amp;gt;/ac3d630e37b5f11ff5cdd23c0f5a7400/upnp.org-ConnectionManager-1/control&amp;lt;/controlURL&amp;gt;&lt;br /&gt;
                &amp;lt;eventSubURL&amp;gt;/ac3d630e37b5f11ff5cdd23c0f5a7400/upnp.org-ConnectionManager-1/event&amp;lt;/eventSubURL&amp;gt;&lt;br /&gt;
            &amp;lt;/service&amp;gt;&lt;br /&gt;
        &amp;lt;/serviceList&amp;gt;&lt;br /&gt;
    &amp;lt;/device&amp;gt;&lt;br /&gt;
 &amp;lt;/root&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Index maps ==&lt;br /&gt;
&lt;br /&gt;
Large lists are difficult to navigate, especially on mobile devices. Mobile devices added the idea of an index map to improve this situation. The index map allows a users to jump to different sections in a large list, similar to what is possible with a scrollbar on desktops.&lt;br /&gt;
&lt;br /&gt;
In order for a control point to generate an index map for any particular level in a ContentDirectory&#039;s hierarchy it first needs to download all the objects in the container, figure out if they are sorted and then calculate the index map. This means that a user will need to wait, perhaps minutes, before an index map is able to be presented on the UI. &lt;br /&gt;
&lt;br /&gt;
The proposal is to allow the media server to calculate an index map and return it as part of the DIDL-Lite XML. Below shows some example DIDL-Lite with an index map included.&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;DIDL-Lite xmlns=&amp;quot;urn:schemas-upnp-org:metadata-1-0/DIDL-Lite/&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;container id=&amp;quot;db/ba37a2ac24efa676c8676aab71a6cdf074&amp;quot; parentID=&amp;quot;0&amp;quot; restricted=&amp;quot;true&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;dc:title xmlns:dc=&amp;quot;http://purl.org/dc/elements/1.1/&amp;quot;&amp;gt;Worlds Apart [Deluxe Edition]&amp;lt;/dc:title&amp;gt;&lt;br /&gt;
        &amp;lt;upnp:udn xmlns:upnp=&amp;quot;urn:schemas-upnp-org:metadata-1-0/upnp/&amp;quot;&amp;gt;ac3d630e37b5f11ff5cdd23c0f5a7400&amp;lt;/upnp:udn&amp;gt;&lt;br /&gt;
        &amp;lt;upnp:class xmlns:upnp=&amp;quot;urn:schemas-upnp-org:metadata-1-0/upnp/&amp;quot;&amp;gt;object.container.album.musicAlbum&amp;lt;/upnp:class&amp;gt;&lt;br /&gt;
        &amp;lt;upnp:artist xmlns:upnp=&amp;quot;urn:schemas-upnp-org:metadata-1-0/upnp/&amp;quot;&amp;gt;...And You Will Know Us by the Trail of Dead&amp;lt;/upnp:artist&amp;gt;&lt;br /&gt;
        &amp;lt;upnp:albumArtURI&amp;gt;http://10.2.1.170:4000/linn.co.uk.kazooserver/ms/artwork/37a2ac2?size=0&amp;lt;/upnp:albumArtURI&amp;gt;&lt;br /&gt;
    &amp;lt;/container&amp;gt;&lt;br /&gt;
    &amp;lt;desc nameSpace=&amp;quot;openhome.org&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;indexmap&amp;gt;&lt;br /&gt;
            &amp;lt;labels&amp;gt;# A B C D E F G H I J K L M N O P Q R S T U V W X Y Z +&amp;lt;/labels&amp;gt;&lt;br /&gt;
            &amp;lt;indices&amp;gt;0 10 20 30 40 50 60 70 80 90 100 110 120 130 140 150 160 170 180 190 200 210 220 230 240 250 260 270&amp;lt;/indices&amp;gt;&lt;br /&gt;
        &amp;lt;/indexmap&amp;gt;&lt;br /&gt;
    &amp;lt;/desc&amp;gt;&lt;br /&gt;
 &amp;lt;/DIDL-Lite&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The index map contains two, space separated, lists. These lists must contain the same number of elements. The example above is for a container who&#039;s contents are alphabetically sorted. But an index map could just as easily define a container who&#039;s contents are sorted by decade, e.g 1960 - 2015,&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;desc nameSpace=&amp;quot;openhome.org&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;indexmap&amp;gt;&lt;br /&gt;
        &amp;lt;labels&amp;gt;60 70 80 90 00 10&amp;lt;/labels&amp;gt;&lt;br /&gt;
        &amp;lt;indices&amp;gt;0 10 20 30 40 50&amp;lt;/indices&amp;gt;&lt;br /&gt;
    &amp;lt;/indexmap&amp;gt;&lt;br /&gt;
 &amp;lt;/desc&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Image Resolution ==&lt;br /&gt;
&lt;br /&gt;
Control points running on different platforms have different memory limits and display technologies. This means that a control point on a PC might want to display artwork at a high resolution, while a control point on a PDA might want to display artwork at a much lower resolution.&lt;br /&gt;
&lt;br /&gt;
Media servers often try to solve this problem using one of the following two methods:&lt;br /&gt;
&lt;br /&gt;
# A configurable parameter that scales all artwork to a user defined size&lt;br /&gt;
# A profile system where a user can create profiles for each class of control point they have and configure a parameter that scales all artwork to a user defined size per profile&lt;br /&gt;
&lt;br /&gt;
The first solution is highly problematic because it limits the resolution of artwork across the whole network. But a single network very often contains control points that can display high resolution images AND control points that can&#039;t.&lt;br /&gt;
&lt;br /&gt;
The second solution is just architecturally poor, turning the relationship between a control point and a media server on its head. Why should the media server try to infer what a control point needs through configuration when the control point is perfectly capable of telling the media server its exact requirements in every single circumstance.&lt;br /&gt;
&lt;br /&gt;
So, it is proposed that compliant media servers include a &#039;&#039;&#039;size&#039;&#039;&#039; element in their artwork uri&#039;s, where the size is the image&#039;s largest dimension. This allows a control point to ask for an image at a specified size.&lt;br /&gt;
&lt;br /&gt;
=== Example ===&lt;br /&gt;
&lt;br /&gt;
If the original artwork was 400x512, then a media server would provide the following albumArtURI: &amp;lt;uri&amp;gt;?size=512. If it is not possible for the media server to obtain the original resolution then the media server would provide the following albumArtURI: &amp;lt;uri&amp;gt;?size=0.&lt;br /&gt;
&lt;br /&gt;
The presence of the size element tells the control point:&lt;br /&gt;
&lt;br /&gt;
# the media server implements the image scaling extension&lt;br /&gt;
# the original size of the image.&lt;br /&gt;
&lt;br /&gt;
Now the control point can request the image at any resolution by using &amp;lt;uri&amp;gt;?size=x, where x is the size it wants.&lt;br /&gt;
&lt;br /&gt;
So, in this example, &amp;lt;uri&amp;gt;?size=1024 gets an 800x1024 image, and &amp;lt;uri&amp;gt;?size=200 gets a 156x200 image.&lt;br /&gt;
&lt;br /&gt;
== albumArtURI&amp;lt;br&amp;gt; ==&lt;br /&gt;
&lt;br /&gt;
The current specification only allows retrieval of artwork for a musicAlbum container through the property albumArtURI. When browsing a music library on a control point it quickly becomes clear that to implement a graphically rich control point the ContentDirectory service should provide a way to retrieve artwork for all of the content directory classes, not just musicAlbum containers.&lt;br /&gt;
&lt;br /&gt;
There has become a somewhat defacto standard where just about all media server provide an albumArtURI property for a musicItem item as well as for a musicAlbum container, however this is still not good enough to implement a graphically rich control point.&lt;br /&gt;
&lt;br /&gt;
It is proposed that an optional property is introduced to the object class called &#039;&#039;&#039;albumArtURI&#039;&#039;&amp;amp;nbsp;&#039;&#039;&#039;&#039;&#039;which may contain an attribute &#039;&#039;&#039;title&#039;&#039;&#039;,&amp;amp;nbsp;e.g. &amp;amp;lt;albumArtURI title=&amp;quot;Font Cover&amp;quot;&amp;amp;gt;http://Front Cover.jpg&amp;amp;lt;/albumArtURI&amp;amp;gt;.&amp;amp;nbsp;The object class can contain zero or more albumArtURIs elements.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Medium =&lt;br /&gt;
= Low =&lt;br /&gt;
&lt;br /&gt;
== Dynamic IP Addresses ==&lt;br /&gt;
&lt;br /&gt;
At present all media servers return URIs that contain a reference to their IP address, e.g. http://172.20.1.1/music.flac etc. This means that if the media server&#039;s IP address were to change across reboots, then any control point or media renderer with URIs that referenced the media server before the reboot will become invalid.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
It is proposed that a media server should always reference itself by host name and not by IP address in any XML that it sends to external devices, i.e. http://mynas/music.flac.&lt;br /&gt;
&lt;br /&gt;
== Disc Information ==&lt;br /&gt;
&lt;br /&gt;
It is proposed that two new properties are added to the musicTrack item called &#039;&#039;&#039;OriginalDiscNumber&#039;&#039;&#039; and &#039;&#039;&#039;OriginalDiscCount&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== Replay Gain Information ==&lt;br /&gt;
&lt;br /&gt;
It is proposed that four new properties are added to the musicTrack item called &#039;&#039;&#039;ReplayGainAlbum&#039;&#039;&#039;, &#039;&#039;&#039;ReplayGainAlbumPeak&#039;&#039;&#039;, &#039;&#039;&#039;ReplayGainTrack&#039;&#039;&#039;, and &#039;&#039;&#039;ReplayGainTrackPeak&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
== webURI ==&lt;br /&gt;
&lt;br /&gt;
The current specification does not easily allow a control point to provide rich information about objects in the browse hierarchy.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
It is proposed to add an optionally property to the object class called &#039;&#039;&#039;webURI&amp;amp;nbsp;&#039;&#039;&#039;which will contain a URI to a website that provides a rich collection of information about the object, e.g. for a musicArtist container it would provided a link to a website that provided information about the artist.&lt;/div&gt;</summary>
		<author><name>Davidd</name></author>
	</entry>
	<entry>
		<id>https://docs.linn.co.uk/wiki/index.php?title=Developer:Media_Server_Extensions&amp;diff=11185</id>
		<title>Developer:Media Server Extensions</title>
		<link rel="alternate" type="text/html" href="https://docs.linn.co.uk/wiki/index.php?title=Developer:Media_Server_Extensions&amp;diff=11185"/>
		<updated>2015-02-20T17:34:14Z</updated>

		<summary type="html">&lt;p&gt;Davidd: /* Search map */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Introduction =&lt;br /&gt;
&lt;br /&gt;
The ContentDirectory service has various limitations which become apparent when implementing control points on different hardware platforms. This document aims to outline some ideas that address the various shortcomings of the ContentDirectory specification. The ideas have been categorised in low, medium and high priority groups.&lt;br /&gt;
&lt;br /&gt;
= High =&lt;br /&gt;
&lt;br /&gt;
== Container map ==&lt;br /&gt;
&lt;br /&gt;
The current ContentDirectory specification makes it tricky for a control point to display the returned contents in an appropriate, aesthetically pleasing, manner for the content being viewed. This is because the ContentDirectory specification does not allow for a control point to know in advanced what content to expect when browsing through any particular hierarchy.&lt;br /&gt;
&lt;br /&gt;
An example of this might be, at a particular point in the browse hierarchy the ContentDirectory will return a list of albums which in turn will contain a list of tracks. A UI might wish to represent this list of albums as a grid and the album&#039;s tracks as a header and a list of the tracks. Currently it is not possible for the UI to know when it gets to a point in a hierarchy where the hierarchy represents a list of albums followed by a list of tracks.&lt;br /&gt;
&lt;br /&gt;
The container map extension allows a media server to express its container hierarchy in advance of the control point navigating it. This is done using an OpenHome vendor extension to the device XML.&lt;br /&gt;
&lt;br /&gt;
Three types of mapped container are defined: browse, link, and search.&lt;br /&gt;
&lt;br /&gt;
The browse map defines named top level containers that represent significant starting points for browsing that can meaningfully be presented in top level tabs of a control point UI. The browse map is expressed within the X_MAP_BROWSE element of X_MAP.&lt;br /&gt;
&lt;br /&gt;
The link map defines containers that can be meaningfully linked to from track or album details. For instance a track will typically have an artist defined. If an entry for &amp;quot;artist&amp;quot; is defined in the link map then it will be possible for the user of a control point to quickly access this artist-related container by clicking on the track&#039;s artist text. Similar links might be offered for &amp;quot;genre&amp;quot;, &amp;quot;composer&amp;quot;, &amp;quot;conductor&amp;quot;, etc. The link map is expressed within the X_MAP_LINK element of X_MAP.&lt;br /&gt;
&lt;br /&gt;
The search map defines the different kinds of search containers and the type of results that they produce. The search map is expressed within the X_MAP_SEARCH element of X_MAP.&lt;br /&gt;
&lt;br /&gt;
=== Browse map ===&lt;br /&gt;
&lt;br /&gt;
The X_MAP_BROWSE element must contain 1 or more X_MAP_BROWSE_ENTRY elements.&lt;br /&gt;
&lt;br /&gt;
The X_MAP_BROWSE_ENTRY has three child elements.&lt;br /&gt;
&lt;br /&gt;
X_MAP_BROWSE_ENTRY_NAME is a string that can be used by a control point to label a tab containing this browse hierarchy.&lt;br /&gt;
&lt;br /&gt;
X_MAP_BROWSE_ENTRY_ID is the UPnP container id that contains the root of this browse hierarchy. This id is then submitted to the ContentDirectory service using the Browse action as usual. The returned contents are navigated using subsequent Browse request as usual. The difference is that the control point knows in advance what kind of results to expect at each level.&lt;br /&gt;
&lt;br /&gt;
X_MAP_BROWSE_ENTRY_TYPE is a space separated list of strings that maps out the kind of containers that are to be found at each level of this browse hierarchy. For instance, &amp;quot;artist album&amp;quot; represents a browse hierarchy giving a container containing only artist containers, each of which contains only album containers, each of which contains only tracks.&lt;br /&gt;
&lt;br /&gt;
There should be an X_MAP_BROWSE_ENTRY for each root browse hierarchy defined by the media server.&lt;br /&gt;
&lt;br /&gt;
For example:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;X_MAP_BROWSE_ENTRY&amp;gt;&lt;br /&gt;
     &amp;lt;X_MAP_BROWSE_ENTRY_NAME&amp;gt;Genre&amp;lt;/X_MAP_BROWSE_ENTRY_NAME&amp;gt;&lt;br /&gt;
     &amp;lt;X_MAP_BROWSE_ENTRY_ID&amp;gt;db/browse/genre&amp;lt;/X_MAP_BROWSE_ENTRY_ID&amp;gt;&lt;br /&gt;
     &amp;lt;X_MAP_BROWSE_ENTRY_TYPE&amp;gt;genre artist album&amp;lt;/X_MAP_BROWSE_ENTRY_TYPE&amp;gt;&lt;br /&gt;
 &amp;lt;/X_MAP_BROWSE_ENTRY&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Link map ===&lt;br /&gt;
&lt;br /&gt;
The X_MAP_LINK element must contain 1 or more X_MAP_LINK_ENTRY elements.&lt;br /&gt;
&lt;br /&gt;
The X_MAP_LINK_ENTRY has three child elements.&lt;br /&gt;
&lt;br /&gt;
X_MAP_LINK_ENTRY_TAG is a string that defines which type of metadata is the target for this link. e.g. &amp;quot;artist&amp;quot;, &amp;quot;genre&amp;quot;, &amp;quot;composer&amp;quot;, etc. See the type section below. &lt;br /&gt;
&lt;br /&gt;
X_MAP_LINK_ENTRY_ID_PREFIX is a string that is prefix for a UPnP container id. The link can be taken by browsing to the container whose id is the result of appending the associated metadata value to this prefix. For instance, if the prefix for an &amp;quot;artist&amp;quot; link is defined as db/link/artist/, and a track returned anywhere in the media server&#039;s library has &amp;quot;Pink Floyd&amp;quot; as its artist. Then the linked container will have an id of db/link/artist/Pink Floyd.&lt;br /&gt;
&lt;br /&gt;
X_MAP_LINK_ENTRY_TYPE represents the type of browse hierarchy returned when taking this type of link. See X_MAP_BROWSE_ENTRY_TYPE for details.&lt;br /&gt;
&lt;br /&gt;
There should be an X_MAP_LINK_ENTRY for each piece of metadata that the media server allows to be linked.&lt;br /&gt;
&lt;br /&gt;
For example:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;X_MAP_LINK_ENTRY&amp;gt;&lt;br /&gt;
     &amp;lt;X_MAP_LINK_ENTRY_TAG&amp;gt;artist&amp;lt;/X_MAP_LINK_ENTRY_TAG&amp;gt;&lt;br /&gt;
     &amp;lt;X_MAP_LINK_ENTRY_ID_PREFIX&amp;gt;db/link/artist/&amp;lt;/X_MAP_LINK_ENTRY_ID_PREFIX&amp;gt;&lt;br /&gt;
     &amp;lt;X_MAP_LINK_ENTRY_TYPE&amp;gt;album&amp;lt;/X_MAP_LINK_ENTRY_TYPE&amp;gt;&lt;br /&gt;
 &amp;lt;/X_MAP_LINK_ENTRY&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The example above defines a browse hierarchy that is created when linking from an artist name. The hierarchy created provides a list of linked artist albums which in turn provide a list of tracks.&lt;br /&gt;
&lt;br /&gt;
=== Search map ===&lt;br /&gt;
&lt;br /&gt;
The X_MAP_SEARCH element must contain 1 or more X_MAP_SEARCH_ENTRY elements.&lt;br /&gt;
&lt;br /&gt;
The X_MAP_SEARCH_ENTRY has three child elements.&lt;br /&gt;
&lt;br /&gt;
X_MAP_SEARCH_ENTRY_NAME  is a string that can be used by a control point to label a tab containing these search results.&lt;br /&gt;
&lt;br /&gt;
X_MAP_SEARCH_ENTRY_ID_PREFIX is a string and used by a control point to start the browse of a search.&lt;br /&gt;
&lt;br /&gt;
X_MAP_SEARCH_ENTRY_TYPE is a space separated list of strings used by a control point to decide how to represent the browse hierarchy in the UI. The list of valid types is described in the Types section below.&lt;br /&gt;
&lt;br /&gt;
There should be an X_MAP_SEARCH_ENTRY for each piece of metadata that the media server allows to be linked.&lt;br /&gt;
&lt;br /&gt;
Any example of an X_MAP_SEARCH_ENTRY is shown below,&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;X_MAP_SEARCH_ENTRY&amp;gt;&lt;br /&gt;
     &amp;lt;X_MAP_SEARCH_ENTRY_NAME&amp;gt;Artist&amp;lt;/X_MAP_SEARCH_ENTRY_NAME&amp;gt;&lt;br /&gt;
     &amp;lt;X_MAP_SEARCH_ENTRY_ID_PREFIX&amp;gt;db/search/artist/&amp;lt;/X_MAP_SEARCH_ENTRY_ID_PREFIX&amp;gt;&lt;br /&gt;
     &amp;lt;X_MAP_SEARCH_ENTRY_TYPE&amp;gt;artist album&amp;lt;/X_MAP_SEARCH_ENTRY_TYPE&amp;gt;&lt;br /&gt;
 &amp;lt;/X_MAP_SEARCH_ENTRY&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The example above defines a browse hierarchy that is created when searching for an artist. The hierarchy created provides a list of artists, which in turn provide a list of albums, which in turn provide a list of tracks.&lt;br /&gt;
&lt;br /&gt;
X_MAP_SEARCH_ENTRY_NAME contains the text for a label in the UI of &amp;quot;Artists&amp;quot;&lt;br /&gt;
&lt;br /&gt;
X_MAP_SEARCH_ENTRY_ID_PREFIX contains the ID prefix to use in the ContentDirectory Browse action to obtain the list of artists. The browse ID is constructed by appending the search text to the prefix, i.e. &amp;quot;db/link/artist/&amp;lt;search text&amp;gt;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
X_MAP_SEARCH_ENTRY_TYPE contains a single entry indicating that the first level contains items that represent artists, the next level will contain albums, and the next level will contain tracks.&lt;br /&gt;
&lt;br /&gt;
=== Types ===&lt;br /&gt;
&lt;br /&gt;
The list of allowed types for X_BROWSE_ENTRY_TYPE, X_MAP_LINK_ENTRY_TAG, X_LINK_ENTRY_TYPE, and X_SEARCH_ENTRY_TYPE&lt;br /&gt;
&lt;br /&gt;
 genre&lt;br /&gt;
 artist&lt;br /&gt;
 composer&lt;br /&gt;
 conductor&lt;br /&gt;
 album&lt;br /&gt;
 year&lt;br /&gt;
 mixed&lt;br /&gt;
&lt;br /&gt;
mixed is a special value that represents a container that has mixed entries. It is not a valid type for the X_MAP_LINK_ENTRY_TAG element.&lt;br /&gt;
&lt;br /&gt;
=== Example device XML ===&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;root xmlns=&amp;quot;urn:schemas-upnp-org:device-1-0&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;specVersion&amp;gt;&lt;br /&gt;
        &amp;lt;major&amp;gt;1&amp;lt;/major&amp;gt;&lt;br /&gt;
        &amp;lt;minor&amp;gt;1&amp;lt;/minor&amp;gt;&lt;br /&gt;
    &amp;lt;/specVersion&amp;gt;&lt;br /&gt;
    &amp;lt;device&amp;gt;&lt;br /&gt;
        &amp;lt;deviceType&amp;gt;urn:schemas-upnp-org:device:MediaServer:1&amp;lt;/deviceType&amp;gt;&lt;br /&gt;
        &amp;lt;dlna:X_DLNADOC xmlns:dlna=&amp;quot;urn:schemas-dlna-org:device-1-0&amp;quot;&amp;gt;DMS-1.50&amp;lt;/dlna:X_DLNADOC&amp;gt;&lt;br /&gt;
        &amp;lt;dlna:X_DLNACAP xmlns:dlna=&amp;quot;urn:schemas-dlna-org:device-1-0&amp;quot;&amp;gt;av-upload,image-upload,audio-upload&amp;lt;/dlna:X_DLNACAP&amp;gt;&lt;br /&gt;
        &amp;lt;openhome:X_MAP xmlns:openhome=&amp;quot;http://www.openhome.org&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;X_MAP_BROWSE&amp;gt;&lt;br /&gt;
                &amp;lt;X_MAP_BROWSE_ENTRY&amp;gt;&lt;br /&gt;
                    &amp;lt;X_MAP_BROWSE_ENTRY_NAME&amp;gt;Albums&amp;lt;/X_MAP_BROWSE_ENTRY_NAME&amp;gt;&lt;br /&gt;
                    &amp;lt;X_MAP_BROWSE_ENTRY_ID&amp;gt;db/browse/albums&amp;lt;/X_MAP_BROWSE_ENTRY_ID&amp;gt;&lt;br /&gt;
                    &amp;lt;X_MAP_BROWSE_ENTRY_TYPE&amp;gt;album&amp;lt;/X_MAP_BROWSE_ENTRY_TYPE&amp;gt;&lt;br /&gt;
                &amp;lt;/X_MAP_BROWSE_ENTRY&amp;gt;&lt;br /&gt;
                &amp;lt;X_MAP_BROWSE_ENTRY&amp;gt;&lt;br /&gt;
                    &amp;lt;X_MAP_BROWSE_ENTRY_NAME&amp;gt;Artists&amp;lt;/X_MAP_BROWSE_ENTRY_NAME&amp;gt;&lt;br /&gt;
                    &amp;lt;X_MAP_BROWSE_ENTRY_ID&amp;gt;db/browse/artists&amp;lt;/X_MAP_BROWSE_ENTRY_ID&amp;gt;&lt;br /&gt;
                    &amp;lt;X_MAP_BROWSE_ENTRY_TYPE&amp;gt;artist album&amp;lt;/X_MAP_BROWSE_ENTRY_TYPE&amp;gt;&lt;br /&gt;
                &amp;lt;/X_MAP_BROWSE_ENTRY&amp;gt;&lt;br /&gt;
                &amp;lt;X_MAP_BROWSE_ENTRY&amp;gt;&lt;br /&gt;
                    &amp;lt;X_MAP_BROWSE_ENTRY_NAME&amp;gt;Folders&amp;lt;/X_MAP_BROWSE_ENTRY_NAME&amp;gt;&lt;br /&gt;
                    &amp;lt;X_MAP_BROWSE_ENTRY_ID&amp;gt;db/browse/folders&amp;lt;/X_MAP_BROWSE_ENTRY_ID&amp;gt;&lt;br /&gt;
                    &amp;lt;X_MAP_BROWSE_ENTRY_TYPE&amp;gt;mixed&amp;lt;/X_MAP_BROWSE_ENTRY_TYPE&amp;gt;&lt;br /&gt;
                &amp;lt;/X_MAP_BROWSE_ENTRY&amp;gt;&lt;br /&gt;
            &amp;lt;/X_MAP_BROWSE&amp;gt;&lt;br /&gt;
            &amp;lt;X_MAP_LINK&amp;gt;&lt;br /&gt;
                &amp;lt;X_MAP_LINK_ENTRY&amp;gt;&lt;br /&gt;
                    &amp;lt;X_MAP_LINK_ENTRY_TAG&amp;gt;artist&amp;lt;/X_MAP_LINK_ENTRY_TAG&amp;gt;&lt;br /&gt;
                    &amp;lt;X_MAP_LINK_ENTRY_ID_PREFIX&amp;gt;db/link/artist/&amp;lt;/X_MAP_LINK_ENTRY_ID_PREFIX&amp;gt;&lt;br /&gt;
                    &amp;lt;X_MAP_LINK_ENTRY_TYPE&amp;gt;album&amp;lt;/X_MAP_LINK_ENTRY_TYPE&amp;gt;&lt;br /&gt;
                &amp;lt;/X_MAP_LINK_ENTRY&amp;gt;&lt;br /&gt;
                &amp;lt;X_MAP_LINK_ENTRY&amp;gt;&lt;br /&gt;
                    &amp;lt;X_MAP_LINK_ENTRY_TAG&amp;gt;composer&amp;lt;/X_MAP_LINK_ENTRY_TAG&amp;gt;&lt;br /&gt;
                    &amp;lt;X_MAP_LINK_ENTRY_ID_PREFIX&amp;gt;db/link/composer/&amp;lt;/X_MAP_LINK_ENTRY_ID_PREFIX&amp;gt;&lt;br /&gt;
                    &amp;lt;X_MAP_LINK_ENTRY_TYPE&amp;gt;album&amp;lt;/X_MAP_LINK_ENTRY_TYPE&amp;gt;&lt;br /&gt;
                &amp;lt;/X_MAP_LINK_ENTRY&amp;gt;&lt;br /&gt;
            &amp;lt;/X_MAP_LINK&amp;gt;&lt;br /&gt;
            &amp;lt;X_MAP_SEARCH&amp;gt;&lt;br /&gt;
                &amp;lt;X_MAP_SEARCH_ENTRY&amp;gt;&lt;br /&gt;
                    &amp;lt;X_MAP_SEARCH_ENTRY_NAME&amp;gt;Artist&amp;lt;/X_MAP_SEARCH_ENTRY_NAME&amp;gt;&lt;br /&gt;
                    &amp;lt;X_MAP_SEARCH_ENTRY_ID_PREFIX&amp;gt;db/search/artist/&amp;lt;/X_MAP_SEARCH_ENTRY_ID_PREFIX&amp;gt;&lt;br /&gt;
                    &amp;lt;X_MAP_SEARCH_ENTRY_TYPE&amp;gt;artist album&amp;lt;/X_MAP_SEARCH_ENTRY_TYPE&amp;gt;&lt;br /&gt;
                &amp;lt;/X_MAP_SEARCH_ENTRY&amp;gt;&lt;br /&gt;
                &amp;lt;X_MAP_SEARCH_ENTRY&amp;gt;&lt;br /&gt;
                    &amp;lt;X_MAP_SEARCH_ENTRY_NAME&amp;gt;Tracks&amp;lt;/X_MAP_SEARCH_ENTRY_NAME&amp;gt;&lt;br /&gt;
                    &amp;lt;X_MAP_SEARCH_ENTRY_ID_PREFIX&amp;gt;db/search/all/&amp;lt;/X_MAP_SEARCH_ENTRY_ID_PREFIX&amp;gt;&lt;br /&gt;
                    &amp;lt;X_MAP_SEARCH_ENTRY_TYPE&amp;gt;&amp;lt;/X_MAP_SEARCH_ENTRY_TYPE&amp;gt;&lt;br /&gt;
                &amp;lt;/X_MAP_SEARCH_ENTRY&amp;gt;&lt;br /&gt;
            &amp;lt;/X_MAP_SEARCH&amp;gt;&lt;br /&gt;
        &amp;lt;/openhome:X_MAP&amp;gt;&lt;br /&gt;
        &amp;lt;presentationURL&amp;gt;http://10.2.1.170:4000/res/linn.co.uk.kazooserver/index.html&amp;lt;/presentationURL&amp;gt;&lt;br /&gt;
        &amp;lt;friendlyName&amp;gt;Linn Kazoo Server [R&amp;amp;D Mac Mini]&amp;lt;/friendlyName&amp;gt;&lt;br /&gt;
        &amp;lt;manufacturer&amp;gt;Linn&amp;lt;/manufacturer&amp;gt;&lt;br /&gt;
        &amp;lt;manufacturerURL&amp;gt;http://www.linn.co.uk&amp;lt;/manufacturerURL&amp;gt;&lt;br /&gt;
        &amp;lt;modelName&amp;gt;Kazoo Server&amp;lt;/modelName&amp;gt;&lt;br /&gt;
        &amp;lt;modelURL&amp;gt;http://oss.linn.co.uk/trac/wiki/KazooServer&amp;lt;/modelURL&amp;gt;&lt;br /&gt;
        &amp;lt;UDN&amp;gt;uuid:ac3d630e37b5f11ff5cdd23c0f5a7400&amp;lt;/UDN&amp;gt;&lt;br /&gt;
        &amp;lt;iconList&amp;gt;&lt;br /&gt;
            &amp;lt;icon&amp;gt;&lt;br /&gt;
                &amp;lt;mimetype&amp;gt;image/png&amp;lt;/mimetype&amp;gt;&lt;br /&gt;
                &amp;lt;width&amp;gt;65&amp;lt;/width&amp;gt;&lt;br /&gt;
                &amp;lt;height&amp;gt;65&amp;lt;/height&amp;gt;&lt;br /&gt;
                &amp;lt;depth&amp;gt;32&amp;lt;/depth&amp;gt;&lt;br /&gt;
                &amp;lt;url&amp;gt;ac3d630e37b5f11ff5cdd23c0f5a7400/resource/icon/icon&amp;lt;/url&amp;gt;&lt;br /&gt;
            &amp;lt;/icon&amp;gt;&lt;br /&gt;
        &amp;lt;/iconList&amp;gt;&lt;br /&gt;
        &amp;lt;serviceList&amp;gt;&lt;br /&gt;
            &amp;lt;service&amp;gt;&lt;br /&gt;
                &amp;lt;serviceType&amp;gt;urn:av-openhome-org:service:PlaylistManager:1&amp;lt;/serviceType&amp;gt;&lt;br /&gt;
                &amp;lt;serviceId&amp;gt;urn:av-openhome-org:serviceId:PlaylistManager&amp;lt;/serviceId&amp;gt;&lt;br /&gt;
                &amp;lt;SCPDURL&amp;gt;/ac3d630e37b5f11ff5cdd23c0f5a7400/Upnp/av.openhome.org-PlaylistManager-1/service.xml&amp;lt;/SCPDURL&amp;gt;&lt;br /&gt;
                &amp;lt;controlURL&amp;gt;/ac3d630e37b5f11ff5cdd23c0f5a7400/av.openhome.org-PlaylistManager-1/control&amp;lt;/controlURL&amp;gt;&lt;br /&gt;
                &amp;lt;eventSubURL&amp;gt;/ac3d630e37b5f11ff5cdd23c0f5a7400/av.openhome.org-PlaylistManager-1/event&amp;lt;/eventSubURL&amp;gt;&lt;br /&gt;
            &amp;lt;/service&amp;gt;&lt;br /&gt;
            &amp;lt;service&amp;gt;&lt;br /&gt;
                &amp;lt;serviceType&amp;gt;urn:schemas-upnp-org:service:ContentDirectory:1&amp;lt;/serviceType&amp;gt;&lt;br /&gt;
                &amp;lt;serviceId&amp;gt;urn:upnp-org:serviceId:ContentDirectory&amp;lt;/serviceId&amp;gt;&lt;br /&gt;
                &amp;lt;SCPDURL&amp;gt;/ac3d630e37b5f11ff5cdd23c0f5a7400/Upnp/upnp.org-ContentDirectory-1/service.xml&amp;lt;/SCPDURL&amp;gt;&lt;br /&gt;
                &amp;lt;controlURL&amp;gt;/ac3d630e37b5f11ff5cdd23c0f5a7400/upnp.org-ContentDirectory-1/control&amp;lt;/controlURL&amp;gt;&lt;br /&gt;
                &amp;lt;eventSubURL&amp;gt;/ac3d630e37b5f11ff5cdd23c0f5a7400/upnp.org-ContentDirectory-1/event&amp;lt;/eventSubURL&amp;gt;&lt;br /&gt;
            &amp;lt;/service&amp;gt;&lt;br /&gt;
            &amp;lt;service&amp;gt;&lt;br /&gt;
                &amp;lt;serviceType&amp;gt;urn:schemas-upnp-org:service:ConnectionManager:1&amp;lt;/serviceType&amp;gt;&lt;br /&gt;
                &amp;lt;serviceId&amp;gt;urn:upnp-org:serviceId:ConnectionManager&amp;lt;/serviceId&amp;gt;&lt;br /&gt;
                &amp;lt;SCPDURL&amp;gt;/ac3d630e37b5f11ff5cdd23c0f5a7400/Upnp/upnp.org-ConnectionManager-1/service.xml&amp;lt;/SCPDURL&amp;gt;&lt;br /&gt;
                &amp;lt;controlURL&amp;gt;/ac3d630e37b5f11ff5cdd23c0f5a7400/upnp.org-ConnectionManager-1/control&amp;lt;/controlURL&amp;gt;&lt;br /&gt;
                &amp;lt;eventSubURL&amp;gt;/ac3d630e37b5f11ff5cdd23c0f5a7400/upnp.org-ConnectionManager-1/event&amp;lt;/eventSubURL&amp;gt;&lt;br /&gt;
            &amp;lt;/service&amp;gt;&lt;br /&gt;
        &amp;lt;/serviceList&amp;gt;&lt;br /&gt;
    &amp;lt;/device&amp;gt;&lt;br /&gt;
 &amp;lt;/root&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Index maps ==&lt;br /&gt;
&lt;br /&gt;
Large lists are difficult to navigate, especially on mobile devices. Mobile devices added the idea of an index map to improve this situation. The index map allows a users to jump to different sections in a large list, similar to what is possible with a scrollbar on desktops.&lt;br /&gt;
&lt;br /&gt;
In order for a control point to generate an index map for any particular level in a ContentDirectory&#039;s hierarchy it first needs to download all the objects in the container, figure out if they are sorted and then calculate the index map. This means that a user will need to wait, perhaps minutes, before an index map is able to be presented on the UI. &lt;br /&gt;
&lt;br /&gt;
The proposal is to allow the media server to calculate an index map and return it as part of the DIDL-Lite XML. Below shows some example DIDL-Lite with an index map included.&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;DIDL-Lite xmlns=&amp;quot;urn:schemas-upnp-org:metadata-1-0/DIDL-Lite/&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;container id=&amp;quot;db/ba37a2ac24efa676c8676aab71a6cdf074&amp;quot; parentID=&amp;quot;0&amp;quot; restricted=&amp;quot;true&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;dc:title xmlns:dc=&amp;quot;http://purl.org/dc/elements/1.1/&amp;quot;&amp;gt;Worlds Apart [Deluxe Edition]&amp;lt;/dc:title&amp;gt;&lt;br /&gt;
        &amp;lt;upnp:udn xmlns:upnp=&amp;quot;urn:schemas-upnp-org:metadata-1-0/upnp/&amp;quot;&amp;gt;ac3d630e37b5f11ff5cdd23c0f5a7400&amp;lt;/upnp:udn&amp;gt;&lt;br /&gt;
        &amp;lt;upnp:class xmlns:upnp=&amp;quot;urn:schemas-upnp-org:metadata-1-0/upnp/&amp;quot;&amp;gt;object.container.album.musicAlbum&amp;lt;/upnp:class&amp;gt;&lt;br /&gt;
        &amp;lt;upnp:artist xmlns:upnp=&amp;quot;urn:schemas-upnp-org:metadata-1-0/upnp/&amp;quot;&amp;gt;...And You Will Know Us by the Trail of Dead&amp;lt;/upnp:artist&amp;gt;&lt;br /&gt;
        &amp;lt;upnp:albumArtURI&amp;gt;http://10.2.1.170:4000/linn.co.uk.kazooserver/ms/artwork/37a2ac2?size=0&amp;lt;/upnp:albumArtURI&amp;gt;&lt;br /&gt;
    &amp;lt;/container&amp;gt;&lt;br /&gt;
    &amp;lt;desc nameSpace=&amp;quot;openhome.org&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;indexmap&amp;gt;&lt;br /&gt;
            &amp;lt;labels&amp;gt;# A B C D E F G H I J K L M N O P Q R S T U V W X Y Z +&amp;lt;/labels&amp;gt;&lt;br /&gt;
            &amp;lt;indices&amp;gt;0 10 20 30 40 50 60 70 80 90 100 110 120 130 140 150 160 170 180 190 200 210 220 230 240 250 260 270&amp;lt;/indices&amp;gt;&lt;br /&gt;
        &amp;lt;/indexmap&amp;gt;&lt;br /&gt;
    &amp;lt;/desc&amp;gt;&lt;br /&gt;
 &amp;lt;/DIDL-Lite&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The index map contains two, space separated, lists. These lists must contain the same number of elements. The example above is for a container who&#039;s contents are alphabetically sorted. But an index map could just as easily define a container who&#039;s contents are sorted by decade, e.g 1960 - 2015,&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;desc nameSpace=&amp;quot;openhome.org&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;indexmap&amp;gt;&lt;br /&gt;
        &amp;lt;labels&amp;gt;60 70 80 90 00 10&amp;lt;/labels&amp;gt;&lt;br /&gt;
        &amp;lt;indices&amp;gt;0 10 20 30 40 50&amp;lt;/indices&amp;gt;&lt;br /&gt;
    &amp;lt;/indexmap&amp;gt;&lt;br /&gt;
 &amp;lt;/desc&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Image Resolution ==&lt;br /&gt;
&lt;br /&gt;
Control points running on different platforms have different memory limits and display technologies. This means that a control point on a PC might want to display artwork at a high resolution, while a control point on a PDA might want to display artwork at a much lower resolution.&lt;br /&gt;
&lt;br /&gt;
Media servers often try to solve this problem using one of the following two methods:&lt;br /&gt;
&lt;br /&gt;
# A configurable parameter that scales all artwork to a user defined size&lt;br /&gt;
# A profile system where a user can create profiles for each class of control point they have and configure a parameter that scales all artwork to a user defined size per profile&lt;br /&gt;
&lt;br /&gt;
The first solution is highly problematic because it limits the resolution of artwork across the whole network. But a single network very often contains control points that can display high resolution images AND control points that can&#039;t.&lt;br /&gt;
&lt;br /&gt;
The second solution is just architecturally poor, turning the relationship between a control point and a media server on its head. Why should the media server try to infer what a control point needs through configuration when the control point is perfectly capable of telling the media server its exact requirements in every single circumstance.&lt;br /&gt;
&lt;br /&gt;
So, it is proposed that compliant media servers include a &#039;&#039;&#039;size&#039;&#039;&#039; element in their artwork uri&#039;s, where the size is the image&#039;s largest dimension. This allows a control point to ask for an image at a specified size.&lt;br /&gt;
&lt;br /&gt;
=== Example ===&lt;br /&gt;
&lt;br /&gt;
If the original artwork was 400x512, then a media server would provide the following albumArtURI: &amp;lt;uri&amp;gt;?size=512. If it is not possible for the media server to obtain the original resolution then the media server would provide the following albumArtURI: &amp;lt;uri&amp;gt;?size=0.&lt;br /&gt;
&lt;br /&gt;
The presence of the size element tells the control point:&lt;br /&gt;
&lt;br /&gt;
# the media server implements the image scaling extension&lt;br /&gt;
# the original size of the image.&lt;br /&gt;
&lt;br /&gt;
Now the control point can request the image at any resolution by using &amp;lt;uri&amp;gt;?size=x, where x is the size it wants.&lt;br /&gt;
&lt;br /&gt;
So, in this example, &amp;lt;uri&amp;gt;?size=1024 gets an 800x1024 image, and &amp;lt;uri&amp;gt;?size=200 gets a 156x200 image.&lt;br /&gt;
&lt;br /&gt;
== albumArtURI&amp;lt;br&amp;gt; ==&lt;br /&gt;
&lt;br /&gt;
The current specification only allows retrieval of artwork for a musicAlbum container through the property albumArtURI. When browsing a music library on a control point it quickly becomes clear that to implement a graphically rich control point the ContentDirectory service should provide a way to retrieve artwork for all of the content directory classes, not just musicAlbum containers.&lt;br /&gt;
&lt;br /&gt;
There has become a somewhat defacto standard where just about all media server provide an albumArtURI property for a musicItem item as well as for a musicAlbum container, however this is still not good enough to implement a graphically rich control point.&lt;br /&gt;
&lt;br /&gt;
It is proposed that an optional property is introduced to the object class called &#039;&#039;&#039;albumArtURI&#039;&#039;&amp;amp;nbsp;&#039;&#039;&#039;&#039;&#039;which may contain an attribute &#039;&#039;&#039;title&#039;&#039;&#039;,&amp;amp;nbsp;e.g. &amp;amp;lt;albumArtURI title=&amp;quot;Font Cover&amp;quot;&amp;amp;gt;http://Front Cover.jpg&amp;amp;lt;/albumArtURI&amp;amp;gt;.&amp;amp;nbsp;The object class can contain zero or more albumArtURIs elements.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Medium =&lt;br /&gt;
= Low =&lt;br /&gt;
&lt;br /&gt;
== Dynamic IP Addresses ==&lt;br /&gt;
&lt;br /&gt;
At present all media servers return URIs that contain a reference to their IP address, e.g. http://172.20.1.1/music.flac etc. This means that if the media server&#039;s IP address were to change across reboots, then any control point or media renderer with URIs that referenced the media server before the reboot will become invalid.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
It is proposed that a media server should always reference itself by host name and not by IP address in any XML that it sends to external devices, i.e. http://mynas/music.flac.&lt;br /&gt;
&lt;br /&gt;
== Disc Information ==&lt;br /&gt;
&lt;br /&gt;
It is proposed that two new properties are added to the musicTrack item called &#039;&#039;&#039;OriginalDiscNumber&#039;&#039;&#039; and &#039;&#039;&#039;OriginalDiscCount&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== Replay Gain Information ==&lt;br /&gt;
&lt;br /&gt;
It is proposed that four new properties are added to the musicTrack item called &#039;&#039;&#039;ReplayGainAlbum&#039;&#039;&#039;, &#039;&#039;&#039;ReplayGainAlbumPeak&#039;&#039;&#039;, &#039;&#039;&#039;ReplayGainTrack&#039;&#039;&#039;, and &#039;&#039;&#039;ReplayGainTrackPeak&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
== webURI ==&lt;br /&gt;
&lt;br /&gt;
The current specification does not easily allow a control point to provide rich information about objects in the browse hierarchy.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
It is proposed to add an optionally property to the object class called &#039;&#039;&#039;webURI&amp;amp;nbsp;&#039;&#039;&#039;which will contain a URI to a website that provides a rich collection of information about the object, e.g. for a musicArtist container it would provided a link to a website that provided information about the artist.&lt;/div&gt;</summary>
		<author><name>Davidd</name></author>
	</entry>
	<entry>
		<id>https://docs.linn.co.uk/wiki/index.php?title=Developer:Media_Server_Extensions&amp;diff=11184</id>
		<title>Developer:Media Server Extensions</title>
		<link rel="alternate" type="text/html" href="https://docs.linn.co.uk/wiki/index.php?title=Developer:Media_Server_Extensions&amp;diff=11184"/>
		<updated>2015-02-20T17:33:11Z</updated>

		<summary type="html">&lt;p&gt;Davidd: /* Types */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Introduction =&lt;br /&gt;
&lt;br /&gt;
The ContentDirectory service has various limitations which become apparent when implementing control points on different hardware platforms. This document aims to outline some ideas that address the various shortcomings of the ContentDirectory specification. The ideas have been categorised in low, medium and high priority groups.&lt;br /&gt;
&lt;br /&gt;
= High =&lt;br /&gt;
&lt;br /&gt;
== Container map ==&lt;br /&gt;
&lt;br /&gt;
The current ContentDirectory specification makes it tricky for a control point to display the returned contents in an appropriate, aesthetically pleasing, manner for the content being viewed. This is because the ContentDirectory specification does not allow for a control point to know in advanced what content to expect when browsing through any particular hierarchy.&lt;br /&gt;
&lt;br /&gt;
An example of this might be, at a particular point in the browse hierarchy the ContentDirectory will return a list of albums which in turn will contain a list of tracks. A UI might wish to represent this list of albums as a grid and the album&#039;s tracks as a header and a list of the tracks. Currently it is not possible for the UI to know when it gets to a point in a hierarchy where the hierarchy represents a list of albums followed by a list of tracks.&lt;br /&gt;
&lt;br /&gt;
The container map extension allows a media server to express its container hierarchy in advance of the control point navigating it. This is done using an OpenHome vendor extension to the device XML.&lt;br /&gt;
&lt;br /&gt;
Three types of mapped container are defined: browse, link, and search.&lt;br /&gt;
&lt;br /&gt;
The browse map defines named top level containers that represent significant starting points for browsing that can meaningfully be presented in top level tabs of a control point UI. The browse map is expressed within the X_MAP_BROWSE element of X_MAP.&lt;br /&gt;
&lt;br /&gt;
The link map defines containers that can be meaningfully linked to from track or album details. For instance a track will typically have an artist defined. If an entry for &amp;quot;artist&amp;quot; is defined in the link map then it will be possible for the user of a control point to quickly access this artist-related container by clicking on the track&#039;s artist text. Similar links might be offered for &amp;quot;genre&amp;quot;, &amp;quot;composer&amp;quot;, &amp;quot;conductor&amp;quot;, etc. The link map is expressed within the X_MAP_LINK element of X_MAP.&lt;br /&gt;
&lt;br /&gt;
The search map defines the different kinds of search containers and the type of results that they produce. The search map is expressed within the X_MAP_SEARCH element of X_MAP.&lt;br /&gt;
&lt;br /&gt;
=== Browse map ===&lt;br /&gt;
&lt;br /&gt;
The X_MAP_BROWSE element must contain 1 or more X_MAP_BROWSE_ENTRY elements.&lt;br /&gt;
&lt;br /&gt;
The X_MAP_BROWSE_ENTRY has three child elements.&lt;br /&gt;
&lt;br /&gt;
X_MAP_BROWSE_ENTRY_NAME is a string that can be used by a control point to label a tab containing this browse hierarchy.&lt;br /&gt;
&lt;br /&gt;
X_MAP_BROWSE_ENTRY_ID is the UPnP container id that contains the root of this browse hierarchy. This id is then submitted to the ContentDirectory service using the Browse action as usual. The returned contents are navigated using subsequent Browse request as usual. The difference is that the control point knows in advance what kind of results to expect at each level.&lt;br /&gt;
&lt;br /&gt;
X_MAP_BROWSE_ENTRY_TYPE is a space separated list of strings that maps out the kind of containers that are to be found at each level of this browse hierarchy. For instance, &amp;quot;artist album&amp;quot; represents a browse hierarchy giving a container containing only artist containers, each of which contains only album containers, each of which contains only tracks.&lt;br /&gt;
&lt;br /&gt;
There should be an X_MAP_BROWSE_ENTRY for each root browse hierarchy defined by the media server.&lt;br /&gt;
&lt;br /&gt;
For example:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;X_MAP_BROWSE_ENTRY&amp;gt;&lt;br /&gt;
     &amp;lt;X_MAP_BROWSE_ENTRY_NAME&amp;gt;Genre&amp;lt;/X_MAP_BROWSE_ENTRY_NAME&amp;gt;&lt;br /&gt;
     &amp;lt;X_MAP_BROWSE_ENTRY_ID&amp;gt;db/browse/genre&amp;lt;/X_MAP_BROWSE_ENTRY_ID&amp;gt;&lt;br /&gt;
     &amp;lt;X_MAP_BROWSE_ENTRY_TYPE&amp;gt;genre artist album&amp;lt;/X_MAP_BROWSE_ENTRY_TYPE&amp;gt;&lt;br /&gt;
 &amp;lt;/X_MAP_BROWSE_ENTRY&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Link map ===&lt;br /&gt;
&lt;br /&gt;
The X_MAP_LINK element must contain 1 or more X_MAP_LINK_ENTRY elements.&lt;br /&gt;
&lt;br /&gt;
The X_MAP_LINK_ENTRY has three child elements.&lt;br /&gt;
&lt;br /&gt;
X_MAP_LINK_ENTRY_TAG is a string that defines which type of metadata is the target for this link. e.g. &amp;quot;artist&amp;quot;, &amp;quot;genre&amp;quot;, &amp;quot;composer&amp;quot;, etc. See the type section below. &lt;br /&gt;
&lt;br /&gt;
X_MAP_LINK_ENTRY_ID_PREFIX is a string that is prefix for a UPnP container id. The link can be taken by browsing to the container whose id is the result of appending the associated metadata value to this prefix. For instance, if the prefix for an &amp;quot;artist&amp;quot; link is defined as db/link/artist/, and a track returned anywhere in the media server&#039;s library has &amp;quot;Pink Floyd&amp;quot; as its artist. Then the linked container will have an id of db/link/artist/Pink Floyd.&lt;br /&gt;
&lt;br /&gt;
X_MAP_LINK_ENTRY_TYPE represents the type of browse hierarchy returned when taking this type of link. See X_MAP_BROWSE_ENTRY_TYPE for details.&lt;br /&gt;
&lt;br /&gt;
There should be an X_MAP_LINK_ENTRY for each piece of metadata that the media server allows to be linked.&lt;br /&gt;
&lt;br /&gt;
For example:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;X_MAP_LINK_ENTRY&amp;gt;&lt;br /&gt;
     &amp;lt;X_MAP_LINK_ENTRY_TAG&amp;gt;artist&amp;lt;/X_MAP_LINK_ENTRY_TAG&amp;gt;&lt;br /&gt;
     &amp;lt;X_MAP_LINK_ENTRY_ID_PREFIX&amp;gt;db/link/artist/&amp;lt;/X_MAP_LINK_ENTRY_ID_PREFIX&amp;gt;&lt;br /&gt;
     &amp;lt;X_MAP_LINK_ENTRY_TYPE&amp;gt;album&amp;lt;/X_MAP_LINK_ENTRY_TYPE&amp;gt;&lt;br /&gt;
 &amp;lt;/X_MAP_LINK_ENTRY&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The example above defines a browse hierarchy that is created when linking from an artist name. The hierarchy created provides a list of linked artist albums which in turn provide a list of tracks.&lt;br /&gt;
&lt;br /&gt;
=== Search map ===&lt;br /&gt;
&lt;br /&gt;
The X_MAP_SEARCH element must contain 1 or more X_MAP_SEARCH_ENTRY elements.&lt;br /&gt;
&lt;br /&gt;
The X_MAP_SEARCH_ENTRY has three child elements.&lt;br /&gt;
&lt;br /&gt;
X_MAP_SEARCH_ENTRY_NAME is a string and used by a control point to label the browse hierarchy.&lt;br /&gt;
&lt;br /&gt;
X_MAP_SEARCH_ENTRY_ID_PREFIX is a string and used by a control point to start the browse of a search.&lt;br /&gt;
&lt;br /&gt;
X_MAP_SEARCH_ENTRY_TYPE is a space separated list of strings used by a control point to decide how to represent the browse hierarchy in the UI. The list of valid types is described in the Types section below.&lt;br /&gt;
&lt;br /&gt;
There should be an X_MAP_SEARCH_ENTRY for each piece of metadata that the media server allows to be linked.&lt;br /&gt;
&lt;br /&gt;
Any example of an X_MAP_SEARCH_ENTRY is shown below,&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;X_MAP_SEARCH_ENTRY&amp;gt;&lt;br /&gt;
     &amp;lt;X_MAP_SEARCH_ENTRY_NAME&amp;gt;Artist&amp;lt;/X_MAP_SEARCH_ENTRY_NAME&amp;gt;&lt;br /&gt;
     &amp;lt;X_MAP_SEARCH_ENTRY_ID_PREFIX&amp;gt;db/search/artist/&amp;lt;/X_MAP_SEARCH_ENTRY_ID_PREFIX&amp;gt;&lt;br /&gt;
     &amp;lt;X_MAP_SEARCH_ENTRY_TYPE&amp;gt;artist album&amp;lt;/X_MAP_SEARCH_ENTRY_TYPE&amp;gt;&lt;br /&gt;
 &amp;lt;/X_MAP_SEARCH_ENTRY&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The example above defines a browse hierarchy that is created when searching for an artist. The hierarchy created provides a list of artists, which in turn provide a list of albums, which in turn provide a list of tracks.&lt;br /&gt;
&lt;br /&gt;
X_MAP_SEARCH_ENTRY_NAME contains the text for a label in the UI of &amp;quot;Artists&amp;quot;&lt;br /&gt;
&lt;br /&gt;
X_MAP_SEARCH_ENTRY_ID_PREFIX contains the ID prefix to use in the ContentDirectory Browse action to obtain the list of artists. The browse ID is constructed by appending the search text to the prefix, i.e. &amp;quot;db/link/artist/&amp;lt;search text&amp;gt;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
X_MAP_SEARCH_ENTRY_TYPE contains a single entry indicating that the first level contains items that represent artists, the next level will contain albums, and the next level will contain tracks.&lt;br /&gt;
&lt;br /&gt;
=== Types ===&lt;br /&gt;
&lt;br /&gt;
The list of allowed types for X_BROWSE_ENTRY_TYPE, X_MAP_LINK_ENTRY_TAG, X_LINK_ENTRY_TYPE, and X_SEARCH_ENTRY_TYPE&lt;br /&gt;
&lt;br /&gt;
 genre&lt;br /&gt;
 artist&lt;br /&gt;
 composer&lt;br /&gt;
 conductor&lt;br /&gt;
 album&lt;br /&gt;
 year&lt;br /&gt;
 mixed&lt;br /&gt;
&lt;br /&gt;
mixed is a special value that represents a container that has mixed entries. It is not a valid type for the X_MAP_LINK_ENTRY_TAG element.&lt;br /&gt;
&lt;br /&gt;
=== Example device XML ===&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;root xmlns=&amp;quot;urn:schemas-upnp-org:device-1-0&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;specVersion&amp;gt;&lt;br /&gt;
        &amp;lt;major&amp;gt;1&amp;lt;/major&amp;gt;&lt;br /&gt;
        &amp;lt;minor&amp;gt;1&amp;lt;/minor&amp;gt;&lt;br /&gt;
    &amp;lt;/specVersion&amp;gt;&lt;br /&gt;
    &amp;lt;device&amp;gt;&lt;br /&gt;
        &amp;lt;deviceType&amp;gt;urn:schemas-upnp-org:device:MediaServer:1&amp;lt;/deviceType&amp;gt;&lt;br /&gt;
        &amp;lt;dlna:X_DLNADOC xmlns:dlna=&amp;quot;urn:schemas-dlna-org:device-1-0&amp;quot;&amp;gt;DMS-1.50&amp;lt;/dlna:X_DLNADOC&amp;gt;&lt;br /&gt;
        &amp;lt;dlna:X_DLNACAP xmlns:dlna=&amp;quot;urn:schemas-dlna-org:device-1-0&amp;quot;&amp;gt;av-upload,image-upload,audio-upload&amp;lt;/dlna:X_DLNACAP&amp;gt;&lt;br /&gt;
        &amp;lt;openhome:X_MAP xmlns:openhome=&amp;quot;http://www.openhome.org&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;X_MAP_BROWSE&amp;gt;&lt;br /&gt;
                &amp;lt;X_MAP_BROWSE_ENTRY&amp;gt;&lt;br /&gt;
                    &amp;lt;X_MAP_BROWSE_ENTRY_NAME&amp;gt;Albums&amp;lt;/X_MAP_BROWSE_ENTRY_NAME&amp;gt;&lt;br /&gt;
                    &amp;lt;X_MAP_BROWSE_ENTRY_ID&amp;gt;db/browse/albums&amp;lt;/X_MAP_BROWSE_ENTRY_ID&amp;gt;&lt;br /&gt;
                    &amp;lt;X_MAP_BROWSE_ENTRY_TYPE&amp;gt;album&amp;lt;/X_MAP_BROWSE_ENTRY_TYPE&amp;gt;&lt;br /&gt;
                &amp;lt;/X_MAP_BROWSE_ENTRY&amp;gt;&lt;br /&gt;
                &amp;lt;X_MAP_BROWSE_ENTRY&amp;gt;&lt;br /&gt;
                    &amp;lt;X_MAP_BROWSE_ENTRY_NAME&amp;gt;Artists&amp;lt;/X_MAP_BROWSE_ENTRY_NAME&amp;gt;&lt;br /&gt;
                    &amp;lt;X_MAP_BROWSE_ENTRY_ID&amp;gt;db/browse/artists&amp;lt;/X_MAP_BROWSE_ENTRY_ID&amp;gt;&lt;br /&gt;
                    &amp;lt;X_MAP_BROWSE_ENTRY_TYPE&amp;gt;artist album&amp;lt;/X_MAP_BROWSE_ENTRY_TYPE&amp;gt;&lt;br /&gt;
                &amp;lt;/X_MAP_BROWSE_ENTRY&amp;gt;&lt;br /&gt;
                &amp;lt;X_MAP_BROWSE_ENTRY&amp;gt;&lt;br /&gt;
                    &amp;lt;X_MAP_BROWSE_ENTRY_NAME&amp;gt;Folders&amp;lt;/X_MAP_BROWSE_ENTRY_NAME&amp;gt;&lt;br /&gt;
                    &amp;lt;X_MAP_BROWSE_ENTRY_ID&amp;gt;db/browse/folders&amp;lt;/X_MAP_BROWSE_ENTRY_ID&amp;gt;&lt;br /&gt;
                    &amp;lt;X_MAP_BROWSE_ENTRY_TYPE&amp;gt;mixed&amp;lt;/X_MAP_BROWSE_ENTRY_TYPE&amp;gt;&lt;br /&gt;
                &amp;lt;/X_MAP_BROWSE_ENTRY&amp;gt;&lt;br /&gt;
            &amp;lt;/X_MAP_BROWSE&amp;gt;&lt;br /&gt;
            &amp;lt;X_MAP_LINK&amp;gt;&lt;br /&gt;
                &amp;lt;X_MAP_LINK_ENTRY&amp;gt;&lt;br /&gt;
                    &amp;lt;X_MAP_LINK_ENTRY_TAG&amp;gt;artist&amp;lt;/X_MAP_LINK_ENTRY_TAG&amp;gt;&lt;br /&gt;
                    &amp;lt;X_MAP_LINK_ENTRY_ID_PREFIX&amp;gt;db/link/artist/&amp;lt;/X_MAP_LINK_ENTRY_ID_PREFIX&amp;gt;&lt;br /&gt;
                    &amp;lt;X_MAP_LINK_ENTRY_TYPE&amp;gt;album&amp;lt;/X_MAP_LINK_ENTRY_TYPE&amp;gt;&lt;br /&gt;
                &amp;lt;/X_MAP_LINK_ENTRY&amp;gt;&lt;br /&gt;
                &amp;lt;X_MAP_LINK_ENTRY&amp;gt;&lt;br /&gt;
                    &amp;lt;X_MAP_LINK_ENTRY_TAG&amp;gt;composer&amp;lt;/X_MAP_LINK_ENTRY_TAG&amp;gt;&lt;br /&gt;
                    &amp;lt;X_MAP_LINK_ENTRY_ID_PREFIX&amp;gt;db/link/composer/&amp;lt;/X_MAP_LINK_ENTRY_ID_PREFIX&amp;gt;&lt;br /&gt;
                    &amp;lt;X_MAP_LINK_ENTRY_TYPE&amp;gt;album&amp;lt;/X_MAP_LINK_ENTRY_TYPE&amp;gt;&lt;br /&gt;
                &amp;lt;/X_MAP_LINK_ENTRY&amp;gt;&lt;br /&gt;
            &amp;lt;/X_MAP_LINK&amp;gt;&lt;br /&gt;
            &amp;lt;X_MAP_SEARCH&amp;gt;&lt;br /&gt;
                &amp;lt;X_MAP_SEARCH_ENTRY&amp;gt;&lt;br /&gt;
                    &amp;lt;X_MAP_SEARCH_ENTRY_NAME&amp;gt;Artist&amp;lt;/X_MAP_SEARCH_ENTRY_NAME&amp;gt;&lt;br /&gt;
                    &amp;lt;X_MAP_SEARCH_ENTRY_ID_PREFIX&amp;gt;db/search/artist/&amp;lt;/X_MAP_SEARCH_ENTRY_ID_PREFIX&amp;gt;&lt;br /&gt;
                    &amp;lt;X_MAP_SEARCH_ENTRY_TYPE&amp;gt;artist album&amp;lt;/X_MAP_SEARCH_ENTRY_TYPE&amp;gt;&lt;br /&gt;
                &amp;lt;/X_MAP_SEARCH_ENTRY&amp;gt;&lt;br /&gt;
                &amp;lt;X_MAP_SEARCH_ENTRY&amp;gt;&lt;br /&gt;
                    &amp;lt;X_MAP_SEARCH_ENTRY_NAME&amp;gt;Tracks&amp;lt;/X_MAP_SEARCH_ENTRY_NAME&amp;gt;&lt;br /&gt;
                    &amp;lt;X_MAP_SEARCH_ENTRY_ID_PREFIX&amp;gt;db/search/all/&amp;lt;/X_MAP_SEARCH_ENTRY_ID_PREFIX&amp;gt;&lt;br /&gt;
                    &amp;lt;X_MAP_SEARCH_ENTRY_TYPE&amp;gt;&amp;lt;/X_MAP_SEARCH_ENTRY_TYPE&amp;gt;&lt;br /&gt;
                &amp;lt;/X_MAP_SEARCH_ENTRY&amp;gt;&lt;br /&gt;
            &amp;lt;/X_MAP_SEARCH&amp;gt;&lt;br /&gt;
        &amp;lt;/openhome:X_MAP&amp;gt;&lt;br /&gt;
        &amp;lt;presentationURL&amp;gt;http://10.2.1.170:4000/res/linn.co.uk.kazooserver/index.html&amp;lt;/presentationURL&amp;gt;&lt;br /&gt;
        &amp;lt;friendlyName&amp;gt;Linn Kazoo Server [R&amp;amp;D Mac Mini]&amp;lt;/friendlyName&amp;gt;&lt;br /&gt;
        &amp;lt;manufacturer&amp;gt;Linn&amp;lt;/manufacturer&amp;gt;&lt;br /&gt;
        &amp;lt;manufacturerURL&amp;gt;http://www.linn.co.uk&amp;lt;/manufacturerURL&amp;gt;&lt;br /&gt;
        &amp;lt;modelName&amp;gt;Kazoo Server&amp;lt;/modelName&amp;gt;&lt;br /&gt;
        &amp;lt;modelURL&amp;gt;http://oss.linn.co.uk/trac/wiki/KazooServer&amp;lt;/modelURL&amp;gt;&lt;br /&gt;
        &amp;lt;UDN&amp;gt;uuid:ac3d630e37b5f11ff5cdd23c0f5a7400&amp;lt;/UDN&amp;gt;&lt;br /&gt;
        &amp;lt;iconList&amp;gt;&lt;br /&gt;
            &amp;lt;icon&amp;gt;&lt;br /&gt;
                &amp;lt;mimetype&amp;gt;image/png&amp;lt;/mimetype&amp;gt;&lt;br /&gt;
                &amp;lt;width&amp;gt;65&amp;lt;/width&amp;gt;&lt;br /&gt;
                &amp;lt;height&amp;gt;65&amp;lt;/height&amp;gt;&lt;br /&gt;
                &amp;lt;depth&amp;gt;32&amp;lt;/depth&amp;gt;&lt;br /&gt;
                &amp;lt;url&amp;gt;ac3d630e37b5f11ff5cdd23c0f5a7400/resource/icon/icon&amp;lt;/url&amp;gt;&lt;br /&gt;
            &amp;lt;/icon&amp;gt;&lt;br /&gt;
        &amp;lt;/iconList&amp;gt;&lt;br /&gt;
        &amp;lt;serviceList&amp;gt;&lt;br /&gt;
            &amp;lt;service&amp;gt;&lt;br /&gt;
                &amp;lt;serviceType&amp;gt;urn:av-openhome-org:service:PlaylistManager:1&amp;lt;/serviceType&amp;gt;&lt;br /&gt;
                &amp;lt;serviceId&amp;gt;urn:av-openhome-org:serviceId:PlaylistManager&amp;lt;/serviceId&amp;gt;&lt;br /&gt;
                &amp;lt;SCPDURL&amp;gt;/ac3d630e37b5f11ff5cdd23c0f5a7400/Upnp/av.openhome.org-PlaylistManager-1/service.xml&amp;lt;/SCPDURL&amp;gt;&lt;br /&gt;
                &amp;lt;controlURL&amp;gt;/ac3d630e37b5f11ff5cdd23c0f5a7400/av.openhome.org-PlaylistManager-1/control&amp;lt;/controlURL&amp;gt;&lt;br /&gt;
                &amp;lt;eventSubURL&amp;gt;/ac3d630e37b5f11ff5cdd23c0f5a7400/av.openhome.org-PlaylistManager-1/event&amp;lt;/eventSubURL&amp;gt;&lt;br /&gt;
            &amp;lt;/service&amp;gt;&lt;br /&gt;
            &amp;lt;service&amp;gt;&lt;br /&gt;
                &amp;lt;serviceType&amp;gt;urn:schemas-upnp-org:service:ContentDirectory:1&amp;lt;/serviceType&amp;gt;&lt;br /&gt;
                &amp;lt;serviceId&amp;gt;urn:upnp-org:serviceId:ContentDirectory&amp;lt;/serviceId&amp;gt;&lt;br /&gt;
                &amp;lt;SCPDURL&amp;gt;/ac3d630e37b5f11ff5cdd23c0f5a7400/Upnp/upnp.org-ContentDirectory-1/service.xml&amp;lt;/SCPDURL&amp;gt;&lt;br /&gt;
                &amp;lt;controlURL&amp;gt;/ac3d630e37b5f11ff5cdd23c0f5a7400/upnp.org-ContentDirectory-1/control&amp;lt;/controlURL&amp;gt;&lt;br /&gt;
                &amp;lt;eventSubURL&amp;gt;/ac3d630e37b5f11ff5cdd23c0f5a7400/upnp.org-ContentDirectory-1/event&amp;lt;/eventSubURL&amp;gt;&lt;br /&gt;
            &amp;lt;/service&amp;gt;&lt;br /&gt;
            &amp;lt;service&amp;gt;&lt;br /&gt;
                &amp;lt;serviceType&amp;gt;urn:schemas-upnp-org:service:ConnectionManager:1&amp;lt;/serviceType&amp;gt;&lt;br /&gt;
                &amp;lt;serviceId&amp;gt;urn:upnp-org:serviceId:ConnectionManager&amp;lt;/serviceId&amp;gt;&lt;br /&gt;
                &amp;lt;SCPDURL&amp;gt;/ac3d630e37b5f11ff5cdd23c0f5a7400/Upnp/upnp.org-ConnectionManager-1/service.xml&amp;lt;/SCPDURL&amp;gt;&lt;br /&gt;
                &amp;lt;controlURL&amp;gt;/ac3d630e37b5f11ff5cdd23c0f5a7400/upnp.org-ConnectionManager-1/control&amp;lt;/controlURL&amp;gt;&lt;br /&gt;
                &amp;lt;eventSubURL&amp;gt;/ac3d630e37b5f11ff5cdd23c0f5a7400/upnp.org-ConnectionManager-1/event&amp;lt;/eventSubURL&amp;gt;&lt;br /&gt;
            &amp;lt;/service&amp;gt;&lt;br /&gt;
        &amp;lt;/serviceList&amp;gt;&lt;br /&gt;
    &amp;lt;/device&amp;gt;&lt;br /&gt;
 &amp;lt;/root&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Index maps ==&lt;br /&gt;
&lt;br /&gt;
Large lists are difficult to navigate, especially on mobile devices. Mobile devices added the idea of an index map to improve this situation. The index map allows a users to jump to different sections in a large list, similar to what is possible with a scrollbar on desktops.&lt;br /&gt;
&lt;br /&gt;
In order for a control point to generate an index map for any particular level in a ContentDirectory&#039;s hierarchy it first needs to download all the objects in the container, figure out if they are sorted and then calculate the index map. This means that a user will need to wait, perhaps minutes, before an index map is able to be presented on the UI. &lt;br /&gt;
&lt;br /&gt;
The proposal is to allow the media server to calculate an index map and return it as part of the DIDL-Lite XML. Below shows some example DIDL-Lite with an index map included.&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;DIDL-Lite xmlns=&amp;quot;urn:schemas-upnp-org:metadata-1-0/DIDL-Lite/&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;container id=&amp;quot;db/ba37a2ac24efa676c8676aab71a6cdf074&amp;quot; parentID=&amp;quot;0&amp;quot; restricted=&amp;quot;true&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;dc:title xmlns:dc=&amp;quot;http://purl.org/dc/elements/1.1/&amp;quot;&amp;gt;Worlds Apart [Deluxe Edition]&amp;lt;/dc:title&amp;gt;&lt;br /&gt;
        &amp;lt;upnp:udn xmlns:upnp=&amp;quot;urn:schemas-upnp-org:metadata-1-0/upnp/&amp;quot;&amp;gt;ac3d630e37b5f11ff5cdd23c0f5a7400&amp;lt;/upnp:udn&amp;gt;&lt;br /&gt;
        &amp;lt;upnp:class xmlns:upnp=&amp;quot;urn:schemas-upnp-org:metadata-1-0/upnp/&amp;quot;&amp;gt;object.container.album.musicAlbum&amp;lt;/upnp:class&amp;gt;&lt;br /&gt;
        &amp;lt;upnp:artist xmlns:upnp=&amp;quot;urn:schemas-upnp-org:metadata-1-0/upnp/&amp;quot;&amp;gt;...And You Will Know Us by the Trail of Dead&amp;lt;/upnp:artist&amp;gt;&lt;br /&gt;
        &amp;lt;upnp:albumArtURI&amp;gt;http://10.2.1.170:4000/linn.co.uk.kazooserver/ms/artwork/37a2ac2?size=0&amp;lt;/upnp:albumArtURI&amp;gt;&lt;br /&gt;
    &amp;lt;/container&amp;gt;&lt;br /&gt;
    &amp;lt;desc nameSpace=&amp;quot;openhome.org&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;indexmap&amp;gt;&lt;br /&gt;
            &amp;lt;labels&amp;gt;# A B C D E F G H I J K L M N O P Q R S T U V W X Y Z +&amp;lt;/labels&amp;gt;&lt;br /&gt;
            &amp;lt;indices&amp;gt;0 10 20 30 40 50 60 70 80 90 100 110 120 130 140 150 160 170 180 190 200 210 220 230 240 250 260 270&amp;lt;/indices&amp;gt;&lt;br /&gt;
        &amp;lt;/indexmap&amp;gt;&lt;br /&gt;
    &amp;lt;/desc&amp;gt;&lt;br /&gt;
 &amp;lt;/DIDL-Lite&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The index map contains two, space separated, lists. These lists must contain the same number of elements. The example above is for a container who&#039;s contents are alphabetically sorted. But an index map could just as easily define a container who&#039;s contents are sorted by decade, e.g 1960 - 2015,&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;desc nameSpace=&amp;quot;openhome.org&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;indexmap&amp;gt;&lt;br /&gt;
        &amp;lt;labels&amp;gt;60 70 80 90 00 10&amp;lt;/labels&amp;gt;&lt;br /&gt;
        &amp;lt;indices&amp;gt;0 10 20 30 40 50&amp;lt;/indices&amp;gt;&lt;br /&gt;
    &amp;lt;/indexmap&amp;gt;&lt;br /&gt;
 &amp;lt;/desc&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Image Resolution ==&lt;br /&gt;
&lt;br /&gt;
Control points running on different platforms have different memory limits and display technologies. This means that a control point on a PC might want to display artwork at a high resolution, while a control point on a PDA might want to display artwork at a much lower resolution.&lt;br /&gt;
&lt;br /&gt;
Media servers often try to solve this problem using one of the following two methods:&lt;br /&gt;
&lt;br /&gt;
# A configurable parameter that scales all artwork to a user defined size&lt;br /&gt;
# A profile system where a user can create profiles for each class of control point they have and configure a parameter that scales all artwork to a user defined size per profile&lt;br /&gt;
&lt;br /&gt;
The first solution is highly problematic because it limits the resolution of artwork across the whole network. But a single network very often contains control points that can display high resolution images AND control points that can&#039;t.&lt;br /&gt;
&lt;br /&gt;
The second solution is just architecturally poor, turning the relationship between a control point and a media server on its head. Why should the media server try to infer what a control point needs through configuration when the control point is perfectly capable of telling the media server its exact requirements in every single circumstance.&lt;br /&gt;
&lt;br /&gt;
So, it is proposed that compliant media servers include a &#039;&#039;&#039;size&#039;&#039;&#039; element in their artwork uri&#039;s, where the size is the image&#039;s largest dimension. This allows a control point to ask for an image at a specified size.&lt;br /&gt;
&lt;br /&gt;
=== Example ===&lt;br /&gt;
&lt;br /&gt;
If the original artwork was 400x512, then a media server would provide the following albumArtURI: &amp;lt;uri&amp;gt;?size=512. If it is not possible for the media server to obtain the original resolution then the media server would provide the following albumArtURI: &amp;lt;uri&amp;gt;?size=0.&lt;br /&gt;
&lt;br /&gt;
The presence of the size element tells the control point:&lt;br /&gt;
&lt;br /&gt;
# the media server implements the image scaling extension&lt;br /&gt;
# the original size of the image.&lt;br /&gt;
&lt;br /&gt;
Now the control point can request the image at any resolution by using &amp;lt;uri&amp;gt;?size=x, where x is the size it wants.&lt;br /&gt;
&lt;br /&gt;
So, in this example, &amp;lt;uri&amp;gt;?size=1024 gets an 800x1024 image, and &amp;lt;uri&amp;gt;?size=200 gets a 156x200 image.&lt;br /&gt;
&lt;br /&gt;
== albumArtURI&amp;lt;br&amp;gt; ==&lt;br /&gt;
&lt;br /&gt;
The current specification only allows retrieval of artwork for a musicAlbum container through the property albumArtURI. When browsing a music library on a control point it quickly becomes clear that to implement a graphically rich control point the ContentDirectory service should provide a way to retrieve artwork for all of the content directory classes, not just musicAlbum containers.&lt;br /&gt;
&lt;br /&gt;
There has become a somewhat defacto standard where just about all media server provide an albumArtURI property for a musicItem item as well as for a musicAlbum container, however this is still not good enough to implement a graphically rich control point.&lt;br /&gt;
&lt;br /&gt;
It is proposed that an optional property is introduced to the object class called &#039;&#039;&#039;albumArtURI&#039;&#039;&amp;amp;nbsp;&#039;&#039;&#039;&#039;&#039;which may contain an attribute &#039;&#039;&#039;title&#039;&#039;&#039;,&amp;amp;nbsp;e.g. &amp;amp;lt;albumArtURI title=&amp;quot;Font Cover&amp;quot;&amp;amp;gt;http://Front Cover.jpg&amp;amp;lt;/albumArtURI&amp;amp;gt;.&amp;amp;nbsp;The object class can contain zero or more albumArtURIs elements.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Medium =&lt;br /&gt;
= Low =&lt;br /&gt;
&lt;br /&gt;
== Dynamic IP Addresses ==&lt;br /&gt;
&lt;br /&gt;
At present all media servers return URIs that contain a reference to their IP address, e.g. http://172.20.1.1/music.flac etc. This means that if the media server&#039;s IP address were to change across reboots, then any control point or media renderer with URIs that referenced the media server before the reboot will become invalid.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
It is proposed that a media server should always reference itself by host name and not by IP address in any XML that it sends to external devices, i.e. http://mynas/music.flac.&lt;br /&gt;
&lt;br /&gt;
== Disc Information ==&lt;br /&gt;
&lt;br /&gt;
It is proposed that two new properties are added to the musicTrack item called &#039;&#039;&#039;OriginalDiscNumber&#039;&#039;&#039; and &#039;&#039;&#039;OriginalDiscCount&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== Replay Gain Information ==&lt;br /&gt;
&lt;br /&gt;
It is proposed that four new properties are added to the musicTrack item called &#039;&#039;&#039;ReplayGainAlbum&#039;&#039;&#039;, &#039;&#039;&#039;ReplayGainAlbumPeak&#039;&#039;&#039;, &#039;&#039;&#039;ReplayGainTrack&#039;&#039;&#039;, and &#039;&#039;&#039;ReplayGainTrackPeak&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
== webURI ==&lt;br /&gt;
&lt;br /&gt;
The current specification does not easily allow a control point to provide rich information about objects in the browse hierarchy.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
It is proposed to add an optionally property to the object class called &#039;&#039;&#039;webURI&amp;amp;nbsp;&#039;&#039;&#039;which will contain a URI to a website that provides a rich collection of information about the object, e.g. for a musicArtist container it would provided a link to a website that provided information about the artist.&lt;/div&gt;</summary>
		<author><name>Davidd</name></author>
	</entry>
	<entry>
		<id>https://docs.linn.co.uk/wiki/index.php?title=Developer:Media_Server_Extensions&amp;diff=11183</id>
		<title>Developer:Media Server Extensions</title>
		<link rel="alternate" type="text/html" href="https://docs.linn.co.uk/wiki/index.php?title=Developer:Media_Server_Extensions&amp;diff=11183"/>
		<updated>2015-02-20T17:31:01Z</updated>

		<summary type="html">&lt;p&gt;Davidd: /* Link map */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Introduction =&lt;br /&gt;
&lt;br /&gt;
The ContentDirectory service has various limitations which become apparent when implementing control points on different hardware platforms. This document aims to outline some ideas that address the various shortcomings of the ContentDirectory specification. The ideas have been categorised in low, medium and high priority groups.&lt;br /&gt;
&lt;br /&gt;
= High =&lt;br /&gt;
&lt;br /&gt;
== Container map ==&lt;br /&gt;
&lt;br /&gt;
The current ContentDirectory specification makes it tricky for a control point to display the returned contents in an appropriate, aesthetically pleasing, manner for the content being viewed. This is because the ContentDirectory specification does not allow for a control point to know in advanced what content to expect when browsing through any particular hierarchy.&lt;br /&gt;
&lt;br /&gt;
An example of this might be, at a particular point in the browse hierarchy the ContentDirectory will return a list of albums which in turn will contain a list of tracks. A UI might wish to represent this list of albums as a grid and the album&#039;s tracks as a header and a list of the tracks. Currently it is not possible for the UI to know when it gets to a point in a hierarchy where the hierarchy represents a list of albums followed by a list of tracks.&lt;br /&gt;
&lt;br /&gt;
The container map extension allows a media server to express its container hierarchy in advance of the control point navigating it. This is done using an OpenHome vendor extension to the device XML.&lt;br /&gt;
&lt;br /&gt;
Three types of mapped container are defined: browse, link, and search.&lt;br /&gt;
&lt;br /&gt;
The browse map defines named top level containers that represent significant starting points for browsing that can meaningfully be presented in top level tabs of a control point UI. The browse map is expressed within the X_MAP_BROWSE element of X_MAP.&lt;br /&gt;
&lt;br /&gt;
The link map defines containers that can be meaningfully linked to from track or album details. For instance a track will typically have an artist defined. If an entry for &amp;quot;artist&amp;quot; is defined in the link map then it will be possible for the user of a control point to quickly access this artist-related container by clicking on the track&#039;s artist text. Similar links might be offered for &amp;quot;genre&amp;quot;, &amp;quot;composer&amp;quot;, &amp;quot;conductor&amp;quot;, etc. The link map is expressed within the X_MAP_LINK element of X_MAP.&lt;br /&gt;
&lt;br /&gt;
The search map defines the different kinds of search containers and the type of results that they produce. The search map is expressed within the X_MAP_SEARCH element of X_MAP.&lt;br /&gt;
&lt;br /&gt;
=== Browse map ===&lt;br /&gt;
&lt;br /&gt;
The X_MAP_BROWSE element must contain 1 or more X_MAP_BROWSE_ENTRY elements.&lt;br /&gt;
&lt;br /&gt;
The X_MAP_BROWSE_ENTRY has three child elements.&lt;br /&gt;
&lt;br /&gt;
X_MAP_BROWSE_ENTRY_NAME is a string that can be used by a control point to label a tab containing this browse hierarchy.&lt;br /&gt;
&lt;br /&gt;
X_MAP_BROWSE_ENTRY_ID is the UPnP container id that contains the root of this browse hierarchy. This id is then submitted to the ContentDirectory service using the Browse action as usual. The returned contents are navigated using subsequent Browse request as usual. The difference is that the control point knows in advance what kind of results to expect at each level.&lt;br /&gt;
&lt;br /&gt;
X_MAP_BROWSE_ENTRY_TYPE is a space separated list of strings that maps out the kind of containers that are to be found at each level of this browse hierarchy. For instance, &amp;quot;artist album&amp;quot; represents a browse hierarchy giving a container containing only artist containers, each of which contains only album containers, each of which contains only tracks.&lt;br /&gt;
&lt;br /&gt;
There should be an X_MAP_BROWSE_ENTRY for each root browse hierarchy defined by the media server.&lt;br /&gt;
&lt;br /&gt;
For example:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;X_MAP_BROWSE_ENTRY&amp;gt;&lt;br /&gt;
     &amp;lt;X_MAP_BROWSE_ENTRY_NAME&amp;gt;Genre&amp;lt;/X_MAP_BROWSE_ENTRY_NAME&amp;gt;&lt;br /&gt;
     &amp;lt;X_MAP_BROWSE_ENTRY_ID&amp;gt;db/browse/genre&amp;lt;/X_MAP_BROWSE_ENTRY_ID&amp;gt;&lt;br /&gt;
     &amp;lt;X_MAP_BROWSE_ENTRY_TYPE&amp;gt;genre artist album&amp;lt;/X_MAP_BROWSE_ENTRY_TYPE&amp;gt;&lt;br /&gt;
 &amp;lt;/X_MAP_BROWSE_ENTRY&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Link map ===&lt;br /&gt;
&lt;br /&gt;
The X_MAP_LINK element must contain 1 or more X_MAP_LINK_ENTRY elements.&lt;br /&gt;
&lt;br /&gt;
The X_MAP_LINK_ENTRY has three child elements.&lt;br /&gt;
&lt;br /&gt;
X_MAP_LINK_ENTRY_TAG is a string that defines which type of metadata is the target for this link. e.g. &amp;quot;artist&amp;quot;, &amp;quot;genre&amp;quot;, &amp;quot;composer&amp;quot;, etc. See the type section below. &lt;br /&gt;
&lt;br /&gt;
X_MAP_LINK_ENTRY_ID_PREFIX is a string that is prefix for a UPnP container id. The link can be taken by browsing to the container whose id is the result of appending the associated metadata value to this prefix. For instance, if the prefix for an &amp;quot;artist&amp;quot; link is defined as db/link/artist/, and a track returned anywhere in the media server&#039;s library has &amp;quot;Pink Floyd&amp;quot; as its artist. Then the linked container will have an id of db/link/artist/Pink Floyd.&lt;br /&gt;
&lt;br /&gt;
X_MAP_LINK_ENTRY_TYPE represents the type of browse hierarchy returned when taking this type of link. See X_MAP_BROWSE_ENTRY_TYPE for details.&lt;br /&gt;
&lt;br /&gt;
There should be an X_MAP_LINK_ENTRY for each piece of metadata that the media server allows to be linked.&lt;br /&gt;
&lt;br /&gt;
For example:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;X_MAP_LINK_ENTRY&amp;gt;&lt;br /&gt;
     &amp;lt;X_MAP_LINK_ENTRY_TAG&amp;gt;artist&amp;lt;/X_MAP_LINK_ENTRY_TAG&amp;gt;&lt;br /&gt;
     &amp;lt;X_MAP_LINK_ENTRY_ID_PREFIX&amp;gt;db/link/artist/&amp;lt;/X_MAP_LINK_ENTRY_ID_PREFIX&amp;gt;&lt;br /&gt;
     &amp;lt;X_MAP_LINK_ENTRY_TYPE&amp;gt;album&amp;lt;/X_MAP_LINK_ENTRY_TYPE&amp;gt;&lt;br /&gt;
 &amp;lt;/X_MAP_LINK_ENTRY&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The example above defines a browse hierarchy that is created when linking from an artist name. The hierarchy created provides a list of linked artist albums which in turn provide a list of tracks.&lt;br /&gt;
&lt;br /&gt;
=== Search map ===&lt;br /&gt;
&lt;br /&gt;
The X_MAP_SEARCH element must contain 1 or more X_MAP_SEARCH_ENTRY elements.&lt;br /&gt;
&lt;br /&gt;
The X_MAP_SEARCH_ENTRY has three child elements.&lt;br /&gt;
&lt;br /&gt;
X_MAP_SEARCH_ENTRY_NAME is a string and used by a control point to label the browse hierarchy.&lt;br /&gt;
&lt;br /&gt;
X_MAP_SEARCH_ENTRY_ID_PREFIX is a string and used by a control point to start the browse of a search.&lt;br /&gt;
&lt;br /&gt;
X_MAP_SEARCH_ENTRY_TYPE is a space separated list of strings used by a control point to decide how to represent the browse hierarchy in the UI. The list of valid types is described in the Types section below.&lt;br /&gt;
&lt;br /&gt;
There should be an X_MAP_SEARCH_ENTRY for each piece of metadata that the media server allows to be linked.&lt;br /&gt;
&lt;br /&gt;
Any example of an X_MAP_SEARCH_ENTRY is shown below,&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;X_MAP_SEARCH_ENTRY&amp;gt;&lt;br /&gt;
     &amp;lt;X_MAP_SEARCH_ENTRY_NAME&amp;gt;Artist&amp;lt;/X_MAP_SEARCH_ENTRY_NAME&amp;gt;&lt;br /&gt;
     &amp;lt;X_MAP_SEARCH_ENTRY_ID_PREFIX&amp;gt;db/search/artist/&amp;lt;/X_MAP_SEARCH_ENTRY_ID_PREFIX&amp;gt;&lt;br /&gt;
     &amp;lt;X_MAP_SEARCH_ENTRY_TYPE&amp;gt;artist album&amp;lt;/X_MAP_SEARCH_ENTRY_TYPE&amp;gt;&lt;br /&gt;
 &amp;lt;/X_MAP_SEARCH_ENTRY&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The example above defines a browse hierarchy that is created when searching for an artist. The hierarchy created provides a list of artists, which in turn provide a list of albums, which in turn provide a list of tracks.&lt;br /&gt;
&lt;br /&gt;
X_MAP_SEARCH_ENTRY_NAME contains the text for a label in the UI of &amp;quot;Artists&amp;quot;&lt;br /&gt;
&lt;br /&gt;
X_MAP_SEARCH_ENTRY_ID_PREFIX contains the ID prefix to use in the ContentDirectory Browse action to obtain the list of artists. The browse ID is constructed by appending the search text to the prefix, i.e. &amp;quot;db/link/artist/&amp;lt;search text&amp;gt;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
X_MAP_SEARCH_ENTRY_TYPE contains a single entry indicating that the first level contains items that represent artists, the next level will contain albums, and the next level will contain tracks.&lt;br /&gt;
&lt;br /&gt;
=== Types ===&lt;br /&gt;
&lt;br /&gt;
The list of allowed types for X_BROWSE_ENTRY_TYPE, X_MAP_LINK_ENTRY_TAG, X_LINK_ENTRY_TYPE, and X_SEARCH_ENTRY_TYPE&lt;br /&gt;
&lt;br /&gt;
 genre&lt;br /&gt;
 artist&lt;br /&gt;
 composer&lt;br /&gt;
 conductor&lt;br /&gt;
 album&lt;br /&gt;
 year&lt;br /&gt;
 mixed&lt;br /&gt;
&lt;br /&gt;
mixed is a special value that represents a container that has mixed entries.&lt;br /&gt;
&lt;br /&gt;
=== Example device XML ===&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;root xmlns=&amp;quot;urn:schemas-upnp-org:device-1-0&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;specVersion&amp;gt;&lt;br /&gt;
        &amp;lt;major&amp;gt;1&amp;lt;/major&amp;gt;&lt;br /&gt;
        &amp;lt;minor&amp;gt;1&amp;lt;/minor&amp;gt;&lt;br /&gt;
    &amp;lt;/specVersion&amp;gt;&lt;br /&gt;
    &amp;lt;device&amp;gt;&lt;br /&gt;
        &amp;lt;deviceType&amp;gt;urn:schemas-upnp-org:device:MediaServer:1&amp;lt;/deviceType&amp;gt;&lt;br /&gt;
        &amp;lt;dlna:X_DLNADOC xmlns:dlna=&amp;quot;urn:schemas-dlna-org:device-1-0&amp;quot;&amp;gt;DMS-1.50&amp;lt;/dlna:X_DLNADOC&amp;gt;&lt;br /&gt;
        &amp;lt;dlna:X_DLNACAP xmlns:dlna=&amp;quot;urn:schemas-dlna-org:device-1-0&amp;quot;&amp;gt;av-upload,image-upload,audio-upload&amp;lt;/dlna:X_DLNACAP&amp;gt;&lt;br /&gt;
        &amp;lt;openhome:X_MAP xmlns:openhome=&amp;quot;http://www.openhome.org&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;X_MAP_BROWSE&amp;gt;&lt;br /&gt;
                &amp;lt;X_MAP_BROWSE_ENTRY&amp;gt;&lt;br /&gt;
                    &amp;lt;X_MAP_BROWSE_ENTRY_NAME&amp;gt;Albums&amp;lt;/X_MAP_BROWSE_ENTRY_NAME&amp;gt;&lt;br /&gt;
                    &amp;lt;X_MAP_BROWSE_ENTRY_ID&amp;gt;db/browse/albums&amp;lt;/X_MAP_BROWSE_ENTRY_ID&amp;gt;&lt;br /&gt;
                    &amp;lt;X_MAP_BROWSE_ENTRY_TYPE&amp;gt;album&amp;lt;/X_MAP_BROWSE_ENTRY_TYPE&amp;gt;&lt;br /&gt;
                &amp;lt;/X_MAP_BROWSE_ENTRY&amp;gt;&lt;br /&gt;
                &amp;lt;X_MAP_BROWSE_ENTRY&amp;gt;&lt;br /&gt;
                    &amp;lt;X_MAP_BROWSE_ENTRY_NAME&amp;gt;Artists&amp;lt;/X_MAP_BROWSE_ENTRY_NAME&amp;gt;&lt;br /&gt;
                    &amp;lt;X_MAP_BROWSE_ENTRY_ID&amp;gt;db/browse/artists&amp;lt;/X_MAP_BROWSE_ENTRY_ID&amp;gt;&lt;br /&gt;
                    &amp;lt;X_MAP_BROWSE_ENTRY_TYPE&amp;gt;artist album&amp;lt;/X_MAP_BROWSE_ENTRY_TYPE&amp;gt;&lt;br /&gt;
                &amp;lt;/X_MAP_BROWSE_ENTRY&amp;gt;&lt;br /&gt;
                &amp;lt;X_MAP_BROWSE_ENTRY&amp;gt;&lt;br /&gt;
                    &amp;lt;X_MAP_BROWSE_ENTRY_NAME&amp;gt;Folders&amp;lt;/X_MAP_BROWSE_ENTRY_NAME&amp;gt;&lt;br /&gt;
                    &amp;lt;X_MAP_BROWSE_ENTRY_ID&amp;gt;db/browse/folders&amp;lt;/X_MAP_BROWSE_ENTRY_ID&amp;gt;&lt;br /&gt;
                    &amp;lt;X_MAP_BROWSE_ENTRY_TYPE&amp;gt;mixed&amp;lt;/X_MAP_BROWSE_ENTRY_TYPE&amp;gt;&lt;br /&gt;
                &amp;lt;/X_MAP_BROWSE_ENTRY&amp;gt;&lt;br /&gt;
            &amp;lt;/X_MAP_BROWSE&amp;gt;&lt;br /&gt;
            &amp;lt;X_MAP_LINK&amp;gt;&lt;br /&gt;
                &amp;lt;X_MAP_LINK_ENTRY&amp;gt;&lt;br /&gt;
                    &amp;lt;X_MAP_LINK_ENTRY_TAG&amp;gt;artist&amp;lt;/X_MAP_LINK_ENTRY_TAG&amp;gt;&lt;br /&gt;
                    &amp;lt;X_MAP_LINK_ENTRY_ID_PREFIX&amp;gt;db/link/artist/&amp;lt;/X_MAP_LINK_ENTRY_ID_PREFIX&amp;gt;&lt;br /&gt;
                    &amp;lt;X_MAP_LINK_ENTRY_TYPE&amp;gt;album&amp;lt;/X_MAP_LINK_ENTRY_TYPE&amp;gt;&lt;br /&gt;
                &amp;lt;/X_MAP_LINK_ENTRY&amp;gt;&lt;br /&gt;
                &amp;lt;X_MAP_LINK_ENTRY&amp;gt;&lt;br /&gt;
                    &amp;lt;X_MAP_LINK_ENTRY_TAG&amp;gt;composer&amp;lt;/X_MAP_LINK_ENTRY_TAG&amp;gt;&lt;br /&gt;
                    &amp;lt;X_MAP_LINK_ENTRY_ID_PREFIX&amp;gt;db/link/composer/&amp;lt;/X_MAP_LINK_ENTRY_ID_PREFIX&amp;gt;&lt;br /&gt;
                    &amp;lt;X_MAP_LINK_ENTRY_TYPE&amp;gt;album&amp;lt;/X_MAP_LINK_ENTRY_TYPE&amp;gt;&lt;br /&gt;
                &amp;lt;/X_MAP_LINK_ENTRY&amp;gt;&lt;br /&gt;
            &amp;lt;/X_MAP_LINK&amp;gt;&lt;br /&gt;
            &amp;lt;X_MAP_SEARCH&amp;gt;&lt;br /&gt;
                &amp;lt;X_MAP_SEARCH_ENTRY&amp;gt;&lt;br /&gt;
                    &amp;lt;X_MAP_SEARCH_ENTRY_NAME&amp;gt;Artist&amp;lt;/X_MAP_SEARCH_ENTRY_NAME&amp;gt;&lt;br /&gt;
                    &amp;lt;X_MAP_SEARCH_ENTRY_ID_PREFIX&amp;gt;db/search/artist/&amp;lt;/X_MAP_SEARCH_ENTRY_ID_PREFIX&amp;gt;&lt;br /&gt;
                    &amp;lt;X_MAP_SEARCH_ENTRY_TYPE&amp;gt;artist album&amp;lt;/X_MAP_SEARCH_ENTRY_TYPE&amp;gt;&lt;br /&gt;
                &amp;lt;/X_MAP_SEARCH_ENTRY&amp;gt;&lt;br /&gt;
                &amp;lt;X_MAP_SEARCH_ENTRY&amp;gt;&lt;br /&gt;
                    &amp;lt;X_MAP_SEARCH_ENTRY_NAME&amp;gt;Tracks&amp;lt;/X_MAP_SEARCH_ENTRY_NAME&amp;gt;&lt;br /&gt;
                    &amp;lt;X_MAP_SEARCH_ENTRY_ID_PREFIX&amp;gt;db/search/all/&amp;lt;/X_MAP_SEARCH_ENTRY_ID_PREFIX&amp;gt;&lt;br /&gt;
                    &amp;lt;X_MAP_SEARCH_ENTRY_TYPE&amp;gt;&amp;lt;/X_MAP_SEARCH_ENTRY_TYPE&amp;gt;&lt;br /&gt;
                &amp;lt;/X_MAP_SEARCH_ENTRY&amp;gt;&lt;br /&gt;
            &amp;lt;/X_MAP_SEARCH&amp;gt;&lt;br /&gt;
        &amp;lt;/openhome:X_MAP&amp;gt;&lt;br /&gt;
        &amp;lt;presentationURL&amp;gt;http://10.2.1.170:4000/res/linn.co.uk.kazooserver/index.html&amp;lt;/presentationURL&amp;gt;&lt;br /&gt;
        &amp;lt;friendlyName&amp;gt;Linn Kazoo Server [R&amp;amp;D Mac Mini]&amp;lt;/friendlyName&amp;gt;&lt;br /&gt;
        &amp;lt;manufacturer&amp;gt;Linn&amp;lt;/manufacturer&amp;gt;&lt;br /&gt;
        &amp;lt;manufacturerURL&amp;gt;http://www.linn.co.uk&amp;lt;/manufacturerURL&amp;gt;&lt;br /&gt;
        &amp;lt;modelName&amp;gt;Kazoo Server&amp;lt;/modelName&amp;gt;&lt;br /&gt;
        &amp;lt;modelURL&amp;gt;http://oss.linn.co.uk/trac/wiki/KazooServer&amp;lt;/modelURL&amp;gt;&lt;br /&gt;
        &amp;lt;UDN&amp;gt;uuid:ac3d630e37b5f11ff5cdd23c0f5a7400&amp;lt;/UDN&amp;gt;&lt;br /&gt;
        &amp;lt;iconList&amp;gt;&lt;br /&gt;
            &amp;lt;icon&amp;gt;&lt;br /&gt;
                &amp;lt;mimetype&amp;gt;image/png&amp;lt;/mimetype&amp;gt;&lt;br /&gt;
                &amp;lt;width&amp;gt;65&amp;lt;/width&amp;gt;&lt;br /&gt;
                &amp;lt;height&amp;gt;65&amp;lt;/height&amp;gt;&lt;br /&gt;
                &amp;lt;depth&amp;gt;32&amp;lt;/depth&amp;gt;&lt;br /&gt;
                &amp;lt;url&amp;gt;ac3d630e37b5f11ff5cdd23c0f5a7400/resource/icon/icon&amp;lt;/url&amp;gt;&lt;br /&gt;
            &amp;lt;/icon&amp;gt;&lt;br /&gt;
        &amp;lt;/iconList&amp;gt;&lt;br /&gt;
        &amp;lt;serviceList&amp;gt;&lt;br /&gt;
            &amp;lt;service&amp;gt;&lt;br /&gt;
                &amp;lt;serviceType&amp;gt;urn:av-openhome-org:service:PlaylistManager:1&amp;lt;/serviceType&amp;gt;&lt;br /&gt;
                &amp;lt;serviceId&amp;gt;urn:av-openhome-org:serviceId:PlaylistManager&amp;lt;/serviceId&amp;gt;&lt;br /&gt;
                &amp;lt;SCPDURL&amp;gt;/ac3d630e37b5f11ff5cdd23c0f5a7400/Upnp/av.openhome.org-PlaylistManager-1/service.xml&amp;lt;/SCPDURL&amp;gt;&lt;br /&gt;
                &amp;lt;controlURL&amp;gt;/ac3d630e37b5f11ff5cdd23c0f5a7400/av.openhome.org-PlaylistManager-1/control&amp;lt;/controlURL&amp;gt;&lt;br /&gt;
                &amp;lt;eventSubURL&amp;gt;/ac3d630e37b5f11ff5cdd23c0f5a7400/av.openhome.org-PlaylistManager-1/event&amp;lt;/eventSubURL&amp;gt;&lt;br /&gt;
            &amp;lt;/service&amp;gt;&lt;br /&gt;
            &amp;lt;service&amp;gt;&lt;br /&gt;
                &amp;lt;serviceType&amp;gt;urn:schemas-upnp-org:service:ContentDirectory:1&amp;lt;/serviceType&amp;gt;&lt;br /&gt;
                &amp;lt;serviceId&amp;gt;urn:upnp-org:serviceId:ContentDirectory&amp;lt;/serviceId&amp;gt;&lt;br /&gt;
                &amp;lt;SCPDURL&amp;gt;/ac3d630e37b5f11ff5cdd23c0f5a7400/Upnp/upnp.org-ContentDirectory-1/service.xml&amp;lt;/SCPDURL&amp;gt;&lt;br /&gt;
                &amp;lt;controlURL&amp;gt;/ac3d630e37b5f11ff5cdd23c0f5a7400/upnp.org-ContentDirectory-1/control&amp;lt;/controlURL&amp;gt;&lt;br /&gt;
                &amp;lt;eventSubURL&amp;gt;/ac3d630e37b5f11ff5cdd23c0f5a7400/upnp.org-ContentDirectory-1/event&amp;lt;/eventSubURL&amp;gt;&lt;br /&gt;
            &amp;lt;/service&amp;gt;&lt;br /&gt;
            &amp;lt;service&amp;gt;&lt;br /&gt;
                &amp;lt;serviceType&amp;gt;urn:schemas-upnp-org:service:ConnectionManager:1&amp;lt;/serviceType&amp;gt;&lt;br /&gt;
                &amp;lt;serviceId&amp;gt;urn:upnp-org:serviceId:ConnectionManager&amp;lt;/serviceId&amp;gt;&lt;br /&gt;
                &amp;lt;SCPDURL&amp;gt;/ac3d630e37b5f11ff5cdd23c0f5a7400/Upnp/upnp.org-ConnectionManager-1/service.xml&amp;lt;/SCPDURL&amp;gt;&lt;br /&gt;
                &amp;lt;controlURL&amp;gt;/ac3d630e37b5f11ff5cdd23c0f5a7400/upnp.org-ConnectionManager-1/control&amp;lt;/controlURL&amp;gt;&lt;br /&gt;
                &amp;lt;eventSubURL&amp;gt;/ac3d630e37b5f11ff5cdd23c0f5a7400/upnp.org-ConnectionManager-1/event&amp;lt;/eventSubURL&amp;gt;&lt;br /&gt;
            &amp;lt;/service&amp;gt;&lt;br /&gt;
        &amp;lt;/serviceList&amp;gt;&lt;br /&gt;
    &amp;lt;/device&amp;gt;&lt;br /&gt;
 &amp;lt;/root&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Index maps ==&lt;br /&gt;
&lt;br /&gt;
Large lists are difficult to navigate, especially on mobile devices. Mobile devices added the idea of an index map to improve this situation. The index map allows a users to jump to different sections in a large list, similar to what is possible with a scrollbar on desktops.&lt;br /&gt;
&lt;br /&gt;
In order for a control point to generate an index map for any particular level in a ContentDirectory&#039;s hierarchy it first needs to download all the objects in the container, figure out if they are sorted and then calculate the index map. This means that a user will need to wait, perhaps minutes, before an index map is able to be presented on the UI. &lt;br /&gt;
&lt;br /&gt;
The proposal is to allow the media server to calculate an index map and return it as part of the DIDL-Lite XML. Below shows some example DIDL-Lite with an index map included.&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;DIDL-Lite xmlns=&amp;quot;urn:schemas-upnp-org:metadata-1-0/DIDL-Lite/&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;container id=&amp;quot;db/ba37a2ac24efa676c8676aab71a6cdf074&amp;quot; parentID=&amp;quot;0&amp;quot; restricted=&amp;quot;true&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;dc:title xmlns:dc=&amp;quot;http://purl.org/dc/elements/1.1/&amp;quot;&amp;gt;Worlds Apart [Deluxe Edition]&amp;lt;/dc:title&amp;gt;&lt;br /&gt;
        &amp;lt;upnp:udn xmlns:upnp=&amp;quot;urn:schemas-upnp-org:metadata-1-0/upnp/&amp;quot;&amp;gt;ac3d630e37b5f11ff5cdd23c0f5a7400&amp;lt;/upnp:udn&amp;gt;&lt;br /&gt;
        &amp;lt;upnp:class xmlns:upnp=&amp;quot;urn:schemas-upnp-org:metadata-1-0/upnp/&amp;quot;&amp;gt;object.container.album.musicAlbum&amp;lt;/upnp:class&amp;gt;&lt;br /&gt;
        &amp;lt;upnp:artist xmlns:upnp=&amp;quot;urn:schemas-upnp-org:metadata-1-0/upnp/&amp;quot;&amp;gt;...And You Will Know Us by the Trail of Dead&amp;lt;/upnp:artist&amp;gt;&lt;br /&gt;
        &amp;lt;upnp:albumArtURI&amp;gt;http://10.2.1.170:4000/linn.co.uk.kazooserver/ms/artwork/37a2ac2?size=0&amp;lt;/upnp:albumArtURI&amp;gt;&lt;br /&gt;
    &amp;lt;/container&amp;gt;&lt;br /&gt;
    &amp;lt;desc nameSpace=&amp;quot;openhome.org&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;indexmap&amp;gt;&lt;br /&gt;
            &amp;lt;labels&amp;gt;# A B C D E F G H I J K L M N O P Q R S T U V W X Y Z +&amp;lt;/labels&amp;gt;&lt;br /&gt;
            &amp;lt;indices&amp;gt;0 10 20 30 40 50 60 70 80 90 100 110 120 130 140 150 160 170 180 190 200 210 220 230 240 250 260 270&amp;lt;/indices&amp;gt;&lt;br /&gt;
        &amp;lt;/indexmap&amp;gt;&lt;br /&gt;
    &amp;lt;/desc&amp;gt;&lt;br /&gt;
 &amp;lt;/DIDL-Lite&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The index map contains two, space separated, lists. These lists must contain the same number of elements. The example above is for a container who&#039;s contents are alphabetically sorted. But an index map could just as easily define a container who&#039;s contents are sorted by decade, e.g 1960 - 2015,&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;desc nameSpace=&amp;quot;openhome.org&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;indexmap&amp;gt;&lt;br /&gt;
        &amp;lt;labels&amp;gt;60 70 80 90 00 10&amp;lt;/labels&amp;gt;&lt;br /&gt;
        &amp;lt;indices&amp;gt;0 10 20 30 40 50&amp;lt;/indices&amp;gt;&lt;br /&gt;
    &amp;lt;/indexmap&amp;gt;&lt;br /&gt;
 &amp;lt;/desc&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Image Resolution ==&lt;br /&gt;
&lt;br /&gt;
Control points running on different platforms have different memory limits and display technologies. This means that a control point on a PC might want to display artwork at a high resolution, while a control point on a PDA might want to display artwork at a much lower resolution.&lt;br /&gt;
&lt;br /&gt;
Media servers often try to solve this problem using one of the following two methods:&lt;br /&gt;
&lt;br /&gt;
# A configurable parameter that scales all artwork to a user defined size&lt;br /&gt;
# A profile system where a user can create profiles for each class of control point they have and configure a parameter that scales all artwork to a user defined size per profile&lt;br /&gt;
&lt;br /&gt;
The first solution is highly problematic because it limits the resolution of artwork across the whole network. But a single network very often contains control points that can display high resolution images AND control points that can&#039;t.&lt;br /&gt;
&lt;br /&gt;
The second solution is just architecturally poor, turning the relationship between a control point and a media server on its head. Why should the media server try to infer what a control point needs through configuration when the control point is perfectly capable of telling the media server its exact requirements in every single circumstance.&lt;br /&gt;
&lt;br /&gt;
So, it is proposed that compliant media servers include a &#039;&#039;&#039;size&#039;&#039;&#039; element in their artwork uri&#039;s, where the size is the image&#039;s largest dimension. This allows a control point to ask for an image at a specified size.&lt;br /&gt;
&lt;br /&gt;
=== Example ===&lt;br /&gt;
&lt;br /&gt;
If the original artwork was 400x512, then a media server would provide the following albumArtURI: &amp;lt;uri&amp;gt;?size=512. If it is not possible for the media server to obtain the original resolution then the media server would provide the following albumArtURI: &amp;lt;uri&amp;gt;?size=0.&lt;br /&gt;
&lt;br /&gt;
The presence of the size element tells the control point:&lt;br /&gt;
&lt;br /&gt;
# the media server implements the image scaling extension&lt;br /&gt;
# the original size of the image.&lt;br /&gt;
&lt;br /&gt;
Now the control point can request the image at any resolution by using &amp;lt;uri&amp;gt;?size=x, where x is the size it wants.&lt;br /&gt;
&lt;br /&gt;
So, in this example, &amp;lt;uri&amp;gt;?size=1024 gets an 800x1024 image, and &amp;lt;uri&amp;gt;?size=200 gets a 156x200 image.&lt;br /&gt;
&lt;br /&gt;
== albumArtURI&amp;lt;br&amp;gt; ==&lt;br /&gt;
&lt;br /&gt;
The current specification only allows retrieval of artwork for a musicAlbum container through the property albumArtURI. When browsing a music library on a control point it quickly becomes clear that to implement a graphically rich control point the ContentDirectory service should provide a way to retrieve artwork for all of the content directory classes, not just musicAlbum containers.&lt;br /&gt;
&lt;br /&gt;
There has become a somewhat defacto standard where just about all media server provide an albumArtURI property for a musicItem item as well as for a musicAlbum container, however this is still not good enough to implement a graphically rich control point.&lt;br /&gt;
&lt;br /&gt;
It is proposed that an optional property is introduced to the object class called &#039;&#039;&#039;albumArtURI&#039;&#039;&amp;amp;nbsp;&#039;&#039;&#039;&#039;&#039;which may contain an attribute &#039;&#039;&#039;title&#039;&#039;&#039;,&amp;amp;nbsp;e.g. &amp;amp;lt;albumArtURI title=&amp;quot;Font Cover&amp;quot;&amp;amp;gt;http://Front Cover.jpg&amp;amp;lt;/albumArtURI&amp;amp;gt;.&amp;amp;nbsp;The object class can contain zero or more albumArtURIs elements.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Medium =&lt;br /&gt;
= Low =&lt;br /&gt;
&lt;br /&gt;
== Dynamic IP Addresses ==&lt;br /&gt;
&lt;br /&gt;
At present all media servers return URIs that contain a reference to their IP address, e.g. http://172.20.1.1/music.flac etc. This means that if the media server&#039;s IP address were to change across reboots, then any control point or media renderer with URIs that referenced the media server before the reboot will become invalid.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
It is proposed that a media server should always reference itself by host name and not by IP address in any XML that it sends to external devices, i.e. http://mynas/music.flac.&lt;br /&gt;
&lt;br /&gt;
== Disc Information ==&lt;br /&gt;
&lt;br /&gt;
It is proposed that two new properties are added to the musicTrack item called &#039;&#039;&#039;OriginalDiscNumber&#039;&#039;&#039; and &#039;&#039;&#039;OriginalDiscCount&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== Replay Gain Information ==&lt;br /&gt;
&lt;br /&gt;
It is proposed that four new properties are added to the musicTrack item called &#039;&#039;&#039;ReplayGainAlbum&#039;&#039;&#039;, &#039;&#039;&#039;ReplayGainAlbumPeak&#039;&#039;&#039;, &#039;&#039;&#039;ReplayGainTrack&#039;&#039;&#039;, and &#039;&#039;&#039;ReplayGainTrackPeak&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
== webURI ==&lt;br /&gt;
&lt;br /&gt;
The current specification does not easily allow a control point to provide rich information about objects in the browse hierarchy.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
It is proposed to add an optionally property to the object class called &#039;&#039;&#039;webURI&amp;amp;nbsp;&#039;&#039;&#039;which will contain a URI to a website that provides a rich collection of information about the object, e.g. for a musicArtist container it would provided a link to a website that provided information about the artist.&lt;/div&gt;</summary>
		<author><name>Davidd</name></author>
	</entry>
	<entry>
		<id>https://docs.linn.co.uk/wiki/index.php?title=Developer:Media_Server_Extensions&amp;diff=11182</id>
		<title>Developer:Media Server Extensions</title>
		<link rel="alternate" type="text/html" href="https://docs.linn.co.uk/wiki/index.php?title=Developer:Media_Server_Extensions&amp;diff=11182"/>
		<updated>2015-02-20T17:28:30Z</updated>

		<summary type="html">&lt;p&gt;Davidd: /* Link map */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Introduction =&lt;br /&gt;
&lt;br /&gt;
The ContentDirectory service has various limitations which become apparent when implementing control points on different hardware platforms. This document aims to outline some ideas that address the various shortcomings of the ContentDirectory specification. The ideas have been categorised in low, medium and high priority groups.&lt;br /&gt;
&lt;br /&gt;
= High =&lt;br /&gt;
&lt;br /&gt;
== Container map ==&lt;br /&gt;
&lt;br /&gt;
The current ContentDirectory specification makes it tricky for a control point to display the returned contents in an appropriate, aesthetically pleasing, manner for the content being viewed. This is because the ContentDirectory specification does not allow for a control point to know in advanced what content to expect when browsing through any particular hierarchy.&lt;br /&gt;
&lt;br /&gt;
An example of this might be, at a particular point in the browse hierarchy the ContentDirectory will return a list of albums which in turn will contain a list of tracks. A UI might wish to represent this list of albums as a grid and the album&#039;s tracks as a header and a list of the tracks. Currently it is not possible for the UI to know when it gets to a point in a hierarchy where the hierarchy represents a list of albums followed by a list of tracks.&lt;br /&gt;
&lt;br /&gt;
The container map extension allows a media server to express its container hierarchy in advance of the control point navigating it. This is done using an OpenHome vendor extension to the device XML.&lt;br /&gt;
&lt;br /&gt;
Three types of mapped container are defined: browse, link, and search.&lt;br /&gt;
&lt;br /&gt;
The browse map defines named top level containers that represent significant starting points for browsing that can meaningfully be presented in top level tabs of a control point UI. The browse map is expressed within the X_MAP_BROWSE element of X_MAP.&lt;br /&gt;
&lt;br /&gt;
The link map defines containers that can be meaningfully linked to from track or album details. For instance a track will typically have an artist defined. If an entry for &amp;quot;artist&amp;quot; is defined in the link map then it will be possible for the user of a control point to quickly access this artist-related container by clicking on the track&#039;s artist text. Similar links might be offered for &amp;quot;genre&amp;quot;, &amp;quot;composer&amp;quot;, &amp;quot;conductor&amp;quot;, etc. The link map is expressed within the X_MAP_LINK element of X_MAP.&lt;br /&gt;
&lt;br /&gt;
The search map defines the different kinds of search containers and the type of results that they produce. The search map is expressed within the X_MAP_SEARCH element of X_MAP.&lt;br /&gt;
&lt;br /&gt;
=== Browse map ===&lt;br /&gt;
&lt;br /&gt;
The X_MAP_BROWSE element must contain 1 or more X_MAP_BROWSE_ENTRY elements.&lt;br /&gt;
&lt;br /&gt;
The X_MAP_BROWSE_ENTRY has three child elements.&lt;br /&gt;
&lt;br /&gt;
X_MAP_BROWSE_ENTRY_NAME is a string that can be used by a control point to label a tab containing this browse hierarchy.&lt;br /&gt;
&lt;br /&gt;
X_MAP_BROWSE_ENTRY_ID is the UPnP container id that contains the root of this browse hierarchy. This id is then submitted to the ContentDirectory service using the Browse action as usual. The returned contents are navigated using subsequent Browse request as usual. The difference is that the control point knows in advance what kind of results to expect at each level.&lt;br /&gt;
&lt;br /&gt;
X_MAP_BROWSE_ENTRY_TYPE is a space separated list of strings that maps out the kind of containers that are to be found at each level of this browse hierarchy. For instance, &amp;quot;artist album&amp;quot; represents a browse hierarchy giving a container containing only artist containers, each of which contains only album containers, each of which contains only tracks.&lt;br /&gt;
&lt;br /&gt;
There should be an X_MAP_BROWSE_ENTRY for each root browse hierarchy defined by the media server.&lt;br /&gt;
&lt;br /&gt;
For example:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;X_MAP_BROWSE_ENTRY&amp;gt;&lt;br /&gt;
     &amp;lt;X_MAP_BROWSE_ENTRY_NAME&amp;gt;Genre&amp;lt;/X_MAP_BROWSE_ENTRY_NAME&amp;gt;&lt;br /&gt;
     &amp;lt;X_MAP_BROWSE_ENTRY_ID&amp;gt;db/browse/genre&amp;lt;/X_MAP_BROWSE_ENTRY_ID&amp;gt;&lt;br /&gt;
     &amp;lt;X_MAP_BROWSE_ENTRY_TYPE&amp;gt;genre artist album&amp;lt;/X_MAP_BROWSE_ENTRY_TYPE&amp;gt;&lt;br /&gt;
 &amp;lt;/X_MAP_BROWSE_ENTRY&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Link map ===&lt;br /&gt;
&lt;br /&gt;
The X_MAP_LINK element must contain 1 or more X_MAP_LINK_ENTRY elements.&lt;br /&gt;
&lt;br /&gt;
The X_MAP_LINK_ENTRY has three child elements.&lt;br /&gt;
&lt;br /&gt;
X_MAP_LINK_ENTRY_TAG is a string that defines which type of metadata is the target for this link. e.g. &amp;quot;artist&amp;quot;, &amp;quot;genre&amp;quot;, &amp;quot;composer&amp;quot;, etc. See the type section below. &lt;br /&gt;
&lt;br /&gt;
X_MAP_LINK_ENTRY_ID_PREFIX is a string that is prefix for a UPnP container id. The link can be taken by browsing to the container whose id is the result of appending the associated metadata value to this prefix. For instance, if the prefix for an &amp;quot;artist&amp;quot; link is defined as db/link/artist/, and a track returned anywhere in the media server&#039;s library has &amp;quot;Pink Floyd&amp;quot; as its artist. Then the linked container will have an id of db/link/artist/Pink Floyd.&lt;br /&gt;
&lt;br /&gt;
X_MAP_LINK_ENTRY_TYPE is a space separated list of strings used by a control point to decide how to represent the browse hierarchy in the UI. The list of valid types is described in the Types section below.&lt;br /&gt;
&lt;br /&gt;
There should be an X_MAP_LINK_ENTRY for each piece of metadata that the media server allows to be linked.&lt;br /&gt;
&lt;br /&gt;
Any example of an X_MAP_LINK_ENTRY is shown below,&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;X_MAP_LINK_ENTRY&amp;gt;&lt;br /&gt;
     &amp;lt;X_MAP_LINK_ENTRY_TAG&amp;gt;artist&amp;lt;/X_MAP_LINK_ENTRY_TAG&amp;gt;&lt;br /&gt;
     &amp;lt;X_MAP_LINK_ENTRY_ID_PREFIX&amp;gt;db/link/artist/&amp;lt;/X_MAP_LINK_ENTRY_ID_PREFIX&amp;gt;&lt;br /&gt;
     &amp;lt;X_MAP_LINK_ENTRY_TYPE&amp;gt;album&amp;lt;/X_MAP_LINK_ENTRY_TYPE&amp;gt;&lt;br /&gt;
 &amp;lt;/X_MAP_LINK_ENTRY&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The example above defines a browse hierarchy that is created when linking from an artist name. The hierarchy created provides a list of linked artist albums which in turn provide a list of tracks.&lt;br /&gt;
&lt;br /&gt;
X_MAP_LINK_ENTRY_TAG contains the piece of metadata that can be linked to &amp;quot;artist&amp;quot;. Valid types are listed in the Types section below.&lt;br /&gt;
&lt;br /&gt;
X_MAP_LINK_ENTRY_ID_PREFIX contains the ID prefix to use in the ContentDirectory Browse action to obtain the list of albums. The browse ID is constructed by appending the text in the artist metadata to the prefix, i.e. &amp;quot;db/link/artist/&amp;lt;artist name&amp;gt;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
X_MAP_LINK_ENTRY_TYPE contains a single entry indicating that the first level contains items that represent albums and the next level will contain tracks.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Link is the ability for a user to link between various pieces of metadata for an object. For example if the server supported linking on the artist tag then using the link map a control point would be able to provide the ability for a user to click on a track&#039;s artist and display all the albums (or tracks) by that artist.&lt;br /&gt;
&lt;br /&gt;
=== Search map ===&lt;br /&gt;
&lt;br /&gt;
The X_MAP_SEARCH element must contain 1 or more X_MAP_SEARCH_ENTRY elements.&lt;br /&gt;
&lt;br /&gt;
The X_MAP_SEARCH_ENTRY has three child elements.&lt;br /&gt;
&lt;br /&gt;
X_MAP_SEARCH_ENTRY_NAME is a string and used by a control point to label the browse hierarchy.&lt;br /&gt;
&lt;br /&gt;
X_MAP_SEARCH_ENTRY_ID_PREFIX is a string and used by a control point to start the browse of a search.&lt;br /&gt;
&lt;br /&gt;
X_MAP_SEARCH_ENTRY_TYPE is a space separated list of strings used by a control point to decide how to represent the browse hierarchy in the UI. The list of valid types is described in the Types section below.&lt;br /&gt;
&lt;br /&gt;
There should be an X_MAP_SEARCH_ENTRY for each piece of metadata that the media server allows to be linked.&lt;br /&gt;
&lt;br /&gt;
Any example of an X_MAP_SEARCH_ENTRY is shown below,&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;X_MAP_SEARCH_ENTRY&amp;gt;&lt;br /&gt;
     &amp;lt;X_MAP_SEARCH_ENTRY_NAME&amp;gt;Artist&amp;lt;/X_MAP_SEARCH_ENTRY_NAME&amp;gt;&lt;br /&gt;
     &amp;lt;X_MAP_SEARCH_ENTRY_ID_PREFIX&amp;gt;db/search/artist/&amp;lt;/X_MAP_SEARCH_ENTRY_ID_PREFIX&amp;gt;&lt;br /&gt;
     &amp;lt;X_MAP_SEARCH_ENTRY_TYPE&amp;gt;artist album&amp;lt;/X_MAP_SEARCH_ENTRY_TYPE&amp;gt;&lt;br /&gt;
 &amp;lt;/X_MAP_SEARCH_ENTRY&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The example above defines a browse hierarchy that is created when searching for an artist. The hierarchy created provides a list of artists, which in turn provide a list of albums, which in turn provide a list of tracks.&lt;br /&gt;
&lt;br /&gt;
X_MAP_SEARCH_ENTRY_NAME contains the text for a label in the UI of &amp;quot;Artists&amp;quot;&lt;br /&gt;
&lt;br /&gt;
X_MAP_SEARCH_ENTRY_ID_PREFIX contains the ID prefix to use in the ContentDirectory Browse action to obtain the list of artists. The browse ID is constructed by appending the search text to the prefix, i.e. &amp;quot;db/link/artist/&amp;lt;search text&amp;gt;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
X_MAP_SEARCH_ENTRY_TYPE contains a single entry indicating that the first level contains items that represent artists, the next level will contain albums, and the next level will contain tracks.&lt;br /&gt;
&lt;br /&gt;
=== Types ===&lt;br /&gt;
&lt;br /&gt;
The list of allowed types for X_BROWSE_ENTRY_TYPE, X_MAP_LINK_ENTRY_TAG, X_LINK_ENTRY_TYPE, and X_SEARCH_ENTRY_TYPE&lt;br /&gt;
&lt;br /&gt;
 genre&lt;br /&gt;
 artist&lt;br /&gt;
 composer&lt;br /&gt;
 conductor&lt;br /&gt;
 album&lt;br /&gt;
 year&lt;br /&gt;
 mixed&lt;br /&gt;
&lt;br /&gt;
mixed is a special value that represents a container that has mixed entries.&lt;br /&gt;
&lt;br /&gt;
=== Example device XML ===&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;root xmlns=&amp;quot;urn:schemas-upnp-org:device-1-0&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;specVersion&amp;gt;&lt;br /&gt;
        &amp;lt;major&amp;gt;1&amp;lt;/major&amp;gt;&lt;br /&gt;
        &amp;lt;minor&amp;gt;1&amp;lt;/minor&amp;gt;&lt;br /&gt;
    &amp;lt;/specVersion&amp;gt;&lt;br /&gt;
    &amp;lt;device&amp;gt;&lt;br /&gt;
        &amp;lt;deviceType&amp;gt;urn:schemas-upnp-org:device:MediaServer:1&amp;lt;/deviceType&amp;gt;&lt;br /&gt;
        &amp;lt;dlna:X_DLNADOC xmlns:dlna=&amp;quot;urn:schemas-dlna-org:device-1-0&amp;quot;&amp;gt;DMS-1.50&amp;lt;/dlna:X_DLNADOC&amp;gt;&lt;br /&gt;
        &amp;lt;dlna:X_DLNACAP xmlns:dlna=&amp;quot;urn:schemas-dlna-org:device-1-0&amp;quot;&amp;gt;av-upload,image-upload,audio-upload&amp;lt;/dlna:X_DLNACAP&amp;gt;&lt;br /&gt;
        &amp;lt;openhome:X_MAP xmlns:openhome=&amp;quot;http://www.openhome.org&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;X_MAP_BROWSE&amp;gt;&lt;br /&gt;
                &amp;lt;X_MAP_BROWSE_ENTRY&amp;gt;&lt;br /&gt;
                    &amp;lt;X_MAP_BROWSE_ENTRY_NAME&amp;gt;Albums&amp;lt;/X_MAP_BROWSE_ENTRY_NAME&amp;gt;&lt;br /&gt;
                    &amp;lt;X_MAP_BROWSE_ENTRY_ID&amp;gt;db/browse/albums&amp;lt;/X_MAP_BROWSE_ENTRY_ID&amp;gt;&lt;br /&gt;
                    &amp;lt;X_MAP_BROWSE_ENTRY_TYPE&amp;gt;album&amp;lt;/X_MAP_BROWSE_ENTRY_TYPE&amp;gt;&lt;br /&gt;
                &amp;lt;/X_MAP_BROWSE_ENTRY&amp;gt;&lt;br /&gt;
                &amp;lt;X_MAP_BROWSE_ENTRY&amp;gt;&lt;br /&gt;
                    &amp;lt;X_MAP_BROWSE_ENTRY_NAME&amp;gt;Artists&amp;lt;/X_MAP_BROWSE_ENTRY_NAME&amp;gt;&lt;br /&gt;
                    &amp;lt;X_MAP_BROWSE_ENTRY_ID&amp;gt;db/browse/artists&amp;lt;/X_MAP_BROWSE_ENTRY_ID&amp;gt;&lt;br /&gt;
                    &amp;lt;X_MAP_BROWSE_ENTRY_TYPE&amp;gt;artist album&amp;lt;/X_MAP_BROWSE_ENTRY_TYPE&amp;gt;&lt;br /&gt;
                &amp;lt;/X_MAP_BROWSE_ENTRY&amp;gt;&lt;br /&gt;
                &amp;lt;X_MAP_BROWSE_ENTRY&amp;gt;&lt;br /&gt;
                    &amp;lt;X_MAP_BROWSE_ENTRY_NAME&amp;gt;Folders&amp;lt;/X_MAP_BROWSE_ENTRY_NAME&amp;gt;&lt;br /&gt;
                    &amp;lt;X_MAP_BROWSE_ENTRY_ID&amp;gt;db/browse/folders&amp;lt;/X_MAP_BROWSE_ENTRY_ID&amp;gt;&lt;br /&gt;
                    &amp;lt;X_MAP_BROWSE_ENTRY_TYPE&amp;gt;mixed&amp;lt;/X_MAP_BROWSE_ENTRY_TYPE&amp;gt;&lt;br /&gt;
                &amp;lt;/X_MAP_BROWSE_ENTRY&amp;gt;&lt;br /&gt;
            &amp;lt;/X_MAP_BROWSE&amp;gt;&lt;br /&gt;
            &amp;lt;X_MAP_LINK&amp;gt;&lt;br /&gt;
                &amp;lt;X_MAP_LINK_ENTRY&amp;gt;&lt;br /&gt;
                    &amp;lt;X_MAP_LINK_ENTRY_TAG&amp;gt;artist&amp;lt;/X_MAP_LINK_ENTRY_TAG&amp;gt;&lt;br /&gt;
                    &amp;lt;X_MAP_LINK_ENTRY_ID_PREFIX&amp;gt;db/link/artist/&amp;lt;/X_MAP_LINK_ENTRY_ID_PREFIX&amp;gt;&lt;br /&gt;
                    &amp;lt;X_MAP_LINK_ENTRY_TYPE&amp;gt;album&amp;lt;/X_MAP_LINK_ENTRY_TYPE&amp;gt;&lt;br /&gt;
                &amp;lt;/X_MAP_LINK_ENTRY&amp;gt;&lt;br /&gt;
                &amp;lt;X_MAP_LINK_ENTRY&amp;gt;&lt;br /&gt;
                    &amp;lt;X_MAP_LINK_ENTRY_TAG&amp;gt;composer&amp;lt;/X_MAP_LINK_ENTRY_TAG&amp;gt;&lt;br /&gt;
                    &amp;lt;X_MAP_LINK_ENTRY_ID_PREFIX&amp;gt;db/link/composer/&amp;lt;/X_MAP_LINK_ENTRY_ID_PREFIX&amp;gt;&lt;br /&gt;
                    &amp;lt;X_MAP_LINK_ENTRY_TYPE&amp;gt;album&amp;lt;/X_MAP_LINK_ENTRY_TYPE&amp;gt;&lt;br /&gt;
                &amp;lt;/X_MAP_LINK_ENTRY&amp;gt;&lt;br /&gt;
            &amp;lt;/X_MAP_LINK&amp;gt;&lt;br /&gt;
            &amp;lt;X_MAP_SEARCH&amp;gt;&lt;br /&gt;
                &amp;lt;X_MAP_SEARCH_ENTRY&amp;gt;&lt;br /&gt;
                    &amp;lt;X_MAP_SEARCH_ENTRY_NAME&amp;gt;Artist&amp;lt;/X_MAP_SEARCH_ENTRY_NAME&amp;gt;&lt;br /&gt;
                    &amp;lt;X_MAP_SEARCH_ENTRY_ID_PREFIX&amp;gt;db/search/artist/&amp;lt;/X_MAP_SEARCH_ENTRY_ID_PREFIX&amp;gt;&lt;br /&gt;
                    &amp;lt;X_MAP_SEARCH_ENTRY_TYPE&amp;gt;artist album&amp;lt;/X_MAP_SEARCH_ENTRY_TYPE&amp;gt;&lt;br /&gt;
                &amp;lt;/X_MAP_SEARCH_ENTRY&amp;gt;&lt;br /&gt;
                &amp;lt;X_MAP_SEARCH_ENTRY&amp;gt;&lt;br /&gt;
                    &amp;lt;X_MAP_SEARCH_ENTRY_NAME&amp;gt;Tracks&amp;lt;/X_MAP_SEARCH_ENTRY_NAME&amp;gt;&lt;br /&gt;
                    &amp;lt;X_MAP_SEARCH_ENTRY_ID_PREFIX&amp;gt;db/search/all/&amp;lt;/X_MAP_SEARCH_ENTRY_ID_PREFIX&amp;gt;&lt;br /&gt;
                    &amp;lt;X_MAP_SEARCH_ENTRY_TYPE&amp;gt;&amp;lt;/X_MAP_SEARCH_ENTRY_TYPE&amp;gt;&lt;br /&gt;
                &amp;lt;/X_MAP_SEARCH_ENTRY&amp;gt;&lt;br /&gt;
            &amp;lt;/X_MAP_SEARCH&amp;gt;&lt;br /&gt;
        &amp;lt;/openhome:X_MAP&amp;gt;&lt;br /&gt;
        &amp;lt;presentationURL&amp;gt;http://10.2.1.170:4000/res/linn.co.uk.kazooserver/index.html&amp;lt;/presentationURL&amp;gt;&lt;br /&gt;
        &amp;lt;friendlyName&amp;gt;Linn Kazoo Server [R&amp;amp;D Mac Mini]&amp;lt;/friendlyName&amp;gt;&lt;br /&gt;
        &amp;lt;manufacturer&amp;gt;Linn&amp;lt;/manufacturer&amp;gt;&lt;br /&gt;
        &amp;lt;manufacturerURL&amp;gt;http://www.linn.co.uk&amp;lt;/manufacturerURL&amp;gt;&lt;br /&gt;
        &amp;lt;modelName&amp;gt;Kazoo Server&amp;lt;/modelName&amp;gt;&lt;br /&gt;
        &amp;lt;modelURL&amp;gt;http://oss.linn.co.uk/trac/wiki/KazooServer&amp;lt;/modelURL&amp;gt;&lt;br /&gt;
        &amp;lt;UDN&amp;gt;uuid:ac3d630e37b5f11ff5cdd23c0f5a7400&amp;lt;/UDN&amp;gt;&lt;br /&gt;
        &amp;lt;iconList&amp;gt;&lt;br /&gt;
            &amp;lt;icon&amp;gt;&lt;br /&gt;
                &amp;lt;mimetype&amp;gt;image/png&amp;lt;/mimetype&amp;gt;&lt;br /&gt;
                &amp;lt;width&amp;gt;65&amp;lt;/width&amp;gt;&lt;br /&gt;
                &amp;lt;height&amp;gt;65&amp;lt;/height&amp;gt;&lt;br /&gt;
                &amp;lt;depth&amp;gt;32&amp;lt;/depth&amp;gt;&lt;br /&gt;
                &amp;lt;url&amp;gt;ac3d630e37b5f11ff5cdd23c0f5a7400/resource/icon/icon&amp;lt;/url&amp;gt;&lt;br /&gt;
            &amp;lt;/icon&amp;gt;&lt;br /&gt;
        &amp;lt;/iconList&amp;gt;&lt;br /&gt;
        &amp;lt;serviceList&amp;gt;&lt;br /&gt;
            &amp;lt;service&amp;gt;&lt;br /&gt;
                &amp;lt;serviceType&amp;gt;urn:av-openhome-org:service:PlaylistManager:1&amp;lt;/serviceType&amp;gt;&lt;br /&gt;
                &amp;lt;serviceId&amp;gt;urn:av-openhome-org:serviceId:PlaylistManager&amp;lt;/serviceId&amp;gt;&lt;br /&gt;
                &amp;lt;SCPDURL&amp;gt;/ac3d630e37b5f11ff5cdd23c0f5a7400/Upnp/av.openhome.org-PlaylistManager-1/service.xml&amp;lt;/SCPDURL&amp;gt;&lt;br /&gt;
                &amp;lt;controlURL&amp;gt;/ac3d630e37b5f11ff5cdd23c0f5a7400/av.openhome.org-PlaylistManager-1/control&amp;lt;/controlURL&amp;gt;&lt;br /&gt;
                &amp;lt;eventSubURL&amp;gt;/ac3d630e37b5f11ff5cdd23c0f5a7400/av.openhome.org-PlaylistManager-1/event&amp;lt;/eventSubURL&amp;gt;&lt;br /&gt;
            &amp;lt;/service&amp;gt;&lt;br /&gt;
            &amp;lt;service&amp;gt;&lt;br /&gt;
                &amp;lt;serviceType&amp;gt;urn:schemas-upnp-org:service:ContentDirectory:1&amp;lt;/serviceType&amp;gt;&lt;br /&gt;
                &amp;lt;serviceId&amp;gt;urn:upnp-org:serviceId:ContentDirectory&amp;lt;/serviceId&amp;gt;&lt;br /&gt;
                &amp;lt;SCPDURL&amp;gt;/ac3d630e37b5f11ff5cdd23c0f5a7400/Upnp/upnp.org-ContentDirectory-1/service.xml&amp;lt;/SCPDURL&amp;gt;&lt;br /&gt;
                &amp;lt;controlURL&amp;gt;/ac3d630e37b5f11ff5cdd23c0f5a7400/upnp.org-ContentDirectory-1/control&amp;lt;/controlURL&amp;gt;&lt;br /&gt;
                &amp;lt;eventSubURL&amp;gt;/ac3d630e37b5f11ff5cdd23c0f5a7400/upnp.org-ContentDirectory-1/event&amp;lt;/eventSubURL&amp;gt;&lt;br /&gt;
            &amp;lt;/service&amp;gt;&lt;br /&gt;
            &amp;lt;service&amp;gt;&lt;br /&gt;
                &amp;lt;serviceType&amp;gt;urn:schemas-upnp-org:service:ConnectionManager:1&amp;lt;/serviceType&amp;gt;&lt;br /&gt;
                &amp;lt;serviceId&amp;gt;urn:upnp-org:serviceId:ConnectionManager&amp;lt;/serviceId&amp;gt;&lt;br /&gt;
                &amp;lt;SCPDURL&amp;gt;/ac3d630e37b5f11ff5cdd23c0f5a7400/Upnp/upnp.org-ConnectionManager-1/service.xml&amp;lt;/SCPDURL&amp;gt;&lt;br /&gt;
                &amp;lt;controlURL&amp;gt;/ac3d630e37b5f11ff5cdd23c0f5a7400/upnp.org-ConnectionManager-1/control&amp;lt;/controlURL&amp;gt;&lt;br /&gt;
                &amp;lt;eventSubURL&amp;gt;/ac3d630e37b5f11ff5cdd23c0f5a7400/upnp.org-ConnectionManager-1/event&amp;lt;/eventSubURL&amp;gt;&lt;br /&gt;
            &amp;lt;/service&amp;gt;&lt;br /&gt;
        &amp;lt;/serviceList&amp;gt;&lt;br /&gt;
    &amp;lt;/device&amp;gt;&lt;br /&gt;
 &amp;lt;/root&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Index maps ==&lt;br /&gt;
&lt;br /&gt;
Large lists are difficult to navigate, especially on mobile devices. Mobile devices added the idea of an index map to improve this situation. The index map allows a users to jump to different sections in a large list, similar to what is possible with a scrollbar on desktops.&lt;br /&gt;
&lt;br /&gt;
In order for a control point to generate an index map for any particular level in a ContentDirectory&#039;s hierarchy it first needs to download all the objects in the container, figure out if they are sorted and then calculate the index map. This means that a user will need to wait, perhaps minutes, before an index map is able to be presented on the UI. &lt;br /&gt;
&lt;br /&gt;
The proposal is to allow the media server to calculate an index map and return it as part of the DIDL-Lite XML. Below shows some example DIDL-Lite with an index map included.&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;DIDL-Lite xmlns=&amp;quot;urn:schemas-upnp-org:metadata-1-0/DIDL-Lite/&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;container id=&amp;quot;db/ba37a2ac24efa676c8676aab71a6cdf074&amp;quot; parentID=&amp;quot;0&amp;quot; restricted=&amp;quot;true&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;dc:title xmlns:dc=&amp;quot;http://purl.org/dc/elements/1.1/&amp;quot;&amp;gt;Worlds Apart [Deluxe Edition]&amp;lt;/dc:title&amp;gt;&lt;br /&gt;
        &amp;lt;upnp:udn xmlns:upnp=&amp;quot;urn:schemas-upnp-org:metadata-1-0/upnp/&amp;quot;&amp;gt;ac3d630e37b5f11ff5cdd23c0f5a7400&amp;lt;/upnp:udn&amp;gt;&lt;br /&gt;
        &amp;lt;upnp:class xmlns:upnp=&amp;quot;urn:schemas-upnp-org:metadata-1-0/upnp/&amp;quot;&amp;gt;object.container.album.musicAlbum&amp;lt;/upnp:class&amp;gt;&lt;br /&gt;
        &amp;lt;upnp:artist xmlns:upnp=&amp;quot;urn:schemas-upnp-org:metadata-1-0/upnp/&amp;quot;&amp;gt;...And You Will Know Us by the Trail of Dead&amp;lt;/upnp:artist&amp;gt;&lt;br /&gt;
        &amp;lt;upnp:albumArtURI&amp;gt;http://10.2.1.170:4000/linn.co.uk.kazooserver/ms/artwork/37a2ac2?size=0&amp;lt;/upnp:albumArtURI&amp;gt;&lt;br /&gt;
    &amp;lt;/container&amp;gt;&lt;br /&gt;
    &amp;lt;desc nameSpace=&amp;quot;openhome.org&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;indexmap&amp;gt;&lt;br /&gt;
            &amp;lt;labels&amp;gt;# A B C D E F G H I J K L M N O P Q R S T U V W X Y Z +&amp;lt;/labels&amp;gt;&lt;br /&gt;
            &amp;lt;indices&amp;gt;0 10 20 30 40 50 60 70 80 90 100 110 120 130 140 150 160 170 180 190 200 210 220 230 240 250 260 270&amp;lt;/indices&amp;gt;&lt;br /&gt;
        &amp;lt;/indexmap&amp;gt;&lt;br /&gt;
    &amp;lt;/desc&amp;gt;&lt;br /&gt;
 &amp;lt;/DIDL-Lite&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The index map contains two, space separated, lists. These lists must contain the same number of elements. The example above is for a container who&#039;s contents are alphabetically sorted. But an index map could just as easily define a container who&#039;s contents are sorted by decade, e.g 1960 - 2015,&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;desc nameSpace=&amp;quot;openhome.org&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;indexmap&amp;gt;&lt;br /&gt;
        &amp;lt;labels&amp;gt;60 70 80 90 00 10&amp;lt;/labels&amp;gt;&lt;br /&gt;
        &amp;lt;indices&amp;gt;0 10 20 30 40 50&amp;lt;/indices&amp;gt;&lt;br /&gt;
    &amp;lt;/indexmap&amp;gt;&lt;br /&gt;
 &amp;lt;/desc&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Image Resolution ==&lt;br /&gt;
&lt;br /&gt;
Control points running on different platforms have different memory limits and display technologies. This means that a control point on a PC might want to display artwork at a high resolution, while a control point on a PDA might want to display artwork at a much lower resolution.&lt;br /&gt;
&lt;br /&gt;
Media servers often try to solve this problem using one of the following two methods:&lt;br /&gt;
&lt;br /&gt;
# A configurable parameter that scales all artwork to a user defined size&lt;br /&gt;
# A profile system where a user can create profiles for each class of control point they have and configure a parameter that scales all artwork to a user defined size per profile&lt;br /&gt;
&lt;br /&gt;
The first solution is highly problematic because it limits the resolution of artwork across the whole network. But a single network very often contains control points that can display high resolution images AND control points that can&#039;t.&lt;br /&gt;
&lt;br /&gt;
The second solution is just architecturally poor, turning the relationship between a control point and a media server on its head. Why should the media server try to infer what a control point needs through configuration when the control point is perfectly capable of telling the media server its exact requirements in every single circumstance.&lt;br /&gt;
&lt;br /&gt;
So, it is proposed that compliant media servers include a &#039;&#039;&#039;size&#039;&#039;&#039; element in their artwork uri&#039;s, where the size is the image&#039;s largest dimension. This allows a control point to ask for an image at a specified size.&lt;br /&gt;
&lt;br /&gt;
=== Example ===&lt;br /&gt;
&lt;br /&gt;
If the original artwork was 400x512, then a media server would provide the following albumArtURI: &amp;lt;uri&amp;gt;?size=512. If it is not possible for the media server to obtain the original resolution then the media server would provide the following albumArtURI: &amp;lt;uri&amp;gt;?size=0.&lt;br /&gt;
&lt;br /&gt;
The presence of the size element tells the control point:&lt;br /&gt;
&lt;br /&gt;
# the media server implements the image scaling extension&lt;br /&gt;
# the original size of the image.&lt;br /&gt;
&lt;br /&gt;
Now the control point can request the image at any resolution by using &amp;lt;uri&amp;gt;?size=x, where x is the size it wants.&lt;br /&gt;
&lt;br /&gt;
So, in this example, &amp;lt;uri&amp;gt;?size=1024 gets an 800x1024 image, and &amp;lt;uri&amp;gt;?size=200 gets a 156x200 image.&lt;br /&gt;
&lt;br /&gt;
== albumArtURI&amp;lt;br&amp;gt; ==&lt;br /&gt;
&lt;br /&gt;
The current specification only allows retrieval of artwork for a musicAlbum container through the property albumArtURI. When browsing a music library on a control point it quickly becomes clear that to implement a graphically rich control point the ContentDirectory service should provide a way to retrieve artwork for all of the content directory classes, not just musicAlbum containers.&lt;br /&gt;
&lt;br /&gt;
There has become a somewhat defacto standard where just about all media server provide an albumArtURI property for a musicItem item as well as for a musicAlbum container, however this is still not good enough to implement a graphically rich control point.&lt;br /&gt;
&lt;br /&gt;
It is proposed that an optional property is introduced to the object class called &#039;&#039;&#039;albumArtURI&#039;&#039;&amp;amp;nbsp;&#039;&#039;&#039;&#039;&#039;which may contain an attribute &#039;&#039;&#039;title&#039;&#039;&#039;,&amp;amp;nbsp;e.g. &amp;amp;lt;albumArtURI title=&amp;quot;Font Cover&amp;quot;&amp;amp;gt;http://Front Cover.jpg&amp;amp;lt;/albumArtURI&amp;amp;gt;.&amp;amp;nbsp;The object class can contain zero or more albumArtURIs elements.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Medium =&lt;br /&gt;
= Low =&lt;br /&gt;
&lt;br /&gt;
== Dynamic IP Addresses ==&lt;br /&gt;
&lt;br /&gt;
At present all media servers return URIs that contain a reference to their IP address, e.g. http://172.20.1.1/music.flac etc. This means that if the media server&#039;s IP address were to change across reboots, then any control point or media renderer with URIs that referenced the media server before the reboot will become invalid.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
It is proposed that a media server should always reference itself by host name and not by IP address in any XML that it sends to external devices, i.e. http://mynas/music.flac.&lt;br /&gt;
&lt;br /&gt;
== Disc Information ==&lt;br /&gt;
&lt;br /&gt;
It is proposed that two new properties are added to the musicTrack item called &#039;&#039;&#039;OriginalDiscNumber&#039;&#039;&#039; and &#039;&#039;&#039;OriginalDiscCount&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== Replay Gain Information ==&lt;br /&gt;
&lt;br /&gt;
It is proposed that four new properties are added to the musicTrack item called &#039;&#039;&#039;ReplayGainAlbum&#039;&#039;&#039;, &#039;&#039;&#039;ReplayGainAlbumPeak&#039;&#039;&#039;, &#039;&#039;&#039;ReplayGainTrack&#039;&#039;&#039;, and &#039;&#039;&#039;ReplayGainTrackPeak&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
== webURI ==&lt;br /&gt;
&lt;br /&gt;
The current specification does not easily allow a control point to provide rich information about objects in the browse hierarchy.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
It is proposed to add an optionally property to the object class called &#039;&#039;&#039;webURI&amp;amp;nbsp;&#039;&#039;&#039;which will contain a URI to a website that provides a rich collection of information about the object, e.g. for a musicArtist container it would provided a link to a website that provided information about the artist.&lt;/div&gt;</summary>
		<author><name>Davidd</name></author>
	</entry>
	<entry>
		<id>https://docs.linn.co.uk/wiki/index.php?title=Developer:Media_Server_Extensions&amp;diff=11181</id>
		<title>Developer:Media Server Extensions</title>
		<link rel="alternate" type="text/html" href="https://docs.linn.co.uk/wiki/index.php?title=Developer:Media_Server_Extensions&amp;diff=11181"/>
		<updated>2015-02-20T17:19:18Z</updated>

		<summary type="html">&lt;p&gt;Davidd: /* Container map */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Introduction =&lt;br /&gt;
&lt;br /&gt;
The ContentDirectory service has various limitations which become apparent when implementing control points on different hardware platforms. This document aims to outline some ideas that address the various shortcomings of the ContentDirectory specification. The ideas have been categorised in low, medium and high priority groups.&lt;br /&gt;
&lt;br /&gt;
= High =&lt;br /&gt;
&lt;br /&gt;
== Container map ==&lt;br /&gt;
&lt;br /&gt;
The current ContentDirectory specification makes it tricky for a control point to display the returned contents in an appropriate, aesthetically pleasing, manner for the content being viewed. This is because the ContentDirectory specification does not allow for a control point to know in advanced what content to expect when browsing through any particular hierarchy.&lt;br /&gt;
&lt;br /&gt;
An example of this might be, at a particular point in the browse hierarchy the ContentDirectory will return a list of albums which in turn will contain a list of tracks. A UI might wish to represent this list of albums as a grid and the album&#039;s tracks as a header and a list of the tracks. Currently it is not possible for the UI to know when it gets to a point in a hierarchy where the hierarchy represents a list of albums followed by a list of tracks.&lt;br /&gt;
&lt;br /&gt;
The container map extension allows a media server to express its container hierarchy in advance of the control point navigating it. This is done using an OpenHome vendor extension to the device XML.&lt;br /&gt;
&lt;br /&gt;
Three types of mapped container are defined: browse, link, and search.&lt;br /&gt;
&lt;br /&gt;
The browse map defines named top level containers that represent significant starting points for browsing that can meaningfully be presented in top level tabs of a control point UI. The browse map is expressed within the X_MAP_BROWSE element of X_MAP.&lt;br /&gt;
&lt;br /&gt;
The link map defines containers that can be meaningfully linked to from track or album details. For instance a track will typically have an artist defined. If an entry for &amp;quot;artist&amp;quot; is defined in the link map then it will be possible for the user of a control point to quickly access this artist-related container by clicking on the track&#039;s artist text. Similar links might be offered for &amp;quot;genre&amp;quot;, &amp;quot;composer&amp;quot;, &amp;quot;conductor&amp;quot;, etc. The link map is expressed within the X_MAP_LINK element of X_MAP.&lt;br /&gt;
&lt;br /&gt;
The search map defines the different kinds of search containers and the type of results that they produce. The search map is expressed within the X_MAP_SEARCH element of X_MAP.&lt;br /&gt;
&lt;br /&gt;
=== Browse map ===&lt;br /&gt;
&lt;br /&gt;
The X_MAP_BROWSE element must contain 1 or more X_MAP_BROWSE_ENTRY elements.&lt;br /&gt;
&lt;br /&gt;
The X_MAP_BROWSE_ENTRY has three child elements.&lt;br /&gt;
&lt;br /&gt;
X_MAP_BROWSE_ENTRY_NAME is a string that can be used by a control point to label a tab containing this browse hierarchy.&lt;br /&gt;
&lt;br /&gt;
X_MAP_BROWSE_ENTRY_ID is the UPnP container id that contains the root of this browse hierarchy. This id is then submitted to the ContentDirectory service using the Browse action as usual. The returned contents are navigated using subsequent Browse request as usual. The difference is that the control point knows in advance what kind of results to expect at each level.&lt;br /&gt;
&lt;br /&gt;
X_MAP_BROWSE_ENTRY_TYPE is a space separated list of strings that maps out the kind of containers that are to be found at each level of this browse hierarchy. For instance, &amp;quot;artist album&amp;quot; represents a browse hierarchy giving a container containing only artist containers, each of which contains only album containers, each of which contains only tracks.&lt;br /&gt;
&lt;br /&gt;
There should be an X_MAP_BROWSE_ENTRY for each root browse hierarchy defined by the media server.&lt;br /&gt;
&lt;br /&gt;
For example:&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;X_MAP_BROWSE_ENTRY&amp;gt;&lt;br /&gt;
     &amp;lt;X_MAP_BROWSE_ENTRY_NAME&amp;gt;Genre&amp;lt;/X_MAP_BROWSE_ENTRY_NAME&amp;gt;&lt;br /&gt;
     &amp;lt;X_MAP_BROWSE_ENTRY_ID&amp;gt;db/browse/genre&amp;lt;/X_MAP_BROWSE_ENTRY_ID&amp;gt;&lt;br /&gt;
     &amp;lt;X_MAP_BROWSE_ENTRY_TYPE&amp;gt;genre artist album&amp;lt;/X_MAP_BROWSE_ENTRY_TYPE&amp;gt;&lt;br /&gt;
 &amp;lt;/X_MAP_BROWSE_ENTRY&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Link map ===&lt;br /&gt;
&lt;br /&gt;
The X_MAP_LINK element must contain 1 or more X_MAP_LINK_ENTRY elements.&lt;br /&gt;
&lt;br /&gt;
The X_MAP_LINK_ENTRY has three child elements.&lt;br /&gt;
&lt;br /&gt;
X_MAP_LINK_ENTRY_TAG is a string and used by a control point determine which piece of metadata is valid to show as a link.&lt;br /&gt;
&lt;br /&gt;
X_MAP_LINK_ENTRY_ID_PREFIX is a string and used by a control point to start the browse of a link.&lt;br /&gt;
&lt;br /&gt;
X_MAP_LINK_ENTRY_TYPE is a space separated list of strings used by a control point to decide how to represent the browse hierarchy in the UI. The list of valid types is described in the Types section below.&lt;br /&gt;
&lt;br /&gt;
There should be an X_MAP_LINK_ENTRY for each piece of metadata that the media server allows to be linked.&lt;br /&gt;
&lt;br /&gt;
Any example of an X_MAP_LINK_ENTRY is shown below,&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;X_MAP_LINK_ENTRY&amp;gt;&lt;br /&gt;
     &amp;lt;X_MAP_LINK_ENTRY_TAG&amp;gt;artist&amp;lt;/X_MAP_LINK_ENTRY_TAG&amp;gt;&lt;br /&gt;
     &amp;lt;X_MAP_LINK_ENTRY_ID_PREFIX&amp;gt;db/link/artist/&amp;lt;/X_MAP_LINK_ENTRY_ID_PREFIX&amp;gt;&lt;br /&gt;
     &amp;lt;X_MAP_LINK_ENTRY_TYPE&amp;gt;album&amp;lt;/X_MAP_LINK_ENTRY_TYPE&amp;gt;&lt;br /&gt;
 &amp;lt;/X_MAP_LINK_ENTRY&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The example above defines a browse hierarchy that is created when linking from an artist name. The hierarchy created provides a list of linked artist albums which in turn provide a list of tracks.&lt;br /&gt;
&lt;br /&gt;
X_MAP_LINK_ENTRY_TAG contains the piece of metadata that can be linked to &amp;quot;artist&amp;quot;. Valid types are listed in the Types section below.&lt;br /&gt;
&lt;br /&gt;
X_MAP_LINK_ENTRY_ID_PREFIX contains the ID prefix to use in the ContentDirectory Browse action to obtain the list of albums. The browse ID is constructed by appending the text in the artist metadata to the prefix, i.e. &amp;quot;db/link/artist/&amp;lt;artist name&amp;gt;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
X_MAP_LINK_ENTRY_TYPE contains a single entry indicating that the first level contains items that represent albums and the next level will contain tracks.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Link is the ability for a user to link between various pieces of metadata for an object. For example if the server supported linking on the artist tag then using the link map a control point would be able to provide the ability for a user to click on a track&#039;s artist and display all the albums (or tracks) by that artist.&lt;br /&gt;
&lt;br /&gt;
=== Search map ===&lt;br /&gt;
&lt;br /&gt;
The X_MAP_SEARCH element must contain 1 or more X_MAP_SEARCH_ENTRY elements.&lt;br /&gt;
&lt;br /&gt;
The X_MAP_SEARCH_ENTRY has three child elements.&lt;br /&gt;
&lt;br /&gt;
X_MAP_SEARCH_ENTRY_NAME is a string and used by a control point to label the browse hierarchy.&lt;br /&gt;
&lt;br /&gt;
X_MAP_SEARCH_ENTRY_ID_PREFIX is a string and used by a control point to start the browse of a search.&lt;br /&gt;
&lt;br /&gt;
X_MAP_SEARCH_ENTRY_TYPE is a space separated list of strings used by a control point to decide how to represent the browse hierarchy in the UI. The list of valid types is described in the Types section below.&lt;br /&gt;
&lt;br /&gt;
There should be an X_MAP_SEARCH_ENTRY for each piece of metadata that the media server allows to be linked.&lt;br /&gt;
&lt;br /&gt;
Any example of an X_MAP_SEARCH_ENTRY is shown below,&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;X_MAP_SEARCH_ENTRY&amp;gt;&lt;br /&gt;
     &amp;lt;X_MAP_SEARCH_ENTRY_NAME&amp;gt;Artist&amp;lt;/X_MAP_SEARCH_ENTRY_NAME&amp;gt;&lt;br /&gt;
     &amp;lt;X_MAP_SEARCH_ENTRY_ID_PREFIX&amp;gt;db/search/artist/&amp;lt;/X_MAP_SEARCH_ENTRY_ID_PREFIX&amp;gt;&lt;br /&gt;
     &amp;lt;X_MAP_SEARCH_ENTRY_TYPE&amp;gt;artist album&amp;lt;/X_MAP_SEARCH_ENTRY_TYPE&amp;gt;&lt;br /&gt;
 &amp;lt;/X_MAP_SEARCH_ENTRY&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The example above defines a browse hierarchy that is created when searching for an artist. The hierarchy created provides a list of artists, which in turn provide a list of albums, which in turn provide a list of tracks.&lt;br /&gt;
&lt;br /&gt;
X_MAP_SEARCH_ENTRY_NAME contains the text for a label in the UI of &amp;quot;Artists&amp;quot;&lt;br /&gt;
&lt;br /&gt;
X_MAP_SEARCH_ENTRY_ID_PREFIX contains the ID prefix to use in the ContentDirectory Browse action to obtain the list of artists. The browse ID is constructed by appending the search text to the prefix, i.e. &amp;quot;db/link/artist/&amp;lt;search text&amp;gt;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
X_MAP_SEARCH_ENTRY_TYPE contains a single entry indicating that the first level contains items that represent artists, the next level will contain albums, and the next level will contain tracks.&lt;br /&gt;
&lt;br /&gt;
=== Types ===&lt;br /&gt;
&lt;br /&gt;
The list of allowed types for X_BROWSE_ENTRY_TYPE, X_MAP_LINK_ENTRY_TAG, X_LINK_ENTRY_TYPE, and X_SEARCH_ENTRY_TYPE&lt;br /&gt;
&lt;br /&gt;
 genre&lt;br /&gt;
 artist&lt;br /&gt;
 composer&lt;br /&gt;
 conductor&lt;br /&gt;
 album&lt;br /&gt;
 year&lt;br /&gt;
 mixed&lt;br /&gt;
&lt;br /&gt;
mixed is a special value that represents a container that has mixed entries.&lt;br /&gt;
&lt;br /&gt;
=== Example device XML ===&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;root xmlns=&amp;quot;urn:schemas-upnp-org:device-1-0&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;specVersion&amp;gt;&lt;br /&gt;
        &amp;lt;major&amp;gt;1&amp;lt;/major&amp;gt;&lt;br /&gt;
        &amp;lt;minor&amp;gt;1&amp;lt;/minor&amp;gt;&lt;br /&gt;
    &amp;lt;/specVersion&amp;gt;&lt;br /&gt;
    &amp;lt;device&amp;gt;&lt;br /&gt;
        &amp;lt;deviceType&amp;gt;urn:schemas-upnp-org:device:MediaServer:1&amp;lt;/deviceType&amp;gt;&lt;br /&gt;
        &amp;lt;dlna:X_DLNADOC xmlns:dlna=&amp;quot;urn:schemas-dlna-org:device-1-0&amp;quot;&amp;gt;DMS-1.50&amp;lt;/dlna:X_DLNADOC&amp;gt;&lt;br /&gt;
        &amp;lt;dlna:X_DLNACAP xmlns:dlna=&amp;quot;urn:schemas-dlna-org:device-1-0&amp;quot;&amp;gt;av-upload,image-upload,audio-upload&amp;lt;/dlna:X_DLNACAP&amp;gt;&lt;br /&gt;
        &amp;lt;openhome:X_MAP xmlns:openhome=&amp;quot;http://www.openhome.org&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;X_MAP_BROWSE&amp;gt;&lt;br /&gt;
                &amp;lt;X_MAP_BROWSE_ENTRY&amp;gt;&lt;br /&gt;
                    &amp;lt;X_MAP_BROWSE_ENTRY_NAME&amp;gt;Albums&amp;lt;/X_MAP_BROWSE_ENTRY_NAME&amp;gt;&lt;br /&gt;
                    &amp;lt;X_MAP_BROWSE_ENTRY_ID&amp;gt;db/browse/albums&amp;lt;/X_MAP_BROWSE_ENTRY_ID&amp;gt;&lt;br /&gt;
                    &amp;lt;X_MAP_BROWSE_ENTRY_TYPE&amp;gt;album&amp;lt;/X_MAP_BROWSE_ENTRY_TYPE&amp;gt;&lt;br /&gt;
                &amp;lt;/X_MAP_BROWSE_ENTRY&amp;gt;&lt;br /&gt;
                &amp;lt;X_MAP_BROWSE_ENTRY&amp;gt;&lt;br /&gt;
                    &amp;lt;X_MAP_BROWSE_ENTRY_NAME&amp;gt;Artists&amp;lt;/X_MAP_BROWSE_ENTRY_NAME&amp;gt;&lt;br /&gt;
                    &amp;lt;X_MAP_BROWSE_ENTRY_ID&amp;gt;db/browse/artists&amp;lt;/X_MAP_BROWSE_ENTRY_ID&amp;gt;&lt;br /&gt;
                    &amp;lt;X_MAP_BROWSE_ENTRY_TYPE&amp;gt;artist album&amp;lt;/X_MAP_BROWSE_ENTRY_TYPE&amp;gt;&lt;br /&gt;
                &amp;lt;/X_MAP_BROWSE_ENTRY&amp;gt;&lt;br /&gt;
                &amp;lt;X_MAP_BROWSE_ENTRY&amp;gt;&lt;br /&gt;
                    &amp;lt;X_MAP_BROWSE_ENTRY_NAME&amp;gt;Folders&amp;lt;/X_MAP_BROWSE_ENTRY_NAME&amp;gt;&lt;br /&gt;
                    &amp;lt;X_MAP_BROWSE_ENTRY_ID&amp;gt;db/browse/folders&amp;lt;/X_MAP_BROWSE_ENTRY_ID&amp;gt;&lt;br /&gt;
                    &amp;lt;X_MAP_BROWSE_ENTRY_TYPE&amp;gt;mixed&amp;lt;/X_MAP_BROWSE_ENTRY_TYPE&amp;gt;&lt;br /&gt;
                &amp;lt;/X_MAP_BROWSE_ENTRY&amp;gt;&lt;br /&gt;
            &amp;lt;/X_MAP_BROWSE&amp;gt;&lt;br /&gt;
            &amp;lt;X_MAP_LINK&amp;gt;&lt;br /&gt;
                &amp;lt;X_MAP_LINK_ENTRY&amp;gt;&lt;br /&gt;
                    &amp;lt;X_MAP_LINK_ENTRY_TAG&amp;gt;artist&amp;lt;/X_MAP_LINK_ENTRY_TAG&amp;gt;&lt;br /&gt;
                    &amp;lt;X_MAP_LINK_ENTRY_ID_PREFIX&amp;gt;db/link/artist/&amp;lt;/X_MAP_LINK_ENTRY_ID_PREFIX&amp;gt;&lt;br /&gt;
                    &amp;lt;X_MAP_LINK_ENTRY_TYPE&amp;gt;album&amp;lt;/X_MAP_LINK_ENTRY_TYPE&amp;gt;&lt;br /&gt;
                &amp;lt;/X_MAP_LINK_ENTRY&amp;gt;&lt;br /&gt;
                &amp;lt;X_MAP_LINK_ENTRY&amp;gt;&lt;br /&gt;
                    &amp;lt;X_MAP_LINK_ENTRY_TAG&amp;gt;composer&amp;lt;/X_MAP_LINK_ENTRY_TAG&amp;gt;&lt;br /&gt;
                    &amp;lt;X_MAP_LINK_ENTRY_ID_PREFIX&amp;gt;db/link/composer/&amp;lt;/X_MAP_LINK_ENTRY_ID_PREFIX&amp;gt;&lt;br /&gt;
                    &amp;lt;X_MAP_LINK_ENTRY_TYPE&amp;gt;album&amp;lt;/X_MAP_LINK_ENTRY_TYPE&amp;gt;&lt;br /&gt;
                &amp;lt;/X_MAP_LINK_ENTRY&amp;gt;&lt;br /&gt;
            &amp;lt;/X_MAP_LINK&amp;gt;&lt;br /&gt;
            &amp;lt;X_MAP_SEARCH&amp;gt;&lt;br /&gt;
                &amp;lt;X_MAP_SEARCH_ENTRY&amp;gt;&lt;br /&gt;
                    &amp;lt;X_MAP_SEARCH_ENTRY_NAME&amp;gt;Artist&amp;lt;/X_MAP_SEARCH_ENTRY_NAME&amp;gt;&lt;br /&gt;
                    &amp;lt;X_MAP_SEARCH_ENTRY_ID_PREFIX&amp;gt;db/search/artist/&amp;lt;/X_MAP_SEARCH_ENTRY_ID_PREFIX&amp;gt;&lt;br /&gt;
                    &amp;lt;X_MAP_SEARCH_ENTRY_TYPE&amp;gt;artist album&amp;lt;/X_MAP_SEARCH_ENTRY_TYPE&amp;gt;&lt;br /&gt;
                &amp;lt;/X_MAP_SEARCH_ENTRY&amp;gt;&lt;br /&gt;
                &amp;lt;X_MAP_SEARCH_ENTRY&amp;gt;&lt;br /&gt;
                    &amp;lt;X_MAP_SEARCH_ENTRY_NAME&amp;gt;Tracks&amp;lt;/X_MAP_SEARCH_ENTRY_NAME&amp;gt;&lt;br /&gt;
                    &amp;lt;X_MAP_SEARCH_ENTRY_ID_PREFIX&amp;gt;db/search/all/&amp;lt;/X_MAP_SEARCH_ENTRY_ID_PREFIX&amp;gt;&lt;br /&gt;
                    &amp;lt;X_MAP_SEARCH_ENTRY_TYPE&amp;gt;&amp;lt;/X_MAP_SEARCH_ENTRY_TYPE&amp;gt;&lt;br /&gt;
                &amp;lt;/X_MAP_SEARCH_ENTRY&amp;gt;&lt;br /&gt;
            &amp;lt;/X_MAP_SEARCH&amp;gt;&lt;br /&gt;
        &amp;lt;/openhome:X_MAP&amp;gt;&lt;br /&gt;
        &amp;lt;presentationURL&amp;gt;http://10.2.1.170:4000/res/linn.co.uk.kazooserver/index.html&amp;lt;/presentationURL&amp;gt;&lt;br /&gt;
        &amp;lt;friendlyName&amp;gt;Linn Kazoo Server [R&amp;amp;D Mac Mini]&amp;lt;/friendlyName&amp;gt;&lt;br /&gt;
        &amp;lt;manufacturer&amp;gt;Linn&amp;lt;/manufacturer&amp;gt;&lt;br /&gt;
        &amp;lt;manufacturerURL&amp;gt;http://www.linn.co.uk&amp;lt;/manufacturerURL&amp;gt;&lt;br /&gt;
        &amp;lt;modelName&amp;gt;Kazoo Server&amp;lt;/modelName&amp;gt;&lt;br /&gt;
        &amp;lt;modelURL&amp;gt;http://oss.linn.co.uk/trac/wiki/KazooServer&amp;lt;/modelURL&amp;gt;&lt;br /&gt;
        &amp;lt;UDN&amp;gt;uuid:ac3d630e37b5f11ff5cdd23c0f5a7400&amp;lt;/UDN&amp;gt;&lt;br /&gt;
        &amp;lt;iconList&amp;gt;&lt;br /&gt;
            &amp;lt;icon&amp;gt;&lt;br /&gt;
                &amp;lt;mimetype&amp;gt;image/png&amp;lt;/mimetype&amp;gt;&lt;br /&gt;
                &amp;lt;width&amp;gt;65&amp;lt;/width&amp;gt;&lt;br /&gt;
                &amp;lt;height&amp;gt;65&amp;lt;/height&amp;gt;&lt;br /&gt;
                &amp;lt;depth&amp;gt;32&amp;lt;/depth&amp;gt;&lt;br /&gt;
                &amp;lt;url&amp;gt;ac3d630e37b5f11ff5cdd23c0f5a7400/resource/icon/icon&amp;lt;/url&amp;gt;&lt;br /&gt;
            &amp;lt;/icon&amp;gt;&lt;br /&gt;
        &amp;lt;/iconList&amp;gt;&lt;br /&gt;
        &amp;lt;serviceList&amp;gt;&lt;br /&gt;
            &amp;lt;service&amp;gt;&lt;br /&gt;
                &amp;lt;serviceType&amp;gt;urn:av-openhome-org:service:PlaylistManager:1&amp;lt;/serviceType&amp;gt;&lt;br /&gt;
                &amp;lt;serviceId&amp;gt;urn:av-openhome-org:serviceId:PlaylistManager&amp;lt;/serviceId&amp;gt;&lt;br /&gt;
                &amp;lt;SCPDURL&amp;gt;/ac3d630e37b5f11ff5cdd23c0f5a7400/Upnp/av.openhome.org-PlaylistManager-1/service.xml&amp;lt;/SCPDURL&amp;gt;&lt;br /&gt;
                &amp;lt;controlURL&amp;gt;/ac3d630e37b5f11ff5cdd23c0f5a7400/av.openhome.org-PlaylistManager-1/control&amp;lt;/controlURL&amp;gt;&lt;br /&gt;
                &amp;lt;eventSubURL&amp;gt;/ac3d630e37b5f11ff5cdd23c0f5a7400/av.openhome.org-PlaylistManager-1/event&amp;lt;/eventSubURL&amp;gt;&lt;br /&gt;
            &amp;lt;/service&amp;gt;&lt;br /&gt;
            &amp;lt;service&amp;gt;&lt;br /&gt;
                &amp;lt;serviceType&amp;gt;urn:schemas-upnp-org:service:ContentDirectory:1&amp;lt;/serviceType&amp;gt;&lt;br /&gt;
                &amp;lt;serviceId&amp;gt;urn:upnp-org:serviceId:ContentDirectory&amp;lt;/serviceId&amp;gt;&lt;br /&gt;
                &amp;lt;SCPDURL&amp;gt;/ac3d630e37b5f11ff5cdd23c0f5a7400/Upnp/upnp.org-ContentDirectory-1/service.xml&amp;lt;/SCPDURL&amp;gt;&lt;br /&gt;
                &amp;lt;controlURL&amp;gt;/ac3d630e37b5f11ff5cdd23c0f5a7400/upnp.org-ContentDirectory-1/control&amp;lt;/controlURL&amp;gt;&lt;br /&gt;
                &amp;lt;eventSubURL&amp;gt;/ac3d630e37b5f11ff5cdd23c0f5a7400/upnp.org-ContentDirectory-1/event&amp;lt;/eventSubURL&amp;gt;&lt;br /&gt;
            &amp;lt;/service&amp;gt;&lt;br /&gt;
            &amp;lt;service&amp;gt;&lt;br /&gt;
                &amp;lt;serviceType&amp;gt;urn:schemas-upnp-org:service:ConnectionManager:1&amp;lt;/serviceType&amp;gt;&lt;br /&gt;
                &amp;lt;serviceId&amp;gt;urn:upnp-org:serviceId:ConnectionManager&amp;lt;/serviceId&amp;gt;&lt;br /&gt;
                &amp;lt;SCPDURL&amp;gt;/ac3d630e37b5f11ff5cdd23c0f5a7400/Upnp/upnp.org-ConnectionManager-1/service.xml&amp;lt;/SCPDURL&amp;gt;&lt;br /&gt;
                &amp;lt;controlURL&amp;gt;/ac3d630e37b5f11ff5cdd23c0f5a7400/upnp.org-ConnectionManager-1/control&amp;lt;/controlURL&amp;gt;&lt;br /&gt;
                &amp;lt;eventSubURL&amp;gt;/ac3d630e37b5f11ff5cdd23c0f5a7400/upnp.org-ConnectionManager-1/event&amp;lt;/eventSubURL&amp;gt;&lt;br /&gt;
            &amp;lt;/service&amp;gt;&lt;br /&gt;
        &amp;lt;/serviceList&amp;gt;&lt;br /&gt;
    &amp;lt;/device&amp;gt;&lt;br /&gt;
 &amp;lt;/root&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Index maps ==&lt;br /&gt;
&lt;br /&gt;
Large lists are difficult to navigate, especially on mobile devices. Mobile devices added the idea of an index map to improve this situation. The index map allows a users to jump to different sections in a large list, similar to what is possible with a scrollbar on desktops.&lt;br /&gt;
&lt;br /&gt;
In order for a control point to generate an index map for any particular level in a ContentDirectory&#039;s hierarchy it first needs to download all the objects in the container, figure out if they are sorted and then calculate the index map. This means that a user will need to wait, perhaps minutes, before an index map is able to be presented on the UI. &lt;br /&gt;
&lt;br /&gt;
The proposal is to allow the media server to calculate an index map and return it as part of the DIDL-Lite XML. Below shows some example DIDL-Lite with an index map included.&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;DIDL-Lite xmlns=&amp;quot;urn:schemas-upnp-org:metadata-1-0/DIDL-Lite/&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;container id=&amp;quot;db/ba37a2ac24efa676c8676aab71a6cdf074&amp;quot; parentID=&amp;quot;0&amp;quot; restricted=&amp;quot;true&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;dc:title xmlns:dc=&amp;quot;http://purl.org/dc/elements/1.1/&amp;quot;&amp;gt;Worlds Apart [Deluxe Edition]&amp;lt;/dc:title&amp;gt;&lt;br /&gt;
        &amp;lt;upnp:udn xmlns:upnp=&amp;quot;urn:schemas-upnp-org:metadata-1-0/upnp/&amp;quot;&amp;gt;ac3d630e37b5f11ff5cdd23c0f5a7400&amp;lt;/upnp:udn&amp;gt;&lt;br /&gt;
        &amp;lt;upnp:class xmlns:upnp=&amp;quot;urn:schemas-upnp-org:metadata-1-0/upnp/&amp;quot;&amp;gt;object.container.album.musicAlbum&amp;lt;/upnp:class&amp;gt;&lt;br /&gt;
        &amp;lt;upnp:artist xmlns:upnp=&amp;quot;urn:schemas-upnp-org:metadata-1-0/upnp/&amp;quot;&amp;gt;...And You Will Know Us by the Trail of Dead&amp;lt;/upnp:artist&amp;gt;&lt;br /&gt;
        &amp;lt;upnp:albumArtURI&amp;gt;http://10.2.1.170:4000/linn.co.uk.kazooserver/ms/artwork/37a2ac2?size=0&amp;lt;/upnp:albumArtURI&amp;gt;&lt;br /&gt;
    &amp;lt;/container&amp;gt;&lt;br /&gt;
    &amp;lt;desc nameSpace=&amp;quot;openhome.org&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;indexmap&amp;gt;&lt;br /&gt;
            &amp;lt;labels&amp;gt;# A B C D E F G H I J K L M N O P Q R S T U V W X Y Z +&amp;lt;/labels&amp;gt;&lt;br /&gt;
            &amp;lt;indices&amp;gt;0 10 20 30 40 50 60 70 80 90 100 110 120 130 140 150 160 170 180 190 200 210 220 230 240 250 260 270&amp;lt;/indices&amp;gt;&lt;br /&gt;
        &amp;lt;/indexmap&amp;gt;&lt;br /&gt;
    &amp;lt;/desc&amp;gt;&lt;br /&gt;
 &amp;lt;/DIDL-Lite&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The index map contains two, space separated, lists. These lists must contain the same number of elements. The example above is for a container who&#039;s contents are alphabetically sorted. But an index map could just as easily define a container who&#039;s contents are sorted by decade, e.g 1960 - 2015,&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;desc nameSpace=&amp;quot;openhome.org&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;indexmap&amp;gt;&lt;br /&gt;
        &amp;lt;labels&amp;gt;60 70 80 90 00 10&amp;lt;/labels&amp;gt;&lt;br /&gt;
        &amp;lt;indices&amp;gt;0 10 20 30 40 50&amp;lt;/indices&amp;gt;&lt;br /&gt;
    &amp;lt;/indexmap&amp;gt;&lt;br /&gt;
 &amp;lt;/desc&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Image Resolution ==&lt;br /&gt;
&lt;br /&gt;
Control points running on different platforms have different memory limits and display technologies. This means that a control point on a PC might want to display artwork at a high resolution, while a control point on a PDA might want to display artwork at a much lower resolution.&lt;br /&gt;
&lt;br /&gt;
Media servers often try to solve this problem using one of the following two methods:&lt;br /&gt;
&lt;br /&gt;
# A configurable parameter that scales all artwork to a user defined size&lt;br /&gt;
# A profile system where a user can create profiles for each class of control point they have and configure a parameter that scales all artwork to a user defined size per profile&lt;br /&gt;
&lt;br /&gt;
The first solution is highly problematic because it limits the resolution of artwork across the whole network. But a single network very often contains control points that can display high resolution images AND control points that can&#039;t.&lt;br /&gt;
&lt;br /&gt;
The second solution is just architecturally poor, turning the relationship between a control point and a media server on its head. Why should the media server try to infer what a control point needs through configuration when the control point is perfectly capable of telling the media server its exact requirements in every single circumstance.&lt;br /&gt;
&lt;br /&gt;
So, it is proposed that compliant media servers include a &#039;&#039;&#039;size&#039;&#039;&#039; element in their artwork uri&#039;s, where the size is the image&#039;s largest dimension. This allows a control point to ask for an image at a specified size.&lt;br /&gt;
&lt;br /&gt;
=== Example ===&lt;br /&gt;
&lt;br /&gt;
If the original artwork was 400x512, then a media server would provide the following albumArtURI: &amp;lt;uri&amp;gt;?size=512. If it is not possible for the media server to obtain the original resolution then the media server would provide the following albumArtURI: &amp;lt;uri&amp;gt;?size=0.&lt;br /&gt;
&lt;br /&gt;
The presence of the size element tells the control point:&lt;br /&gt;
&lt;br /&gt;
# the media server implements the image scaling extension&lt;br /&gt;
# the original size of the image.&lt;br /&gt;
&lt;br /&gt;
Now the control point can request the image at any resolution by using &amp;lt;uri&amp;gt;?size=x, where x is the size it wants.&lt;br /&gt;
&lt;br /&gt;
So, in this example, &amp;lt;uri&amp;gt;?size=1024 gets an 800x1024 image, and &amp;lt;uri&amp;gt;?size=200 gets a 156x200 image.&lt;br /&gt;
&lt;br /&gt;
== albumArtURI&amp;lt;br&amp;gt; ==&lt;br /&gt;
&lt;br /&gt;
The current specification only allows retrieval of artwork for a musicAlbum container through the property albumArtURI. When browsing a music library on a control point it quickly becomes clear that to implement a graphically rich control point the ContentDirectory service should provide a way to retrieve artwork for all of the content directory classes, not just musicAlbum containers.&lt;br /&gt;
&lt;br /&gt;
There has become a somewhat defacto standard where just about all media server provide an albumArtURI property for a musicItem item as well as for a musicAlbum container, however this is still not good enough to implement a graphically rich control point.&lt;br /&gt;
&lt;br /&gt;
It is proposed that an optional property is introduced to the object class called &#039;&#039;&#039;albumArtURI&#039;&#039;&amp;amp;nbsp;&#039;&#039;&#039;&#039;&#039;which may contain an attribute &#039;&#039;&#039;title&#039;&#039;&#039;,&amp;amp;nbsp;e.g. &amp;amp;lt;albumArtURI title=&amp;quot;Font Cover&amp;quot;&amp;amp;gt;http://Front Cover.jpg&amp;amp;lt;/albumArtURI&amp;amp;gt;.&amp;amp;nbsp;The object class can contain zero or more albumArtURIs elements.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Medium =&lt;br /&gt;
= Low =&lt;br /&gt;
&lt;br /&gt;
== Dynamic IP Addresses ==&lt;br /&gt;
&lt;br /&gt;
At present all media servers return URIs that contain a reference to their IP address, e.g. http://172.20.1.1/music.flac etc. This means that if the media server&#039;s IP address were to change across reboots, then any control point or media renderer with URIs that referenced the media server before the reboot will become invalid.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
It is proposed that a media server should always reference itself by host name and not by IP address in any XML that it sends to external devices, i.e. http://mynas/music.flac.&lt;br /&gt;
&lt;br /&gt;
== Disc Information ==&lt;br /&gt;
&lt;br /&gt;
It is proposed that two new properties are added to the musicTrack item called &#039;&#039;&#039;OriginalDiscNumber&#039;&#039;&#039; and &#039;&#039;&#039;OriginalDiscCount&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== Replay Gain Information ==&lt;br /&gt;
&lt;br /&gt;
It is proposed that four new properties are added to the musicTrack item called &#039;&#039;&#039;ReplayGainAlbum&#039;&#039;&#039;, &#039;&#039;&#039;ReplayGainAlbumPeak&#039;&#039;&#039;, &#039;&#039;&#039;ReplayGainTrack&#039;&#039;&#039;, and &#039;&#039;&#039;ReplayGainTrackPeak&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
== webURI ==&lt;br /&gt;
&lt;br /&gt;
The current specification does not easily allow a control point to provide rich information about objects in the browse hierarchy.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
It is proposed to add an optionally property to the object class called &#039;&#039;&#039;webURI&amp;amp;nbsp;&#039;&#039;&#039;which will contain a URI to a website that provides a rich collection of information about the object, e.g. for a musicArtist container it would provided a link to a website that provided information about the artist.&lt;/div&gt;</summary>
		<author><name>Davidd</name></author>
	</entry>
	<entry>
		<id>https://docs.linn.co.uk/wiki/index.php?title=Developer:Media_Server_Extensions&amp;diff=11180</id>
		<title>Developer:Media Server Extensions</title>
		<link rel="alternate" type="text/html" href="https://docs.linn.co.uk/wiki/index.php?title=Developer:Media_Server_Extensions&amp;diff=11180"/>
		<updated>2015-02-20T17:06:04Z</updated>

		<summary type="html">&lt;p&gt;Davidd: /* Container map */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Introduction =&lt;br /&gt;
&lt;br /&gt;
The ContentDirectory service has various limitations which become apparent when implementing control points on different hardware platforms. This document aims to outline some ideas that address the various shortcomings of the ContentDirectory specification. The ideas have been categorised in low, medium and high priority groups.&lt;br /&gt;
&lt;br /&gt;
= High =&lt;br /&gt;
&lt;br /&gt;
== Container map ==&lt;br /&gt;
&lt;br /&gt;
The current ContentDirectory specification makes it tricky for a control point to display the returned contents in an appropriate, aesthetically pleasing, manner for the content being viewed. This is because the ContentDirectory specification does not allow for a control point to know in advanced what content to expect when browsing through any particular hierarchy.&lt;br /&gt;
&lt;br /&gt;
An example of this might be, at a particular point in the browse hierarchy the ContentDirectory will return a list of albums which in turn will contain a list of tracks. A UI might wish to represent this list of albums as a grid and the album&#039;s tracks as a header and a list of the tracks. Currently it is not possible for the UI to know when it gets to a point in a hierarchy where the hierarchy represents a list of albums followed by a list of tracks.&lt;br /&gt;
&lt;br /&gt;
The container map extension allows a media server to express its container hierarchy in advance of the control point navigating it. This is done using an OpenHome vendor extension to the device XML.&lt;br /&gt;
&lt;br /&gt;
Three types of mapped container are defined: browse, link, and search.&lt;br /&gt;
&lt;br /&gt;
The browse map defines named top level containers that represent significant starting points for browsing that can meaningfully be presented in top level tabs of a control point UI.&lt;br /&gt;
&lt;br /&gt;
The link map defines containers that can be meaningfully linked to from track or album details. For instance a track will typically have an artist defined. If an entry for &amp;quot;artist&amp;quot; is defined in the link map then it will be possible for the user of a control point to quickly access this artist-related container by clicking on the track&#039;s artist text. Similar links might be offered for &amp;quot;genre&amp;quot;, &amp;quot;composer&amp;quot;, &amp;quot;conductor&amp;quot;, etc.&lt;br /&gt;
&lt;br /&gt;
 A media media server may implement any subset of these. A media server will be able to indicate to a control point which mapped containers it supports by including the relevant openhome XML extensions in its device XML.&lt;br /&gt;
&lt;br /&gt;
For a media server to indicate it supports browse mapped containers the device XML must contain entries within an X_MAP_BROWSE element, see the example device XML below.&lt;br /&gt;
&lt;br /&gt;
For a media server to indicate it supports link mapped containers the device XML must contain entries within an X_MAP_LINK element, see the example device XML below.&lt;br /&gt;
&lt;br /&gt;
For a media server to indicate it supports browse mapped containers the device XML must contain entries within an X_MAP_SEARCH element, see the example device XML below.&lt;br /&gt;
&lt;br /&gt;
=== Browse map ===&lt;br /&gt;
&lt;br /&gt;
The X_MAP_BROWSE element must contain 1 or more X_MAP_BROWSE_ENTRY elements.&lt;br /&gt;
&lt;br /&gt;
The X_MAP_BROWSE_ENTRY has three child elements.&lt;br /&gt;
&lt;br /&gt;
X_MAP_BROWSE_ENTRY_NAME is a string and used by a control point to label the root of the browse hierarchy.&lt;br /&gt;
X_MAP_BROWSE_ENTRY_ID is a string and used by a control point to start the browse of the browse hierarchy.&lt;br /&gt;
X_MAP_BROWSE_ENTRY_TYPE is a space separated list of strings used by a control point to decide how to represent the browse hierarchy in the UI. The list of valid types is described in the Types section below.&lt;br /&gt;
&lt;br /&gt;
There should be an X_MAP_BROWSE_ENTRY for each root browse hierarchy defined by the media server.&lt;br /&gt;
&lt;br /&gt;
Any example of an X_MAP_BROWSE_ENTRY is shown below,&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;X_MAP_BROWSE_ENTRY&amp;gt;&lt;br /&gt;
     &amp;lt;X_MAP_BROWSE_ENTRY_NAME&amp;gt;Albums&amp;lt;/X_MAP_BROWSE_ENTRY_NAME&amp;gt;&lt;br /&gt;
     &amp;lt;X_MAP_BROWSE_ENTRY_ID&amp;gt;db/browse/albums&amp;lt;/X_MAP_BROWSE_ENTRY_ID&amp;gt;&lt;br /&gt;
     &amp;lt;X_MAP_BROWSE_ENTRY_TYPE&amp;gt;album&amp;lt;/X_MAP_BROWSE_ENTRY_TYPE&amp;gt;&lt;br /&gt;
 &amp;lt;/X_MAP_BROWSE_ENTRY&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The example above defines a root browse hierarchy that provides a list of albums which in turn provide a list of tracks.&lt;br /&gt;
&lt;br /&gt;
X_MAP_BROWSE_ENTRY contains the text for a label in the UI of &amp;quot;Albums&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
X_MAP_BROWSE_ENTRY_ID contains the ID to use in the ContentDirectory Browse action to obtain the list of albums.&lt;br /&gt;
&lt;br /&gt;
X_MAP_BROWSE_ENTRY_TYPE contains a single entry indicating that the first level contains items that represent albums and the next level will contain tracks. If for example the hierarchy was a list of genres, then a list of artists, then a list of albums, and finally a list of tracks the type would be &amp;quot;genre artist album&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
=== Link map ===&lt;br /&gt;
&lt;br /&gt;
The X_MAP_LINK element must contain 1 or more X_MAP_LINK_ENTRY elements.&lt;br /&gt;
&lt;br /&gt;
The X_MAP_LINK_ENTRY has three child elements.&lt;br /&gt;
&lt;br /&gt;
X_MAP_LINK_ENTRY_TAG is a string and used by a control point determine which piece of metadata is valid to show as a link.&lt;br /&gt;
&lt;br /&gt;
X_MAP_LINK_ENTRY_ID_PREFIX is a string and used by a control point to start the browse of a link.&lt;br /&gt;
&lt;br /&gt;
X_MAP_LINK_ENTRY_TYPE is a space separated list of strings used by a control point to decide how to represent the browse hierarchy in the UI. The list of valid types is described in the Types section below.&lt;br /&gt;
&lt;br /&gt;
There should be an X_MAP_LINK_ENTRY for each piece of metadata that the media server allows to be linked.&lt;br /&gt;
&lt;br /&gt;
Any example of an X_MAP_LINK_ENTRY is shown below,&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;X_MAP_LINK_ENTRY&amp;gt;&lt;br /&gt;
     &amp;lt;X_MAP_LINK_ENTRY_TAG&amp;gt;artist&amp;lt;/X_MAP_LINK_ENTRY_TAG&amp;gt;&lt;br /&gt;
     &amp;lt;X_MAP_LINK_ENTRY_ID_PREFIX&amp;gt;db/link/artist/&amp;lt;/X_MAP_LINK_ENTRY_ID_PREFIX&amp;gt;&lt;br /&gt;
     &amp;lt;X_MAP_LINK_ENTRY_TYPE&amp;gt;album&amp;lt;/X_MAP_LINK_ENTRY_TYPE&amp;gt;&lt;br /&gt;
 &amp;lt;/X_MAP_LINK_ENTRY&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The example above defines a browse hierarchy that is created when linking from an artist name. The hierarchy created provides a list of linked artist albums which in turn provide a list of tracks.&lt;br /&gt;
&lt;br /&gt;
X_MAP_LINK_ENTRY_TAG contains the piece of metadata that can be linked to &amp;quot;artist&amp;quot;. Valid types are listed in the Types section below.&lt;br /&gt;
&lt;br /&gt;
X_MAP_LINK_ENTRY_ID_PREFIX contains the ID prefix to use in the ContentDirectory Browse action to obtain the list of albums. The browse ID is constructed by appending the text in the artist metadata to the prefix, i.e. &amp;quot;db/link/artist/&amp;lt;artist name&amp;gt;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
X_MAP_LINK_ENTRY_TYPE contains a single entry indicating that the first level contains items that represent albums and the next level will contain tracks.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Link is the ability for a user to link between various pieces of metadata for an object. For example if the server supported linking on the artist tag then using the link map a control point would be able to provide the ability for a user to click on a track&#039;s artist and display all the albums (or tracks) by that artist.&lt;br /&gt;
&lt;br /&gt;
=== Search map ===&lt;br /&gt;
&lt;br /&gt;
The X_MAP_SEARCH element must contain 1 or more X_MAP_SEARCH_ENTRY elements.&lt;br /&gt;
&lt;br /&gt;
The X_MAP_SEARCH_ENTRY has three child elements.&lt;br /&gt;
&lt;br /&gt;
X_MAP_SEARCH_ENTRY_NAME is a string and used by a control point to label the browse hierarchy.&lt;br /&gt;
&lt;br /&gt;
X_MAP_SEARCH_ENTRY_ID_PREFIX is a string and used by a control point to start the browse of a search.&lt;br /&gt;
&lt;br /&gt;
X_MAP_SEARCH_ENTRY_TYPE is a space separated list of strings used by a control point to decide how to represent the browse hierarchy in the UI. The list of valid types is described in the Types section below.&lt;br /&gt;
&lt;br /&gt;
There should be an X_MAP_SEARCH_ENTRY for each piece of metadata that the media server allows to be linked.&lt;br /&gt;
&lt;br /&gt;
Any example of an X_MAP_SEARCH_ENTRY is shown below,&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;X_MAP_SEARCH_ENTRY&amp;gt;&lt;br /&gt;
     &amp;lt;X_MAP_SEARCH_ENTRY_NAME&amp;gt;Artist&amp;lt;/X_MAP_SEARCH_ENTRY_NAME&amp;gt;&lt;br /&gt;
     &amp;lt;X_MAP_SEARCH_ENTRY_ID_PREFIX&amp;gt;db/search/artist/&amp;lt;/X_MAP_SEARCH_ENTRY_ID_PREFIX&amp;gt;&lt;br /&gt;
     &amp;lt;X_MAP_SEARCH_ENTRY_TYPE&amp;gt;artist album&amp;lt;/X_MAP_SEARCH_ENTRY_TYPE&amp;gt;&lt;br /&gt;
 &amp;lt;/X_MAP_SEARCH_ENTRY&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The example above defines a browse hierarchy that is created when searching for an artist. The hierarchy created provides a list of artists, which in turn provide a list of albums, which in turn provide a list of tracks.&lt;br /&gt;
&lt;br /&gt;
X_MAP_SEARCH_ENTRY_NAME contains the text for a label in the UI of &amp;quot;Artists&amp;quot;&lt;br /&gt;
&lt;br /&gt;
X_MAP_SEARCH_ENTRY_ID_PREFIX contains the ID prefix to use in the ContentDirectory Browse action to obtain the list of artists. The browse ID is constructed by appending the search text to the prefix, i.e. &amp;quot;db/link/artist/&amp;lt;search text&amp;gt;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
X_MAP_SEARCH_ENTRY_TYPE contains a single entry indicating that the first level contains items that represent artists, the next level will contain albums, and the next level will contain tracks.&lt;br /&gt;
&lt;br /&gt;
=== Types ===&lt;br /&gt;
&lt;br /&gt;
The list of allowed types for X_BROWSE_ENTRY_TYPE, X_MAP_LINK_ENTRY_TAG, X_LINK_ENTRY_TYPE, and X_SEARCH_ENTRY_TYPE&lt;br /&gt;
&lt;br /&gt;
 genre&lt;br /&gt;
 artist&lt;br /&gt;
 composer&lt;br /&gt;
 conductor&lt;br /&gt;
 album&lt;br /&gt;
 year&lt;br /&gt;
 mixed&lt;br /&gt;
&lt;br /&gt;
mixed is a special value that represents a container that has mixed entries.&lt;br /&gt;
&lt;br /&gt;
=== Example device XML ===&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;root xmlns=&amp;quot;urn:schemas-upnp-org:device-1-0&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;specVersion&amp;gt;&lt;br /&gt;
        &amp;lt;major&amp;gt;1&amp;lt;/major&amp;gt;&lt;br /&gt;
        &amp;lt;minor&amp;gt;1&amp;lt;/minor&amp;gt;&lt;br /&gt;
    &amp;lt;/specVersion&amp;gt;&lt;br /&gt;
    &amp;lt;device&amp;gt;&lt;br /&gt;
        &amp;lt;deviceType&amp;gt;urn:schemas-upnp-org:device:MediaServer:1&amp;lt;/deviceType&amp;gt;&lt;br /&gt;
        &amp;lt;dlna:X_DLNADOC xmlns:dlna=&amp;quot;urn:schemas-dlna-org:device-1-0&amp;quot;&amp;gt;DMS-1.50&amp;lt;/dlna:X_DLNADOC&amp;gt;&lt;br /&gt;
        &amp;lt;dlna:X_DLNACAP xmlns:dlna=&amp;quot;urn:schemas-dlna-org:device-1-0&amp;quot;&amp;gt;av-upload,image-upload,audio-upload&amp;lt;/dlna:X_DLNACAP&amp;gt;&lt;br /&gt;
        &amp;lt;openhome:X_MAP xmlns:openhome=&amp;quot;http://www.openhome.org&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;X_MAP_BROWSE&amp;gt;&lt;br /&gt;
                &amp;lt;X_MAP_BROWSE_ENTRY&amp;gt;&lt;br /&gt;
                    &amp;lt;X_MAP_BROWSE_ENTRY_NAME&amp;gt;Albums&amp;lt;/X_MAP_BROWSE_ENTRY_NAME&amp;gt;&lt;br /&gt;
                    &amp;lt;X_MAP_BROWSE_ENTRY_ID&amp;gt;db/browse/albums&amp;lt;/X_MAP_BROWSE_ENTRY_ID&amp;gt;&lt;br /&gt;
                    &amp;lt;X_MAP_BROWSE_ENTRY_TYPE&amp;gt;album&amp;lt;/X_MAP_BROWSE_ENTRY_TYPE&amp;gt;&lt;br /&gt;
                &amp;lt;/X_MAP_BROWSE_ENTRY&amp;gt;&lt;br /&gt;
                &amp;lt;X_MAP_BROWSE_ENTRY&amp;gt;&lt;br /&gt;
                    &amp;lt;X_MAP_BROWSE_ENTRY_NAME&amp;gt;Artists&amp;lt;/X_MAP_BROWSE_ENTRY_NAME&amp;gt;&lt;br /&gt;
                    &amp;lt;X_MAP_BROWSE_ENTRY_ID&amp;gt;db/browse/artists&amp;lt;/X_MAP_BROWSE_ENTRY_ID&amp;gt;&lt;br /&gt;
                    &amp;lt;X_MAP_BROWSE_ENTRY_TYPE&amp;gt;artist album&amp;lt;/X_MAP_BROWSE_ENTRY_TYPE&amp;gt;&lt;br /&gt;
                &amp;lt;/X_MAP_BROWSE_ENTRY&amp;gt;&lt;br /&gt;
                &amp;lt;X_MAP_BROWSE_ENTRY&amp;gt;&lt;br /&gt;
                    &amp;lt;X_MAP_BROWSE_ENTRY_NAME&amp;gt;Folders&amp;lt;/X_MAP_BROWSE_ENTRY_NAME&amp;gt;&lt;br /&gt;
                    &amp;lt;X_MAP_BROWSE_ENTRY_ID&amp;gt;db/browse/folders&amp;lt;/X_MAP_BROWSE_ENTRY_ID&amp;gt;&lt;br /&gt;
                    &amp;lt;X_MAP_BROWSE_ENTRY_TYPE&amp;gt;mixed&amp;lt;/X_MAP_BROWSE_ENTRY_TYPE&amp;gt;&lt;br /&gt;
                &amp;lt;/X_MAP_BROWSE_ENTRY&amp;gt;&lt;br /&gt;
            &amp;lt;/X_MAP_BROWSE&amp;gt;&lt;br /&gt;
            &amp;lt;X_MAP_LINK&amp;gt;&lt;br /&gt;
                &amp;lt;X_MAP_LINK_ENTRY&amp;gt;&lt;br /&gt;
                    &amp;lt;X_MAP_LINK_ENTRY_TAG&amp;gt;artist&amp;lt;/X_MAP_LINK_ENTRY_TAG&amp;gt;&lt;br /&gt;
                    &amp;lt;X_MAP_LINK_ENTRY_ID_PREFIX&amp;gt;db/link/artist/&amp;lt;/X_MAP_LINK_ENTRY_ID_PREFIX&amp;gt;&lt;br /&gt;
                    &amp;lt;X_MAP_LINK_ENTRY_TYPE&amp;gt;album&amp;lt;/X_MAP_LINK_ENTRY_TYPE&amp;gt;&lt;br /&gt;
                &amp;lt;/X_MAP_LINK_ENTRY&amp;gt;&lt;br /&gt;
                &amp;lt;X_MAP_LINK_ENTRY&amp;gt;&lt;br /&gt;
                    &amp;lt;X_MAP_LINK_ENTRY_TAG&amp;gt;composer&amp;lt;/X_MAP_LINK_ENTRY_TAG&amp;gt;&lt;br /&gt;
                    &amp;lt;X_MAP_LINK_ENTRY_ID_PREFIX&amp;gt;db/link/composer/&amp;lt;/X_MAP_LINK_ENTRY_ID_PREFIX&amp;gt;&lt;br /&gt;
                    &amp;lt;X_MAP_LINK_ENTRY_TYPE&amp;gt;album&amp;lt;/X_MAP_LINK_ENTRY_TYPE&amp;gt;&lt;br /&gt;
                &amp;lt;/X_MAP_LINK_ENTRY&amp;gt;&lt;br /&gt;
            &amp;lt;/X_MAP_LINK&amp;gt;&lt;br /&gt;
            &amp;lt;X_MAP_SEARCH&amp;gt;&lt;br /&gt;
                &amp;lt;X_MAP_SEARCH_ENTRY&amp;gt;&lt;br /&gt;
                    &amp;lt;X_MAP_SEARCH_ENTRY_NAME&amp;gt;Artist&amp;lt;/X_MAP_SEARCH_ENTRY_NAME&amp;gt;&lt;br /&gt;
                    &amp;lt;X_MAP_SEARCH_ENTRY_ID_PREFIX&amp;gt;db/search/artist/&amp;lt;/X_MAP_SEARCH_ENTRY_ID_PREFIX&amp;gt;&lt;br /&gt;
                    &amp;lt;X_MAP_SEARCH_ENTRY_TYPE&amp;gt;artist album&amp;lt;/X_MAP_SEARCH_ENTRY_TYPE&amp;gt;&lt;br /&gt;
                &amp;lt;/X_MAP_SEARCH_ENTRY&amp;gt;&lt;br /&gt;
                &amp;lt;X_MAP_SEARCH_ENTRY&amp;gt;&lt;br /&gt;
                    &amp;lt;X_MAP_SEARCH_ENTRY_NAME&amp;gt;Tracks&amp;lt;/X_MAP_SEARCH_ENTRY_NAME&amp;gt;&lt;br /&gt;
                    &amp;lt;X_MAP_SEARCH_ENTRY_ID_PREFIX&amp;gt;db/search/all/&amp;lt;/X_MAP_SEARCH_ENTRY_ID_PREFIX&amp;gt;&lt;br /&gt;
                    &amp;lt;X_MAP_SEARCH_ENTRY_TYPE&amp;gt;&amp;lt;/X_MAP_SEARCH_ENTRY_TYPE&amp;gt;&lt;br /&gt;
                &amp;lt;/X_MAP_SEARCH_ENTRY&amp;gt;&lt;br /&gt;
            &amp;lt;/X_MAP_SEARCH&amp;gt;&lt;br /&gt;
        &amp;lt;/openhome:X_MAP&amp;gt;&lt;br /&gt;
        &amp;lt;presentationURL&amp;gt;http://10.2.1.170:4000/res/linn.co.uk.kazooserver/index.html&amp;lt;/presentationURL&amp;gt;&lt;br /&gt;
        &amp;lt;friendlyName&amp;gt;Linn Kazoo Server [R&amp;amp;D Mac Mini]&amp;lt;/friendlyName&amp;gt;&lt;br /&gt;
        &amp;lt;manufacturer&amp;gt;Linn&amp;lt;/manufacturer&amp;gt;&lt;br /&gt;
        &amp;lt;manufacturerURL&amp;gt;http://www.linn.co.uk&amp;lt;/manufacturerURL&amp;gt;&lt;br /&gt;
        &amp;lt;modelName&amp;gt;Kazoo Server&amp;lt;/modelName&amp;gt;&lt;br /&gt;
        &amp;lt;modelURL&amp;gt;http://oss.linn.co.uk/trac/wiki/KazooServer&amp;lt;/modelURL&amp;gt;&lt;br /&gt;
        &amp;lt;UDN&amp;gt;uuid:ac3d630e37b5f11ff5cdd23c0f5a7400&amp;lt;/UDN&amp;gt;&lt;br /&gt;
        &amp;lt;iconList&amp;gt;&lt;br /&gt;
            &amp;lt;icon&amp;gt;&lt;br /&gt;
                &amp;lt;mimetype&amp;gt;image/png&amp;lt;/mimetype&amp;gt;&lt;br /&gt;
                &amp;lt;width&amp;gt;65&amp;lt;/width&amp;gt;&lt;br /&gt;
                &amp;lt;height&amp;gt;65&amp;lt;/height&amp;gt;&lt;br /&gt;
                &amp;lt;depth&amp;gt;32&amp;lt;/depth&amp;gt;&lt;br /&gt;
                &amp;lt;url&amp;gt;ac3d630e37b5f11ff5cdd23c0f5a7400/resource/icon/icon&amp;lt;/url&amp;gt;&lt;br /&gt;
            &amp;lt;/icon&amp;gt;&lt;br /&gt;
        &amp;lt;/iconList&amp;gt;&lt;br /&gt;
        &amp;lt;serviceList&amp;gt;&lt;br /&gt;
            &amp;lt;service&amp;gt;&lt;br /&gt;
                &amp;lt;serviceType&amp;gt;urn:av-openhome-org:service:PlaylistManager:1&amp;lt;/serviceType&amp;gt;&lt;br /&gt;
                &amp;lt;serviceId&amp;gt;urn:av-openhome-org:serviceId:PlaylistManager&amp;lt;/serviceId&amp;gt;&lt;br /&gt;
                &amp;lt;SCPDURL&amp;gt;/ac3d630e37b5f11ff5cdd23c0f5a7400/Upnp/av.openhome.org-PlaylistManager-1/service.xml&amp;lt;/SCPDURL&amp;gt;&lt;br /&gt;
                &amp;lt;controlURL&amp;gt;/ac3d630e37b5f11ff5cdd23c0f5a7400/av.openhome.org-PlaylistManager-1/control&amp;lt;/controlURL&amp;gt;&lt;br /&gt;
                &amp;lt;eventSubURL&amp;gt;/ac3d630e37b5f11ff5cdd23c0f5a7400/av.openhome.org-PlaylistManager-1/event&amp;lt;/eventSubURL&amp;gt;&lt;br /&gt;
            &amp;lt;/service&amp;gt;&lt;br /&gt;
            &amp;lt;service&amp;gt;&lt;br /&gt;
                &amp;lt;serviceType&amp;gt;urn:schemas-upnp-org:service:ContentDirectory:1&amp;lt;/serviceType&amp;gt;&lt;br /&gt;
                &amp;lt;serviceId&amp;gt;urn:upnp-org:serviceId:ContentDirectory&amp;lt;/serviceId&amp;gt;&lt;br /&gt;
                &amp;lt;SCPDURL&amp;gt;/ac3d630e37b5f11ff5cdd23c0f5a7400/Upnp/upnp.org-ContentDirectory-1/service.xml&amp;lt;/SCPDURL&amp;gt;&lt;br /&gt;
                &amp;lt;controlURL&amp;gt;/ac3d630e37b5f11ff5cdd23c0f5a7400/upnp.org-ContentDirectory-1/control&amp;lt;/controlURL&amp;gt;&lt;br /&gt;
                &amp;lt;eventSubURL&amp;gt;/ac3d630e37b5f11ff5cdd23c0f5a7400/upnp.org-ContentDirectory-1/event&amp;lt;/eventSubURL&amp;gt;&lt;br /&gt;
            &amp;lt;/service&amp;gt;&lt;br /&gt;
            &amp;lt;service&amp;gt;&lt;br /&gt;
                &amp;lt;serviceType&amp;gt;urn:schemas-upnp-org:service:ConnectionManager:1&amp;lt;/serviceType&amp;gt;&lt;br /&gt;
                &amp;lt;serviceId&amp;gt;urn:upnp-org:serviceId:ConnectionManager&amp;lt;/serviceId&amp;gt;&lt;br /&gt;
                &amp;lt;SCPDURL&amp;gt;/ac3d630e37b5f11ff5cdd23c0f5a7400/Upnp/upnp.org-ConnectionManager-1/service.xml&amp;lt;/SCPDURL&amp;gt;&lt;br /&gt;
                &amp;lt;controlURL&amp;gt;/ac3d630e37b5f11ff5cdd23c0f5a7400/upnp.org-ConnectionManager-1/control&amp;lt;/controlURL&amp;gt;&lt;br /&gt;
                &amp;lt;eventSubURL&amp;gt;/ac3d630e37b5f11ff5cdd23c0f5a7400/upnp.org-ConnectionManager-1/event&amp;lt;/eventSubURL&amp;gt;&lt;br /&gt;
            &amp;lt;/service&amp;gt;&lt;br /&gt;
        &amp;lt;/serviceList&amp;gt;&lt;br /&gt;
    &amp;lt;/device&amp;gt;&lt;br /&gt;
 &amp;lt;/root&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Index maps ==&lt;br /&gt;
&lt;br /&gt;
Large lists are difficult to navigate, especially on mobile devices. Mobile devices added the idea of an index map to improve this situation. The index map allows a users to jump to different sections in a large list, similar to what is possible with a scrollbar on desktops.&lt;br /&gt;
&lt;br /&gt;
In order for a control point to generate an index map for any particular level in a ContentDirectory&#039;s hierarchy it first needs to download all the objects in the container, figure out if they are sorted and then calculate the index map. This means that a user will need to wait, perhaps minutes, before an index map is able to be presented on the UI. &lt;br /&gt;
&lt;br /&gt;
The proposal is to allow the media server to calculate an index map and return it as part of the DIDL-Lite XML. Below shows some example DIDL-Lite with an index map included.&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;DIDL-Lite xmlns=&amp;quot;urn:schemas-upnp-org:metadata-1-0/DIDL-Lite/&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;container id=&amp;quot;db/ba37a2ac24efa676c8676aab71a6cdf074&amp;quot; parentID=&amp;quot;0&amp;quot; restricted=&amp;quot;true&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;dc:title xmlns:dc=&amp;quot;http://purl.org/dc/elements/1.1/&amp;quot;&amp;gt;Worlds Apart [Deluxe Edition]&amp;lt;/dc:title&amp;gt;&lt;br /&gt;
        &amp;lt;upnp:udn xmlns:upnp=&amp;quot;urn:schemas-upnp-org:metadata-1-0/upnp/&amp;quot;&amp;gt;ac3d630e37b5f11ff5cdd23c0f5a7400&amp;lt;/upnp:udn&amp;gt;&lt;br /&gt;
        &amp;lt;upnp:class xmlns:upnp=&amp;quot;urn:schemas-upnp-org:metadata-1-0/upnp/&amp;quot;&amp;gt;object.container.album.musicAlbum&amp;lt;/upnp:class&amp;gt;&lt;br /&gt;
        &amp;lt;upnp:artist xmlns:upnp=&amp;quot;urn:schemas-upnp-org:metadata-1-0/upnp/&amp;quot;&amp;gt;...And You Will Know Us by the Trail of Dead&amp;lt;/upnp:artist&amp;gt;&lt;br /&gt;
        &amp;lt;upnp:albumArtURI&amp;gt;http://10.2.1.170:4000/linn.co.uk.kazooserver/ms/artwork/37a2ac2?size=0&amp;lt;/upnp:albumArtURI&amp;gt;&lt;br /&gt;
    &amp;lt;/container&amp;gt;&lt;br /&gt;
    &amp;lt;desc nameSpace=&amp;quot;openhome.org&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;indexmap&amp;gt;&lt;br /&gt;
            &amp;lt;labels&amp;gt;# A B C D E F G H I J K L M N O P Q R S T U V W X Y Z +&amp;lt;/labels&amp;gt;&lt;br /&gt;
            &amp;lt;indices&amp;gt;0 10 20 30 40 50 60 70 80 90 100 110 120 130 140 150 160 170 180 190 200 210 220 230 240 250 260 270&amp;lt;/indices&amp;gt;&lt;br /&gt;
        &amp;lt;/indexmap&amp;gt;&lt;br /&gt;
    &amp;lt;/desc&amp;gt;&lt;br /&gt;
 &amp;lt;/DIDL-Lite&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The index map contains two, space separated, lists. These lists must contain the same number of elements. The example above is for a container who&#039;s contents are alphabetically sorted. But an index map could just as easily define a container who&#039;s contents are sorted by decade, e.g 1960 - 2015,&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;desc nameSpace=&amp;quot;openhome.org&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;indexmap&amp;gt;&lt;br /&gt;
        &amp;lt;labels&amp;gt;60 70 80 90 00 10&amp;lt;/labels&amp;gt;&lt;br /&gt;
        &amp;lt;indices&amp;gt;0 10 20 30 40 50&amp;lt;/indices&amp;gt;&lt;br /&gt;
    &amp;lt;/indexmap&amp;gt;&lt;br /&gt;
 &amp;lt;/desc&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Image Resolution ==&lt;br /&gt;
&lt;br /&gt;
Control points running on different platforms have different memory limits and display technologies. This means that a control point on a PC might want to display artwork at a high resolution, while a control point on a PDA might want to display artwork at a much lower resolution.&lt;br /&gt;
&lt;br /&gt;
Media servers often try to solve this problem using one of the following two methods:&lt;br /&gt;
&lt;br /&gt;
# A configurable parameter that scales all artwork to a user defined size&lt;br /&gt;
# A profile system where a user can create profiles for each class of control point they have and configure a parameter that scales all artwork to a user defined size per profile&lt;br /&gt;
&lt;br /&gt;
The first solution is highly problematic because it limits the resolution of artwork across the whole network. But a single network very often contains control points that can display high resolution images AND control points that can&#039;t.&lt;br /&gt;
&lt;br /&gt;
The second solution is just architecturally poor, turning the relationship between a control point and a media server on its head. Why should the media server try to infer what a control point needs through configuration when the control point is perfectly capable of telling the media server its exact requirements in every single circumstance.&lt;br /&gt;
&lt;br /&gt;
So, it is proposed that compliant media servers include a &#039;&#039;&#039;size&#039;&#039;&#039; element in their artwork uri&#039;s, where the size is the image&#039;s largest dimension. This allows a control point to ask for an image at a specified size.&lt;br /&gt;
&lt;br /&gt;
=== Example ===&lt;br /&gt;
&lt;br /&gt;
If the original artwork was 400x512, then a media server would provide the following albumArtURI: &amp;lt;uri&amp;gt;?size=512. If it is not possible for the media server to obtain the original resolution then the media server would provide the following albumArtURI: &amp;lt;uri&amp;gt;?size=0.&lt;br /&gt;
&lt;br /&gt;
The presence of the size element tells the control point:&lt;br /&gt;
&lt;br /&gt;
# the media server implements the image scaling extension&lt;br /&gt;
# the original size of the image.&lt;br /&gt;
&lt;br /&gt;
Now the control point can request the image at any resolution by using &amp;lt;uri&amp;gt;?size=x, where x is the size it wants.&lt;br /&gt;
&lt;br /&gt;
So, in this example, &amp;lt;uri&amp;gt;?size=1024 gets an 800x1024 image, and &amp;lt;uri&amp;gt;?size=200 gets a 156x200 image.&lt;br /&gt;
&lt;br /&gt;
== albumArtURI&amp;lt;br&amp;gt; ==&lt;br /&gt;
&lt;br /&gt;
The current specification only allows retrieval of artwork for a musicAlbum container through the property albumArtURI. When browsing a music library on a control point it quickly becomes clear that to implement a graphically rich control point the ContentDirectory service should provide a way to retrieve artwork for all of the content directory classes, not just musicAlbum containers.&lt;br /&gt;
&lt;br /&gt;
There has become a somewhat defacto standard where just about all media server provide an albumArtURI property for a musicItem item as well as for a musicAlbum container, however this is still not good enough to implement a graphically rich control point.&lt;br /&gt;
&lt;br /&gt;
It is proposed that an optional property is introduced to the object class called &#039;&#039;&#039;albumArtURI&#039;&#039;&amp;amp;nbsp;&#039;&#039;&#039;&#039;&#039;which may contain an attribute &#039;&#039;&#039;title&#039;&#039;&#039;,&amp;amp;nbsp;e.g. &amp;amp;lt;albumArtURI title=&amp;quot;Font Cover&amp;quot;&amp;amp;gt;http://Front Cover.jpg&amp;amp;lt;/albumArtURI&amp;amp;gt;.&amp;amp;nbsp;The object class can contain zero or more albumArtURIs elements.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Medium =&lt;br /&gt;
= Low =&lt;br /&gt;
&lt;br /&gt;
== Dynamic IP Addresses ==&lt;br /&gt;
&lt;br /&gt;
At present all media servers return URIs that contain a reference to their IP address, e.g. http://172.20.1.1/music.flac etc. This means that if the media server&#039;s IP address were to change across reboots, then any control point or media renderer with URIs that referenced the media server before the reboot will become invalid.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
It is proposed that a media server should always reference itself by host name and not by IP address in any XML that it sends to external devices, i.e. http://mynas/music.flac.&lt;br /&gt;
&lt;br /&gt;
== Disc Information ==&lt;br /&gt;
&lt;br /&gt;
It is proposed that two new properties are added to the musicTrack item called &#039;&#039;&#039;OriginalDiscNumber&#039;&#039;&#039; and &#039;&#039;&#039;OriginalDiscCount&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== Replay Gain Information ==&lt;br /&gt;
&lt;br /&gt;
It is proposed that four new properties are added to the musicTrack item called &#039;&#039;&#039;ReplayGainAlbum&#039;&#039;&#039;, &#039;&#039;&#039;ReplayGainAlbumPeak&#039;&#039;&#039;, &#039;&#039;&#039;ReplayGainTrack&#039;&#039;&#039;, and &#039;&#039;&#039;ReplayGainTrackPeak&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
== webURI ==&lt;br /&gt;
&lt;br /&gt;
The current specification does not easily allow a control point to provide rich information about objects in the browse hierarchy.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
It is proposed to add an optionally property to the object class called &#039;&#039;&#039;webURI&amp;amp;nbsp;&#039;&#039;&#039;which will contain a URI to a website that provides a rich collection of information about the object, e.g. for a musicArtist container it would provided a link to a website that provided information about the artist.&lt;/div&gt;</summary>
		<author><name>Davidd</name></author>
	</entry>
	<entry>
		<id>https://docs.linn.co.uk/wiki/index.php?title=Developer:Media_Server_Extensions&amp;diff=11179</id>
		<title>Developer:Media Server Extensions</title>
		<link rel="alternate" type="text/html" href="https://docs.linn.co.uk/wiki/index.php?title=Developer:Media_Server_Extensions&amp;diff=11179"/>
		<updated>2015-02-20T14:11:33Z</updated>

		<summary type="html">&lt;p&gt;Davidd: /* Types */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Introduction =&lt;br /&gt;
&lt;br /&gt;
The ContentDirectory service has various limitations which become apparent when implementing control points on different hardware platforms. This document aims to outline some ideas that address the various shortcomings of the ContentDirectory specification. The ideas have been categorised in low, medium and high priority groups.&lt;br /&gt;
&lt;br /&gt;
= High =&lt;br /&gt;
&lt;br /&gt;
== Container map ==&lt;br /&gt;
&lt;br /&gt;
The current ContentDirectory specification makes it tricky for a control point to display the returned contents in an appropriate, aesthetically pleasing, manner for the content being viewed. This is because the ContentDirectory specification does not allow for a control point to know in advanced what content to expect when browsing through any particular hierarchy.&lt;br /&gt;
&lt;br /&gt;
An example of this might be, at a particular point in the browse hierarchy the ContentDirectory will return a list of albums which in turn will contain a list of tracks. A UI might wish to represent this list of albums as a grid and the album&#039;s tracks as a header and a list of the tracks. Currently it is not possible for the UI to know when it gets to a point in a hierarchy where the hierarchy represents a list of albums followed by a list of tracks.&lt;br /&gt;
&lt;br /&gt;
The proposal is to add the idea of mapped containers. These containers will have a type that states ahead of time what a control point can expect in terms of contents as it browses down the hierarchy.&lt;br /&gt;
&lt;br /&gt;
The proposal is to have three types of mapped containers, browse, link, and search. A media server will be able to indicate to a control point which mapped containers it supports by including the relevant openhome XML extensions in its device XML.&lt;br /&gt;
&lt;br /&gt;
For a media server to indicate it supports browse mapped containers the device XML must contain entries within an X_MAP_BROWSE element, see the example device XML below.&lt;br /&gt;
&lt;br /&gt;
For a media server to indicate it supports link mapped containers the device XML must contain entries within an X_MAP_LINK element, see the example device XML below.&lt;br /&gt;
&lt;br /&gt;
For a media server to indicate it supports browse mapped containers the device XML must contain entries within an X_MAP_SEARCH element, see the example device XML below.&lt;br /&gt;
&lt;br /&gt;
=== Browse map ===&lt;br /&gt;
&lt;br /&gt;
The X_MAP_BROWSE element must contain 1 or more X_MAP_BROWSE_ENTRY elements.&lt;br /&gt;
&lt;br /&gt;
The X_MAP_BROWSE_ENTRY has three child elements.&lt;br /&gt;
&lt;br /&gt;
X_MAP_BROWSE_ENTRY_NAME is a string and used by a control point to label the root of the browse hierarchy.&lt;br /&gt;
X_MAP_BROWSE_ENTRY_ID is a string and used by a control point to start the browse of the browse hierarchy.&lt;br /&gt;
X_MAP_BROWSE_ENTRY_TYPE is a space separated list of strings used by a control point to decide how to represent the browse hierarchy in the UI. The list of valid types is described in the Types section below.&lt;br /&gt;
&lt;br /&gt;
There should be an X_MAP_BROWSE_ENTRY for each root browse hierarchy defined by the media server.&lt;br /&gt;
&lt;br /&gt;
Any example of an X_MAP_BROWSE_ENTRY is shown below,&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;X_MAP_BROWSE_ENTRY&amp;gt;&lt;br /&gt;
     &amp;lt;X_MAP_BROWSE_ENTRY_NAME&amp;gt;Albums&amp;lt;/X_MAP_BROWSE_ENTRY_NAME&amp;gt;&lt;br /&gt;
     &amp;lt;X_MAP_BROWSE_ENTRY_ID&amp;gt;db/browse/albums&amp;lt;/X_MAP_BROWSE_ENTRY_ID&amp;gt;&lt;br /&gt;
     &amp;lt;X_MAP_BROWSE_ENTRY_TYPE&amp;gt;album&amp;lt;/X_MAP_BROWSE_ENTRY_TYPE&amp;gt;&lt;br /&gt;
 &amp;lt;/X_MAP_BROWSE_ENTRY&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The example above defines a root browse hierarchy that provides a list of albums which in turn provide a list of tracks.&lt;br /&gt;
&lt;br /&gt;
X_MAP_BROWSE_ENTRY contains the text for a label in the UI of &amp;quot;Albums&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
X_MAP_BROWSE_ENTRY_ID contains the ID to use in the ContentDirectory Browse action to obtain the list of albums.&lt;br /&gt;
&lt;br /&gt;
X_MAP_BROWSE_ENTRY_TYPE contains a single entry indicating that the first level contains items that represent albums and the next level will contain tracks. If for example the hierarchy was a list of genres, then a list of artists, then a list of albums, and finally a list of tracks the type would be &amp;quot;genre artist album&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
=== Link map ===&lt;br /&gt;
&lt;br /&gt;
The X_MAP_LINK element must contain 1 or more X_MAP_LINK_ENTRY elements.&lt;br /&gt;
&lt;br /&gt;
The X_MAP_LINK_ENTRY has three child elements.&lt;br /&gt;
&lt;br /&gt;
X_MAP_LINK_ENTRY_TAG is a string and used by a control point determine which piece of metadata is valid to show as a link.&lt;br /&gt;
&lt;br /&gt;
X_MAP_LINK_ENTRY_ID_PREFIX is a string and used by a control point to start the browse of a link.&lt;br /&gt;
&lt;br /&gt;
X_MAP_LINK_ENTRY_TYPE is a space separated list of strings used by a control point to decide how to represent the browse hierarchy in the UI. The list of valid types is described in the Types section below.&lt;br /&gt;
&lt;br /&gt;
There should be an X_MAP_LINK_ENTRY for each piece of metadata that the media server allows to be linked.&lt;br /&gt;
&lt;br /&gt;
Any example of an X_MAP_LINK_ENTRY is shown below,&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;X_MAP_LINK_ENTRY&amp;gt;&lt;br /&gt;
     &amp;lt;X_MAP_LINK_ENTRY_TAG&amp;gt;artist&amp;lt;/X_MAP_LINK_ENTRY_TAG&amp;gt;&lt;br /&gt;
     &amp;lt;X_MAP_LINK_ENTRY_ID_PREFIX&amp;gt;db/link/artist/&amp;lt;/X_MAP_LINK_ENTRY_ID_PREFIX&amp;gt;&lt;br /&gt;
     &amp;lt;X_MAP_LINK_ENTRY_TYPE&amp;gt;album&amp;lt;/X_MAP_LINK_ENTRY_TYPE&amp;gt;&lt;br /&gt;
 &amp;lt;/X_MAP_LINK_ENTRY&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The example above defines a browse hierarchy that is created when linking from an artist name. The hierarchy created provides a list of linked artist albums which in turn provide a list of tracks.&lt;br /&gt;
&lt;br /&gt;
X_MAP_LINK_ENTRY_TAG contains the piece of metadata that can be linked to &amp;quot;artist&amp;quot;. Valid types are listed in the Types section below.&lt;br /&gt;
&lt;br /&gt;
X_MAP_LINK_ENTRY_ID_PREFIX contains the ID prefix to use in the ContentDirectory Browse action to obtain the list of albums. The browse ID is constructed by appending the text in the artist metadata to the prefix, i.e. &amp;quot;db/link/artist/&amp;lt;artist name&amp;gt;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
X_MAP_LINK_ENTRY_TYPE contains a single entry indicating that the first level contains items that represent albums and the next level will contain tracks.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Link is the ability for a user to link between various pieces of metadata for an object. For example if the server supported linking on the artist tag then using the link map a control point would be able to provide the ability for a user to click on a track&#039;s artist and display all the albums (or tracks) by that artist.&lt;br /&gt;
&lt;br /&gt;
=== Search map ===&lt;br /&gt;
&lt;br /&gt;
The X_MAP_SEARCH element must contain 1 or more X_MAP_SEARCH_ENTRY elements.&lt;br /&gt;
&lt;br /&gt;
The X_MAP_SEARCH_ENTRY has three child elements.&lt;br /&gt;
&lt;br /&gt;
X_MAP_SEARCH_ENTRY_NAME is a string and used by a control point to label the browse hierarchy.&lt;br /&gt;
&lt;br /&gt;
X_MAP_SEARCH_ENTRY_ID_PREFIX is a string and used by a control point to start the browse of a search.&lt;br /&gt;
&lt;br /&gt;
X_MAP_SEARCH_ENTRY_TYPE is a space separated list of strings used by a control point to decide how to represent the browse hierarchy in the UI. The list of valid types is described in the Types section below.&lt;br /&gt;
&lt;br /&gt;
There should be an X_MAP_SEARCH_ENTRY for each piece of metadata that the media server allows to be linked.&lt;br /&gt;
&lt;br /&gt;
Any example of an X_MAP_SEARCH_ENTRY is shown below,&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;X_MAP_SEARCH_ENTRY&amp;gt;&lt;br /&gt;
     &amp;lt;X_MAP_SEARCH_ENTRY_NAME&amp;gt;Artist&amp;lt;/X_MAP_SEARCH_ENTRY_NAME&amp;gt;&lt;br /&gt;
     &amp;lt;X_MAP_SEARCH_ENTRY_ID_PREFIX&amp;gt;db/search/artist/&amp;lt;/X_MAP_SEARCH_ENTRY_ID_PREFIX&amp;gt;&lt;br /&gt;
     &amp;lt;X_MAP_SEARCH_ENTRY_TYPE&amp;gt;artist album&amp;lt;/X_MAP_SEARCH_ENTRY_TYPE&amp;gt;&lt;br /&gt;
 &amp;lt;/X_MAP_SEARCH_ENTRY&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The example above defines a browse hierarchy that is created when searching for an artist. The hierarchy created provides a list of artists, which in turn provide a list of albums, which in turn provide a list of tracks.&lt;br /&gt;
&lt;br /&gt;
X_MAP_SEARCH_ENTRY_NAME contains the text for a label in the UI of &amp;quot;Artists&amp;quot;&lt;br /&gt;
&lt;br /&gt;
X_MAP_SEARCH_ENTRY_ID_PREFIX contains the ID prefix to use in the ContentDirectory Browse action to obtain the list of artists. The browse ID is constructed by appending the search text to the prefix, i.e. &amp;quot;db/link/artist/&amp;lt;search text&amp;gt;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
X_MAP_SEARCH_ENTRY_TYPE contains a single entry indicating that the first level contains items that represent artists, the next level will contain albums, and the next level will contain tracks.&lt;br /&gt;
&lt;br /&gt;
=== Types ===&lt;br /&gt;
&lt;br /&gt;
The list of allowed types for X_BROWSE_ENTRY_TYPE, X_MAP_LINK_ENTRY_TAG, X_LINK_ENTRY_TYPE, and X_SEARCH_ENTRY_TYPE&lt;br /&gt;
&lt;br /&gt;
 genre&lt;br /&gt;
 artist&lt;br /&gt;
 composer&lt;br /&gt;
 conductor&lt;br /&gt;
 album&lt;br /&gt;
 year&lt;br /&gt;
 mixed&lt;br /&gt;
&lt;br /&gt;
mixed is a special value that represents a container that has mixed entries.&lt;br /&gt;
&lt;br /&gt;
=== Example device XML ===&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;root xmlns=&amp;quot;urn:schemas-upnp-org:device-1-0&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;specVersion&amp;gt;&lt;br /&gt;
        &amp;lt;major&amp;gt;1&amp;lt;/major&amp;gt;&lt;br /&gt;
        &amp;lt;minor&amp;gt;1&amp;lt;/minor&amp;gt;&lt;br /&gt;
    &amp;lt;/specVersion&amp;gt;&lt;br /&gt;
    &amp;lt;device&amp;gt;&lt;br /&gt;
        &amp;lt;deviceType&amp;gt;urn:schemas-upnp-org:device:MediaServer:1&amp;lt;/deviceType&amp;gt;&lt;br /&gt;
        &amp;lt;dlna:X_DLNADOC xmlns:dlna=&amp;quot;urn:schemas-dlna-org:device-1-0&amp;quot;&amp;gt;DMS-1.50&amp;lt;/dlna:X_DLNADOC&amp;gt;&lt;br /&gt;
        &amp;lt;dlna:X_DLNACAP xmlns:dlna=&amp;quot;urn:schemas-dlna-org:device-1-0&amp;quot;&amp;gt;av-upload,image-upload,audio-upload&amp;lt;/dlna:X_DLNACAP&amp;gt;&lt;br /&gt;
        &amp;lt;openhome:X_MAP xmlns:openhome=&amp;quot;http://www.openhome.org&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;X_MAP_BROWSE&amp;gt;&lt;br /&gt;
                &amp;lt;X_MAP_BROWSE_ENTRY&amp;gt;&lt;br /&gt;
                    &amp;lt;X_MAP_BROWSE_ENTRY_NAME&amp;gt;Albums&amp;lt;/X_MAP_BROWSE_ENTRY_NAME&amp;gt;&lt;br /&gt;
                    &amp;lt;X_MAP_BROWSE_ENTRY_ID&amp;gt;db/browse/albums&amp;lt;/X_MAP_BROWSE_ENTRY_ID&amp;gt;&lt;br /&gt;
                    &amp;lt;X_MAP_BROWSE_ENTRY_TYPE&amp;gt;album&amp;lt;/X_MAP_BROWSE_ENTRY_TYPE&amp;gt;&lt;br /&gt;
                &amp;lt;/X_MAP_BROWSE_ENTRY&amp;gt;&lt;br /&gt;
                &amp;lt;X_MAP_BROWSE_ENTRY&amp;gt;&lt;br /&gt;
                    &amp;lt;X_MAP_BROWSE_ENTRY_NAME&amp;gt;Artists&amp;lt;/X_MAP_BROWSE_ENTRY_NAME&amp;gt;&lt;br /&gt;
                    &amp;lt;X_MAP_BROWSE_ENTRY_ID&amp;gt;db/browse/artists&amp;lt;/X_MAP_BROWSE_ENTRY_ID&amp;gt;&lt;br /&gt;
                    &amp;lt;X_MAP_BROWSE_ENTRY_TYPE&amp;gt;artist album&amp;lt;/X_MAP_BROWSE_ENTRY_TYPE&amp;gt;&lt;br /&gt;
                &amp;lt;/X_MAP_BROWSE_ENTRY&amp;gt;&lt;br /&gt;
                &amp;lt;X_MAP_BROWSE_ENTRY&amp;gt;&lt;br /&gt;
                    &amp;lt;X_MAP_BROWSE_ENTRY_NAME&amp;gt;Folders&amp;lt;/X_MAP_BROWSE_ENTRY_NAME&amp;gt;&lt;br /&gt;
                    &amp;lt;X_MAP_BROWSE_ENTRY_ID&amp;gt;db/browse/folders&amp;lt;/X_MAP_BROWSE_ENTRY_ID&amp;gt;&lt;br /&gt;
                    &amp;lt;X_MAP_BROWSE_ENTRY_TYPE&amp;gt;mixed&amp;lt;/X_MAP_BROWSE_ENTRY_TYPE&amp;gt;&lt;br /&gt;
                &amp;lt;/X_MAP_BROWSE_ENTRY&amp;gt;&lt;br /&gt;
            &amp;lt;/X_MAP_BROWSE&amp;gt;&lt;br /&gt;
            &amp;lt;X_MAP_LINK&amp;gt;&lt;br /&gt;
                &amp;lt;X_MAP_LINK_ENTRY&amp;gt;&lt;br /&gt;
                    &amp;lt;X_MAP_LINK_ENTRY_TAG&amp;gt;artist&amp;lt;/X_MAP_LINK_ENTRY_TAG&amp;gt;&lt;br /&gt;
                    &amp;lt;X_MAP_LINK_ENTRY_ID_PREFIX&amp;gt;db/link/artist/&amp;lt;/X_MAP_LINK_ENTRY_ID_PREFIX&amp;gt;&lt;br /&gt;
                    &amp;lt;X_MAP_LINK_ENTRY_TYPE&amp;gt;album&amp;lt;/X_MAP_LINK_ENTRY_TYPE&amp;gt;&lt;br /&gt;
                &amp;lt;/X_MAP_LINK_ENTRY&amp;gt;&lt;br /&gt;
                &amp;lt;X_MAP_LINK_ENTRY&amp;gt;&lt;br /&gt;
                    &amp;lt;X_MAP_LINK_ENTRY_TAG&amp;gt;composer&amp;lt;/X_MAP_LINK_ENTRY_TAG&amp;gt;&lt;br /&gt;
                    &amp;lt;X_MAP_LINK_ENTRY_ID_PREFIX&amp;gt;db/link/composer/&amp;lt;/X_MAP_LINK_ENTRY_ID_PREFIX&amp;gt;&lt;br /&gt;
                    &amp;lt;X_MAP_LINK_ENTRY_TYPE&amp;gt;album&amp;lt;/X_MAP_LINK_ENTRY_TYPE&amp;gt;&lt;br /&gt;
                &amp;lt;/X_MAP_LINK_ENTRY&amp;gt;&lt;br /&gt;
            &amp;lt;/X_MAP_LINK&amp;gt;&lt;br /&gt;
            &amp;lt;X_MAP_SEARCH&amp;gt;&lt;br /&gt;
                &amp;lt;X_MAP_SEARCH_ENTRY&amp;gt;&lt;br /&gt;
                    &amp;lt;X_MAP_SEARCH_ENTRY_NAME&amp;gt;Artist&amp;lt;/X_MAP_SEARCH_ENTRY_NAME&amp;gt;&lt;br /&gt;
                    &amp;lt;X_MAP_SEARCH_ENTRY_ID_PREFIX&amp;gt;db/search/artist/&amp;lt;/X_MAP_SEARCH_ENTRY_ID_PREFIX&amp;gt;&lt;br /&gt;
                    &amp;lt;X_MAP_SEARCH_ENTRY_TYPE&amp;gt;artist album&amp;lt;/X_MAP_SEARCH_ENTRY_TYPE&amp;gt;&lt;br /&gt;
                &amp;lt;/X_MAP_SEARCH_ENTRY&amp;gt;&lt;br /&gt;
                &amp;lt;X_MAP_SEARCH_ENTRY&amp;gt;&lt;br /&gt;
                    &amp;lt;X_MAP_SEARCH_ENTRY_NAME&amp;gt;Tracks&amp;lt;/X_MAP_SEARCH_ENTRY_NAME&amp;gt;&lt;br /&gt;
                    &amp;lt;X_MAP_SEARCH_ENTRY_ID_PREFIX&amp;gt;db/search/all/&amp;lt;/X_MAP_SEARCH_ENTRY_ID_PREFIX&amp;gt;&lt;br /&gt;
                    &amp;lt;X_MAP_SEARCH_ENTRY_TYPE&amp;gt;&amp;lt;/X_MAP_SEARCH_ENTRY_TYPE&amp;gt;&lt;br /&gt;
                &amp;lt;/X_MAP_SEARCH_ENTRY&amp;gt;&lt;br /&gt;
            &amp;lt;/X_MAP_SEARCH&amp;gt;&lt;br /&gt;
        &amp;lt;/openhome:X_MAP&amp;gt;&lt;br /&gt;
        &amp;lt;presentationURL&amp;gt;http://10.2.1.170:4000/res/linn.co.uk.kazooserver/index.html&amp;lt;/presentationURL&amp;gt;&lt;br /&gt;
        &amp;lt;friendlyName&amp;gt;Linn Kazoo Server [R&amp;amp;D Mac Mini]&amp;lt;/friendlyName&amp;gt;&lt;br /&gt;
        &amp;lt;manufacturer&amp;gt;Linn&amp;lt;/manufacturer&amp;gt;&lt;br /&gt;
        &amp;lt;manufacturerURL&amp;gt;http://www.linn.co.uk&amp;lt;/manufacturerURL&amp;gt;&lt;br /&gt;
        &amp;lt;modelName&amp;gt;Kazoo Server&amp;lt;/modelName&amp;gt;&lt;br /&gt;
        &amp;lt;modelURL&amp;gt;http://oss.linn.co.uk/trac/wiki/KazooServer&amp;lt;/modelURL&amp;gt;&lt;br /&gt;
        &amp;lt;UDN&amp;gt;uuid:ac3d630e37b5f11ff5cdd23c0f5a7400&amp;lt;/UDN&amp;gt;&lt;br /&gt;
        &amp;lt;iconList&amp;gt;&lt;br /&gt;
            &amp;lt;icon&amp;gt;&lt;br /&gt;
                &amp;lt;mimetype&amp;gt;image/png&amp;lt;/mimetype&amp;gt;&lt;br /&gt;
                &amp;lt;width&amp;gt;65&amp;lt;/width&amp;gt;&lt;br /&gt;
                &amp;lt;height&amp;gt;65&amp;lt;/height&amp;gt;&lt;br /&gt;
                &amp;lt;depth&amp;gt;32&amp;lt;/depth&amp;gt;&lt;br /&gt;
                &amp;lt;url&amp;gt;ac3d630e37b5f11ff5cdd23c0f5a7400/resource/icon/icon&amp;lt;/url&amp;gt;&lt;br /&gt;
            &amp;lt;/icon&amp;gt;&lt;br /&gt;
        &amp;lt;/iconList&amp;gt;&lt;br /&gt;
        &amp;lt;serviceList&amp;gt;&lt;br /&gt;
            &amp;lt;service&amp;gt;&lt;br /&gt;
                &amp;lt;serviceType&amp;gt;urn:av-openhome-org:service:PlaylistManager:1&amp;lt;/serviceType&amp;gt;&lt;br /&gt;
                &amp;lt;serviceId&amp;gt;urn:av-openhome-org:serviceId:PlaylistManager&amp;lt;/serviceId&amp;gt;&lt;br /&gt;
                &amp;lt;SCPDURL&amp;gt;/ac3d630e37b5f11ff5cdd23c0f5a7400/Upnp/av.openhome.org-PlaylistManager-1/service.xml&amp;lt;/SCPDURL&amp;gt;&lt;br /&gt;
                &amp;lt;controlURL&amp;gt;/ac3d630e37b5f11ff5cdd23c0f5a7400/av.openhome.org-PlaylistManager-1/control&amp;lt;/controlURL&amp;gt;&lt;br /&gt;
                &amp;lt;eventSubURL&amp;gt;/ac3d630e37b5f11ff5cdd23c0f5a7400/av.openhome.org-PlaylistManager-1/event&amp;lt;/eventSubURL&amp;gt;&lt;br /&gt;
            &amp;lt;/service&amp;gt;&lt;br /&gt;
            &amp;lt;service&amp;gt;&lt;br /&gt;
                &amp;lt;serviceType&amp;gt;urn:schemas-upnp-org:service:ContentDirectory:1&amp;lt;/serviceType&amp;gt;&lt;br /&gt;
                &amp;lt;serviceId&amp;gt;urn:upnp-org:serviceId:ContentDirectory&amp;lt;/serviceId&amp;gt;&lt;br /&gt;
                &amp;lt;SCPDURL&amp;gt;/ac3d630e37b5f11ff5cdd23c0f5a7400/Upnp/upnp.org-ContentDirectory-1/service.xml&amp;lt;/SCPDURL&amp;gt;&lt;br /&gt;
                &amp;lt;controlURL&amp;gt;/ac3d630e37b5f11ff5cdd23c0f5a7400/upnp.org-ContentDirectory-1/control&amp;lt;/controlURL&amp;gt;&lt;br /&gt;
                &amp;lt;eventSubURL&amp;gt;/ac3d630e37b5f11ff5cdd23c0f5a7400/upnp.org-ContentDirectory-1/event&amp;lt;/eventSubURL&amp;gt;&lt;br /&gt;
            &amp;lt;/service&amp;gt;&lt;br /&gt;
            &amp;lt;service&amp;gt;&lt;br /&gt;
                &amp;lt;serviceType&amp;gt;urn:schemas-upnp-org:service:ConnectionManager:1&amp;lt;/serviceType&amp;gt;&lt;br /&gt;
                &amp;lt;serviceId&amp;gt;urn:upnp-org:serviceId:ConnectionManager&amp;lt;/serviceId&amp;gt;&lt;br /&gt;
                &amp;lt;SCPDURL&amp;gt;/ac3d630e37b5f11ff5cdd23c0f5a7400/Upnp/upnp.org-ConnectionManager-1/service.xml&amp;lt;/SCPDURL&amp;gt;&lt;br /&gt;
                &amp;lt;controlURL&amp;gt;/ac3d630e37b5f11ff5cdd23c0f5a7400/upnp.org-ConnectionManager-1/control&amp;lt;/controlURL&amp;gt;&lt;br /&gt;
                &amp;lt;eventSubURL&amp;gt;/ac3d630e37b5f11ff5cdd23c0f5a7400/upnp.org-ConnectionManager-1/event&amp;lt;/eventSubURL&amp;gt;&lt;br /&gt;
            &amp;lt;/service&amp;gt;&lt;br /&gt;
        &amp;lt;/serviceList&amp;gt;&lt;br /&gt;
    &amp;lt;/device&amp;gt;&lt;br /&gt;
 &amp;lt;/root&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Index maps ==&lt;br /&gt;
&lt;br /&gt;
Large lists are difficult to navigate, especially on mobile devices. Mobile devices added the idea of an index map to improve this situation. The index map allows a users to jump to different sections in a large list, similar to what is possible with a scrollbar on desktops.&lt;br /&gt;
&lt;br /&gt;
In order for a control point to generate an index map for any particular level in a ContentDirectory&#039;s hierarchy it first needs to download all the objects in the container, figure out if they are sorted and then calculate the index map. This means that a user will need to wait, perhaps minutes, before an index map is able to be presented on the UI. &lt;br /&gt;
&lt;br /&gt;
The proposal is to allow the media server to calculate an index map and return it as part of the DIDL-Lite XML. Below shows some example DIDL-Lite with an index map included.&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;DIDL-Lite xmlns=&amp;quot;urn:schemas-upnp-org:metadata-1-0/DIDL-Lite/&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;container id=&amp;quot;db/ba37a2ac24efa676c8676aab71a6cdf074&amp;quot; parentID=&amp;quot;0&amp;quot; restricted=&amp;quot;true&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;dc:title xmlns:dc=&amp;quot;http://purl.org/dc/elements/1.1/&amp;quot;&amp;gt;Worlds Apart [Deluxe Edition]&amp;lt;/dc:title&amp;gt;&lt;br /&gt;
        &amp;lt;upnp:udn xmlns:upnp=&amp;quot;urn:schemas-upnp-org:metadata-1-0/upnp/&amp;quot;&amp;gt;ac3d630e37b5f11ff5cdd23c0f5a7400&amp;lt;/upnp:udn&amp;gt;&lt;br /&gt;
        &amp;lt;upnp:class xmlns:upnp=&amp;quot;urn:schemas-upnp-org:metadata-1-0/upnp/&amp;quot;&amp;gt;object.container.album.musicAlbum&amp;lt;/upnp:class&amp;gt;&lt;br /&gt;
        &amp;lt;upnp:artist xmlns:upnp=&amp;quot;urn:schemas-upnp-org:metadata-1-0/upnp/&amp;quot;&amp;gt;...And You Will Know Us by the Trail of Dead&amp;lt;/upnp:artist&amp;gt;&lt;br /&gt;
        &amp;lt;upnp:albumArtURI&amp;gt;http://10.2.1.170:4000/linn.co.uk.kazooserver/ms/artwork/37a2ac2?size=0&amp;lt;/upnp:albumArtURI&amp;gt;&lt;br /&gt;
    &amp;lt;/container&amp;gt;&lt;br /&gt;
    &amp;lt;desc nameSpace=&amp;quot;openhome.org&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;indexmap&amp;gt;&lt;br /&gt;
            &amp;lt;labels&amp;gt;# A B C D E F G H I J K L M N O P Q R S T U V W X Y Z +&amp;lt;/labels&amp;gt;&lt;br /&gt;
            &amp;lt;indices&amp;gt;0 10 20 30 40 50 60 70 80 90 100 110 120 130 140 150 160 170 180 190 200 210 220 230 240 250 260 270&amp;lt;/indices&amp;gt;&lt;br /&gt;
        &amp;lt;/indexmap&amp;gt;&lt;br /&gt;
    &amp;lt;/desc&amp;gt;&lt;br /&gt;
 &amp;lt;/DIDL-Lite&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The index map contains two, space separated, lists. These lists must contain the same number of elements. The example above is for a container who&#039;s contents are alphabetically sorted. But an index map could just as easily define a container who&#039;s contents are sorted by decade, e.g 1960 - 2015,&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;desc nameSpace=&amp;quot;openhome.org&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;indexmap&amp;gt;&lt;br /&gt;
        &amp;lt;labels&amp;gt;60 70 80 90 00 10&amp;lt;/labels&amp;gt;&lt;br /&gt;
        &amp;lt;indices&amp;gt;0 10 20 30 40 50&amp;lt;/indices&amp;gt;&lt;br /&gt;
    &amp;lt;/indexmap&amp;gt;&lt;br /&gt;
 &amp;lt;/desc&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Image Resolution ==&lt;br /&gt;
&lt;br /&gt;
Control points running on different platforms have different memory limits and display technologies. This means that a control point on a PC might want to display artwork at a high resolution, while a control point on a PDA might want to display artwork at a much lower resolution.&lt;br /&gt;
&lt;br /&gt;
Media servers often try to solve this problem using one of the following two methods:&lt;br /&gt;
&lt;br /&gt;
# A configurable parameter that scales all artwork to a user defined size&lt;br /&gt;
# A profile system where a user can create profiles for each class of control point they have and configure a parameter that scales all artwork to a user defined size per profile&lt;br /&gt;
&lt;br /&gt;
The first solution is highly problematic because it limits the resolution of artwork across the whole network. But a single network very often contains control points that can display high resolution images AND control points that can&#039;t.&lt;br /&gt;
&lt;br /&gt;
The second solution is just architecturally poor, turning the relationship between a control point and a media server on its head. Why should the media server try to infer what a control point needs through configuration when the control point is perfectly capable of telling the media server its exact requirements in every single circumstance.&lt;br /&gt;
&lt;br /&gt;
So, it is proposed that compliant media servers include a &#039;&#039;&#039;size&#039;&#039;&#039; element in their artwork uri&#039;s, where the size is the image&#039;s largest dimension. This allows a control point to ask for an image at a specified size.&lt;br /&gt;
&lt;br /&gt;
=== Example ===&lt;br /&gt;
&lt;br /&gt;
If the original artwork was 400x512, then a media server would provide the following albumArtURI: &amp;lt;uri&amp;gt;?size=512. If it is not possible for the media server to obtain the original resolution then the media server would provide the following albumArtURI: &amp;lt;uri&amp;gt;?size=0.&lt;br /&gt;
&lt;br /&gt;
The presence of the size element tells the control point:&lt;br /&gt;
&lt;br /&gt;
# the media server implements the image scaling extension&lt;br /&gt;
# the original size of the image.&lt;br /&gt;
&lt;br /&gt;
Now the control point can request the image at any resolution by using &amp;lt;uri&amp;gt;?size=x, where x is the size it wants.&lt;br /&gt;
&lt;br /&gt;
So, in this example, &amp;lt;uri&amp;gt;?size=1024 gets an 800x1024 image, and &amp;lt;uri&amp;gt;?size=200 gets a 156x200 image.&lt;br /&gt;
&lt;br /&gt;
== albumArtURI&amp;lt;br&amp;gt; ==&lt;br /&gt;
&lt;br /&gt;
The current specification only allows retrieval of artwork for a musicAlbum container through the property albumArtURI. When browsing a music library on a control point it quickly becomes clear that to implement a graphically rich control point the ContentDirectory service should provide a way to retrieve artwork for all of the content directory classes, not just musicAlbum containers.&lt;br /&gt;
&lt;br /&gt;
There has become a somewhat defacto standard where just about all media server provide an albumArtURI property for a musicItem item as well as for a musicAlbum container, however this is still not good enough to implement a graphically rich control point.&lt;br /&gt;
&lt;br /&gt;
It is proposed that an optional property is introduced to the object class called &#039;&#039;&#039;albumArtURI&#039;&#039;&amp;amp;nbsp;&#039;&#039;&#039;&#039;&#039;which may contain an attribute &#039;&#039;&#039;title&#039;&#039;&#039;,&amp;amp;nbsp;e.g. &amp;amp;lt;albumArtURI title=&amp;quot;Font Cover&amp;quot;&amp;amp;gt;http://Front Cover.jpg&amp;amp;lt;/albumArtURI&amp;amp;gt;.&amp;amp;nbsp;The object class can contain zero or more albumArtURIs elements.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Medium =&lt;br /&gt;
= Low =&lt;br /&gt;
&lt;br /&gt;
== Dynamic IP Addresses ==&lt;br /&gt;
&lt;br /&gt;
At present all media servers return URIs that contain a reference to their IP address, e.g. http://172.20.1.1/music.flac etc. This means that if the media server&#039;s IP address were to change across reboots, then any control point or media renderer with URIs that referenced the media server before the reboot will become invalid.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
It is proposed that a media server should always reference itself by host name and not by IP address in any XML that it sends to external devices, i.e. http://mynas/music.flac.&lt;br /&gt;
&lt;br /&gt;
== Disc Information ==&lt;br /&gt;
&lt;br /&gt;
It is proposed that two new properties are added to the musicTrack item called &#039;&#039;&#039;OriginalDiscNumber&#039;&#039;&#039; and &#039;&#039;&#039;OriginalDiscCount&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== Replay Gain Information ==&lt;br /&gt;
&lt;br /&gt;
It is proposed that four new properties are added to the musicTrack item called &#039;&#039;&#039;ReplayGainAlbum&#039;&#039;&#039;, &#039;&#039;&#039;ReplayGainAlbumPeak&#039;&#039;&#039;, &#039;&#039;&#039;ReplayGainTrack&#039;&#039;&#039;, and &#039;&#039;&#039;ReplayGainTrackPeak&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
== webURI ==&lt;br /&gt;
&lt;br /&gt;
The current specification does not easily allow a control point to provide rich information about objects in the browse hierarchy.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
It is proposed to add an optionally property to the object class called &#039;&#039;&#039;webURI&amp;amp;nbsp;&#039;&#039;&#039;which will contain a URI to a website that provides a rich collection of information about the object, e.g. for a musicArtist container it would provided a link to a website that provided information about the artist.&lt;/div&gt;</summary>
		<author><name>Davidd</name></author>
	</entry>
</feed>