|
a/doc/upmpdcli.html |
|
b/doc/upmpdcli.html |
|
... |
|
... |
2 |
"http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
|
2 |
"http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
|
3 |
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
|
3 |
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
|
4 |
<head>
|
4 |
<head>
|
5 |
<meta http-equiv="Content-Type" content="application/xhtml+xml; charset=UTF-8" />
|
5 |
<meta http-equiv="Content-Type" content="application/xhtml+xml; charset=UTF-8" />
|
6 |
<meta name="generator" content="AsciiDoc 8.6.7" />
|
6 |
<meta name="generator" content="AsciiDoc 8.6.7" />
|
7 |
<title>Upmpdcli: an UPnP Renderer Front-End to the Music Player Daemon</title>
|
7 |
<title>Upmpdcli: MPD UPnP Renderer Front-End</title>
|
8 |
<style type="text/css">
|
8 |
<style type="text/css">
|
9 |
/* Shared CSS for AsciiDoc xhtml11 and html5 backends */
|
9 |
/* Shared CSS for AsciiDoc xhtml11 and html5 backends */
|
10 |
|
10 |
|
11 |
/* Default font. */
|
11 |
/* Default font. */
|
12 |
body {
|
12 |
body {
|
|
... |
|
... |
735 |
/*]]>*/
|
735 |
/*]]>*/
|
736 |
</script>
|
736 |
</script>
|
737 |
</head>
|
737 |
</head>
|
738 |
<body class="article">
|
738 |
<body class="article">
|
739 |
<div id="header">
|
739 |
<div id="header">
|
740 |
<h1>Upmpdcli: an UPnP Renderer Front-End to the Music Player Daemon</h1>
|
740 |
<h1>Upmpdcli: MPD UPnP Renderer Front-End</h1>
|
741 |
</div>
|
741 |
</div>
|
742 |
<div id="content">
|
742 |
<div id="content">
|
743 |
<div class="sect1">
|
743 |
<div id="preamble">
|
744 |
<h2 id="upmpdcli.intro">Introduction</h2>
|
|
|
745 |
<div class="sectionbody">
|
744 |
<div class="sectionbody">
|
746 |
<div class="paragraph"><p><strong>upmpdcli</strong> is an UPnP Media Renderer front-end to <strong>MPD</strong>, the Music Player
|
745 |
<div class="paragraph"><p><strong>upmpdcli</strong> is an UPnP Media Renderer front-end to <strong>MPD</strong>, the Music Player
|
747 |
Daemon. It turns <strong>MPD</strong> into an UPnP Media Renderer, supporting gapless
|
|
|
748 |
track transitions.</p></div>
|
|
|
749 |
<div class="paragraph"><p><strong>upmpdcli</strong> is open-source, free and licensed under the GPL. It is written
|
|
|
750 |
in C++ and uses the <strong>libupnp</strong> (1.6) and <strong>libmpdclient</strong> libraries.</p></div>
|
|
|
751 |
<div class="paragraph"><p>The typical setup is a home network with:</p></div>
|
|
|
752 |
<div class="ulist"><ul>
|
|
|
753 |
<li>
|
|
|
754 |
<p>
|
|
|
755 |
An UPnP media server (e.g. <strong>Minidlna</strong>, <strong>Mediatomb</strong>, or some commercial
|
|
|
756 |
device).
|
|
|
757 |
</p>
|
|
|
758 |
</li>
|
|
|
759 |
<li>
|
|
|
760 |
<p>
|
|
|
761 |
An UPnP control point (e.g. <strong>Audionet</strong> or <strong>Bubble UPnP</strong> running on a
|
|
|
762 |
tablet or phone).
|
|
|
763 |
</p>
|
|
|
764 |
</li>
|
|
|
765 |
<li>
|
|
|
766 |
<p>
|
|
|
767 |
<strong>MPD</strong> running on some Linux device (e.g. Raspberry PI hooked up to your
|
|
|
768 |
bedroom stereo).
|
|
|
769 |
</p>
|
|
|
770 |
</li>
|
|
|
771 |
<li>
|
|
|
772 |
<p>
|
|
|
773 |
<strong>upmpdcli</strong> running on any Linux computer on the network (the same as
|
|
|
774 |
<strong>MPD</strong> or not). It will be discovered by the UPnP control point in a
|
|
|
775 |
standard fashion.
|
|
|
776 |
</p>
|
|
|
777 |
</li>
|
|
|
778 |
</ul></div>
|
|
|
779 |
<div class="imageblock" style="float:right;">
|
|
|
780 |
<div class="content">
|
|
|
781 |
<img src="upmpdcli.png" alt="Basic flow" />
|
|
|
782 |
</div>
|
|
|
783 |
</div>
|
|
|
784 |
<div class="paragraph"><p>In this usage, <strong>MPD</strong> does not manage the audio files directly and its
|
|
|
785 |
configured music directory will typically be empty. It fetches them from
|
|
|
786 |
the Media Server through HTTP, using the <strong>curl</strong> input plugin, and does not
|
|
|
787 |
need a local tags database.</p></div>
|
|
|
788 |
<div class="paragraph"><p>When used with an appropriate control point, the <strong>upmpdcli</strong>/<strong>MPD</strong>
|
|
|
789 |
combination supports gapless playback.</p></div>
|
|
|
790 |
<div class="paragraph"><p><em>What’s the point ?</em> If you are running an UPnP network with multiple
|
|
|
791 |
devices, you may prefer to use a single control application (UPnP-based)
|
|
|
792 |
for everything. <strong>MPD</strong> is a very capable and robust music-playing application,
|
|
|
793 |
which runs well on small computers (e.g. Raspberry PI or other "plug" type
|
|
|
794 |
computers). However it needs a specific control application.</p></div>
|
|
|
795 |
<div class="paragraph"><p><strong>upmpdcli</strong> lets you control your <strong>MPD</strong>-based players with your UPnP control
|
|
|
796 |
point.</p></div>
|
746 |
Daemon.</p></div>
|
797 |
</div>
|
747 |
</div>
|
798 |
</div>
|
748 |
</div>
|
799 |
<div class="sect1">
|
749 |
<div class="sect1">
|
800 |
<h2 id="_configuration">Configuration</h2>
|
750 |
<h2 id="_configuration">Configuration</h2>
|
801 |
<div class="sectionbody">
|
751 |
<div class="sectionbody">
|
|
... |
|
... |
846 |
<td align="left" valign="top"><p class="table">-p mpdport</p></td>
|
796 |
<td align="left" valign="top"><p class="table">-p mpdport</p></td>
|
847 |
<td align="left" valign="top"><p class="table">$UPMPD_PORT</p></td>
|
797 |
<td align="left" valign="top"><p class="table">$UPMPD_PORT</p></td>
|
848 |
<td align="left" valign="top"><p class="table">mpdport</p></td>
|
798 |
<td align="left" valign="top"><p class="table">mpdport</p></td>
|
849 |
</tr>
|
799 |
</tr>
|
850 |
<tr>
|
800 |
<tr>
|
|
|
801 |
<td align="left" valign="top"><p class="table"><strong>MPD</strong> password</p></td>
|
|
|
802 |
<td align="left" valign="top"><p class="table"></p></td>
|
|
|
803 |
<td align="left" valign="top"><p class="table"></p></td>
|
|
|
804 |
<td align="left" valign="top"><p class="table">mpdpassword</p></td>
|
|
|
805 |
</tr>
|
|
|
806 |
<tr>
|
851 |
<td align="left" valign="top"><p class="table">Do we own the <strong>MPD</strong> queue and fearlessly clear it</p></td>
|
807 |
<td align="left" valign="top"><p class="table">Do we own the <strong>MPD</strong> queue and fearlessly clear it</p></td>
|
852 |
<td align="left" valign="top"><p class="table">-o 0/1</p></td>
|
808 |
<td align="left" valign="top"><p class="table">-o 0/1</p></td>
|
853 |
<td align="left" valign="top"><p class="table"></p></td>
|
809 |
<td align="left" valign="top"><p class="table"></p></td>
|
854 |
<td align="left" valign="top"><p class="table">ownqueue</p></td>
|
810 |
<td align="left" valign="top"><p class="table">ownqueue</p></td>
|
855 |
</tr>
|
811 |
</tr>
|
|
... |
|
... |
878 |
</div>
|
834 |
</div>
|
879 |
</div>
|
835 |
</div>
|
880 |
<div class="sect1">
|
836 |
<div class="sect1">
|
881 |
<h2 id="upmpdcli.boot">Boot time startup</h2>
|
837 |
<h2 id="upmpdcli.boot">Boot time startup</h2>
|
882 |
<div class="sectionbody">
|
838 |
<div class="sectionbody">
|
883 |
<div class="paragraph"><p><strong>upmpdcli</strong> will will try to change its <tt>uid</tt> to user <tt>upmpdcli</tt> if it is
|
839 |
<div class="paragraph"><p><strong>upmpdcli</strong> will try to change its <tt>uid</tt> to user <tt>upmpdcli</tt> if it is
|
884 |
started by root. It will refuse to run if the user does not exist.</p></div>
|
840 |
started by root. It will refuse to run if the user does not exist.</p></div>
|
885 |
<div class="paragraph"><p>If started by <tt>root</tt>, <strong>upmpdcli</strong> will also write its process id to
|
841 |
<div class="paragraph"><p>If started by <tt>root</tt>, <strong>upmpdcli</strong> will also write its process id to
|
886 |
<tt>/var/run/upmpdcli.pid</tt>.</p></div>
|
842 |
<tt>/var/run/upmpdcli.pid</tt>.</p></div>
|
887 |
<div class="paragraph"><p>There are boot-time startup scripts in the <tt>debian/</tt> directory inside the
|
843 |
<div class="paragraph"><p>There are boot-time startup scripts in the <tt>debian/</tt> directory inside the
|
888 |
source tree (for Debian/Ubuntu/Mint/Raspbian etc.). There is also a systemd
|
844 |
source tree (for Debian/Ubuntu/Mint/Raspbian etc.). There is also a systemd
|
|
... |
|
... |
912 |
</div>
|
868 |
</div>
|
913 |
</div>
|
869 |
</div>
|
914 |
<div id="footnotes"><hr /></div>
|
870 |
<div id="footnotes"><hr /></div>
|
915 |
<div id="footer">
|
871 |
<div id="footer">
|
916 |
<div id="footer-text">
|
872 |
<div id="footer-text">
|
917 |
Last updated 2014-03-28 14:47:32 CET
|
873 |
Last updated 2014-04-20 08:04:03 CEST
|
918 |
</div>
|
874 |
</div>
|
919 |
</div>
|
875 |
</div>
|
920 |
</body>
|
876 |
</body>
|
921 |
</html>
|
877 |
</html>
|