ohMedia defines the following network services:
- Product. The core of a renderer and the only mandatory service. The state of this service allows control points to infer which other services are present on a device. In more complex installations it allows devices to mapped into a multi-room hi-fi system
- Playlist. An ordered list of tracks to be played.
- Radio. Browse and select from a list of favourite internet radio, podcast and listen again presets.
- Info. Report information about currently playing track.
- Time. Report information about progress through a track.
- Volume. Control volume on a renderer or a connected pre-amp.
- Sender. Indicate presence and state of a Songcast sender.
- Receiver. Control a Songcast receiver.
- NetworkMonitor. Measures network performance.
- PlaylistManager. Included in media servers. Allows playlists to be shared between renderers and saved for future reuse.
All ohMedia products publish and/or consume network services using UPnP. This is enabled by ohNet - a cross-platform UPnP stack suitable for use in control points and devices. ohNet is stable and intended for external use.
Songcast enables synchronised playing of audio from an unbounded number of ohMedia renderers. Audio can be sent from an ohMedia renderer or from a desktop computer using the Songcast application.
The ohSongcast github repo provides a cross-platform C++ library offering much of the code needed to write a songcast sender. The Songcast protocols are also documented:
ohMedia models a home as a number of hi-fi systems, which are located in rooms.
A hi-fi system is modelled 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 at least one output and any number of inputs.
A product is modelled through the Product service specification.
When a control point wants to construct a model of a user's home they use the Topology algorithm:
- discover all the products in the home that have a Product service
- group the discovered products based on the room they are in
- create a hierarchical tree structure by matching source names to product names *
- discover source functionality based on source type
- discover additional functionality based on product attributes
e.g. if we had two products, a pre-amp and a media renderer which were connected together then both their Product services would return the same room name and one of the source names returned by the pre-amp's Product service would be the same as the product name returned by the media renderer's Product service. Example implementation of the Topology algorithm are available in C# and C++ from the ohTopology github repo.