= upmpdcli Linn Songcast integration
The *upmdcli* UPnP front-end to MPD implements support for Linn Songcast with
help from the *sc2mpd* auxiliary process.
*_This only works with 16 bits sound for now. Don't try it with
anything else, there is a risk of strange noises !_*
== What is Songcast
Songcast is a protocol for transporting audio streams across the
network. This is independant from the UPnP framework which mostly deals
with URLs and audio files (usually, but not necessarily, compressed).
The streams transported by Songcast are actual real-time audio data, which
can go straight to an audio card for playing.
Controlling the streams on the renderer (connecting, starting, stopping) is
done through an UPnP service named OpenHome _Receiver_.
The typical use of Songcast is to have an audio driver on a Windows or OS X
desktop capture and forward the audio stream to a remote Songcast device.
Any application on the desktop will (be compelled to) transparently play to
the remote device, without need to know anything about Songcast.
== Implementation of Songcast support in upmpdcli
*upmpdcli* implements the _Receiver_ service, and uses an auxiliary process
(*sc2mpd*) for transporting the audio data. *sc2mpd* is a slight
modification of the sample program which comes with the Linn Songcast
open-source implementation, with the addition of an HTTP interface (based
on _libmicrohttpd_) to forward the data to *mpd*.
Setting up a connection happens as follows:
- If it finds an executable *sc2mpd* command in the PATH when starting up,
*upmpdcli* advertises a _Receiver_ service.
- The Songcast implementation from the desktop finds out about the
_Receiver_ through the normal UPnP mechanisms and can be instructed to
use it. It then tells the _Receiver_ in *upmpdcli* to start playing.
- *upmdpcli* starts the *sc2mpd* process, which gets ready to receive data
through Songcast, and make it available through HTTP.
- *upmpdcli* instructs *mpd* to play the URL for the *sc2mpd* output.
There is currently a 10-12 S delay between the connection request and the
moment the audio starts playing. This is not normal, but I could not find
the reason for it, so it's an unavoidable inconvenience at the moment.
== Configuration
No configuration is necessary by default: if *sc2mpd* is present,
*upmpdcli* will advertise the Songcast capability, and any host with a
Songcast sender installed should be able to use it.
However, you can set a number of values in the upmpdcli configuration file
(you *must* set the *upmpdcli* `-c` option for *sc2mpd* to see them, the
environment variable will not work):
sclogfilename::
Name of the file which will receive *sc2mpd* log messages. `stderr` by
default. This _can't be_ the same file used by *upmpdcli*.
scloglevel::
Log verbosity.
schttpport::
HTTP port used by *mpd* to connect to *sc2mpd*. 8888 by default. This must
be an available port on `localhost`, and it will only accept connections from
`localhost`.
sc2mpd::
Path for the *sc2mpd* executable file (e.g. `/usr/local/bin/sc2mpd`). Only
useful if *sc2mpd* was not installed to a location in the executable $PATH
set for the init scripts. Typically only `/bin` and `/usr/bin` are in
there.
== Building sc2mpd
There are two parts in building *sc2mpd*:
- Building the Openhome libraries
- Building *scmpd* proper
Building the Openhome libraries is a bit of a black art, and the sc2mpd
source comes with an *ohbuild.sh* script which will try to clone the
Openhome git repositories and build the libs:
mkdir /my/place/for/openhome
sh ohbuild.sh /my/place/for/openhome
Miscellaneous error messages will be displayed during the build. Hope for
the best...
When this is done, extract the source for sc2mpd, or clone the github
repository: http://www.github.com/medoc92/sc2mpd. The `autogen.sh` step (and
hence the autotools) is not needed for tar file extracts:
sh autogen.sh
./configure --prefix=/usr --with-openhome=/my/place/for/openhome
make
sudo make install
The build uses static libraries, so you can move the executable to another
machine without needing the openhome directory.
After restarting *upmpdcli*, it should advertise the _Receiver_ service and
appear in the Songcast Sender menus.
== Miscellaneous remarks
Songcast is probably best transported over a wired connection. If you are
doing this over WIFI and experiencing glitches, the wireless is the first
suspect.