<?xml version="1.0"?>
<?xml-stylesheet type="text/css" href="http://wiki.openhome.org/mediawiki/skins/common/feed.css?270"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
		<id>http://wiki.openhome.org/mediawiki/index.php?feed=atom&amp;target=Keith&amp;title=Special%3AContributions%2FKeith</id>
		<title>OpenHome - User contributions [en]</title>
		<link rel="self" type="application/atom+xml" href="http://wiki.openhome.org/mediawiki/index.php?feed=atom&amp;target=Keith&amp;title=Special%3AContributions%2FKeith"/>
		<link rel="alternate" type="text/html" href="http://wiki.openhome.org/wiki/Special:Contributions/Keith"/>
		<updated>2026-05-22T03:36:41Z</updated>
		<subtitle>From OpenHome</subtitle>
		<generator>MediaWiki 1.16.2</generator>

	<entry>
		<id>http://wiki.openhome.org/wiki/OhNet</id>
		<title>OhNet</title>
		<link rel="alternate" type="text/html" href="http://wiki.openhome.org/wiki/OhNet"/>
				<updated>2013-12-12T19:16:58Z</updated>
		
		<summary type="html">&lt;p&gt;Keith: /* How do I get it? */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=ohNet=&lt;br /&gt;
&lt;br /&gt;
== What is it? ==&lt;br /&gt;
OpenHome Networking (ohNet) is a modern, cross platform UPnP stack.  ohNet includes both a control point and a device stack that can be used together or independently.  It runs on Linux, Windows, Mac, iOS and Android.  The public APIs are available for the device and control point stacks in C++, C#, Java and C.  JavaScript APIs are also provided for the control point stack.&lt;br /&gt;
&lt;br /&gt;
UPnP services are presented as classes with actions appearing as functions and state variables appearing as member variables.  These classes are referred to as proxies for users of the control point stack and providers for users of the device stack.&lt;br /&gt;
&lt;br /&gt;
Proxies and Providers are included for all OpenHome and UPnP AV services.  If your application uses other services, ohNet includes a tool (ohNetGen) to generate proxies and/or providers from the service XML in any of the supported languages.&lt;br /&gt;
&lt;br /&gt;
== How do I get it? ==&lt;br /&gt;
[http://www.openhome.org/releases/artifacts/ohNet Binaries are available] for certain popular platforms/architectures.&lt;br /&gt;
&lt;br /&gt;
== Documentation ==&lt;br /&gt;
=== Overview docs ===&lt;br /&gt;
* [http://www.openhome.org/releases/ohNet_ControlPointStack.pdf Control Point stack (PDF)]&lt;br /&gt;
* [http://www.openhome.org/releases/ohNet_DeviceStack.pdf Device stack (PDF)]&lt;br /&gt;
&lt;br /&gt;
=== API docs ===&lt;br /&gt;
* [http://www.openhome.org/build/nightly/docs/CppStd/ C++]&lt;br /&gt;
* [http://www.openhome.org/build/nightly/docs/Cs/ C#]&lt;br /&gt;
* [http://www.openhome.org/build/nightly/docs/Java/ Java]&lt;br /&gt;
* [http://www.openhome.org/build/nightly/docs/Js/ JavaScript]&lt;br /&gt;
* [http://www.openhome.org/build/nightly/docs/C/ C]&lt;br /&gt;
&lt;br /&gt;
=== Discussion ===&lt;br /&gt;
[http://forums.openhome.org/forumdisplay.php?fid=5 Developer forum]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
ohNet is written using C++ with std::string replaced by special buffer classes.  These buffer classes allow for more efficient use of memory at the cost of a steeper learning curve. Memory use benefits can be especially pronounced for the Device stack.  [http://www.openhome.org/build/nightly/docs/CppCore/ API docs] for this version of the stack are available but the buffer classes are intended for internal use of the library and are as such currently undocumented.&lt;/div&gt;</summary>
		<author><name>Keith</name></author>	</entry>

	<entry>
		<id>http://wiki.openhome.org/wiki/OhNet</id>
		<title>OhNet</title>
		<link rel="alternate" type="text/html" href="http://wiki.openhome.org/wiki/OhNet"/>
				<updated>2013-12-12T19:15:50Z</updated>
		
		<summary type="html">&lt;p&gt;Keith: /* What is it? */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=ohNet=&lt;br /&gt;
&lt;br /&gt;
== What is it? ==&lt;br /&gt;
OpenHome Networking (ohNet) is a modern, cross platform UPnP stack.  ohNet includes both a control point and a device stack that can be used together or independently.  It runs on Linux, Windows, Mac, iOS and Android.  The public APIs are available for the device and control point stacks in C++, C#, Java and C.  JavaScript APIs are also provided for the control point stack.&lt;br /&gt;
&lt;br /&gt;
UPnP services are presented as classes with actions appearing as functions and state variables appearing as member variables.  These classes are referred to as proxies for users of the control point stack and providers for users of the device stack.&lt;br /&gt;
&lt;br /&gt;
Proxies and Providers are included for all OpenHome and UPnP AV services.  If your application uses other services, ohNet includes a tool (ohNetGen) to generate proxies and/or providers from the service XML in any of the supported languages.&lt;br /&gt;
&lt;br /&gt;
== How do I get it? ==&lt;br /&gt;
ohNet is available as [https://github.com/openhome/ohNet source code].  Setup a (free) github account then&lt;br /&gt;
  git clone git@github.com:openhome/ohNet.git ohnet&lt;br /&gt;
build using&lt;br /&gt;
  cd ohnet&lt;br /&gt;
  make&lt;br /&gt;
&lt;br /&gt;
There are also [http://www.openhome.org/releases/artifacts/ohNet binaries available] for certain popular platforms/architectures.&lt;br /&gt;
&lt;br /&gt;
== Documentation ==&lt;br /&gt;
=== Overview docs ===&lt;br /&gt;
* [http://www.openhome.org/releases/ohNet_ControlPointStack.pdf Control Point stack (PDF)]&lt;br /&gt;
* [http://www.openhome.org/releases/ohNet_DeviceStack.pdf Device stack (PDF)]&lt;br /&gt;
&lt;br /&gt;
=== API docs ===&lt;br /&gt;
* [http://www.openhome.org/build/nightly/docs/CppStd/ C++]&lt;br /&gt;
* [http://www.openhome.org/build/nightly/docs/Cs/ C#]&lt;br /&gt;
* [http://www.openhome.org/build/nightly/docs/Java/ Java]&lt;br /&gt;
* [http://www.openhome.org/build/nightly/docs/Js/ JavaScript]&lt;br /&gt;
* [http://www.openhome.org/build/nightly/docs/C/ C]&lt;br /&gt;
&lt;br /&gt;
=== Discussion ===&lt;br /&gt;
[http://forums.openhome.org/forumdisplay.php?fid=5 Developer forum]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
ohNet is written using C++ with std::string replaced by special buffer classes.  These buffer classes allow for more efficient use of memory at the cost of a steeper learning curve. Memory use benefits can be especially pronounced for the Device stack.  [http://www.openhome.org/build/nightly/docs/CppCore/ API docs] for this version of the stack are available but the buffer classes are intended for internal use of the library and are as such currently undocumented.&lt;/div&gt;</summary>
		<author><name>Keith</name></author>	</entry>

	<entry>
		<id>http://wiki.openhome.org/wiki/OhMedia</id>
		<title>OhMedia</title>
		<link rel="alternate" type="text/html" href="http://wiki.openhome.org/wiki/OhMedia"/>
				<updated>2013-07-10T15:43:13Z</updated>
		
		<summary type="html">&lt;p&gt;Keith: /* What is ohMedia? */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=What is ohMedia?=&lt;br /&gt;
&lt;br /&gt;
OpenHome Media (ohMedia) is an open standard for networked audio devices in the home.  Devices can implement ohMedia in place of, or alongside of, the UPnP Forum’s AV standards.  It offers a number of advantages over the UPnP Forum's AV standards.&lt;br /&gt;
&lt;br /&gt;
* Playlists are stored on the renderer, allowing playback to continue when the control point leaves the network (e.g. the control point application closes or its host device powers down).&lt;br /&gt;
* Storing playlists on the renderer also allows for gapless playback, avoiding gaps between tracks that were intended to merge seamlessly. This is particularly important for live albums and classical music. &lt;br /&gt;
* Multiple control points are better supported. Storing a playlist on the renderer allows multiple control points to edit the order of tracks and display metadata (including track name and album art) for the entire playlist. &lt;br /&gt;
* Share music between renderers. The Songcast protocol allows an ohMedia renderer to share its content with any other ohMedia device or listen to content from another device. Synchronised audio can be played between any number of devices. Desktop songcast applications plus mobile support (Songcast app for Android; Airplay receiver for iOS) allows content from many other devices to be shared. &lt;br /&gt;
* Internet radio and a receiver for Apple's AirPlay are also natively supported. &lt;br /&gt;
* Playlists can be more easily &amp;amp; reliably saved and reused. Many popular UPnP media servers change track URIs whenever they rebuild their database (e.g. every time new content is added to the database). ohMedia’s reference server - Songbox - guarantees to retain track URIs across rebuilds, allowing saving and repeated reuse of playlists. &lt;br /&gt;
* Support for multi-product hi-fi systems. E.g. a media renderer with a separate pre-amp. ohMedia topology algorithms allow a control point to select the volume control on the pre-amp.&lt;br /&gt;
&lt;br /&gt;
= Reference Implementations =&lt;br /&gt;
&lt;br /&gt;
* [http://core.linn.co.uk/network/wiki/ohMediaPlayer-Integrator ohMediaPlayer] – cross-platform software renderer including both !OpenHome and UPnP forum network services. Capable of being deployed to desktop or embedded platforms.&lt;br /&gt;
* [http://www.linn.co.uk/software#songbox Songbox] – media server including both OpenHome and UPnP forum network services.  Capable of being deployed to desktop and some NAS platforms.&lt;br /&gt;
* [http://www.linn.co.uk/software#songcast Songcast] – application that sends local audio to an ohMedia renderer.  Available for Windows &amp;amp; Mac.&lt;br /&gt;
* [http://www.linn.co.uk/software#kinsky Kinsky] – control point for ohMedia renderer.  Available for all major desktop and mobile platforms.&lt;br /&gt;
Some of these products are released with Linn Products branding.  All are based on generic OpenHome technology.  We’d be happy to hear from anyone who wants to work with us to simplify skinning of these products.&lt;br /&gt;
&lt;br /&gt;
= Developers =&lt;br /&gt;
If you are interested in ohMedia development, [[Media:Developers|further information is available]]&lt;/div&gt;</summary>
		<author><name>Keith</name></author>	</entry>

	<entry>
		<id>http://wiki.openhome.org/wiki/OhNet</id>
		<title>OhNet</title>
		<link rel="alternate" type="text/html" href="http://wiki.openhome.org/wiki/OhNet"/>
				<updated>2013-07-10T15:42:47Z</updated>
		
		<summary type="html">&lt;p&gt;Keith: /* What is it? */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=ohNet=&lt;br /&gt;
&lt;br /&gt;
== What is it? ==&lt;br /&gt;
OpenHome Networking (ohNet) is a modern, cross platform UPnP stack.  ohNet includes both a control point and a device stack that can be used together or independently.  It runs on Linux, Windows, Mac, iOS and Android.  The public APIs are available for the device and control point stacks in C++, C#, Java and C.  JavaScript APIs are also provided for the control point stack.&lt;br /&gt;
&lt;br /&gt;
UPnP services are presented as classes with actions appearing as functions and state variables appearing as member variables.  These classes are referred to as proxies for users of the control point stack and providers for users of the device stack.&lt;br /&gt;
&lt;br /&gt;
Proxies and Providers are included for all OpenHome and UPnP AV services.  If your application uses other services, ohNet includes a tool (ohNetGen) to generate proxies and/or providers from the service XML in any of the supported languages.&lt;br /&gt;
&lt;br /&gt;
Source code is available under a [http://www.opensource.org/licenses/bsd-license.php Simplified BSD license].&lt;br /&gt;
&lt;br /&gt;
== How do I get it? ==&lt;br /&gt;
ohNet is available as [https://github.com/openhome/ohNet source code].  Setup a (free) github account then&lt;br /&gt;
  git clone git@github.com:openhome/ohNet.git ohnet&lt;br /&gt;
build using&lt;br /&gt;
  cd ohnet&lt;br /&gt;
  make&lt;br /&gt;
&lt;br /&gt;
There are also [http://www.openhome.org/releases/artifacts/ohNet binaries available] for certain popular platforms/architectures.&lt;br /&gt;
&lt;br /&gt;
== Documentation ==&lt;br /&gt;
=== Overview docs ===&lt;br /&gt;
* [http://www.openhome.org/releases/ohNet_ControlPointStack.pdf Control Point stack (PDF)]&lt;br /&gt;
* [http://www.openhome.org/releases/ohNet_DeviceStack.pdf Device stack (PDF)]&lt;br /&gt;
&lt;br /&gt;
=== API docs ===&lt;br /&gt;
* [http://www.openhome.org/build/nightly/docs/CppStd/ C++]&lt;br /&gt;
* [http://www.openhome.org/build/nightly/docs/Cs/ C#]&lt;br /&gt;
* [http://www.openhome.org/build/nightly/docs/Java/ Java]&lt;br /&gt;
* [http://www.openhome.org/build/nightly/docs/Js/ JavaScript]&lt;br /&gt;
* [http://www.openhome.org/build/nightly/docs/C/ C]&lt;br /&gt;
&lt;br /&gt;
=== Discussion ===&lt;br /&gt;
[http://forums.openhome.org/forumdisplay.php?fid=5 Developer forum]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
ohNet is written using C++ with std::string replaced by special buffer classes.  These buffer classes allow for more efficient use of memory at the cost of a steeper learning curve. Memory use benefits can be especially pronounced for the Device stack.  [http://www.openhome.org/build/nightly/docs/CppCore/ API docs] for this version of the stack are available but the buffer classes are intended for internal use of the library and are as such currently undocumented.&lt;/div&gt;</summary>
		<author><name>Keith</name></author>	</entry>

	<entry>
		<id>http://wiki.openhome.org/wiki/OhMedia</id>
		<title>OhMedia</title>
		<link rel="alternate" type="text/html" href="http://wiki.openhome.org/wiki/OhMedia"/>
				<updated>2013-07-10T15:42:07Z</updated>
		
		<summary type="html">&lt;p&gt;Keith: /* What is ohMedia? */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=What is ohMedia?=&lt;br /&gt;
&lt;br /&gt;
OpenHome Media (ohMedia) is an open standard for networked audio devices in the home.  Devices can implement ohMedia in place of, or alongside of, the UPnP Forum’s AV standards.  It offers a number of significant advantages over the UPnP Forum's AV standards.&lt;br /&gt;
&lt;br /&gt;
* Playlists are stored on the renderer, allowing playback to continue when the control point leaves the network (e.g. the control point application closes or its host device powers down).&lt;br /&gt;
* Storing playlists on the renderer also allows for gapless playback, avoiding gaps between tracks that were intended to merge seamlessly. This is particularly important for live albums and classical music. &lt;br /&gt;
* Multiple control points are better supported. Storing a playlist on the renderer allows multiple control points to edit the order of tracks and display metadata (including track name and album art) for the entire playlist. &lt;br /&gt;
* Share music between renderers. The Songcast protocol allows an ohMedia renderer to share its content with any other ohMedia device or listen to content from another device. Synchronised audio can be played between any number of devices. Desktop songcast applications plus mobile support (Songcast app for Android; Airplay receiver for iOS) allows content from many other devices to be shared. &lt;br /&gt;
* Internet radio and a receiver for Apple's AirPlay are also natively supported. &lt;br /&gt;
* Playlists can be more easily &amp;amp; reliably saved and reused. Many popular UPnP media servers change track URIs whenever they rebuild their database (e.g. every time new content is added to the database). ohMedia’s reference server - Songbox - guarantees to retain track URIs across rebuilds, allowing saving and repeated reuse of playlists. &lt;br /&gt;
* Support for multi-product hi-fi systems. E.g. a media renderer with a separate pre-amp. ohMedia topology algorithms allow a control point to select the volume control on the pre-amp.&lt;br /&gt;
&lt;br /&gt;
= Reference Implementations =&lt;br /&gt;
&lt;br /&gt;
* [http://core.linn.co.uk/network/wiki/ohMediaPlayer-Integrator ohMediaPlayer] – cross-platform software renderer including both !OpenHome and UPnP forum network services. Capable of being deployed to desktop or embedded platforms.&lt;br /&gt;
* [http://www.linn.co.uk/software#songbox Songbox] – media server including both OpenHome and UPnP forum network services.  Capable of being deployed to desktop and some NAS platforms.&lt;br /&gt;
* [http://www.linn.co.uk/software#songcast Songcast] – application that sends local audio to an ohMedia renderer.  Available for Windows &amp;amp; Mac.&lt;br /&gt;
* [http://www.linn.co.uk/software#kinsky Kinsky] – control point for ohMedia renderer.  Available for all major desktop and mobile platforms.&lt;br /&gt;
Some of these products are released with Linn Products branding.  All are based on generic OpenHome technology.  We’d be happy to hear from anyone who wants to work with us to simplify skinning of these products.&lt;br /&gt;
&lt;br /&gt;
= Developers =&lt;br /&gt;
If you are interested in ohMedia development, [[Media:Developers|further information is available]]&lt;/div&gt;</summary>
		<author><name>Keith</name></author>	</entry>

	<entry>
		<id>http://wiki.openhome.org/wiki/Oh:Overview</id>
		<title>Oh:Overview</title>
		<link rel="alternate" type="text/html" href="http://wiki.openhome.org/wiki/Oh:Overview"/>
				<updated>2013-07-10T15:38:54Z</updated>
		
		<summary type="html">&lt;p&gt;Keith: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= OPENHOME =&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== ohMedia ==&lt;br /&gt;
&lt;br /&gt;
[[ohMedia|ohMedia]] is an open standard that allows the seamless interaction of media within your home.&lt;br /&gt;
&lt;br /&gt;
== ohNet ==&lt;br /&gt;
&lt;br /&gt;
[[ohNet|ohNet]] is a modern cross platform networking stack.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
__NOTOC__&lt;/div&gt;</summary>
		<author><name>Keith</name></author>	</entry>

	<entry>
		<id>http://wiki.openhome.org/wiki/Oh:Overview</id>
		<title>Oh:Overview</title>
		<link rel="alternate" type="text/html" href="http://wiki.openhome.org/wiki/Oh:Overview"/>
				<updated>2013-07-10T15:38:31Z</updated>
		
		<summary type="html">&lt;p&gt;Keith: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= OPENHOME =&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== [[ohMedia|ohMedia]] ==&lt;br /&gt;
&lt;br /&gt;
[[ohMedia|ohMedia]] is an open standard that allows the seamless interaction of media within your home.&lt;br /&gt;
&lt;br /&gt;
== [[ohNet|ohNet]] ==&lt;br /&gt;
&lt;br /&gt;
[[ohNet|ohNet]] is a modern cross platform networking stack.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
__NOTOC__&lt;/div&gt;</summary>
		<author><name>Keith</name></author>	</entry>

	<entry>
		<id>http://wiki.openhome.org/wiki/OhMedia</id>
		<title>OhMedia</title>
		<link rel="alternate" type="text/html" href="http://wiki.openhome.org/wiki/OhMedia"/>
				<updated>2013-07-04T13:16:51Z</updated>
		
		<summary type="html">&lt;p&gt;Keith: /* Developers */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=What is ohMedia?=&lt;br /&gt;
&lt;br /&gt;
ohMedia is an open standard for networked audio devices. Devices can implement it in place of or in addition to the UPnP Forum’s AV standards. It offers a number of advantages over basic UPnP:&lt;br /&gt;
&lt;br /&gt;
* Playlists are stored on the renderer, allowing playback to continue when the control point leaves the network (e.g. the control point application closes or its host device powers down).&lt;br /&gt;
* Storing playlists on the renderer also allows for gapless playback, avoiding gaps between tracks that were intended to merge seamlessly. This is particularly important for live albums and classical music. &lt;br /&gt;
* Multiple control points are better supported. Storing a playlist on the renderer allows multiple control points to edit the order of tracks and display metadata (including track name and album art) for the entire playlist. &lt;br /&gt;
* Share music between renderers. The Songcast protocol allows an ohMedia renderer to share its content with any other ohMedia device or listen to content from another device. Synchronised audio can be played between any number of devices. Desktop songcast applications plus mobile support (Songcast app for Android; Airplay receiver for iOS) allows content from many other devices to be shared. &lt;br /&gt;
* Internet radio and a receiver for Apple's AirPlay are also natively supported. &lt;br /&gt;
* Playlists can be more easily &amp;amp; reliably saved and reused. Many popular UPnP media servers change track URIs whenever they rebuild their database (e.g. every time new content is added to the database). ohMedia’s reference server - Songbox - guarantees to retain track URIs across rebuilds, allowing saving and repeated reuse of playlists. &lt;br /&gt;
* Support for multi-product hi-fi systems. E.g. a media renderer with a separate pre-amp. ohMedia topology algorithms allow a control point to select the volume control on the pre-amp. &lt;br /&gt;
&lt;br /&gt;
= Reference Implementations =&lt;br /&gt;
&lt;br /&gt;
* [http://core.linn.co.uk/network/wiki/ohMediaPlayer-Integrator ohMediaPlayer] – cross-platform software renderer including both !OpenHome and UPnP forum network services. Capable of being deployed to desktop or embedded platforms.&lt;br /&gt;
* [http://www.linn.co.uk/software#songbox Songbox] – media server including both OpenHome and UPnP forum network services.  Capable of being deployed to desktop and some NAS platforms.&lt;br /&gt;
* [http://www.linn.co.uk/software#songcast Songcast] – application that sends local audio to an ohMedia renderer.  Available for Windows &amp;amp; Mac.&lt;br /&gt;
* [http://www.linn.co.uk/software#kinsky Kinsky] – control point for ohMedia renderer.  Available for all major desktop and mobile platforms.&lt;br /&gt;
Some of these products are released with Linn Products branding.  All are based on generic OpenHome technology.  We’d be happy to hear from anyone who wants to work with us to simplify skinning of these products.&lt;br /&gt;
&lt;br /&gt;
= Developers =&lt;br /&gt;
If you are interested in ohMedia development, [[Media:Developers|further information is available]]&lt;/div&gt;</summary>
		<author><name>Keith</name></author>	</entry>

	<entry>
		<id>http://wiki.openhome.org/wiki/OhMedia</id>
		<title>OhMedia</title>
		<link rel="alternate" type="text/html" href="http://wiki.openhome.org/wiki/OhMedia"/>
				<updated>2013-07-04T13:15:10Z</updated>
		
		<summary type="html">&lt;p&gt;Keith: /* Reference Implementations */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=What is ohMedia?=&lt;br /&gt;
&lt;br /&gt;
ohMedia is an open standard for networked audio devices. Devices can implement it in place of or in addition to the UPnP Forum’s AV standards. It offers a number of advantages over basic UPnP:&lt;br /&gt;
&lt;br /&gt;
* Playlists are stored on the renderer, allowing playback to continue when the control point leaves the network (e.g. the control point application closes or its host device powers down).&lt;br /&gt;
* Storing playlists on the renderer also allows for gapless playback, avoiding gaps between tracks that were intended to merge seamlessly. This is particularly important for live albums and classical music. &lt;br /&gt;
* Multiple control points are better supported. Storing a playlist on the renderer allows multiple control points to edit the order of tracks and display metadata (including track name and album art) for the entire playlist. &lt;br /&gt;
* Share music between renderers. The Songcast protocol allows an ohMedia renderer to share its content with any other ohMedia device or listen to content from another device. Synchronised audio can be played between any number of devices. Desktop songcast applications plus mobile support (Songcast app for Android; Airplay receiver for iOS) allows content from many other devices to be shared. &lt;br /&gt;
* Internet radio and a receiver for Apple's AirPlay are also natively supported. &lt;br /&gt;
* Playlists can be more easily &amp;amp; reliably saved and reused. Many popular UPnP media servers change track URIs whenever they rebuild their database (e.g. every time new content is added to the database). ohMedia’s reference server - Songbox - guarantees to retain track URIs across rebuilds, allowing saving and repeated reuse of playlists. &lt;br /&gt;
* Support for multi-product hi-fi systems. E.g. a media renderer with a separate pre-amp. ohMedia topology algorithms allow a control point to select the volume control on the pre-amp. &lt;br /&gt;
&lt;br /&gt;
= Reference Implementations =&lt;br /&gt;
&lt;br /&gt;
* [http://core.linn.co.uk/network/wiki/ohMediaPlayer-Integrator ohMediaPlayer] – cross-platform software renderer including both !OpenHome and UPnP forum network services. Capable of being deployed to desktop or embedded platforms.&lt;br /&gt;
* [http://www.linn.co.uk/software#songbox Songbox] – media server including both OpenHome and UPnP forum network services.  Capable of being deployed to desktop and some NAS platforms.&lt;br /&gt;
* [http://www.linn.co.uk/software#songcast Songcast] – application that sends local audio to an ohMedia renderer.  Available for Windows &amp;amp; Mac.&lt;br /&gt;
* [http://www.linn.co.uk/software#kinsky Kinsky] – control point for ohMedia renderer.  Available for all major desktop and mobile platforms.&lt;br /&gt;
Some of these products are released with Linn Products branding.  All are based on generic OpenHome technology.  We’d be happy to hear from anyone who wants to work with us to simplify skinning of these products.&lt;br /&gt;
&lt;br /&gt;
= Developers =&lt;br /&gt;
If you are interested in ohMedia development, [[ohMedia-Developers|further information is available]]&lt;/div&gt;</summary>
		<author><name>Keith</name></author>	</entry>

	<entry>
		<id>http://wiki.openhome.org/wiki/OhMedia</id>
		<title>OhMedia</title>
		<link rel="alternate" type="text/html" href="http://wiki.openhome.org/wiki/OhMedia"/>
				<updated>2013-07-04T13:14:41Z</updated>
		
		<summary type="html">&lt;p&gt;Keith: /* Reference Implementations */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=What is ohMedia?=&lt;br /&gt;
&lt;br /&gt;
ohMedia is an open standard for networked audio devices. Devices can implement it in place of or in addition to the UPnP Forum’s AV standards. It offers a number of advantages over basic UPnP:&lt;br /&gt;
&lt;br /&gt;
* Playlists are stored on the renderer, allowing playback to continue when the control point leaves the network (e.g. the control point application closes or its host device powers down).&lt;br /&gt;
* Storing playlists on the renderer also allows for gapless playback, avoiding gaps between tracks that were intended to merge seamlessly. This is particularly important for live albums and classical music. &lt;br /&gt;
* Multiple control points are better supported. Storing a playlist on the renderer allows multiple control points to edit the order of tracks and display metadata (including track name and album art) for the entire playlist. &lt;br /&gt;
* Share music between renderers. The Songcast protocol allows an ohMedia renderer to share its content with any other ohMedia device or listen to content from another device. Synchronised audio can be played between any number of devices. Desktop songcast applications plus mobile support (Songcast app for Android; Airplay receiver for iOS) allows content from many other devices to be shared. &lt;br /&gt;
* Internet radio and a receiver for Apple's AirPlay are also natively supported. &lt;br /&gt;
* Playlists can be more easily &amp;amp; reliably saved and reused. Many popular UPnP media servers change track URIs whenever they rebuild their database (e.g. every time new content is added to the database). ohMedia’s reference server - Songbox - guarantees to retain track URIs across rebuilds, allowing saving and repeated reuse of playlists. &lt;br /&gt;
* Support for multi-product hi-fi systems. E.g. a media renderer with a separate pre-amp. ohMedia topology algorithms allow a control point to select the volume control on the pre-amp. &lt;br /&gt;
&lt;br /&gt;
= Reference Implementations =&lt;br /&gt;
&lt;br /&gt;
* [http://core.linn.co.uk/network/wiki/ohMediaPlayer-Integrator ohMediaPlayer] – cross-platform software renderer including both !OpenHome and UPnP forum network services. Capable of being deployed to desktop or embedded platforms.&lt;br /&gt;
* [http://www.linn.co.uk/software#songbox Songbox] – media server including both !OpenHome and UPnP forum network services.  Capable of being deployed to desktop and some NAS platforms.&lt;br /&gt;
* [http://www.linn.co.uk/software#songcast Songcast] – application that sends local audio to an ohMedia renderer.  Available for Windows &amp;amp; Mac.&lt;br /&gt;
* [http://www.linn.co.uk/software#kinsky Kinsky] – control point for ohMedia renderer.  Available for all major desktop and mobile platforms.&lt;br /&gt;
Some of these products are released with Linn Products branding.  All are based on generic !OpenHome technology.  We’d be happy to hear from anyone who wants to work with us to simplify skinning of these products.&lt;br /&gt;
&lt;br /&gt;
= Developers =&lt;br /&gt;
If you are interested in ohMedia development, [[ohMedia-Developers|further information is available]]&lt;/div&gt;</summary>
		<author><name>Keith</name></author>	</entry>

	<entry>
		<id>http://wiki.openhome.org/wiki/OhMedia</id>
		<title>OhMedia</title>
		<link rel="alternate" type="text/html" href="http://wiki.openhome.org/wiki/OhMedia"/>
				<updated>2013-07-04T12:53:25Z</updated>
		
		<summary type="html">&lt;p&gt;Keith: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=What is ohMedia?=&lt;br /&gt;
&lt;br /&gt;
ohMedia is an open standard for networked audio devices. Devices can implement it in place of or in addition to the UPnP Forum’s AV standards. It offers a number of advantages over basic UPnP:&lt;br /&gt;
&lt;br /&gt;
* Playlists are stored on the renderer, allowing playback to continue when the control point leaves the network (e.g. the control point application closes or its host device powers down).&lt;br /&gt;
* Storing playlists on the renderer also allows for gapless playback, avoiding gaps between tracks that were intended to merge seamlessly. This is particularly important for live albums and classical music. &lt;br /&gt;
* Multiple control points are better supported. Storing a playlist on the renderer allows multiple control points to edit the order of tracks and display metadata (including track name and album art) for the entire playlist. &lt;br /&gt;
* Share music between renderers. The Songcast protocol allows an ohMedia renderer to share its content with any other ohMedia device or listen to content from another device. Synchronised audio can be played between any number of devices. Desktop songcast applications plus mobile support (Songcast app for Android; Airplay receiver for iOS) allows content from many other devices to be shared. &lt;br /&gt;
* Internet radio and a receiver for Apple's AirPlay are also natively supported. &lt;br /&gt;
* Playlists can be more easily &amp;amp; reliably saved and reused. Many popular UPnP media servers change track URIs whenever they rebuild their database (e.g. every time new content is added to the database). ohMedia’s reference server - Songbox - guarantees to retain track URIs across rebuilds, allowing saving and repeated reuse of playlists. &lt;br /&gt;
* Support for multi-product hi-fi systems. E.g. a media renderer with a separate pre-amp. ohMedia topology algorithms allow a control point to select the volume control on the pre-amp. &lt;br /&gt;
&lt;br /&gt;
= Reference Implementations =&lt;/div&gt;</summary>
		<author><name>Keith</name></author>	</entry>

	<entry>
		<id>http://wiki.openhome.org/wiki/OhMedia</id>
		<title>OhMedia</title>
		<link rel="alternate" type="text/html" href="http://wiki.openhome.org/wiki/OhMedia"/>
				<updated>2013-07-04T12:46:50Z</updated>
		
		<summary type="html">&lt;p&gt;Keith: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=What is ohMedia?=&lt;br /&gt;
&lt;br /&gt;
ohMedia is an open standard for networked audio devices. Devices can implement it in place of or in addition to the UPnP Forum’s AV standards. It offers a number of advantages over basic UPnP:&lt;br /&gt;
&lt;br /&gt;
* Playlists are stored on the renderer, allowing playback to continue when the control point leaves the network (e.g. the control point application closes or its host device powers down).&lt;/div&gt;</summary>
		<author><name>Keith</name></author>	</entry>

	<entry>
		<id>http://wiki.openhome.org/wiki/OhMedia</id>
		<title>OhMedia</title>
		<link rel="alternate" type="text/html" href="http://wiki.openhome.org/wiki/OhMedia"/>
				<updated>2013-07-04T12:45:45Z</updated>
		
		<summary type="html">&lt;p&gt;Keith: Replaced content with &amp;quot;=What is ohMedia?=

ohMedia is an open standard for networked audio devices. Devices can implement it in place of or in addition to the UPnP Forum’s AV standards. It offers...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=What is ohMedia?=&lt;br /&gt;
&lt;br /&gt;
ohMedia is an open standard for networked audio devices. Devices can implement it in place of or in addition to the UPnP Forum’s AV standards. It offers a number of advantages over basic UPnP:&lt;/div&gt;</summary>
		<author><name>Keith</name></author>	</entry>

	<entry>
		<id>http://wiki.openhome.org/wiki/OhMedia</id>
		<title>OhMedia</title>
		<link rel="alternate" type="text/html" href="http://wiki.openhome.org/wiki/OhMedia"/>
				<updated>2012-10-26T16:59:58Z</updated>
		
		<summary type="html">&lt;p&gt;Keith: /* Server */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= ohMedia Overview =&lt;br /&gt;
&lt;br /&gt;
ohMedia is an open standard that allows the seamless interaction of media within your home.&lt;br /&gt;
&lt;br /&gt;
ohMedia's high level design is influenced by the UPnP AV standard (UAV). UAV correctly modelled media in the home as the interaction between 3 types of devices: Control Points, Media Renderers, and Media Servers.&lt;br /&gt;
&amp;lt;!-- &amp;lt;picture&amp;gt;--&amp;gt;&lt;br /&gt;
This model correctly identified the potential presence of an arbitrary number of each of these devices. However, the Media Server specification, and in particular the Media Renderer specification is deeply flawed. The next section explains those flaws and outlines how ohMedia fixes them.&lt;br /&gt;
&lt;br /&gt;
Developer information is also available [[Av:Developer | here]]&lt;br /&gt;
&lt;br /&gt;
= Flaws in the UPnP AV Standard =&lt;br /&gt;
&lt;br /&gt;
== Problem 1: No support for gap-less audio ==&lt;br /&gt;
&lt;br /&gt;
The UPnP AV media renderer specification is technically able to support gap-less audio though the AV Transport service actions, setAVTRansportURI and setNextAVTransportURI. However, the UPnP forum chose to make the setNextAVTransportURI action optional. This meant that no, or very few, media renderer manufacturers chose to support the action, which in turn, meant that no control points have added support for gap-less audio. So the real world situation is that UPnP AV has no support for gap-less audio.&lt;br /&gt;
&lt;br /&gt;
== Problem 2: No support for a user's playlist to continue playing when a control point is turned off ==&lt;br /&gt;
&lt;br /&gt;
The UPnP AV media renderer specification only allows for a media renderer to store a maximum of two URIs, but, as previously discussed, the real world maximum is in fact only a single URI. This means that in order for a media renderer to play a user created playlist the control point has to be continually monitoring the media renderer. When the media renderer indicates that it has finished playing the current URI the control point then has to set the next URI. If the control point is turned off and not monitoring the media renderer then the media renderer will not be informed of the next URI and playback will stop.&lt;br /&gt;
&lt;br /&gt;
== Problem 3:  No support for multiple control points ==&lt;br /&gt;
&lt;br /&gt;
The UPnP AV media renderer specification caters for the case where a user wants multiple control  points to show the metadata that is associated with the currently playing URI. However when it comes to controlling a media renderer from multiple control points the standard quickly shows it inadequacies.&lt;br /&gt;
&lt;br /&gt;
The main problems comes from the fact that the media renderer only holds a URI for the currently playing URI. This means that only the control point that the user used to create a playlist has knowledge about the playlist. As described earlier, because this control point holds the user's playlist it is actually controlling the flow of URIs to the media renderer. What happens if the same user adds tracks to a different control point? At this point two control points are trying to control the flow of different URIs to the media renderer. At this point the whole system fails to operate as the user expects.&lt;br /&gt;
&lt;br /&gt;
When a user creates a playlist on their control point and starts playback on a UPnP AV media renderer the renderer only holds the currently playing URI. When the renderer finishes the current URI the control point provides the renderer with next URI. If the control point is turned off at the point when the renderer finishes playing the current URI the renderer will stop playback.&lt;br /&gt;
&lt;br /&gt;
With the control point controlling the flow of URIs to the media renderer the UPnP AV media renderer specification violates the 3 box model separation where the control point should, without any intervention, enable content to flow between the media server and media renderer.&lt;br /&gt;
&lt;br /&gt;
== Problem 4: No concept of a Hi-Fi system comprising of more than one product or a home comprising of more than one Hi-Fi system ==&lt;br /&gt;
&lt;br /&gt;
A modern home can have one or more Hi-Fi systems of which each Hi-Fi system can comprise of one or more products connected together, e.g. a media player and a pre-amp.&lt;br /&gt;
&lt;br /&gt;
The UPnP AV standard assumes a single box which is made up of a single source and possibly a volume control. The standard has no way of representing a system that is made up of several different boxes connected together, e.g. a media renderer connected into a pre-amp. Taking the example of a media renderer connected to a pre-amp, without the ability to represent the different boxes and how they are connected it is impossible, using the UPnP AV standard, to select the input on the pre-amp that the media renderer is connected to when the user selects the media renderer in a control point.&lt;br /&gt;
&lt;br /&gt;
== Problem 5: Media's URI changing when media server rebuilds its database ==&lt;br /&gt;
&lt;br /&gt;
The UPnP AV media server specification does not have a requirement for media servers to present a piece of media to the network with the same URI. This has resulted in media server implementations that change media URIs when a user changes their media collection. This results in unexpected behaviour for the user. For example, a user plays some media on their renderer. The user then modifies their media collection which results in the media server rebuilding its database. The user then presses play on their renderer to only hear nothing (the URI is now no longer valid) or worse some different piece of media (the URI now represents some different media).&lt;br /&gt;
&lt;br /&gt;
= ohMedia Solutions =&lt;br /&gt;
The ohMedia standard has been designed to solve all the problems described above.&lt;br /&gt;
&lt;br /&gt;
The first three problems are solved through the [[#ohPlaylist|ohPlaylist]] service specification.&lt;br /&gt;
&lt;br /&gt;
Problem 4 is solved through the [[#ohProduct_and_ohTopology|ohProduct service specification and the ohTopology algorithm]].&lt;br /&gt;
&lt;br /&gt;
Problem 5 is solved through the [[#Server|ohMedia server]] specification.&lt;br /&gt;
&lt;br /&gt;
The ohMedia standard goes further and adds the [[#ohSongcast|ohSongcast]] standard. [[#ohSongcast|ohSongcast]] provides the ability to synchronise playback between products, commonly referred to as party mode. However in general [[#ohSongcast|ohSongcast]] provides the ability for a product to stream its audio over a standard home network and for any product that supports the [[#ohSongcast|ohSongcast]] receiver specification to receive the audio and play it back.&lt;br /&gt;
&lt;br /&gt;
= How it works =&lt;br /&gt;
&lt;br /&gt;
ohMedia models media in the home through the interaction of 3 types of device, Control Points, Media Players and Media Servers.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- &amp;lt;picture of 3 devices as before, but with arrows labelled with 1. Browse, 2. Tell, 3. Retrieve&amp;gt;--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The Control Point first browses the Media Server to locate the desired media. The Control Point then tells the Media Player to play the selected media and finally Media Player retrieves the media from the Media Server.&lt;br /&gt;
&lt;br /&gt;
== ohProduct and ohTopology ==&lt;br /&gt;
&lt;br /&gt;
ohMedia models a home as a number Hi-Fi systems, which are located in rooms.&lt;br /&gt;
&lt;br /&gt;
ohMedia models a Hi-Fi system as a hierarchical tree of products, where a product is defined as a single physical box that is located in a room, has a unique name within the room, has one output and any number of sources.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--&amp;lt;diagram of a product with multi-in, one out&amp;gt;--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A product is modelled through the ohProduct service specification.&lt;br /&gt;
&lt;br /&gt;
When a control point wants to construct a model of a user's home they use the ohTopology algorithm. The ohTopology algorithm is as follows,&lt;br /&gt;
&lt;br /&gt;
#discover all the products in the home that have an ohProduct service&lt;br /&gt;
#group the discovered products based on the room they are in&lt;br /&gt;
#create a hierarchical tree structure by matching source names to product names&lt;br /&gt;
#discover source functionality based on source type&lt;br /&gt;
#discover additional functionality based on product attributes&lt;br /&gt;
&lt;br /&gt;
e.g. if we had two products, a pre-amp and a media player, which were connected together then both their ohProduct services would return the same room name and one of the source names returned by the pre-amp's ohProduct service would be the same as the product name returned by the media renderer's ohProduct service.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--&amp;lt;picture of example&amp;gt;--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Sources ==&lt;br /&gt;
&lt;br /&gt;
ohMedia defines four source types,&lt;br /&gt;
&lt;br /&gt;
#Playlist – product supports on device playlists&lt;br /&gt;
#Radio – product supports internet radio with presets&lt;br /&gt;
#Receiver – product supports receiving ohSongcast broadcasts&lt;br /&gt;
#UpnpAv – product also implements the UPnP AV media renderer specification&lt;br /&gt;
&lt;br /&gt;
If a source type is not one of the types above an ohMedia control point will be able to switch to the source but will treat the source as a non controllable external input e.g. Analogue, TOS or HDMI.&lt;br /&gt;
&lt;br /&gt;
== Attributes ==&lt;br /&gt;
&lt;br /&gt;
ohMedia defines three attributes,&lt;br /&gt;
&lt;br /&gt;
#Volume – product supports volume control&lt;br /&gt;
#Info – product supports providing information about the currently playing media&lt;br /&gt;
#Time – product supports providing the current time within the currently playing media&lt;br /&gt;
#Sender – product supports ohSongcast broadcasting&lt;br /&gt;
&lt;br /&gt;
== ohPlaylist ==&lt;br /&gt;
&lt;br /&gt;
The ohPlaylist specification has been designed to allow gap-less audio, playlists to proceed without the intervention of a control point and to function correctly under the manipulation of multiple control points.&lt;br /&gt;
&lt;br /&gt;
The ohPlaylist is a list of media associated with a unique ID. Media is defined by its URI and metadata. A control point is required to keep in memory the current list of playlist IDs. This list of IDs can then be used to list the media in the order of play, obtain the metadata and manipulate the list.&lt;br /&gt;
&lt;br /&gt;
The Playlist service provides the API that allow control points to manipulate, keep track of playlist changes and control playback.&lt;br /&gt;
&lt;br /&gt;
= Developers =&lt;br /&gt;
&lt;br /&gt;
If you are interested in ohMedia development, more information can be found [[Av:Developer|here]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
__NOTOC__&lt;/div&gt;</summary>
		<author><name>Keith</name></author>	</entry>

	<entry>
		<id>http://wiki.openhome.org/wiki/OhMedia</id>
		<title>OhMedia</title>
		<link rel="alternate" type="text/html" href="http://wiki.openhome.org/wiki/OhMedia"/>
				<updated>2012-10-26T16:59:51Z</updated>
		
		<summary type="html">&lt;p&gt;Keith: /* ohSongcast */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= ohMedia Overview =&lt;br /&gt;
&lt;br /&gt;
ohMedia is an open standard that allows the seamless interaction of media within your home.&lt;br /&gt;
&lt;br /&gt;
ohMedia's high level design is influenced by the UPnP AV standard (UAV). UAV correctly modelled media in the home as the interaction between 3 types of devices: Control Points, Media Renderers, and Media Servers.&lt;br /&gt;
&amp;lt;!-- &amp;lt;picture&amp;gt;--&amp;gt;&lt;br /&gt;
This model correctly identified the potential presence of an arbitrary number of each of these devices. However, the Media Server specification, and in particular the Media Renderer specification is deeply flawed. The next section explains those flaws and outlines how ohMedia fixes them.&lt;br /&gt;
&lt;br /&gt;
Developer information is also available [[Av:Developer | here]]&lt;br /&gt;
&lt;br /&gt;
= Flaws in the UPnP AV Standard =&lt;br /&gt;
&lt;br /&gt;
== Problem 1: No support for gap-less audio ==&lt;br /&gt;
&lt;br /&gt;
The UPnP AV media renderer specification is technically able to support gap-less audio though the AV Transport service actions, setAVTRansportURI and setNextAVTransportURI. However, the UPnP forum chose to make the setNextAVTransportURI action optional. This meant that no, or very few, media renderer manufacturers chose to support the action, which in turn, meant that no control points have added support for gap-less audio. So the real world situation is that UPnP AV has no support for gap-less audio.&lt;br /&gt;
&lt;br /&gt;
== Problem 2: No support for a user's playlist to continue playing when a control point is turned off ==&lt;br /&gt;
&lt;br /&gt;
The UPnP AV media renderer specification only allows for a media renderer to store a maximum of two URIs, but, as previously discussed, the real world maximum is in fact only a single URI. This means that in order for a media renderer to play a user created playlist the control point has to be continually monitoring the media renderer. When the media renderer indicates that it has finished playing the current URI the control point then has to set the next URI. If the control point is turned off and not monitoring the media renderer then the media renderer will not be informed of the next URI and playback will stop.&lt;br /&gt;
&lt;br /&gt;
== Problem 3:  No support for multiple control points ==&lt;br /&gt;
&lt;br /&gt;
The UPnP AV media renderer specification caters for the case where a user wants multiple control  points to show the metadata that is associated with the currently playing URI. However when it comes to controlling a media renderer from multiple control points the standard quickly shows it inadequacies.&lt;br /&gt;
&lt;br /&gt;
The main problems comes from the fact that the media renderer only holds a URI for the currently playing URI. This means that only the control point that the user used to create a playlist has knowledge about the playlist. As described earlier, because this control point holds the user's playlist it is actually controlling the flow of URIs to the media renderer. What happens if the same user adds tracks to a different control point? At this point two control points are trying to control the flow of different URIs to the media renderer. At this point the whole system fails to operate as the user expects.&lt;br /&gt;
&lt;br /&gt;
When a user creates a playlist on their control point and starts playback on a UPnP AV media renderer the renderer only holds the currently playing URI. When the renderer finishes the current URI the control point provides the renderer with next URI. If the control point is turned off at the point when the renderer finishes playing the current URI the renderer will stop playback.&lt;br /&gt;
&lt;br /&gt;
With the control point controlling the flow of URIs to the media renderer the UPnP AV media renderer specification violates the 3 box model separation where the control point should, without any intervention, enable content to flow between the media server and media renderer.&lt;br /&gt;
&lt;br /&gt;
== Problem 4: No concept of a Hi-Fi system comprising of more than one product or a home comprising of more than one Hi-Fi system ==&lt;br /&gt;
&lt;br /&gt;
A modern home can have one or more Hi-Fi systems of which each Hi-Fi system can comprise of one or more products connected together, e.g. a media player and a pre-amp.&lt;br /&gt;
&lt;br /&gt;
The UPnP AV standard assumes a single box which is made up of a single source and possibly a volume control. The standard has no way of representing a system that is made up of several different boxes connected together, e.g. a media renderer connected into a pre-amp. Taking the example of a media renderer connected to a pre-amp, without the ability to represent the different boxes and how they are connected it is impossible, using the UPnP AV standard, to select the input on the pre-amp that the media renderer is connected to when the user selects the media renderer in a control point.&lt;br /&gt;
&lt;br /&gt;
== Problem 5: Media's URI changing when media server rebuilds its database ==&lt;br /&gt;
&lt;br /&gt;
The UPnP AV media server specification does not have a requirement for media servers to present a piece of media to the network with the same URI. This has resulted in media server implementations that change media URIs when a user changes their media collection. This results in unexpected behaviour for the user. For example, a user plays some media on their renderer. The user then modifies their media collection which results in the media server rebuilding its database. The user then presses play on their renderer to only hear nothing (the URI is now no longer valid) or worse some different piece of media (the URI now represents some different media).&lt;br /&gt;
&lt;br /&gt;
= ohMedia Solutions =&lt;br /&gt;
The ohMedia standard has been designed to solve all the problems described above.&lt;br /&gt;
&lt;br /&gt;
The first three problems are solved through the [[#ohPlaylist|ohPlaylist]] service specification.&lt;br /&gt;
&lt;br /&gt;
Problem 4 is solved through the [[#ohProduct_and_ohTopology|ohProduct service specification and the ohTopology algorithm]].&lt;br /&gt;
&lt;br /&gt;
Problem 5 is solved through the [[#Server|ohMedia server]] specification.&lt;br /&gt;
&lt;br /&gt;
The ohMedia standard goes further and adds the [[#ohSongcast|ohSongcast]] standard. [[#ohSongcast|ohSongcast]] provides the ability to synchronise playback between products, commonly referred to as party mode. However in general [[#ohSongcast|ohSongcast]] provides the ability for a product to stream its audio over a standard home network and for any product that supports the [[#ohSongcast|ohSongcast]] receiver specification to receive the audio and play it back.&lt;br /&gt;
&lt;br /&gt;
= How it works =&lt;br /&gt;
&lt;br /&gt;
ohMedia models media in the home through the interaction of 3 types of device, Control Points, Media Players and Media Servers.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- &amp;lt;picture of 3 devices as before, but with arrows labelled with 1. Browse, 2. Tell, 3. Retrieve&amp;gt;--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The Control Point first browses the Media Server to locate the desired media. The Control Point then tells the Media Player to play the selected media and finally Media Player retrieves the media from the Media Server.&lt;br /&gt;
&lt;br /&gt;
== ohProduct and ohTopology ==&lt;br /&gt;
&lt;br /&gt;
ohMedia models a home as a number Hi-Fi systems, which are located in rooms.&lt;br /&gt;
&lt;br /&gt;
ohMedia models a Hi-Fi system as a hierarchical tree of products, where a product is defined as a single physical box that is located in a room, has a unique name within the room, has one output and any number of sources.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--&amp;lt;diagram of a product with multi-in, one out&amp;gt;--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A product is modelled through the ohProduct service specification.&lt;br /&gt;
&lt;br /&gt;
When a control point wants to construct a model of a user's home they use the ohTopology algorithm. The ohTopology algorithm is as follows,&lt;br /&gt;
&lt;br /&gt;
#discover all the products in the home that have an ohProduct service&lt;br /&gt;
#group the discovered products based on the room they are in&lt;br /&gt;
#create a hierarchical tree structure by matching source names to product names&lt;br /&gt;
#discover source functionality based on source type&lt;br /&gt;
#discover additional functionality based on product attributes&lt;br /&gt;
&lt;br /&gt;
e.g. if we had two products, a pre-amp and a media player, which were connected together then both their ohProduct services would return the same room name and one of the source names returned by the pre-amp's ohProduct service would be the same as the product name returned by the media renderer's ohProduct service.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--&amp;lt;picture of example&amp;gt;--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Sources ==&lt;br /&gt;
&lt;br /&gt;
ohMedia defines four source types,&lt;br /&gt;
&lt;br /&gt;
#Playlist – product supports on device playlists&lt;br /&gt;
#Radio – product supports internet radio with presets&lt;br /&gt;
#Receiver – product supports receiving ohSongcast broadcasts&lt;br /&gt;
#UpnpAv – product also implements the UPnP AV media renderer specification&lt;br /&gt;
&lt;br /&gt;
If a source type is not one of the types above an ohMedia control point will be able to switch to the source but will treat the source as a non controllable external input e.g. Analogue, TOS or HDMI.&lt;br /&gt;
&lt;br /&gt;
== Attributes ==&lt;br /&gt;
&lt;br /&gt;
ohMedia defines three attributes,&lt;br /&gt;
&lt;br /&gt;
#Volume – product supports volume control&lt;br /&gt;
#Info – product supports providing information about the currently playing media&lt;br /&gt;
#Time – product supports providing the current time within the currently playing media&lt;br /&gt;
#Sender – product supports ohSongcast broadcasting&lt;br /&gt;
&lt;br /&gt;
== ohPlaylist ==&lt;br /&gt;
&lt;br /&gt;
The ohPlaylist specification has been designed to allow gap-less audio, playlists to proceed without the intervention of a control point and to function correctly under the manipulation of multiple control points.&lt;br /&gt;
&lt;br /&gt;
The ohPlaylist is a list of media associated with a unique ID. Media is defined by its URI and metadata. A control point is required to keep in memory the current list of playlist IDs. This list of IDs can then be used to list the media in the order of play, obtain the metadata and manipulate the list.&lt;br /&gt;
&lt;br /&gt;
The Playlist service provides the API that allow control points to manipulate, keep track of playlist changes and control playback.&lt;br /&gt;
&lt;br /&gt;
== Server ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;&amp;lt;to do&amp;gt;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Developers =&lt;br /&gt;
&lt;br /&gt;
If you are interested in ohMedia development, more information can be found [[Av:Developer|here]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
__NOTOC__&lt;/div&gt;</summary>
		<author><name>Keith</name></author>	</entry>

	<entry>
		<id>http://wiki.openhome.org/wiki/OhMedia</id>
		<title>OhMedia</title>
		<link rel="alternate" type="text/html" href="http://wiki.openhome.org/wiki/OhMedia"/>
				<updated>2012-07-30T16:32:14Z</updated>
		
		<summary type="html">&lt;p&gt;Keith: /* How it works */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= ohMedia Overview =&lt;br /&gt;
&lt;br /&gt;
ohMedia is an open standard that allows the seamless interaction of media within your home.&lt;br /&gt;
&lt;br /&gt;
ohMedia's high level design is influenced by the UPnP AV standard (UAV). UAV correctly modelled media in the home as the interaction between 3 types of devices: Control Points, Media Renderers, and Media Servers.&lt;br /&gt;
&amp;lt;!-- &amp;lt;picture&amp;gt;--&amp;gt;&lt;br /&gt;
This model correctly identified the potential presence of an arbitrary number of each of these devices. However, the Media Server specification, and in particular the Media Renderer specification is deeply flawed. The next section explains those flaws and outlines how ohMedia fixes them.&lt;br /&gt;
&lt;br /&gt;
Developer information is also available [[Av:Developer | here]]&lt;br /&gt;
&lt;br /&gt;
= Flaws in the UPnP AV Standard =&lt;br /&gt;
&lt;br /&gt;
== Problem 1: No support for gap-less audio ==&lt;br /&gt;
&lt;br /&gt;
The UPnP AV media renderer specification is technically able to support gap-less audio though the AV Transport service actions, setAVTRansportURI and setNextAVTransportURI. However, the UPnP forum chose to make the setNextAVTransportURI action optional. This meant that no, or very few, media renderer manufacturers chose to support the action, which in turn, meant that no control points have added support for gap-less audio. So the real world situation is that UPnP AV has no support for gap-less audio.&lt;br /&gt;
&lt;br /&gt;
== Problem 2: No support for a user's playlist to continue playing when a control point is turned off ==&lt;br /&gt;
&lt;br /&gt;
The UPnP AV media renderer specification only allows for a media renderer to store a maximum of two URIs, but, as previously discussed, the real world maximum is in fact only a single URI. This means that in order for a media renderer to play a user created playlist the control point has to be continually monitoring the media renderer. When the media renderer indicates that it has finished playing the current URI the control point then has to set the next URI. If the control point is turned off and not monitoring the media renderer then the media renderer will not be informed of the next URI and playback will stop.&lt;br /&gt;
&lt;br /&gt;
== Problem 3:  No support for multiple control points ==&lt;br /&gt;
&lt;br /&gt;
The UPnP AV media renderer specification caters for the case where a user wants multiple control  points to show the metadata that is associated with the currently playing URI. However when it comes to controlling a media renderer from multiple control points the standard quickly shows it inadequacies.&lt;br /&gt;
&lt;br /&gt;
The main problems comes from the fact that the media renderer only holds a URI for the currently playing URI. This means that only the control point that the user used to create a playlist has knowledge about the playlist. As described earlier, because this control point holds the user's playlist it is actually controlling the flow of URIs to the media renderer. What happens if the same user adds tracks to a different control point? At this point two control points are trying to control the flow of different URIs to the media renderer. At this point the whole system fails to operate as the user expects.&lt;br /&gt;
&lt;br /&gt;
When a user creates a playlist on their control point and starts playback on a UPnP AV media renderer the renderer only holds the currently playing URI. When the renderer finishes the current URI the control point provides the renderer with next URI. If the control point is turned off at the point when the renderer finishes playing the current URI the renderer will stop playback.&lt;br /&gt;
&lt;br /&gt;
With the control point controlling the flow of URIs to the media renderer the UPnP AV media renderer specification violates the 3 box model separation where the control point should, without any intervention, enable content to flow between the media server and media renderer.&lt;br /&gt;
&lt;br /&gt;
== Problem 4: No concept of a Hi-Fi system comprising of more than one product or a home comprising of more than one Hi-Fi system ==&lt;br /&gt;
&lt;br /&gt;
A modern home can have one or more Hi-Fi systems of which each Hi-Fi system can comprise of one or more products connected together, e.g. a media player and a pre-amp.&lt;br /&gt;
&lt;br /&gt;
The UPnP AV standard assumes a single box which is made up of a single source and possibly a volume control. The standard has no way of representing a system that is made up of several different boxes connected together, e.g. a media renderer connected into a pre-amp. Taking the example of a media renderer connected to a pre-amp, without the ability to represent the different boxes and how they are connected it is impossible, using the UPnP AV standard, to select the input on the pre-amp that the media renderer is connected to when the user selects the media renderer in a control point.&lt;br /&gt;
&lt;br /&gt;
== Problem 5: Media's URI changing when media server rebuilds its database ==&lt;br /&gt;
&lt;br /&gt;
The UPnP AV media server specification does not have a requirement for media servers to present a piece of media to the network with the same URI. This has resulted in media server implementations that change media URIs when a user changes their media collection. This results in unexpected behaviour for the user. For example, a user plays some media on their renderer. The user then modifies their media collection which results in the media server rebuilding its database. The user then presses play on their renderer to only hear nothing (the URI is now no longer valid) or worse some different piece of media (the URI now represents some different media).&lt;br /&gt;
&lt;br /&gt;
= ohMedia Solutions =&lt;br /&gt;
The ohMedia standard has been designed to solve all the problems described above.&lt;br /&gt;
&lt;br /&gt;
The first three problems are solved through the [[#ohPlaylist|ohPlaylist]] service specification.&lt;br /&gt;
&lt;br /&gt;
Problem 4 is solved through the [[#ohProduct_and_ohTopology|ohProduct service specification and the ohTopology algorithm]].&lt;br /&gt;
&lt;br /&gt;
Problem 5 is solved through the [[#Server|ohMedia server]] specification.&lt;br /&gt;
&lt;br /&gt;
The ohMedia standard goes further and adds the [[#ohSongcast|ohSongcast]] standard. [[#ohSongcast|ohSongcast]] provides the ability to synchronise playback between products, commonly referred to as party mode. However in general [[#ohSongcast|ohSongcast]] provides the ability for a product to stream its audio over a standard home network and for any product that supports the [[#ohSongcast|ohSongcast]] receiver specification to receive the audio and play it back.&lt;br /&gt;
&lt;br /&gt;
= How it works =&lt;br /&gt;
&lt;br /&gt;
ohMedia models media in the home through the interaction of 3 types of device, Control Points, Media Players and Media Servers.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- &amp;lt;picture of 3 devices as before, but with arrows labelled with 1. Browse, 2. Tell, 3. Retrieve&amp;gt;--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The Control Point first browses the Media Server to locate the desired media. The Control Point then tells the Media Player to play the selected media and finally Media Player retrieves the media from the Media Server.&lt;br /&gt;
&lt;br /&gt;
== ohProduct and ohTopology ==&lt;br /&gt;
&lt;br /&gt;
ohMedia models a home as a number Hi-Fi systems, which are located in rooms.&lt;br /&gt;
&lt;br /&gt;
ohMedia models a Hi-Fi system as a hierarchical tree of products, where a product is defined as a single physical box that is located in a room, has a unique name within the room, has one output and any number of sources.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--&amp;lt;diagram of a product with multi-in, one out&amp;gt;--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A product is modelled through the ohProduct service specification.&lt;br /&gt;
&lt;br /&gt;
When a control point wants to construct a model of a user's home they use the ohTopology algorithm. The ohTopology algorithm is as follows,&lt;br /&gt;
&lt;br /&gt;
#discover all the products in the home that have an ohProduct service&lt;br /&gt;
#group the discovered products based on the room they are in&lt;br /&gt;
#create a hierarchical tree structure by matching source names to product names&lt;br /&gt;
#discover source functionality based on source type&lt;br /&gt;
#discover additional functionality based on product attributes&lt;br /&gt;
&lt;br /&gt;
e.g. if we had two products, a pre-amp and a media player, which were connected together then both their ohProduct services would return the same room name and one of the source names returned by the pre-amp's ohProduct service would be the same as the product name returned by the media renderer's ohProduct service.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--&amp;lt;picture of example&amp;gt;--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Sources ==&lt;br /&gt;
&lt;br /&gt;
ohMedia defines four source types,&lt;br /&gt;
&lt;br /&gt;
#Playlist – product supports on device playlists&lt;br /&gt;
#Radio – product supports internet radio with presets&lt;br /&gt;
#Receiver – product supports receiving ohSongcast broadcasts&lt;br /&gt;
#UpnpAv – product also implements the UPnP AV media renderer specification&lt;br /&gt;
&lt;br /&gt;
If a source type is not one of the types above an ohMedia control point will be able to switch to the source but will treat the source as a non controllable external input e.g. Analogue, TOS or HDMI.&lt;br /&gt;
&lt;br /&gt;
== Attributes ==&lt;br /&gt;
&lt;br /&gt;
ohMedia defines three attributes,&lt;br /&gt;
&lt;br /&gt;
#Volume – product supports volume control&lt;br /&gt;
#Info – product supports providing information about the currently playing media&lt;br /&gt;
#Time – product supports providing the current time within the currently playing media&lt;br /&gt;
#Sender – product supports ohSongcast broadcasting&lt;br /&gt;
&lt;br /&gt;
== ohPlaylist ==&lt;br /&gt;
&lt;br /&gt;
The ohPlaylist specification has been designed to allow gap-less audio, playlists to proceed without the intervention of a control point and to function correctly under the manipulation of multiple control points.&lt;br /&gt;
&lt;br /&gt;
The ohPlaylist is a list of media associated with a unique ID. Media is defined by its URI and metadata. A control point is required to keep in memory the current list of playlist IDs. This list of IDs can then be used to list the media in the order of play, obtain the metadata and manipulate the list.&lt;br /&gt;
&lt;br /&gt;
The Playlist service provides the API that allow control points to manipulate, keep track of playlist changes and control playback.&lt;br /&gt;
&lt;br /&gt;
== ohSongcast ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;&amp;lt;to do&amp;gt;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Server ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;&amp;lt;to do&amp;gt;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Developers =&lt;br /&gt;
&lt;br /&gt;
If you are interested in ohMedia development, more information can be found [[Av:Developer|here]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
__NOTOC__&lt;/div&gt;</summary>
		<author><name>Keith</name></author>	</entry>

	<entry>
		<id>http://wiki.openhome.org/wiki/OhMedia</id>
		<title>OhMedia</title>
		<link rel="alternate" type="text/html" href="http://wiki.openhome.org/wiki/OhMedia"/>
				<updated>2012-07-30T16:31:59Z</updated>
		
		<summary type="html">&lt;p&gt;Keith: /* How it works */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= ohMedia Overview =&lt;br /&gt;
&lt;br /&gt;
ohMedia is an open standard that allows the seamless interaction of media within your home.&lt;br /&gt;
&lt;br /&gt;
ohMedia's high level design is influenced by the UPnP AV standard (UAV). UAV correctly modelled media in the home as the interaction between 3 types of devices: Control Points, Media Renderers, and Media Servers.&lt;br /&gt;
&amp;lt;!-- &amp;lt;picture&amp;gt;--&amp;gt;&lt;br /&gt;
This model correctly identified the potential presence of an arbitrary number of each of these devices. However, the Media Server specification, and in particular the Media Renderer specification is deeply flawed. The next section explains those flaws and outlines how ohMedia fixes them.&lt;br /&gt;
&lt;br /&gt;
Developer information is also available [[Av:Developer | here]]&lt;br /&gt;
&lt;br /&gt;
= Flaws in the UPnP AV Standard =&lt;br /&gt;
&lt;br /&gt;
== Problem 1: No support for gap-less audio ==&lt;br /&gt;
&lt;br /&gt;
The UPnP AV media renderer specification is technically able to support gap-less audio though the AV Transport service actions, setAVTRansportURI and setNextAVTransportURI. However, the UPnP forum chose to make the setNextAVTransportURI action optional. This meant that no, or very few, media renderer manufacturers chose to support the action, which in turn, meant that no control points have added support for gap-less audio. So the real world situation is that UPnP AV has no support for gap-less audio.&lt;br /&gt;
&lt;br /&gt;
== Problem 2: No support for a user's playlist to continue playing when a control point is turned off ==&lt;br /&gt;
&lt;br /&gt;
The UPnP AV media renderer specification only allows for a media renderer to store a maximum of two URIs, but, as previously discussed, the real world maximum is in fact only a single URI. This means that in order for a media renderer to play a user created playlist the control point has to be continually monitoring the media renderer. When the media renderer indicates that it has finished playing the current URI the control point then has to set the next URI. If the control point is turned off and not monitoring the media renderer then the media renderer will not be informed of the next URI and playback will stop.&lt;br /&gt;
&lt;br /&gt;
== Problem 3:  No support for multiple control points ==&lt;br /&gt;
&lt;br /&gt;
The UPnP AV media renderer specification caters for the case where a user wants multiple control  points to show the metadata that is associated with the currently playing URI. However when it comes to controlling a media renderer from multiple control points the standard quickly shows it inadequacies.&lt;br /&gt;
&lt;br /&gt;
The main problems comes from the fact that the media renderer only holds a URI for the currently playing URI. This means that only the control point that the user used to create a playlist has knowledge about the playlist. As described earlier, because this control point holds the user's playlist it is actually controlling the flow of URIs to the media renderer. What happens if the same user adds tracks to a different control point? At this point two control points are trying to control the flow of different URIs to the media renderer. At this point the whole system fails to operate as the user expects.&lt;br /&gt;
&lt;br /&gt;
When a user creates a playlist on their control point and starts playback on a UPnP AV media renderer the renderer only holds the currently playing URI. When the renderer finishes the current URI the control point provides the renderer with next URI. If the control point is turned off at the point when the renderer finishes playing the current URI the renderer will stop playback.&lt;br /&gt;
&lt;br /&gt;
With the control point controlling the flow of URIs to the media renderer the UPnP AV media renderer specification violates the 3 box model separation where the control point should, without any intervention, enable content to flow between the media server and media renderer.&lt;br /&gt;
&lt;br /&gt;
== Problem 4: No concept of a Hi-Fi system comprising of more than one product or a home comprising of more than one Hi-Fi system ==&lt;br /&gt;
&lt;br /&gt;
A modern home can have one or more Hi-Fi systems of which each Hi-Fi system can comprise of one or more products connected together, e.g. a media player and a pre-amp.&lt;br /&gt;
&lt;br /&gt;
The UPnP AV standard assumes a single box which is made up of a single source and possibly a volume control. The standard has no way of representing a system that is made up of several different boxes connected together, e.g. a media renderer connected into a pre-amp. Taking the example of a media renderer connected to a pre-amp, without the ability to represent the different boxes and how they are connected it is impossible, using the UPnP AV standard, to select the input on the pre-amp that the media renderer is connected to when the user selects the media renderer in a control point.&lt;br /&gt;
&lt;br /&gt;
== Problem 5: Media's URI changing when media server rebuilds its database ==&lt;br /&gt;
&lt;br /&gt;
The UPnP AV media server specification does not have a requirement for media servers to present a piece of media to the network with the same URI. This has resulted in media server implementations that change media URIs when a user changes their media collection. This results in unexpected behaviour for the user. For example, a user plays some media on their renderer. The user then modifies their media collection which results in the media server rebuilding its database. The user then presses play on their renderer to only hear nothing (the URI is now no longer valid) or worse some different piece of media (the URI now represents some different media).&lt;br /&gt;
&lt;br /&gt;
= ohMedia Solutions =&lt;br /&gt;
The ohMedia standard has been designed to solve all the problems described above.&lt;br /&gt;
&lt;br /&gt;
The first three problems are solved through the [[#ohPlaylist|ohPlaylist]] service specification.&lt;br /&gt;
&lt;br /&gt;
Problem 4 is solved through the [[#ohProduct_and_ohTopology|ohProduct service specification and the ohTopology algorithm]].&lt;br /&gt;
&lt;br /&gt;
Problem 5 is solved through the [[#Server|ohMedia server]] specification.&lt;br /&gt;
&lt;br /&gt;
The ohMedia standard goes further and adds the [[#ohSongcast|ohSongcast]] standard. [[#ohSongcast|ohSongcast]] provides the ability to synchronise playback between products, commonly referred to as party mode. However in general [[#ohSongcast|ohSongcast]] provides the ability for a product to stream its audio over a standard home network and for any product that supports the [[#ohSongcast|ohSongcast]] receiver specification to receive the audio and play it back.&lt;br /&gt;
&lt;br /&gt;
= How it works =&lt;br /&gt;
&lt;br /&gt;
ohMedia models media in the home through the interaction of 3 types of device, Control Points, Media Players and Media Servers.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- &amp;lt;picture of 3 devices as before, but with arrows labelled with 1. Browse, 2. Tell, 3. Retrieve&amp;gt;--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The Control Point first browses the Media Server to locate the desired media. The Control Point then tells the Media Player to play the selected media and finally Media Player retrieves the media from the Media Server.&lt;br /&gt;
&lt;br /&gt;
== ohProduct and ohTopology ==&lt;br /&gt;
&lt;br /&gt;
ohMedia models a home as a number Hi-Fi systems, which are located in rooms.&lt;br /&gt;
&lt;br /&gt;
ohMedia models a Hi-Fi system as a hierarchical tree of products, where a product is defined as a single physical box that is located in a room, has a unique name within the room, has one output and any number of sources.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!--&amp;lt;diagram of a product with multi-in, one out&amp;gt;--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A product is modelled through the ohProduct service specification.&lt;br /&gt;
&lt;br /&gt;
When a control point wants to construct a model of a user's home they use the ohTopology algorithm. The ohTopology algorithm is as follows,&lt;br /&gt;
&lt;br /&gt;
#discover all the products in the home that have an ohProduct service&lt;br /&gt;
#group the discovered products based on the room they are in&lt;br /&gt;
#create a hierarchical tree structure by matching source names to product names&lt;br /&gt;
#discover source functionality based on source type&lt;br /&gt;
#discover additional functionality based on product attributes&lt;br /&gt;
&lt;br /&gt;
e.g. if we had two products, a pre-amp and a media player, which were connected together then both their ohProduct services would return the same room name and one of the source names returned by the pre-amp's ohProduct service would be the same as the product name returned by the media renderer's ohProduct service.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-&amp;lt;picture of example&amp;gt;--&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Sources ==&lt;br /&gt;
&lt;br /&gt;
ohMedia defines four source types,&lt;br /&gt;
&lt;br /&gt;
#Playlist – product supports on device playlists&lt;br /&gt;
#Radio – product supports internet radio with presets&lt;br /&gt;
#Receiver – product supports receiving ohSongcast broadcasts&lt;br /&gt;
#UpnpAv – product also implements the UPnP AV media renderer specification&lt;br /&gt;
&lt;br /&gt;
If a source type is not one of the types above an ohMedia control point will be able to switch to the source but will treat the source as a non controllable external input e.g. Analogue, TOS or HDMI.&lt;br /&gt;
&lt;br /&gt;
== Attributes ==&lt;br /&gt;
&lt;br /&gt;
ohMedia defines three attributes,&lt;br /&gt;
&lt;br /&gt;
#Volume – product supports volume control&lt;br /&gt;
#Info – product supports providing information about the currently playing media&lt;br /&gt;
#Time – product supports providing the current time within the currently playing media&lt;br /&gt;
#Sender – product supports ohSongcast broadcasting&lt;br /&gt;
&lt;br /&gt;
== ohPlaylist ==&lt;br /&gt;
&lt;br /&gt;
The ohPlaylist specification has been designed to allow gap-less audio, playlists to proceed without the intervention of a control point and to function correctly under the manipulation of multiple control points.&lt;br /&gt;
&lt;br /&gt;
The ohPlaylist is a list of media associated with a unique ID. Media is defined by its URI and metadata. A control point is required to keep in memory the current list of playlist IDs. This list of IDs can then be used to list the media in the order of play, obtain the metadata and manipulate the list.&lt;br /&gt;
&lt;br /&gt;
The Playlist service provides the API that allow control points to manipulate, keep track of playlist changes and control playback.&lt;br /&gt;
&lt;br /&gt;
== ohSongcast ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;&amp;lt;to do&amp;gt;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Server ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;&amp;lt;to do&amp;gt;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Developers =&lt;br /&gt;
&lt;br /&gt;
If you are interested in ohMedia development, more information can be found [[Av:Developer|here]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
__NOTOC__&lt;/div&gt;</summary>
		<author><name>Keith</name></author>	</entry>

	<entry>
		<id>http://wiki.openhome.org/wiki/OhMedia</id>
		<title>OhMedia</title>
		<link rel="alternate" type="text/html" href="http://wiki.openhome.org/wiki/OhMedia"/>
				<updated>2012-07-30T16:31:18Z</updated>
		
		<summary type="html">&lt;p&gt;Keith: /* ohMedia Overview */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= ohMedia Overview =&lt;br /&gt;
&lt;br /&gt;
ohMedia is an open standard that allows the seamless interaction of media within your home.&lt;br /&gt;
&lt;br /&gt;
ohMedia's high level design is influenced by the UPnP AV standard (UAV). UAV correctly modelled media in the home as the interaction between 3 types of devices: Control Points, Media Renderers, and Media Servers.&lt;br /&gt;
&amp;lt;!-- &amp;lt;picture&amp;gt;--&amp;gt;&lt;br /&gt;
This model correctly identified the potential presence of an arbitrary number of each of these devices. However, the Media Server specification, and in particular the Media Renderer specification is deeply flawed. The next section explains those flaws and outlines how ohMedia fixes them.&lt;br /&gt;
&lt;br /&gt;
Developer information is also available [[Av:Developer | here]]&lt;br /&gt;
&lt;br /&gt;
= Flaws in the UPnP AV Standard =&lt;br /&gt;
&lt;br /&gt;
== Problem 1: No support for gap-less audio ==&lt;br /&gt;
&lt;br /&gt;
The UPnP AV media renderer specification is technically able to support gap-less audio though the AV Transport service actions, setAVTRansportURI and setNextAVTransportURI. However, the UPnP forum chose to make the setNextAVTransportURI action optional. This meant that no, or very few, media renderer manufacturers chose to support the action, which in turn, meant that no control points have added support for gap-less audio. So the real world situation is that UPnP AV has no support for gap-less audio.&lt;br /&gt;
&lt;br /&gt;
== Problem 2: No support for a user's playlist to continue playing when a control point is turned off ==&lt;br /&gt;
&lt;br /&gt;
The UPnP AV media renderer specification only allows for a media renderer to store a maximum of two URIs, but, as previously discussed, the real world maximum is in fact only a single URI. This means that in order for a media renderer to play a user created playlist the control point has to be continually monitoring the media renderer. When the media renderer indicates that it has finished playing the current URI the control point then has to set the next URI. If the control point is turned off and not monitoring the media renderer then the media renderer will not be informed of the next URI and playback will stop.&lt;br /&gt;
&lt;br /&gt;
== Problem 3:  No support for multiple control points ==&lt;br /&gt;
&lt;br /&gt;
The UPnP AV media renderer specification caters for the case where a user wants multiple control  points to show the metadata that is associated with the currently playing URI. However when it comes to controlling a media renderer from multiple control points the standard quickly shows it inadequacies.&lt;br /&gt;
&lt;br /&gt;
The main problems comes from the fact that the media renderer only holds a URI for the currently playing URI. This means that only the control point that the user used to create a playlist has knowledge about the playlist. As described earlier, because this control point holds the user's playlist it is actually controlling the flow of URIs to the media renderer. What happens if the same user adds tracks to a different control point? At this point two control points are trying to control the flow of different URIs to the media renderer. At this point the whole system fails to operate as the user expects.&lt;br /&gt;
&lt;br /&gt;
When a user creates a playlist on their control point and starts playback on a UPnP AV media renderer the renderer only holds the currently playing URI. When the renderer finishes the current URI the control point provides the renderer with next URI. If the control point is turned off at the point when the renderer finishes playing the current URI the renderer will stop playback.&lt;br /&gt;
&lt;br /&gt;
With the control point controlling the flow of URIs to the media renderer the UPnP AV media renderer specification violates the 3 box model separation where the control point should, without any intervention, enable content to flow between the media server and media renderer.&lt;br /&gt;
&lt;br /&gt;
== Problem 4: No concept of a Hi-Fi system comprising of more than one product or a home comprising of more than one Hi-Fi system ==&lt;br /&gt;
&lt;br /&gt;
A modern home can have one or more Hi-Fi systems of which each Hi-Fi system can comprise of one or more products connected together, e.g. a media player and a pre-amp.&lt;br /&gt;
&lt;br /&gt;
The UPnP AV standard assumes a single box which is made up of a single source and possibly a volume control. The standard has no way of representing a system that is made up of several different boxes connected together, e.g. a media renderer connected into a pre-amp. Taking the example of a media renderer connected to a pre-amp, without the ability to represent the different boxes and how they are connected it is impossible, using the UPnP AV standard, to select the input on the pre-amp that the media renderer is connected to when the user selects the media renderer in a control point.&lt;br /&gt;
&lt;br /&gt;
== Problem 5: Media's URI changing when media server rebuilds its database ==&lt;br /&gt;
&lt;br /&gt;
The UPnP AV media server specification does not have a requirement for media servers to present a piece of media to the network with the same URI. This has resulted in media server implementations that change media URIs when a user changes their media collection. This results in unexpected behaviour for the user. For example, a user plays some media on their renderer. The user then modifies their media collection which results in the media server rebuilding its database. The user then presses play on their renderer to only hear nothing (the URI is now no longer valid) or worse some different piece of media (the URI now represents some different media).&lt;br /&gt;
&lt;br /&gt;
= ohMedia Solutions =&lt;br /&gt;
The ohMedia standard has been designed to solve all the problems described above.&lt;br /&gt;
&lt;br /&gt;
The first three problems are solved through the [[#ohPlaylist|ohPlaylist]] service specification.&lt;br /&gt;
&lt;br /&gt;
Problem 4 is solved through the [[#ohProduct_and_ohTopology|ohProduct service specification and the ohTopology algorithm]].&lt;br /&gt;
&lt;br /&gt;
Problem 5 is solved through the [[#Server|ohMedia server]] specification.&lt;br /&gt;
&lt;br /&gt;
The ohMedia standard goes further and adds the [[#ohSongcast|ohSongcast]] standard. [[#ohSongcast|ohSongcast]] provides the ability to synchronise playback between products, commonly referred to as party mode. However in general [[#ohSongcast|ohSongcast]] provides the ability for a product to stream its audio over a standard home network and for any product that supports the [[#ohSongcast|ohSongcast]] receiver specification to receive the audio and play it back.&lt;br /&gt;
&lt;br /&gt;
= How it works =&lt;br /&gt;
&lt;br /&gt;
ohMedia models media in the home through the interaction of 3 types of device, Control Points, Media Players and Media Servers.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;&amp;lt;picture of 3 devices as before, but with arrows labelled with 1. Browse, 2. Tell, 3. Retrieve&amp;gt;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The Control Point first browses the Media Server to locate the desired media. The Control Point then tells the Media Player to play the selected media and finally Media Player retrieves the media from the Media Server.&lt;br /&gt;
&lt;br /&gt;
== ohProduct and ohTopology ==&lt;br /&gt;
&lt;br /&gt;
ohMedia models a home as a number Hi-Fi systems, which are located in rooms.&lt;br /&gt;
&lt;br /&gt;
ohMedia models a Hi-Fi system as a hierarchical tree of products, where a product is defined as a single physical box that is located in a room, has a unique name within the room, has one output and any number of sources.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;&amp;lt;diagram of a product with multi-in, one out&amp;gt;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A product is modelled through the ohProduct service specification.&lt;br /&gt;
&lt;br /&gt;
When a control point wants to construct a model of a user's home they use the ohTopology algorithm. The ohTopology algorithm is as follows,&lt;br /&gt;
&lt;br /&gt;
#discover all the products in the home that have an ohProduct service&lt;br /&gt;
#group the discovered products based on the room they are in&lt;br /&gt;
#create a hierarchical tree structure by matching source names to product names&lt;br /&gt;
#discover source functionality based on source type&lt;br /&gt;
#discover additional functionality based on product attributes&lt;br /&gt;
&lt;br /&gt;
e.g. if we had two products, a pre-amp and a media player, which were connected together then both their ohProduct services would return the same room name and one of the source names returned by the pre-amp's ohProduct service would be the same as the product name returned by the media renderer's ohProduct service.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;&amp;lt;picture of example&amp;gt;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Sources ==&lt;br /&gt;
&lt;br /&gt;
ohMedia defines four source types,&lt;br /&gt;
&lt;br /&gt;
#Playlist – product supports on device playlists&lt;br /&gt;
#Radio – product supports internet radio with presets&lt;br /&gt;
#Receiver – product supports receiving ohSongcast broadcasts&lt;br /&gt;
#UpnpAv – product also implements the UPnP AV media renderer specification&lt;br /&gt;
&lt;br /&gt;
If a source type is not one of the types above an ohMedia control point will be able to switch to the source but will treat the source as a non controllable external input e.g. Analogue, TOS or HDMI.&lt;br /&gt;
&lt;br /&gt;
== Attributes ==&lt;br /&gt;
&lt;br /&gt;
ohMedia defines three attributes,&lt;br /&gt;
&lt;br /&gt;
#Volume – product supports volume control&lt;br /&gt;
#Info – product supports providing information about the currently playing media&lt;br /&gt;
#Time – product supports providing the current time within the currently playing media&lt;br /&gt;
#Sender – product supports ohSongcast broadcasting&lt;br /&gt;
&lt;br /&gt;
== ohPlaylist ==&lt;br /&gt;
&lt;br /&gt;
The ohPlaylist specification has been designed to allow gap-less audio, playlists to proceed without the intervention of a control point and to function correctly under the manipulation of multiple control points.&lt;br /&gt;
&lt;br /&gt;
The ohPlaylist is a list of media associated with a unique ID. Media is defined by its URI and metadata. A control point is required to keep in memory the current list of playlist IDs. This list of IDs can then be used to list the media in the order of play, obtain the metadata and manipulate the list.&lt;br /&gt;
&lt;br /&gt;
The Playlist service provides the API that allow control points to manipulate, keep track of playlist changes and control playback.&lt;br /&gt;
&lt;br /&gt;
== ohSongcast ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;&amp;lt;to do&amp;gt;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Server ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;&amp;lt;to do&amp;gt;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Developers =&lt;br /&gt;
&lt;br /&gt;
If you are interested in ohMedia development, more information can be found [[Av:Developer|here]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
__NOTOC__&lt;/div&gt;</summary>
		<author><name>Keith</name></author>	</entry>

	<entry>
		<id>http://wiki.openhome.org/wiki/OhMedia</id>
		<title>OhMedia</title>
		<link rel="alternate" type="text/html" href="http://wiki.openhome.org/wiki/OhMedia"/>
				<updated>2012-07-30T16:30:09Z</updated>
		
		<summary type="html">&lt;p&gt;Keith: /* ohMedia Overview */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= ohMedia Overview =&lt;br /&gt;
&lt;br /&gt;
ohMedia is an open standard that allows the seamless interaction of media within your home.&lt;br /&gt;
&lt;br /&gt;
ohMedia's high level design is influenced by the UPnP AV standard (UAV). UAV correctly modelled media in the home as the interaction between 3 types of devices: Control Points, Media Renderers, and Media Servers.&lt;br /&gt;
&amp;lt;&amp;lt;picture&amp;gt;&amp;gt;&lt;br /&gt;
This model correctly identified the potential presence of an arbitrary number of each of these devices. However, the Media Server specification, and in particular the Media Renderer specification is deeply flawed. The next section explains those flaws and outlines how ohMedia fixes them.&lt;br /&gt;
&lt;br /&gt;
Developer information is also available [[Av:Developer | here]]&lt;br /&gt;
&lt;br /&gt;
= Flaws in the UPnP AV Standard =&lt;br /&gt;
&lt;br /&gt;
== Problem 1: No support for gap-less audio ==&lt;br /&gt;
&lt;br /&gt;
The UPnP AV media renderer specification is technically able to support gap-less audio though the AV Transport service actions, setAVTRansportURI and setNextAVTransportURI. However, the UPnP forum chose to make the setNextAVTransportURI action optional. This meant that no, or very few, media renderer manufacturers chose to support the action, which in turn, meant that no control points have added support for gap-less audio. So the real world situation is that UPnP AV has no support for gap-less audio.&lt;br /&gt;
&lt;br /&gt;
== Problem 2: No support for a user's playlist to continue playing when a control point is turned off ==&lt;br /&gt;
&lt;br /&gt;
The UPnP AV media renderer specification only allows for a media renderer to store a maximum of two URIs, but, as previously discussed, the real world maximum is in fact only a single URI. This means that in order for a media renderer to play a user created playlist the control point has to be continually monitoring the media renderer. When the media renderer indicates that it has finished playing the current URI the control point then has to set the next URI. If the control point is turned off and not monitoring the media renderer then the media renderer will not be informed of the next URI and playback will stop.&lt;br /&gt;
&lt;br /&gt;
== Problem 3:  No support for multiple control points ==&lt;br /&gt;
&lt;br /&gt;
The UPnP AV media renderer specification caters for the case where a user wants multiple control  points to show the metadata that is associated with the currently playing URI. However when it comes to controlling a media renderer from multiple control points the standard quickly shows it inadequacies.&lt;br /&gt;
&lt;br /&gt;
The main problems comes from the fact that the media renderer only holds a URI for the currently playing URI. This means that only the control point that the user used to create a playlist has knowledge about the playlist. As described earlier, because this control point holds the user's playlist it is actually controlling the flow of URIs to the media renderer. What happens if the same user adds tracks to a different control point? At this point two control points are trying to control the flow of different URIs to the media renderer. At this point the whole system fails to operate as the user expects.&lt;br /&gt;
&lt;br /&gt;
When a user creates a playlist on their control point and starts playback on a UPnP AV media renderer the renderer only holds the currently playing URI. When the renderer finishes the current URI the control point provides the renderer with next URI. If the control point is turned off at the point when the renderer finishes playing the current URI the renderer will stop playback.&lt;br /&gt;
&lt;br /&gt;
With the control point controlling the flow of URIs to the media renderer the UPnP AV media renderer specification violates the 3 box model separation where the control point should, without any intervention, enable content to flow between the media server and media renderer.&lt;br /&gt;
&lt;br /&gt;
== Problem 4: No concept of a Hi-Fi system comprising of more than one product or a home comprising of more than one Hi-Fi system ==&lt;br /&gt;
&lt;br /&gt;
A modern home can have one or more Hi-Fi systems of which each Hi-Fi system can comprise of one or more products connected together, e.g. a media player and a pre-amp.&lt;br /&gt;
&lt;br /&gt;
The UPnP AV standard assumes a single box which is made up of a single source and possibly a volume control. The standard has no way of representing a system that is made up of several different boxes connected together, e.g. a media renderer connected into a pre-amp. Taking the example of a media renderer connected to a pre-amp, without the ability to represent the different boxes and how they are connected it is impossible, using the UPnP AV standard, to select the input on the pre-amp that the media renderer is connected to when the user selects the media renderer in a control point.&lt;br /&gt;
&lt;br /&gt;
== Problem 5: Media's URI changing when media server rebuilds its database ==&lt;br /&gt;
&lt;br /&gt;
The UPnP AV media server specification does not have a requirement for media servers to present a piece of media to the network with the same URI. This has resulted in media server implementations that change media URIs when a user changes their media collection. This results in unexpected behaviour for the user. For example, a user plays some media on their renderer. The user then modifies their media collection which results in the media server rebuilding its database. The user then presses play on their renderer to only hear nothing (the URI is now no longer valid) or worse some different piece of media (the URI now represents some different media).&lt;br /&gt;
&lt;br /&gt;
= ohMedia Solutions =&lt;br /&gt;
The ohMedia standard has been designed to solve all the problems described above.&lt;br /&gt;
&lt;br /&gt;
The first three problems are solved through the [[#ohPlaylist|ohPlaylist]] service specification.&lt;br /&gt;
&lt;br /&gt;
Problem 4 is solved through the [[#ohProduct_and_ohTopology|ohProduct service specification and the ohTopology algorithm]].&lt;br /&gt;
&lt;br /&gt;
Problem 5 is solved through the [[#Server|ohMedia server]] specification.&lt;br /&gt;
&lt;br /&gt;
The ohMedia standard goes further and adds the [[#ohSongcast|ohSongcast]] standard. [[#ohSongcast|ohSongcast]] provides the ability to synchronise playback between products, commonly referred to as party mode. However in general [[#ohSongcast|ohSongcast]] provides the ability for a product to stream its audio over a standard home network and for any product that supports the [[#ohSongcast|ohSongcast]] receiver specification to receive the audio and play it back.&lt;br /&gt;
&lt;br /&gt;
= How it works =&lt;br /&gt;
&lt;br /&gt;
ohMedia models media in the home through the interaction of 3 types of device, Control Points, Media Players and Media Servers.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;&amp;lt;picture of 3 devices as before, but with arrows labelled with 1. Browse, 2. Tell, 3. Retrieve&amp;gt;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
The Control Point first browses the Media Server to locate the desired media. The Control Point then tells the Media Player to play the selected media and finally Media Player retrieves the media from the Media Server.&lt;br /&gt;
&lt;br /&gt;
== ohProduct and ohTopology ==&lt;br /&gt;
&lt;br /&gt;
ohMedia models a home as a number Hi-Fi systems, which are located in rooms.&lt;br /&gt;
&lt;br /&gt;
ohMedia models a Hi-Fi system as a hierarchical tree of products, where a product is defined as a single physical box that is located in a room, has a unique name within the room, has one output and any number of sources.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;&amp;lt;diagram of a product with multi-in, one out&amp;gt;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
A product is modelled through the ohProduct service specification.&lt;br /&gt;
&lt;br /&gt;
When a control point wants to construct a model of a user's home they use the ohTopology algorithm. The ohTopology algorithm is as follows,&lt;br /&gt;
&lt;br /&gt;
#discover all the products in the home that have an ohProduct service&lt;br /&gt;
#group the discovered products based on the room they are in&lt;br /&gt;
#create a hierarchical tree structure by matching source names to product names&lt;br /&gt;
#discover source functionality based on source type&lt;br /&gt;
#discover additional functionality based on product attributes&lt;br /&gt;
&lt;br /&gt;
e.g. if we had two products, a pre-amp and a media player, which were connected together then both their ohProduct services would return the same room name and one of the source names returned by the pre-amp's ohProduct service would be the same as the product name returned by the media renderer's ohProduct service.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;&amp;lt;picture of example&amp;gt;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Sources ==&lt;br /&gt;
&lt;br /&gt;
ohMedia defines four source types,&lt;br /&gt;
&lt;br /&gt;
#Playlist – product supports on device playlists&lt;br /&gt;
#Radio – product supports internet radio with presets&lt;br /&gt;
#Receiver – product supports receiving ohSongcast broadcasts&lt;br /&gt;
#UpnpAv – product also implements the UPnP AV media renderer specification&lt;br /&gt;
&lt;br /&gt;
If a source type is not one of the types above an ohMedia control point will be able to switch to the source but will treat the source as a non controllable external input e.g. Analogue, TOS or HDMI.&lt;br /&gt;
&lt;br /&gt;
== Attributes ==&lt;br /&gt;
&lt;br /&gt;
ohMedia defines three attributes,&lt;br /&gt;
&lt;br /&gt;
#Volume – product supports volume control&lt;br /&gt;
#Info – product supports providing information about the currently playing media&lt;br /&gt;
#Time – product supports providing the current time within the currently playing media&lt;br /&gt;
#Sender – product supports ohSongcast broadcasting&lt;br /&gt;
&lt;br /&gt;
== ohPlaylist ==&lt;br /&gt;
&lt;br /&gt;
The ohPlaylist specification has been designed to allow gap-less audio, playlists to proceed without the intervention of a control point and to function correctly under the manipulation of multiple control points.&lt;br /&gt;
&lt;br /&gt;
The ohPlaylist is a list of media associated with a unique ID. Media is defined by its URI and metadata. A control point is required to keep in memory the current list of playlist IDs. This list of IDs can then be used to list the media in the order of play, obtain the metadata and manipulate the list.&lt;br /&gt;
&lt;br /&gt;
The Playlist service provides the API that allow control points to manipulate, keep track of playlist changes and control playback.&lt;br /&gt;
&lt;br /&gt;
== ohSongcast ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;&amp;lt;to do&amp;gt;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Server ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;&amp;lt;to do&amp;gt;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Developers =&lt;br /&gt;
&lt;br /&gt;
If you are interested in ohMedia development, more information can be found [[Av:Developer|here]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
__NOTOC__&lt;/div&gt;</summary>
		<author><name>Keith</name></author>	</entry>

	<entry>
		<id>http://wiki.openhome.org/wiki/Oh:Overview</id>
		<title>Oh:Overview</title>
		<link rel="alternate" type="text/html" href="http://wiki.openhome.org/wiki/Oh:Overview"/>
				<updated>2012-07-30T16:27:41Z</updated>
		
		<summary type="html">&lt;p&gt;Keith: /* Utilities */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= OPENHOME DEVELOPMENT =&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[File:Jigsaw.png|300px|center]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;center&amp;gt; OpenHome currently sponsors two major programmes, ohOs and ohMedia. &amp;lt;/center&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Programmes ==&lt;br /&gt;
&lt;br /&gt;
=== [[ohOs|ohOs]] ===&lt;br /&gt;
&lt;br /&gt;
The OpenHome Operating System provides an OS layer for the deployment and hosting of apps. The [[ohOs|ohOs]] sits on top of all popular base operating systems such as Windows, Linux and Mac.&lt;br /&gt;
&lt;br /&gt;
=== [[ohMedia|ohMedia]] ===&lt;br /&gt;
&lt;br /&gt;
[[ohMedia|ohMedia]] is an open standard that allows the seamless interaction of media within your home.&lt;br /&gt;
&lt;br /&gt;
== Libraries ==&lt;br /&gt;
&lt;br /&gt;
In addition to these programmes, OpenHome also makes available ohNet.&lt;br /&gt;
&lt;br /&gt;
=== [[ohNet|ohNet]] ===&lt;br /&gt;
[[ohNet|ohNet]] is a modern cross platform networking stack.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
__NOTOC__&lt;/div&gt;</summary>
		<author><name>Keith</name></author>	</entry>

	<entry>
		<id>http://wiki.openhome.org/wiki/OhNet:What</id>
		<title>OhNet:What</title>
		<link rel="alternate" type="text/html" href="http://wiki.openhome.org/wiki/OhNet:What"/>
				<updated>2011-10-10T11:21:34Z</updated>
		
		<summary type="html">&lt;p&gt;Keith: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{nav_openhome_ohnet|ohNet - What is it?}}&lt;br /&gt;
ohNet is a modern, cross platform UPnP stack.  ohNet includes both a control point and a device stack that can be used together or independently.  It runs on Linux, Windows, Mac, iOS and Android.  The public APIs are available for the device and control point stacks in C++, C#, Java, C.  There is an JavaScript api for the control point stack.&lt;br /&gt;
&lt;br /&gt;
UPnP services are presented as classes with actions appearing as functions and state variables appearing as member variables.  These classes are referred to as proxies for users of the control point stack and providers for users of the device stack.&lt;br /&gt;
&lt;br /&gt;
Proxies and Providers are included for all OpenHome and UPnP AV services.  If your application uses other services, ohNet includes a tool (ohNetGen) to generate proxies and/or providers from the service XML in any of the supported languages.&lt;br /&gt;
&lt;br /&gt;
Source code is available under a Simplified BSD license.&lt;/div&gt;</summary>
		<author><name>Keith</name></author>	</entry>

	<entry>
		<id>http://wiki.openhome.org/wiki/OhNet:What</id>
		<title>OhNet:What</title>
		<link rel="alternate" type="text/html" href="http://wiki.openhome.org/wiki/OhNet:What"/>
				<updated>2011-10-10T11:19:57Z</updated>
		
		<summary type="html">&lt;p&gt;Keith: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{nav_openhome_ohnet|ohNet - What is it?}}&lt;br /&gt;
ohNet is a modern, thoughtfully architected, cross platform, UPnP stack.  ohNet includes both full control point and device stacks that can be used together or independently.  It runs on Linux, Windows, Mac, iOS and Android.  The public APIs are available for the device and control point stacks in C++, C#, Java, C.  There is an JavaScript api for the control point stack.&lt;br /&gt;
&lt;br /&gt;
UPnP services are presented as classes with actions appearing as functions and state variables appearing as member variables.  These classes are referred to as proxies for users of the control point stack and providers for users of the device stack.&lt;br /&gt;
&lt;br /&gt;
Proxies and Providers are included for all OpenHome and UPnP AV services.  If your application uses other services, ohNet includes a tool (ohNetGen) to generate proxies and/or providers from the service XML in any of the supported languages.&lt;br /&gt;
&lt;br /&gt;
Source code is available under a Simplified BSD license.&lt;/div&gt;</summary>
		<author><name>Keith</name></author>	</entry>

	<entry>
		<id>http://wiki.openhome.org/wiki/OhMedia:How</id>
		<title>OhMedia:How</title>
		<link rel="alternate" type="text/html" href="http://wiki.openhome.org/wiki/OhMedia:How"/>
				<updated>2011-10-10T11:04:16Z</updated>
		
		<summary type="html">&lt;p&gt;Keith: /* Player Implementations */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{nav_openhome_av|OpenHome Media - How do I get it?}}&lt;br /&gt;
&lt;br /&gt;
== Control Point Implementations ==&lt;br /&gt;
&lt;br /&gt;
[http://web.me.com/sean.harding/ChorusDS/Overview.html Chorus]&lt;br /&gt;
&lt;br /&gt;
[http://oss.linn.co.uk Kinsky]&lt;br /&gt;
&lt;br /&gt;
[http://leia.sommerfeldt.f-m.fm/ Leia]&lt;br /&gt;
&lt;br /&gt;
[http://bookshelfapps.com/songbook-ds.php Songbook]&lt;br /&gt;
&lt;br /&gt;
== Player Implementations ==&lt;br /&gt;
&lt;br /&gt;
[http://www.linn.co.uk/digital_stream_players Linn]&lt;br /&gt;
&lt;br /&gt;
[[ohMediaPlayer:What | OpenHome Media Player]]&lt;br /&gt;
&lt;br /&gt;
== Media Server Implementations ==&lt;br /&gt;
&lt;br /&gt;
[http://www.dbpoweramp.com/asset-upnp-dlna.htm Asset Server]&lt;br /&gt;
&lt;br /&gt;
[http://www.twonky.com/products/twonkyserver/default.aspx Twonky Server]&lt;/div&gt;</summary>
		<author><name>Keith</name></author>	</entry>

	<entry>
		<id>http://wiki.openhome.org/wiki/Oh:What</id>
		<title>Oh:What</title>
		<link rel="alternate" type="text/html" href="http://wiki.openhome.org/wiki/Oh:What"/>
				<updated>2011-10-10T11:02:14Z</updated>
		
		<summary type="html">&lt;p&gt;Keith: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{nav_openhome|OpenHome - What is it?}}&lt;br /&gt;
&lt;br /&gt;
OpenHome is an independent body dedicated to the design, implementation, and promotion of free and open standards for home networked devices.&lt;br /&gt;
&lt;br /&gt;
As more networked  devices are deployed in the home it is important for the services a device offers to the network to allow&lt;br /&gt;
&lt;br /&gt;
* control of the device with a networked control point,&lt;br /&gt;
* cooperation with other devices from other vendors&lt;br /&gt;
* use of the device in ways the manufacturer may not have envisaged when the device was designed&lt;/div&gt;</summary>
		<author><name>Keith</name></author>	</entry>

	<entry>
		<id>http://wiki.openhome.org/wiki/OhMedia:What</id>
		<title>OhMedia:What</title>
		<link rel="alternate" type="text/html" href="http://wiki.openhome.org/wiki/OhMedia:What"/>
				<updated>2011-10-10T11:01:35Z</updated>
		
		<summary type="html">&lt;p&gt;Keith: Replaced content with &amp;quot;{{nav_openhome_av|OpenHome Media - What is it?}}&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{nav_openhome_av|OpenHome Media - What is it?}}&lt;/div&gt;</summary>
		<author><name>Keith</name></author>	</entry>

	<entry>
		<id>http://wiki.openhome.org/wiki/OhNet:Developer</id>
		<title>OhNet:Developer</title>
		<link rel="alternate" type="text/html" href="http://wiki.openhome.org/wiki/OhNet:Developer"/>
				<updated>2011-07-06T14:21:26Z</updated>
		
		<summary type="html">&lt;p&gt;Keith: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{nav_openhome_ohnet|ohNet - Developers}}&lt;br /&gt;
=== Overview docs ===&lt;br /&gt;
* Control Point stack (PDF) [http://www.openhome.org/releases/ohNet_ControlPointStack.pdf]&lt;br /&gt;
* Device stack [coming soon]&lt;br /&gt;
&lt;br /&gt;
=== API docs ===&lt;br /&gt;
* C++ [http://www.openhome.org/build/nightly/docs/CppStd/]&lt;br /&gt;
* C# [http://www.openhome.org/build/nightly/docs/Cs/]&lt;br /&gt;
* JavaScript [http://www.openhome.org/build/nightly/docs/Js/]&lt;br /&gt;
* C [http://www.openhome.org/build/nightly/docs/C/]&lt;br /&gt;
&lt;br /&gt;
ohNet is written using C++ with std::string replaced by special buffer classes.  These buffer classes allow for more efficient use of memory at the cost of a steeper learning curve. Memory use benefits can be especially pronounced for the Device stack.  API docs [http://www.openhome.org/build/nightly/docs/CppCore/] for this version of the stack are available but the buffer classes are intended for internal use of the library and are as such currently undocumented.&lt;/div&gt;</summary>
		<author><name>Keith</name></author>	</entry>

	<entry>
		<id>http://wiki.openhome.org/wiki/OhNet:What</id>
		<title>OhNet:What</title>
		<link rel="alternate" type="text/html" href="http://wiki.openhome.org/wiki/OhNet:What"/>
				<updated>2011-07-06T14:20:28Z</updated>
		
		<summary type="html">&lt;p&gt;Keith: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{nav_openhome_ohnet|ohNet - What is it?}}&lt;br /&gt;
ohNet is a full UPnP stack.  Ports exist for Linux and Windows (Mac is in progress).  The public APIs are protocol independent and offered in C++, C#, C and JavaScript (Control Point only).&lt;br /&gt;
&lt;br /&gt;
UPnP services are presented as classes with actions appearing as functions and state variables appearing as member variables.  These classes are referred to as proxies for users of the Control Point stack and providers for users of the Device stack.&lt;br /&gt;
&lt;br /&gt;
Proxies and Providers are included for all OpenHome and UPnP AV services.  If your application uses other services, ohNet includes a tool (ohNetGen) to generate proxies and/or providers from the service XML in any of the supported languages.&lt;/div&gt;</summary>
		<author><name>Keith</name></author>	</entry>

	<entry>
		<id>http://wiki.openhome.org/wiki/OhNet:What</id>
		<title>OhNet:What</title>
		<link rel="alternate" type="text/html" href="http://wiki.openhome.org/wiki/OhNet:What"/>
				<updated>2011-07-06T14:20:20Z</updated>
		
		<summary type="html">&lt;p&gt;Keith: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{nav_openhome_ohnet|ohNet - What is it?}}&lt;br /&gt;
ohNet is a full UPnP stack.  Ports exist for Linux and Windows (Mac is in progress).  The public APIs are protocol independent and offered in C++, C#, C and JavaScript (Control Point only).&lt;br /&gt;
&lt;br /&gt;
UPnP services are presented as classes with actions appearing as functions and state variables appearing as member variables.  These classes are referred to as proxies for users of the Control Point stack and providers for users of the Device stack.&lt;br /&gt;
&lt;br /&gt;
Proxies and Providers are included for all OpenHome Media and UPnP AV services.  If your application uses other services, ohNet includes a tool (ohNetGen) to generate proxies and/or providers from the service XML in any of the supported languages.&lt;/div&gt;</summary>
		<author><name>Keith</name></author>	</entry>

	<entry>
		<id>http://wiki.openhome.org/wiki/OhMedia:Developer</id>
		<title>OhMedia:Developer</title>
		<link rel="alternate" type="text/html" href="http://wiki.openhome.org/wiki/OhMedia:Developer"/>
				<updated>2011-07-06T14:17:24Z</updated>
		
		<summary type="html">&lt;p&gt;Keith: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{nav_openhome_av|OpenHome Media - Developers}}&lt;br /&gt;
&lt;br /&gt;
= Introduction =&lt;br /&gt;
&lt;br /&gt;
OpenHome Media is an independent standard for networked audio visual devices. OpenHome Media products all have a standard way of presenting themselves to the network. This makes it possible to write generic Control Point software that is able to control those products independent of manufacturer or specific features.&lt;br /&gt;
&lt;br /&gt;
The technologies associated with making this possible are grouped under the term OpenHome Media Topology.&lt;br /&gt;
&lt;br /&gt;
If a developer wishes to write generic software that participates in the aims described above, then they should write that software in a way that conforms to the strategies and algorithms of OpenHome Media Topology, which is described below&lt;br /&gt;
&lt;br /&gt;
= Topology =&lt;br /&gt;
&lt;br /&gt;
== Products ==&lt;br /&gt;
&lt;br /&gt;
An OpenHome installation consists of products from a variety of manufacturers each bearing the [[Developer:ProductService|Product service]].&lt;br /&gt;
&lt;br /&gt;
Amongst other information, each product has:&lt;br /&gt;
&lt;br /&gt;
* Room (user configurable, defaults to 'Main Room')&lt;br /&gt;
&lt;br /&gt;
* Name (user configurable, defaults to the model name)&lt;br /&gt;
&lt;br /&gt;
* Source Count (fixed according to the capabilities of the product)&lt;br /&gt;
&lt;br /&gt;
* List of Sources, each with its own Type, Name, and Visibility&lt;br /&gt;
&lt;br /&gt;
* Attributes, identifying additional functionality offered by the product&lt;br /&gt;
&lt;br /&gt;
== Proper Configuration ==&lt;br /&gt;
&lt;br /&gt;
The name of each product represents its audio output.&lt;br /&gt;
&lt;br /&gt;
The name of each source represents an audio input (either internal or external).&lt;br /&gt;
&lt;br /&gt;
In a properly configured system, if one product is connected to another using an audio cable, then the name of the product sending the audio should match the name of the source receiving the audio. It is by matching these names that a Control Point is able to select the correct input on, for instance, a preamp when a particular source is selected.&lt;br /&gt;
&lt;br /&gt;
== Discovering An OpenHome Media System ==&lt;br /&gt;
&lt;br /&gt;
The correct way to discover an OpenHome Media system is to:&lt;br /&gt;
&lt;br /&gt;
* search for all units bearing the Product service&lt;br /&gt;
&lt;br /&gt;
* subscribe to each Product service&lt;br /&gt;
&lt;br /&gt;
* group these products according to their Room.&lt;br /&gt;
&lt;br /&gt;
* collect the name of all the sources in each product&lt;br /&gt;
&lt;br /&gt;
* match the names of the sources to the names of the products to create a set of tree structures in each room.&lt;br /&gt;
&lt;br /&gt;
== Source Functionality ==&lt;br /&gt;
&lt;br /&gt;
To determine the kind of functionality available on each source, inspect its type.&lt;br /&gt;
&lt;br /&gt;
If it has type Playlist, it additionally contains the [[Av:Developer:PlaylistService|Playlist service]]&lt;br /&gt;
&lt;br /&gt;
If it has type Radio, it additionally contains the [[Av:Developer:RadioService|Radio service]]&lt;br /&gt;
&lt;br /&gt;
If it has type Receiver, it additionally contains the [[Av:Developer:ReceiverService|Receiver service]]&lt;br /&gt;
&lt;br /&gt;
== Volume Control ==&lt;br /&gt;
&lt;br /&gt;
Products that offer volume control include the Volume attribute and the [[Av:Developer:VolumeService|Volume service]]&lt;br /&gt;
&lt;br /&gt;
== Now Playing Information ==&lt;br /&gt;
Products that provide information concerning the currently playing media include the [[Av:Developer:InfoService|Info service]]&lt;br /&gt;
&lt;br /&gt;
Products that report the current time within the currently playing track include the [[Av:Developer:TimeService|Time service]]&lt;br /&gt;
&lt;br /&gt;
== Multiroom Functionality ==&lt;br /&gt;
&lt;br /&gt;
An OpenHome Media Sender broadcasts music onto a network in a way that is playable by an OpenHome Media Receiver.&lt;br /&gt;
&lt;br /&gt;
An OpenHome Media Sender includes the [[Av:Developer:SenderService|Sender service]].&lt;br /&gt;
&lt;br /&gt;
An OpenHome Media Receiver includes a Receiver source (as part of of its topology) and an associated [[Av:Developer:ReceiverService|Receiver service]].&lt;br /&gt;
&lt;br /&gt;
= Services =&lt;br /&gt;
&lt;br /&gt;
* [[Av:Developer:ProductService|Product service]]&lt;br /&gt;
* [[Av:Developer:PlaylistService|Playlist service]]&lt;br /&gt;
* [[Av:Developer:RadioService|Radio service]]&lt;br /&gt;
* [[Av:Developer:InfoService|Info service]]&lt;br /&gt;
* [[Av:Developer:TimeService|Time service]]&lt;br /&gt;
* [[Av:Developer:VolumeService|Volume service]]&lt;br /&gt;
* [[Av:Developer:SenderService|Sender service]]&lt;br /&gt;
* [[Av:Developer:ReceiverService|Receiver service]]&lt;br /&gt;
&lt;br /&gt;
= Songcast Specifications =&lt;br /&gt;
&lt;br /&gt;
* [[Av:Developer:Songcast:Ohm|Songcast OHM/OHU Protocol Specification]]&lt;br /&gt;
* [[Av:Developer:Songcast:Ohz|Songcast OHZ Protocol Specification]]&lt;/div&gt;</summary>
		<author><name>Keith</name></author>	</entry>

	<entry>
		<id>http://wiki.openhome.org/wiki/OhMedia:How</id>
		<title>OhMedia:How</title>
		<link rel="alternate" type="text/html" href="http://wiki.openhome.org/wiki/OhMedia:How"/>
				<updated>2011-07-06T14:16:09Z</updated>
		
		<summary type="html">&lt;p&gt;Keith: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{nav_openhome_av|OpenHome Media - How do I get it?}}&lt;br /&gt;
&lt;br /&gt;
== Control Point Implementations ==&lt;br /&gt;
&lt;br /&gt;
[http://web.me.com/sean.harding/ChorusDS/Overview.html Chorus]&lt;br /&gt;
&lt;br /&gt;
[http://oss.linn.co.uk Kinsky]&lt;br /&gt;
&lt;br /&gt;
[http://leia.sommerfeldt.f-m.fm/ Leia]&lt;br /&gt;
&lt;br /&gt;
[http://bookshelfapps.com/songbook-ds.php Songbook]&lt;br /&gt;
&lt;br /&gt;
== Player Implementations ==&lt;br /&gt;
&lt;br /&gt;
[http://www.linn.co.uk/digital_stream_players Linn]&lt;br /&gt;
&lt;br /&gt;
OpenHome Media Player (under development)&lt;br /&gt;
&lt;br /&gt;
== Media Server Implementations ==&lt;br /&gt;
&lt;br /&gt;
[http://www.dbpoweramp.com/asset-upnp-dlna.htm Asset Server]&lt;br /&gt;
&lt;br /&gt;
[http://www.twonky.com/products/twonkyserver/default.aspx Twonky Server]&lt;/div&gt;</summary>
		<author><name>Keith</name></author>	</entry>

	<entry>
		<id>http://wiki.openhome.org/wiki/Av</id>
		<title>Av</title>
		<link rel="alternate" type="text/html" href="http://wiki.openhome.org/wiki/Av"/>
				<updated>2011-07-06T14:15:55Z</updated>
		
		<summary type="html">&lt;p&gt;Keith: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The OpenHome Media standard provides an open and freely useable specification allowing the interoperable control and playback of audio and video files.  Version 1.0 of the standard is available and multiple implementations of the standard [[How|exist]].&lt;/div&gt;</summary>
		<author><name>Keith</name></author>	</entry>

	<entry>
		<id>http://wiki.openhome.org/wiki/OhMedia:What</id>
		<title>OhMedia:What</title>
		<link rel="alternate" type="text/html" href="http://wiki.openhome.org/wiki/OhMedia:What"/>
				<updated>2011-07-06T14:15:44Z</updated>
		
		<summary type="html">&lt;p&gt;Keith: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{nav_openhome_av|OpenHome Media - What is it?}}&lt;br /&gt;
&lt;br /&gt;
OpenHome is an independent body dedicated to the design, implementation, and promotion of free and open standards for home networked devices.&lt;br /&gt;
&lt;br /&gt;
As more networked  devices are deployed in the home it is important for the services a device offers to the network to allow&lt;br /&gt;
&lt;br /&gt;
* control of the device with a networked control point,&lt;br /&gt;
* cooperation with other devices from other vendors&lt;br /&gt;
* use of the device in ways the manufacturer may not have envisaged when the device was designed&lt;br /&gt;
&lt;br /&gt;
OpenHome's first area of work is the [[Av|OpenHome Media standard]].&lt;/div&gt;</summary>
		<author><name>Keith</name></author>	</entry>

	<entry>
		<id>http://wiki.openhome.org/wiki/OhMedia:How</id>
		<title>OhMedia:How</title>
		<link rel="alternate" type="text/html" href="http://wiki.openhome.org/wiki/OhMedia:How"/>
				<updated>2011-07-06T14:14:14Z</updated>
		
		<summary type="html">&lt;p&gt;Keith: /* Player Implementations */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{nav_openhome_av|OpenHome Av - How do I get it?}}&lt;br /&gt;
&lt;br /&gt;
== Control Point Implementations ==&lt;br /&gt;
&lt;br /&gt;
[http://web.me.com/sean.harding/ChorusDS/Overview.html Chorus]&lt;br /&gt;
&lt;br /&gt;
[http://oss.linn.co.uk Kinsky]&lt;br /&gt;
&lt;br /&gt;
[http://leia.sommerfeldt.f-m.fm/ Leia]&lt;br /&gt;
&lt;br /&gt;
[http://bookshelfapps.com/songbook-ds.php Songbook]&lt;br /&gt;
&lt;br /&gt;
== Player Implementations ==&lt;br /&gt;
&lt;br /&gt;
[http://www.linn.co.uk/digital_stream_players Linn]&lt;br /&gt;
&lt;br /&gt;
OpenHome Media Player (under development)&lt;br /&gt;
&lt;br /&gt;
== Media Server Implementations ==&lt;br /&gt;
&lt;br /&gt;
[http://www.dbpoweramp.com/asset-upnp-dlna.htm Asset Server]&lt;br /&gt;
&lt;br /&gt;
[http://www.twonky.com/products/twonkyserver/default.aspx Twonky Server]&lt;/div&gt;</summary>
		<author><name>Keith</name></author>	</entry>

	<entry>
		<id>http://wiki.openhome.org/wiki/OhNet:Developer</id>
		<title>OhNet:Developer</title>
		<link rel="alternate" type="text/html" href="http://wiki.openhome.org/wiki/OhNet:Developer"/>
				<updated>2011-06-27T14:34:07Z</updated>
		
		<summary type="html">&lt;p&gt;Keith: /* API docs */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{nav_openhome_ohnet|ohNet - Developers}}&lt;br /&gt;
=== Overview docs ===&lt;br /&gt;
* Control Point (PDF) [http://www.openhome.org/releases/ohNet_ControlPointStack.pdf]&lt;br /&gt;
* Device [coming soon]&lt;br /&gt;
&lt;br /&gt;
=== API docs ===&lt;br /&gt;
* C++ [http://www.openhome.org/build/nightly/docs/CppStd/]&lt;br /&gt;
* C# [http://www.openhome.org/build/nightly/docs/Cs/]&lt;br /&gt;
* JavaScript [http://www.openhome.org/build/nightly/docs/Js/]&lt;br /&gt;
* C [http://www.openhome.org/build/nightly/docs/C/]&lt;br /&gt;
&lt;br /&gt;
ohNet is written using C++ with std::string replaced by special buffer classes.  These buffer classes allow for more efficient use of memory at the cost of a steeper learning curve. Memory use benefits can be especially pronounced for the Device stack.  API docs [http://www.openhome.org/build/nightly/docs/CppCore/] for this version of the stack are available but the buffer classes are currently undocumented.&lt;/div&gt;</summary>
		<author><name>Keith</name></author>	</entry>

	<entry>
		<id>http://wiki.openhome.org/wiki/OhMedia:Developer</id>
		<title>OhMedia:Developer</title>
		<link rel="alternate" type="text/html" href="http://wiki.openhome.org/wiki/OhMedia:Developer"/>
				<updated>2011-06-02T13:31:57Z</updated>
		
		<summary type="html">&lt;p&gt;Keith: /* Songcast */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Introduction =&lt;br /&gt;
&lt;br /&gt;
OpenHome Av is an independent standard for networked audio visual devices. OpenHome Av products all have a standard way of presenting themselves to the network. This makes it possible to write generic Control Point software that is able to control those products independent of manufacturer or specific features.&lt;br /&gt;
&lt;br /&gt;
The technologies associated with making this possible are grouped under the term OpenHome Av Topology.&lt;br /&gt;
&lt;br /&gt;
If a developer wishes to write generic software that participates in the aims described above, then they should write that software in a way that conforms to the strategies and algorithms of OpenHome Av Topology, which is described below&lt;br /&gt;
&lt;br /&gt;
= Topology =&lt;br /&gt;
&lt;br /&gt;
== Products ==&lt;br /&gt;
&lt;br /&gt;
An OpenHome installation consists of products from a variety of manufacturers each bearing the [[Developer:ProductService|Product service]].&lt;br /&gt;
&lt;br /&gt;
Amongst other information, each product has:&lt;br /&gt;
&lt;br /&gt;
* Room (user configurable, defaults to 'Main Room')&lt;br /&gt;
&lt;br /&gt;
* Name (user configurable, defaults to the model name)&lt;br /&gt;
&lt;br /&gt;
* Source Count (fixed according to the capabilities of the product)&lt;br /&gt;
&lt;br /&gt;
* List of Sources, each with its own Type, Name, and Visibility&lt;br /&gt;
&lt;br /&gt;
* Attributes, identifying additional functionality offered by the product&lt;br /&gt;
&lt;br /&gt;
== Proper Configuration ==&lt;br /&gt;
&lt;br /&gt;
The name of each product represents its audio output.&lt;br /&gt;
&lt;br /&gt;
The name of each source represents an audio input (either internal or external).&lt;br /&gt;
&lt;br /&gt;
In a properly configured system, if one product is connected to another using an audio cable, then the name of the product sending the audio should match the name of the source receiving the audio. It is by matching these names that a Control Point is able to select the correct input on, for instance, a preamp when a particular source is selected.&lt;br /&gt;
&lt;br /&gt;
== Discovering An OpenHome Av System ==&lt;br /&gt;
&lt;br /&gt;
The correct way to discover an OpenHome Av system is to:&lt;br /&gt;
&lt;br /&gt;
* search for all units bearing the Product service&lt;br /&gt;
&lt;br /&gt;
* subscribe to each Product service&lt;br /&gt;
&lt;br /&gt;
* group these products according to their Room.&lt;br /&gt;
&lt;br /&gt;
* collect the name of all the sources in each product&lt;br /&gt;
&lt;br /&gt;
* match the names of the sources to the names of the products to create a set of tree structures in each room.&lt;br /&gt;
&lt;br /&gt;
== Source Functionality ==&lt;br /&gt;
&lt;br /&gt;
To determine the kind of functionality available on each source, inspect its type.&lt;br /&gt;
&lt;br /&gt;
If it has type Playlist, it additionally contains the [[Av:Developer:PlaylistService|Playlist service]]&lt;br /&gt;
&lt;br /&gt;
If it has type Radio, it additionally contains the [[Av:Developer:RadioService|Radio service]]&lt;br /&gt;
&lt;br /&gt;
If it has type Receiver, it additionally contains the [[Av:Developer:ReceiverService|Receiver service]]&lt;br /&gt;
&lt;br /&gt;
== Volume Control ==&lt;br /&gt;
&lt;br /&gt;
Products that offer volume control include the Volume attribute and the [[Av:Developer:VolumeService|Volume service]]&lt;br /&gt;
&lt;br /&gt;
The primary volume control offered by a control point should be the one situated nearest the root in the tree structure that contains the current source.&lt;br /&gt;
&lt;br /&gt;
Control points may optionally provide the user with control of the volume of each product within the tree.&lt;br /&gt;
&lt;br /&gt;
== Now Playing Information ==&lt;br /&gt;
Products that provide information concerning the currently playing media include the [[Av:Developer:InfoService|Info service]]&lt;br /&gt;
&lt;br /&gt;
Products that report the duration of the currently playing track include the [[Av:Developer:TimeService|Time service]]&lt;br /&gt;
&lt;br /&gt;
== Multiroom Functionality ==&lt;br /&gt;
&lt;br /&gt;
The [[Av:Developer:SenderService|Sender service]] indicates the presence of an OpenHome Av sender and provides information concerning that sender.&lt;br /&gt;
&lt;br /&gt;
An OpenHome Av sender broadcasts music on a network in a way that is playable by an OpenHome Av receiver.&lt;br /&gt;
&lt;br /&gt;
The [[Av:Developer:ReceiverService|Receiver service]] provides the means for controlling a Receiver source. If a device's [[Developer:ProductService|Product service]] reports a source of type 'Receiver', then that device is guaranteed to bear the [[Av:Developer:ReceiverService|Receiver service]].&lt;br /&gt;
&lt;br /&gt;
= Services =&lt;br /&gt;
&lt;br /&gt;
* [[Av:Developer:ProductService|Product service]]&lt;br /&gt;
* [[Av:Developer:PlaylistService|Playlist service]]&lt;br /&gt;
* [[Av:Developer:RadioService|Radio service]]&lt;br /&gt;
* [[Av:Developer:InfoService|Info service]]&lt;br /&gt;
* [[Av:Developer:TimeService|Time service]]&lt;br /&gt;
* [[Av:Developer:VolumeService|Volume service]]&lt;br /&gt;
* [[Av:Developer:SenderService|Sender service]]&lt;br /&gt;
* [[Av:Developer:ReceiverService|Receiver service]]&lt;br /&gt;
&lt;br /&gt;
= Songcast Specifications =&lt;br /&gt;
&lt;br /&gt;
* [[Av:Developer:Songcast:Ohm|Songcast OHM/OHU Protocol Specification]]&lt;br /&gt;
* [[Av:Developer:Songcast:Ohz|Songcast OHZ Protocol Specification]]&lt;/div&gt;</summary>
		<author><name>Keith</name></author>	</entry>

	<entry>
		<id>http://wiki.openhome.org/wiki/OhMedia:Developer</id>
		<title>OhMedia:Developer</title>
		<link rel="alternate" type="text/html" href="http://wiki.openhome.org/wiki/OhMedia:Developer"/>
				<updated>2011-06-02T13:31:39Z</updated>
		
		<summary type="html">&lt;p&gt;Keith: /* Network Protocols */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Introduction =&lt;br /&gt;
&lt;br /&gt;
OpenHome Av is an independent standard for networked audio visual devices. OpenHome Av products all have a standard way of presenting themselves to the network. This makes it possible to write generic Control Point software that is able to control those products independent of manufacturer or specific features.&lt;br /&gt;
&lt;br /&gt;
The technologies associated with making this possible are grouped under the term OpenHome Av Topology.&lt;br /&gt;
&lt;br /&gt;
If a developer wishes to write generic software that participates in the aims described above, then they should write that software in a way that conforms to the strategies and algorithms of OpenHome Av Topology, which is described below&lt;br /&gt;
&lt;br /&gt;
= Topology =&lt;br /&gt;
&lt;br /&gt;
== Products ==&lt;br /&gt;
&lt;br /&gt;
An OpenHome installation consists of products from a variety of manufacturers each bearing the [[Developer:ProductService|Product service]].&lt;br /&gt;
&lt;br /&gt;
Amongst other information, each product has:&lt;br /&gt;
&lt;br /&gt;
* Room (user configurable, defaults to 'Main Room')&lt;br /&gt;
&lt;br /&gt;
* Name (user configurable, defaults to the model name)&lt;br /&gt;
&lt;br /&gt;
* Source Count (fixed according to the capabilities of the product)&lt;br /&gt;
&lt;br /&gt;
* List of Sources, each with its own Type, Name, and Visibility&lt;br /&gt;
&lt;br /&gt;
* Attributes, identifying additional functionality offered by the product&lt;br /&gt;
&lt;br /&gt;
== Proper Configuration ==&lt;br /&gt;
&lt;br /&gt;
The name of each product represents its audio output.&lt;br /&gt;
&lt;br /&gt;
The name of each source represents an audio input (either internal or external).&lt;br /&gt;
&lt;br /&gt;
In a properly configured system, if one product is connected to another using an audio cable, then the name of the product sending the audio should match the name of the source receiving the audio. It is by matching these names that a Control Point is able to select the correct input on, for instance, a preamp when a particular source is selected.&lt;br /&gt;
&lt;br /&gt;
== Discovering An OpenHome Av System ==&lt;br /&gt;
&lt;br /&gt;
The correct way to discover an OpenHome Av system is to:&lt;br /&gt;
&lt;br /&gt;
* search for all units bearing the Product service&lt;br /&gt;
&lt;br /&gt;
* subscribe to each Product service&lt;br /&gt;
&lt;br /&gt;
* group these products according to their Room.&lt;br /&gt;
&lt;br /&gt;
* collect the name of all the sources in each product&lt;br /&gt;
&lt;br /&gt;
* match the names of the sources to the names of the products to create a set of tree structures in each room.&lt;br /&gt;
&lt;br /&gt;
== Source Functionality ==&lt;br /&gt;
&lt;br /&gt;
To determine the kind of functionality available on each source, inspect its type.&lt;br /&gt;
&lt;br /&gt;
If it has type Playlist, it additionally contains the [[Av:Developer:PlaylistService|Playlist service]]&lt;br /&gt;
&lt;br /&gt;
If it has type Radio, it additionally contains the [[Av:Developer:RadioService|Radio service]]&lt;br /&gt;
&lt;br /&gt;
If it has type Receiver, it additionally contains the [[Av:Developer:ReceiverService|Receiver service]]&lt;br /&gt;
&lt;br /&gt;
== Volume Control ==&lt;br /&gt;
&lt;br /&gt;
Products that offer volume control include the Volume attribute and the [[Av:Developer:VolumeService|Volume service]]&lt;br /&gt;
&lt;br /&gt;
The primary volume control offered by a control point should be the one situated nearest the root in the tree structure that contains the current source.&lt;br /&gt;
&lt;br /&gt;
Control points may optionally provide the user with control of the volume of each product within the tree.&lt;br /&gt;
&lt;br /&gt;
== Now Playing Information ==&lt;br /&gt;
Products that provide information concerning the currently playing media include the [[Av:Developer:InfoService|Info service]]&lt;br /&gt;
&lt;br /&gt;
Products that report the duration of the currently playing track include the [[Av:Developer:TimeService|Time service]]&lt;br /&gt;
&lt;br /&gt;
== Multiroom Functionality ==&lt;br /&gt;
&lt;br /&gt;
The [[Av:Developer:SenderService|Sender service]] indicates the presence of an OpenHome Av sender and provides information concerning that sender.&lt;br /&gt;
&lt;br /&gt;
An OpenHome Av sender broadcasts music on a network in a way that is playable by an OpenHome Av receiver.&lt;br /&gt;
&lt;br /&gt;
The [[Av:Developer:ReceiverService|Receiver service]] provides the means for controlling a Receiver source. If a device's [[Developer:ProductService|Product service]] reports a source of type 'Receiver', then that device is guaranteed to bear the [[Av:Developer:ReceiverService|Receiver service]].&lt;br /&gt;
&lt;br /&gt;
= Services =&lt;br /&gt;
&lt;br /&gt;
* [[Av:Developer:ProductService|Product service]]&lt;br /&gt;
* [[Av:Developer:PlaylistService|Playlist service]]&lt;br /&gt;
* [[Av:Developer:RadioService|Radio service]]&lt;br /&gt;
* [[Av:Developer:InfoService|Info service]]&lt;br /&gt;
* [[Av:Developer:TimeService|Time service]]&lt;br /&gt;
* [[Av:Developer:VolumeService|Volume service]]&lt;br /&gt;
* [[Av:Developer:SenderService|Sender service]]&lt;br /&gt;
* [[Av:Developer:ReceiverService|Receiver service]]&lt;br /&gt;
&lt;br /&gt;
= Songcast =&lt;br /&gt;
&lt;br /&gt;
* [[Av:Developer:Songcast:Ohm|Songcast OHM/OHU Protocol Specification]]&lt;br /&gt;
* [[Av:Developer:Songcast:Ohz|Songcast OHZ Protocol Specification]]&lt;/div&gt;</summary>
		<author><name>Keith</name></author>	</entry>

	<entry>
		<id>http://wiki.openhome.org/wiki/OhMedia:What</id>
		<title>OhMedia:What</title>
		<link rel="alternate" type="text/html" href="http://wiki.openhome.org/wiki/OhMedia:What"/>
				<updated>2011-05-05T15:37:55Z</updated>
		
		<summary type="html">&lt;p&gt;Keith: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;OpenHome is an independent body dedicated to the design, implementation, and promotion of free and open standards for the interoperability of networked devices in the home.&lt;br /&gt;
&lt;br /&gt;
More and more devices are exposing their functionality to the network.  If done correctly, the services a device provides to the network allows you to:&lt;br /&gt;
&lt;br /&gt;
* control the device with a 3rd party control point,&lt;br /&gt;
* use the device in conjunction with another vendor's devices, &lt;br /&gt;
* use the device in ways the manufacturer may never have even dreamt of. &lt;br /&gt;
&lt;br /&gt;
OpenHome's first area of work is the [[Av|OpenHome Audio Visual (AV) standard]].&lt;/div&gt;</summary>
		<author><name>Keith</name></author>	</entry>

	<entry>
		<id>http://wiki.openhome.org/wiki/OhMedia:How</id>
		<title>OhMedia:How</title>
		<link rel="alternate" type="text/html" href="http://wiki.openhome.org/wiki/OhMedia:How"/>
				<updated>2011-05-05T15:35:47Z</updated>
		
		<summary type="html">&lt;p&gt;Keith: /* Player Implementations */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Control Point Implementations ==&lt;br /&gt;
&lt;br /&gt;
[http://web.me.com/sean.harding/ChorusDS/Overview.html Chorus]&lt;br /&gt;
&lt;br /&gt;
[http://oss.linn.co.uk Kinsky]&lt;br /&gt;
&lt;br /&gt;
[http://leia.sommerfeldt.f-m.fm/ Leia]&lt;br /&gt;
&lt;br /&gt;
[http://bookshelfapps.com/songbook-ds.php Songbook]&lt;br /&gt;
&lt;br /&gt;
== Player Implementations ==&lt;br /&gt;
&lt;br /&gt;
[http://www.linn.co.uk/digital_stream_players Linn]&lt;br /&gt;
&lt;br /&gt;
OpenHome Av SoftPlayer (under development)&lt;br /&gt;
&lt;br /&gt;
== Media Server Implementations ==&lt;br /&gt;
&lt;br /&gt;
[http://www.dbpoweramp.com/asset-upnp-dlna.htm Asset Server]&lt;br /&gt;
&lt;br /&gt;
[http://www.twonky.com/products/twonkyserver/default.aspx Twonky Server]&lt;/div&gt;</summary>
		<author><name>Keith</name></author>	</entry>

	<entry>
		<id>http://wiki.openhome.org/wiki/OhMedia:How</id>
		<title>OhMedia:How</title>
		<link rel="alternate" type="text/html" href="http://wiki.openhome.org/wiki/OhMedia:How"/>
				<updated>2011-05-05T15:35:37Z</updated>
		
		<summary type="html">&lt;p&gt;Keith: /* Player Implementations */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Control Point Implementations ==&lt;br /&gt;
&lt;br /&gt;
[http://web.me.com/sean.harding/ChorusDS/Overview.html Chorus]&lt;br /&gt;
&lt;br /&gt;
[http://oss.linn.co.uk Kinsky]&lt;br /&gt;
&lt;br /&gt;
[http://leia.sommerfeldt.f-m.fm/ Leia]&lt;br /&gt;
&lt;br /&gt;
[http://bookshelfapps.com/songbook-ds.php Songbook]&lt;br /&gt;
&lt;br /&gt;
== Player Implementations ==&lt;br /&gt;
&lt;br /&gt;
[http://www.linn.co.uk/digital_stream_players Linn]&lt;br /&gt;
&lt;br /&gt;
OpenHome Av SoftPlayer (coming soon)&lt;br /&gt;
&lt;br /&gt;
== Media Server Implementations ==&lt;br /&gt;
&lt;br /&gt;
[http://www.dbpoweramp.com/asset-upnp-dlna.htm Asset Server]&lt;br /&gt;
&lt;br /&gt;
[http://www.twonky.com/products/twonkyserver/default.aspx Twonky Server]&lt;/div&gt;</summary>
		<author><name>Keith</name></author>	</entry>

	<entry>
		<id>http://wiki.openhome.org/wiki/OhMedia:How</id>
		<title>OhMedia:How</title>
		<link rel="alternate" type="text/html" href="http://wiki.openhome.org/wiki/OhMedia:How"/>
				<updated>2011-05-05T15:35:26Z</updated>
		
		<summary type="html">&lt;p&gt;Keith: /* Control Point Implementations */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Control Point Implementations ==&lt;br /&gt;
&lt;br /&gt;
[http://web.me.com/sean.harding/ChorusDS/Overview.html Chorus]&lt;br /&gt;
&lt;br /&gt;
[http://oss.linn.co.uk Kinsky]&lt;br /&gt;
&lt;br /&gt;
[http://leia.sommerfeldt.f-m.fm/ Leia]&lt;br /&gt;
&lt;br /&gt;
[http://bookshelfapps.com/songbook-ds.php Songbook]&lt;br /&gt;
&lt;br /&gt;
== Player Implementations ==&lt;br /&gt;
&lt;br /&gt;
[http://www.linn.co.uk/digital_stream_players Linn]&lt;br /&gt;
&lt;br /&gt;
OpenHome Av SoftPlayer&lt;br /&gt;
&lt;br /&gt;
== Media Server Implementations ==&lt;br /&gt;
&lt;br /&gt;
[http://www.dbpoweramp.com/asset-upnp-dlna.htm Asset Server]&lt;br /&gt;
&lt;br /&gt;
[http://www.twonky.com/products/twonkyserver/default.aspx Twonky Server]&lt;/div&gt;</summary>
		<author><name>Keith</name></author>	</entry>

	<entry>
		<id>http://wiki.openhome.org/wiki/OhMedia:How</id>
		<title>OhMedia:How</title>
		<link rel="alternate" type="text/html" href="http://wiki.openhome.org/wiki/OhMedia:How"/>
				<updated>2011-05-05T14:34:09Z</updated>
		
		<summary type="html">&lt;p&gt;Keith: Created page with &amp;quot;== Control Point Implementations ==  [http://web.me.com/sean.harding/ChorusDS/Overview.html Chorus]  [http://oss.linn.co.uk Kinsky]  [http://leia.sommerfeldt.f-m.fm/ Leia]  [http...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Control Point Implementations ==&lt;br /&gt;
&lt;br /&gt;
[http://web.me.com/sean.harding/ChorusDS/Overview.html Chorus]&lt;br /&gt;
&lt;br /&gt;
[http://oss.linn.co.uk Kinsky]&lt;br /&gt;
&lt;br /&gt;
[http://leia.sommerfeldt.f-m.fm/ Leia]&lt;br /&gt;
&lt;br /&gt;
[http://bookshelfapps.com/songbook-ds.php Songbook]&lt;/div&gt;</summary>
		<author><name>Keith</name></author>	</entry>

	<entry>
		<id>http://wiki.openhome.org/wiki/Av</id>
		<title>Av</title>
		<link rel="alternate" type="text/html" href="http://wiki.openhome.org/wiki/Av"/>
				<updated>2011-05-05T14:29:15Z</updated>
		
		<summary type="html">&lt;p&gt;Keith: Created page with &amp;quot;The OpenHome Av standard provides an open and freely useable specification allowing the interoperable control and playback of audio and video files.  Version 1.0 of the standard ...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The OpenHome Av standard provides an open and freely useable specification allowing the interoperable control and playback of audio and video files.  Version 1.0 of the standard is available and multiple implementations of the standard [[How|exist]].&lt;/div&gt;</summary>
		<author><name>Keith</name></author>	</entry>

	<entry>
		<id>http://wiki.openhome.org/wiki/OhMedia:What</id>
		<title>OhMedia:What</title>
		<link rel="alternate" type="text/html" href="http://wiki.openhome.org/wiki/OhMedia:What"/>
				<updated>2011-05-05T14:05:28Z</updated>
		
		<summary type="html">&lt;p&gt;Keith: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;OpenHome is an independent body dedicated to the design, implementation, and promotion of free and open standards for the interoperability of networked devices in the home.&lt;br /&gt;
&lt;br /&gt;
It is becoming more common for devices to expose their functionality to the network.  If done correctly, the services a device provides to the network allows them:&lt;br /&gt;
&lt;br /&gt;
* to be controlled by 3rd party control points, &lt;br /&gt;
* to be used in conjunction with other vendor's devices, &lt;br /&gt;
* and to be used in ways that the original manufacturer may never have dreamt of. &lt;br /&gt;
&lt;br /&gt;
OpenHome's first area of work is the [[Av|OpenHome Audio Visual (AV) standard]].&lt;/div&gt;</summary>
		<author><name>Keith</name></author>	</entry>

	<entry>
		<id>http://wiki.openhome.org/wiki/Help:Editing</id>
		<title>Help:Editing</title>
		<link rel="alternate" type="text/html" href="http://wiki.openhome.org/wiki/Help:Editing"/>
				<updated>2011-05-05T14:03:48Z</updated>
		
		<summary type="html">&lt;p&gt;Keith: Created page with &amp;quot;http://www.mediawiki.org/wiki/Help:Editing_pages&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;http://www.mediawiki.org/wiki/Help:Editing_pages&lt;/div&gt;</summary>
		<author><name>Keith</name></author>	</entry>

	<entry>
		<id>http://wiki.openhome.org/wiki/MediaWiki:Mainpage</id>
		<title>MediaWiki:Mainpage</title>
		<link rel="alternate" type="text/html" href="http://wiki.openhome.org/wiki/MediaWiki:Mainpage"/>
				<updated>2011-05-05T14:00:46Z</updated>
		
		<summary type="html">&lt;p&gt;Keith: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;What&lt;/div&gt;</summary>
		<author><name>Keith</name></author>	</entry>

	<entry>
		<id>http://wiki.openhome.org/wiki/OhMedia:What</id>
		<title>OhMedia:What</title>
		<link rel="alternate" type="text/html" href="http://wiki.openhome.org/wiki/OhMedia:What"/>
				<updated>2011-05-05T13:34:38Z</updated>
		
		<summary type="html">&lt;p&gt;Keith: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;OpenHome is an independent body dedicated to the design, implementation, and promotion of free and open standards for the interoperability of networked devices in the home.&lt;br /&gt;
&lt;br /&gt;
It is becoming more common for devices to expose their functionality to the network.  If done correctly, the services a device provides to the network allows them:&lt;br /&gt;
&lt;br /&gt;
* to be controlled by 3rd party control points, &lt;br /&gt;
* to be used in conjunction with other vendor's devices, &lt;br /&gt;
* and to be used in ways that the original manufacturer may never have dreamt of. &lt;br /&gt;
&lt;br /&gt;
OpenHome's first area of work is the OpenHome Audio Visual (AV) standard.&lt;/div&gt;</summary>
		<author><name>Keith</name></author>	</entry>

	<entry>
		<id>http://wiki.openhome.org/wiki/OhMedia:What</id>
		<title>OhMedia:What</title>
		<link rel="alternate" type="text/html" href="http://wiki.openhome.org/wiki/OhMedia:What"/>
				<updated>2011-05-05T12:47:54Z</updated>
		
		<summary type="html">&lt;p&gt;Keith: Created page with &amp;quot;OpenHome is an independent body dedicated to the design, implementation, and promotion of free and open standards for the interoperability of networked devices in the home.  It h...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;OpenHome is an independent body dedicated to the design, implementation, and promotion of free and open standards for the interoperability of networked devices in the home.&lt;br /&gt;
&lt;br /&gt;
It has become common for devices to expose their functionality to the network.  If done correctly, it allows those devices to be controlled by other vendor's control points, to be integrated with other vendor's devices, and to be used in ways that the original manufacturer may never have dreamt of. &lt;br /&gt;
&lt;br /&gt;
OpenHome's first area of work is the OpenHome Audio Visual (AV) standard.&lt;/div&gt;</summary>
		<author><name>Keith</name></author>	</entry>

	<entry>
		<id>http://wiki.openhome.org/wiki/Av:Developer:SenderService</id>
		<title>Av:Developer:SenderService</title>
		<link rel="alternate" type="text/html" href="http://wiki.openhome.org/wiki/Av:Developer:SenderService"/>
				<updated>2011-04-28T14:13:05Z</updated>
		
		<summary type="html">&lt;p&gt;Keith: /* Connecting */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Architectural Overview =&lt;br /&gt;
&lt;br /&gt;
The Sender service indicates the presence of an OpenHome Av sender and provides information concerning that sender.&lt;br /&gt;
&lt;br /&gt;
An OpenHome Av sender broadcasts music on a network in a way that is playable by an OpenHome Av [[Developer:ReceiverService|receiver]].&lt;br /&gt;
&lt;br /&gt;
OpenHome senders should be discovered independently of the standard algorithm for discovering OpenHome products and sources. An independent search should be made for devices bearing the Sender service.&lt;br /&gt;
&lt;br /&gt;
= Actions =&lt;br /&gt;
== Attributes ==&lt;br /&gt;
Reports a space separated list of attributes that identify additional functionality that can be found on the same device as this Sender.&lt;br /&gt;
&lt;br /&gt;
Currently defined attributes are:&lt;br /&gt;
&lt;br /&gt;
* Info - this device reports on the current media using the Info service&lt;br /&gt;
* Time - this device reports on the current media using the Time service&lt;br /&gt;
&lt;br /&gt;
== Audio == &lt;br /&gt;
Reports whether audio is currently present on this sender.&lt;br /&gt;
&lt;br /&gt;
== Metadata ==&lt;br /&gt;
Provides a representation of this audio item in DIDL-Lite format.&lt;br /&gt;
&lt;br /&gt;
== PresentationUrl ==&lt;br /&gt;
Reports the Url of a presentation page for further information concerning the sender, or for controlling the sender in some application-specific way.&lt;br /&gt;
&lt;br /&gt;
If the sender has no presentation page, the PresentationUrl should be empty.&lt;br /&gt;
&lt;br /&gt;
== Status ==&lt;br /&gt;
Reports the status of the sender (normally only for debugging purposes):&lt;br /&gt;
&lt;br /&gt;
* Sending - currently sending audio over the network&lt;br /&gt;
* Ready - ready to send audio but no listeners&lt;br /&gt;
* Blocked - audio from another sender detected on the same channel (mis-configuration)&lt;br /&gt;
* Inactive - no audio source currently assigned to this sender&lt;br /&gt;
* Disabled - sender disabled by user configuration&lt;br /&gt;
&lt;br /&gt;
= Technical Details =&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
    Domain  : av.openhome.org&lt;br /&gt;
    Name    : Sender&lt;br /&gt;
    Version : 1&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
[http://oss.linn.co.uk/trac/browser/Main/LibUpnpCil/Services/Openhome/Sender1.xml Sender Service Description (XML)]&lt;/div&gt;</summary>
		<author><name>Keith</name></author>	</entry>

	<entry>
		<id>http://wiki.openhome.org/wiki/Av:Developer:SenderService</id>
		<title>Av:Developer:SenderService</title>
		<link rel="alternate" type="text/html" href="http://wiki.openhome.org/wiki/Av:Developer:SenderService"/>
				<updated>2011-04-28T14:12:00Z</updated>
		
		<summary type="html">&lt;p&gt;Keith: /* Architectural Overview */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Architectural Overview =&lt;br /&gt;
&lt;br /&gt;
The Sender service indicates the presence of an OpenHome Av sender and provides information concerning that sender.&lt;br /&gt;
&lt;br /&gt;
An OpenHome Av sender broadcasts music on a network in a way that is playable by an OpenHome Av [[Developer:ReceiverService|receiver]].&lt;br /&gt;
&lt;br /&gt;
OpenHome senders should be discovered independently of the standard algorithm for discovering OpenHome products and sources. An independent search should be made for devices bearing the Sender service.&lt;br /&gt;
&lt;br /&gt;
= Actions =&lt;br /&gt;
== Attributes ==&lt;br /&gt;
Reports a space separated list of attributes that identify additional functionality that can be found on the same device as this Sender.&lt;br /&gt;
&lt;br /&gt;
Currently defined attributes are:&lt;br /&gt;
&lt;br /&gt;
* Info - this device reports on the current media using the Info service&lt;br /&gt;
* Time - this device reports on the current media using the Time service&lt;br /&gt;
&lt;br /&gt;
== Audio == &lt;br /&gt;
Reports whether audio is currently present on this sender.&lt;br /&gt;
&lt;br /&gt;
== Metadata ==&lt;br /&gt;
Provides a representation of this audio item in DIDL-Lite format.&lt;br /&gt;
&lt;br /&gt;
== PresentationUrl ==&lt;br /&gt;
Reports the Url of a presentation page for further information concerning the sender, or for controlling the sender in some application-specific way.&lt;br /&gt;
&lt;br /&gt;
If the sender has no presentation page, the PresentationUrl should be empty.&lt;br /&gt;
&lt;br /&gt;
== Status ==&lt;br /&gt;
Reports the status of the sender (normally only for debugging purposes):&lt;br /&gt;
&lt;br /&gt;
* Sending - currently sending audio over the network&lt;br /&gt;
* Ready - ready to send audio but no listeners&lt;br /&gt;
* Blocked - audio from another sender detected on the same channel (mis-configuration)&lt;br /&gt;
* Inactive - no audio source currently assigned to this sender&lt;br /&gt;
* Disabled - sender disabled by user configuration&lt;br /&gt;
&lt;br /&gt;
= Technical Details =&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
    Domain  : av.openhome.org&lt;br /&gt;
    Name    : Sender&lt;br /&gt;
    Version : 1&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
[http://oss.linn.co.uk/trac/browser/Main/LibUpnpCil/Services/Openhome/Sender1.xml Sender Service Description (XML)]&lt;br /&gt;
&lt;br /&gt;
== Connecting ==&lt;br /&gt;
&lt;br /&gt;
In the OpenHome multicast protocol, receivers must be connected to senders in order to receive streaming audio. &lt;br /&gt;
&lt;br /&gt;
In order to connect and disconnect senders from receivers, there are two conceptual approaches you could take.  You can either order a particular receiver to play a particular sender, or you can order a sender to start sending to one or more receivers.  From a user perspective, these are very different approaches, however from an implementation standpoint, both of these are equivalent and are carried out by invoking the SetSender action on the receiver service, passing the Uri and Metadata of the sender (which can be obtained from the sender service metadata state variable).  This will bring the receiver to a state where it is ready to listen to the sender, and can be started/stopped by invoking the Play and Stop actions.  The Play action will automatically switch source on the receiving DS if this source is not currently selected.&lt;br /&gt;
&lt;br /&gt;
Both of these approaches, of course, first require maintaining an up-to-date list of senders and receivers from [[Developer#Topology|Topology]]:&lt;br /&gt;
&lt;br /&gt;
The receivers list is maintained by using [[Developer#Topology|Topology]] to watch sources being added/removed and checking whether the source has Type equal to &amp;quot;Receiver&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
The senders list is maintained via SSDP discovery of any sender services which do not have a status of disabled.&lt;/div&gt;</summary>
		<author><name>Keith</name></author>	</entry>

	<entry>
		<id>http://wiki.openhome.org/wiki/Av:Developer:SenderService</id>
		<title>Av:Developer:SenderService</title>
		<link rel="alternate" type="text/html" href="http://wiki.openhome.org/wiki/Av:Developer:SenderService"/>
				<updated>2011-04-28T14:11:40Z</updated>
		
		<summary type="html">&lt;p&gt;Keith: /* Architectural Overview */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Architectural Overview =&lt;br /&gt;
&lt;br /&gt;
The Sender service indicates the presence of an OpenHome Av sender and provides information concerning that sender.&lt;br /&gt;
&lt;br /&gt;
An OpenHome Av sender broadcasts music on a network in a way that is playable by an OpenHome [[Developer:ReceiverService|receiver]].&lt;br /&gt;
&lt;br /&gt;
OpenHome senders should be discovered independently of the standard algorithm for discovering OpenHome products and sources. An independent search should be made for devices bearing the Sender service.&lt;br /&gt;
&lt;br /&gt;
= Actions =&lt;br /&gt;
== Attributes ==&lt;br /&gt;
Reports a space separated list of attributes that identify additional functionality that can be found on the same device as this Sender.&lt;br /&gt;
&lt;br /&gt;
Currently defined attributes are:&lt;br /&gt;
&lt;br /&gt;
* Info - this device reports on the current media using the Info service&lt;br /&gt;
* Time - this device reports on the current media using the Time service&lt;br /&gt;
&lt;br /&gt;
== Audio == &lt;br /&gt;
Reports whether audio is currently present on this sender.&lt;br /&gt;
&lt;br /&gt;
== Metadata ==&lt;br /&gt;
Provides a representation of this audio item in DIDL-Lite format.&lt;br /&gt;
&lt;br /&gt;
== PresentationUrl ==&lt;br /&gt;
Reports the Url of a presentation page for further information concerning the sender, or for controlling the sender in some application-specific way.&lt;br /&gt;
&lt;br /&gt;
If the sender has no presentation page, the PresentationUrl should be empty.&lt;br /&gt;
&lt;br /&gt;
== Status ==&lt;br /&gt;
Reports the status of the sender (normally only for debugging purposes):&lt;br /&gt;
&lt;br /&gt;
* Sending - currently sending audio over the network&lt;br /&gt;
* Ready - ready to send audio but no listeners&lt;br /&gt;
* Blocked - audio from another sender detected on the same channel (mis-configuration)&lt;br /&gt;
* Inactive - no audio source currently assigned to this sender&lt;br /&gt;
* Disabled - sender disabled by user configuration&lt;br /&gt;
&lt;br /&gt;
= Technical Details =&lt;br /&gt;
&amp;lt;code&amp;gt;&lt;br /&gt;
    Domain  : av.openhome.org&lt;br /&gt;
    Name    : Sender&lt;br /&gt;
    Version : 1&lt;br /&gt;
&amp;lt;/code&amp;gt;&lt;br /&gt;
[http://oss.linn.co.uk/trac/browser/Main/LibUpnpCil/Services/Openhome/Sender1.xml Sender Service Description (XML)]&lt;br /&gt;
&lt;br /&gt;
== Connecting ==&lt;br /&gt;
&lt;br /&gt;
In the OpenHome multicast protocol, receivers must be connected to senders in order to receive streaming audio. &lt;br /&gt;
&lt;br /&gt;
In order to connect and disconnect senders from receivers, there are two conceptual approaches you could take.  You can either order a particular receiver to play a particular sender, or you can order a sender to start sending to one or more receivers.  From a user perspective, these are very different approaches, however from an implementation standpoint, both of these are equivalent and are carried out by invoking the SetSender action on the receiver service, passing the Uri and Metadata of the sender (which can be obtained from the sender service metadata state variable).  This will bring the receiver to a state where it is ready to listen to the sender, and can be started/stopped by invoking the Play and Stop actions.  The Play action will automatically switch source on the receiving DS if this source is not currently selected.&lt;br /&gt;
&lt;br /&gt;
Both of these approaches, of course, first require maintaining an up-to-date list of senders and receivers from [[Developer#Topology|Topology]]:&lt;br /&gt;
&lt;br /&gt;
The receivers list is maintained by using [[Developer#Topology|Topology]] to watch sources being added/removed and checking whether the source has Type equal to &amp;quot;Receiver&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
The senders list is maintained via SSDP discovery of any sender services which do not have a status of disabled.&lt;/div&gt;</summary>
		<author><name>Keith</name></author>	</entry>

	<entry>
		<id>http://wiki.openhome.org/wiki/OhMedia:Developer</id>
		<title>OhMedia:Developer</title>
		<link rel="alternate" type="text/html" href="http://wiki.openhome.org/wiki/OhMedia:Developer"/>
				<updated>2011-04-28T14:11:10Z</updated>
		
		<summary type="html">&lt;p&gt;Keith: /* Discovering An OpenHome System */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Introduction =&lt;br /&gt;
&lt;br /&gt;
OpenHome Av is an independent standard for networked audio visual devices. OpenHome Av products all have a standard way of presenting themselves to the network. This makes it possible to write generic Control Point software that is able to control those products independent of manufacturer or specific features.&lt;br /&gt;
&lt;br /&gt;
The technologies associated with making this possible are grouped under the term OpenHome Av Topology.&lt;br /&gt;
&lt;br /&gt;
If a developer wishes to write generic software that participates in the aims described above, then they should write that software in a way that conforms to the strategies and algorithms of OpenHome Av Topology, which is described below&lt;br /&gt;
&lt;br /&gt;
= Topology =&lt;br /&gt;
&lt;br /&gt;
== Products ==&lt;br /&gt;
&lt;br /&gt;
An OpenHome installation consists of products from a variety of manufacturers each bearing the [[Developer:ProductService|Product service]].&lt;br /&gt;
&lt;br /&gt;
Amongst other information, each product has:&lt;br /&gt;
&lt;br /&gt;
* Room (user configurable, defaults to 'Main Room')&lt;br /&gt;
&lt;br /&gt;
* Name (user configurable, defaults to the model name)&lt;br /&gt;
&lt;br /&gt;
* Source Count (fixed according to the capabilities of the product)&lt;br /&gt;
&lt;br /&gt;
* List of Sources, each with its own Type, Name, and Visibility&lt;br /&gt;
&lt;br /&gt;
* Attributes, identifying additional functionality offered by the product&lt;br /&gt;
&lt;br /&gt;
== Proper Configuration ==&lt;br /&gt;
&lt;br /&gt;
The name of each product represents its audio output.&lt;br /&gt;
&lt;br /&gt;
The name of each source represents an audio input (either internal or external).&lt;br /&gt;
&lt;br /&gt;
In a properly configured system, if one product is connected to another using an audio cable, then the name of the product sending the audio should match the name of the source receiving the audio. It is by matching these names that a Control Point is able to select the correct input on, for instance, a preamp when a particular source is selected.&lt;br /&gt;
&lt;br /&gt;
== Discovering An OpenHome Av System ==&lt;br /&gt;
&lt;br /&gt;
The correct way to discover an OpenHome Av system is to:&lt;br /&gt;
&lt;br /&gt;
* search for all units bearing the Product service&lt;br /&gt;
&lt;br /&gt;
* subscribe to each Product service&lt;br /&gt;
&lt;br /&gt;
* group these products according to their Room.&lt;br /&gt;
&lt;br /&gt;
* collect the name of all the sources in each product&lt;br /&gt;
&lt;br /&gt;
* match the names of the sources to the names of the products to create a set of tree structures in each room.&lt;br /&gt;
&lt;br /&gt;
== Source Functionality ==&lt;br /&gt;
&lt;br /&gt;
To determine the kind of functionality available on each source, inspect its type.&lt;br /&gt;
&lt;br /&gt;
If it has type Playlist, it additionally contains the [[Av:Developer:PlaylistService|Playlist service]]&lt;br /&gt;
&lt;br /&gt;
If it has type Radio, it additionally contains the [[Av:Developer:RadioService|Radio service]]&lt;br /&gt;
&lt;br /&gt;
If it has type Receiver, it additionally contains the [[Av:Developer:ReceiverService|Receiver service]]&lt;br /&gt;
&lt;br /&gt;
== Volume Control ==&lt;br /&gt;
&lt;br /&gt;
Products that offer volume control include the Volume attribute and the [[Av:Developer:VolumeService|Volume service]]&lt;br /&gt;
&lt;br /&gt;
The primary volume control offered by a control point should be the one situated nearest the root in the tree structure that contains the current source.&lt;br /&gt;
&lt;br /&gt;
Control points may optionally provide the user with control of the volume of each product within the tree.&lt;br /&gt;
&lt;br /&gt;
== Now Playing Information ==&lt;br /&gt;
&lt;br /&gt;
Some mention of the [[Av:Developer:InfoService|Info service]]&lt;br /&gt;
&lt;br /&gt;
Some mention of the [[Av:Developer:TimeService|Time service]]&lt;br /&gt;
&lt;br /&gt;
== Multiroom Functionality ==&lt;br /&gt;
&lt;br /&gt;
Some mention of the [[Av:Developer:SenderService|Sender service]]&lt;br /&gt;
&lt;br /&gt;
Some mention of the [[Av:Developer:ReceiverService|Receiver service]]&lt;br /&gt;
&lt;br /&gt;
= Services =&lt;br /&gt;
&lt;br /&gt;
==== Product ====&lt;br /&gt;
[[Av:Developer:ProductService|Product service]]&lt;br /&gt;
&lt;br /&gt;
==== Playlist ====&lt;br /&gt;
[[Av:Developer:PlaylistService|Playlist service]]&lt;br /&gt;
==== Radio ====&lt;br /&gt;
[[Av:Developer:RadioService|Radio service]]&lt;br /&gt;
==== Info ====&lt;br /&gt;
[[Av:Developer:InfoService|Info service]]&lt;br /&gt;
==== Time ====&lt;br /&gt;
[[Av:Developer:TimeService|Time service]]&lt;br /&gt;
==== Volume ====&lt;br /&gt;
[[Av:Developer:VolumeService|Volume service]]&lt;br /&gt;
==== Sender ====&lt;br /&gt;
[[Av:Developer:SenderService|Sender service]]&lt;br /&gt;
==== Receiver ====&lt;br /&gt;
[[Av:Developer:ReceiverService|Receiver service]]&lt;/div&gt;</summary>
		<author><name>Keith</name></author>	</entry>

	</feed>