{"id":421,"date":"2015-08-04T18:54:43","date_gmt":"2015-08-04T16:54:43","guid":{"rendered":"http:\/\/grenzdebiel.no-ip.biz\/?p=421"},"modified":"2016-10-28T19:21:35","modified_gmt":"2016-10-28T17:21:35","slug":"mpd","status":"publish","type":"post","link":"https:\/\/blog.grenzdebiel.dynv6.net\/?p=421","title":{"rendered":"Music Player Daemon &#8211; Youtube"},"content":{"rendered":"<p>Der Music Player Daemon, kurz mpd, ist ein Dienst zum abspielen von Musik. Man m\u00f6ge sich nun fragen warum sollte ich den brauchen dazu noch als Dienst? Das sch\u00f6ne an dem Dienst ist das er so designed wurde das Programmlogik und Bedienung nicht fest mit einander gekoppelt sind. So ist es m\u00f6glich das der Player von jedem Ger\u00e4t im Netz fernbedienbar ist.<!--more--><\/p>\n<p>Die Ausgabe kann \u00fcber den Audio-Ausgang des Rechners geschehen oder \u00fcber den eingebauten HTTP-Server zu einem Client gestreamt werden.<\/p>\n<p>Ich habe mein Cubietruck per Klinke am Verst\u00e4rker angeschlo\u00dfen und nutze einen der zahlreichen Clients um den mpd aus der ferne zu bedienen(MPDroid).<\/p>\n<p>Im folgenden meine Config der <strong>\/etc\/mpd.conf<\/strong>:<\/p>\n<pre class=\"lang:ini decode:true \"># wo eure Musikdateien liegen\r\nmusic_directory         \"\/music\"\r\n\r\nplaylist_directory      \"\/var\/lib\/mpd\/playlists\"\r\ndb_file                 \"\/var\/lib\/mpd\/tag_cache\"\r\nlog_file                \"\/var\/log\/mpd\/mpd.log\"\r\npid_file                \"\/var\/run\/mpd\/pid\"\r\nstate_file              \"\/var\/lib\/mpd\/state\"\r\nsticker_file            \"\/var\/lib\/mpd\/sticker.sql\"\r\n\r\n# als benutzer &lt;user&gt; ausf\u00fchren\r\nuser                    \"mpd\"\r\n# auf IP ... lauschen any-&gt; alle verf\u00fcgbaren\r\nbind_to_address         \"any\"\r\nport                    \"6600\"\r\ngapless_mp3_playback    \"yes\"\r\n# mpd-datenbank allein aktualisieren\r\nauto_update             \"yes\"\r\n# symlinks folgen aus dem verzeichnis bzw. innerhalb des verzeichnis\r\nfollow_outside_symlinks \"yes\"\r\nfollow_inside_symlinks  \"yes\"\r\n\r\n# zugriffsschutz\r\npassword                \"&lt;euer password&gt;@read,add,control,admin\"\r\ndefault_permissions     \"read,add,control,admin\"\r\n\r\n# hiermit kann der mpd auch http-streams verarbeiten\r\ninput {\r\n        plugin \"curl\"\r\n}\r\n\r\n# wie und wo soll die ausgabe erfolgen, hier 3,5mm Klinke des Cubietruck\r\naudio_output {\r\n        type            \"alsa\"\r\n        name            \"My ALSA Device\"\r\n}\r\n\r\n# mixer_type-&gt; regelt die lautst\u00e4rke\r\n# hardware -&gt; regelt per hardware bedeutet alles wird leiser\r\n# software -&gt; regelt lautst\u00e4rke nur von eigener ausgabe\r\n# disabled -&gt; nicht regelbar per \"fernbedienung\"\r\nmixer_type               \"software\"\r\n\r\n# wie sollen die Dateinamen und ID3-Tags verarbeitet werden\r\nfilesystem_charset       \"UTF-8\"\r\nid3v1_encoding           \"UTF-8\"<\/pre>\n<p>Ich habe noch eine kleine PHP-Datei mit einer SQLite DB gebaut in der ich youtube-Links abspeichere und so ich will direkt \u00fcber die Oberfl\u00e4che abspielen kann.<\/p>\n<p>Am Ende wird nur die URL des Youtube-Links an ein Shellscript \u00fcbergeben welche die URL des Streams an den mpd sendet. Es wird daf\u00fcr &#8222;<strong>youtube-dl<\/strong>&#8220; ben\u00f6tigt das Programm ist in Python geschrieben auf einen Debian\/Ubuntu entweder per <em>apt-get<\/em> oder auch <em>pip<\/em> zu installieren.<\/p>\n<p><strong>mpc.sh:<\/strong><\/p>\n<pre class=\"lang:sh decode:true\">#!\/bin\/bash\r\n\r\nACTION=\r\nURL=\r\nMPCOPT=\"-h &lt;IP of mpd&gt;\"\r\n\r\nif [ -z \"$1\" ] ; then\r\n        echo \"No option given.\";\r\n        exit 1;\r\nfi\r\n\r\nif [ \"$1\" == \"add\" ] || [ \"$1\" == \"play\" ] ; then\r\n        if [ -z \"$2\" ] ; then\r\n                echo \"No URL given.\";\r\n                exit 1;\r\n        fi\r\n        URL=$2;\r\nfi\r\n\r\nACTION=$1;\r\n\r\nif [ $ACTION == \"add\" ] ; then\r\n         \/usr\/bin\/mpc $MPCOPT add $(\/usr\/local\/bin\/youtube-dl --prefer-insecure --user-agent 'Mozilla\/5.0 (Windows NT 6.1; WOW64; rv:24.0) Gecko\/20100101' -g -f140 $URL);\r\nfi\r\n\r\nif [ $ACTION == \"play\" ] ; then\r\n         \/usr\/bin\/mpc $MPCOPT clear;  \/usr\/bin\/mpc $MPCOPT add $( \/usr\/local\/bin\/youtube-dl --prefer-insecure --user-agent 'Mozilla\/5.0 (Windows NT 6.1; WOW64; rv:24.0) Gecko\/20100101' -g -f140 $URL); \/usr\/bin\/mpc $MPCOPT play;\r\nfi\r\n\r\nexit 0;\r\n<\/pre>\n<p>Man beachte die Option welche mit youtube-dl an Youtube \u00fcbergeben wird. Der mpd kann keine SSL-Streams verarbeiten jedenfalls nicht die von Youtube. Um Youtube endg\u00fcltig zu \u00fcberzeugen einen non-SSL Stream zu bekommen reicht es nicht aus &#8222;&#8211;prefer-insecure&#8220; zu nutzen es muss auch der &#8222;richtige&#8220; User-Agent gesetzt werden.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Der Music Player Daemon, kurz mpd, ist ein Dienst zum abspielen von Musik. Man m\u00f6ge sich nun fragen warum sollte ich den brauchen dazu noch als Dienst? Das sch\u00f6ne an dem Dienst ist das er so designed wurde das Programmlogik und Bedienung nicht fest mit einander gekoppelt sind. So ist es m\u00f6glich das der Player [&hellip;]<\/p>\n","protected":false},"author":3,"featured_media":426,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[43,27,9,12],"tags":[101,103,99,100,8,104,102],"class_list":["post-421","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-cubietruck","category-linux","category-raspberry-pi","category-software-pi","tag-cubietruck","tag-curl","tag-mpd","tag-music-player-daemon","tag-raspberry","tag-ssl","tag-youtube"],"_links":{"self":[{"href":"https:\/\/blog.grenzdebiel.dynv6.net\/index.php?rest_route=\/wp\/v2\/posts\/421","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/blog.grenzdebiel.dynv6.net\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/blog.grenzdebiel.dynv6.net\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/blog.grenzdebiel.dynv6.net\/index.php?rest_route=\/wp\/v2\/users\/3"}],"replies":[{"embeddable":true,"href":"https:\/\/blog.grenzdebiel.dynv6.net\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=421"}],"version-history":[{"count":2,"href":"https:\/\/blog.grenzdebiel.dynv6.net\/index.php?rest_route=\/wp\/v2\/posts\/421\/revisions"}],"predecessor-version":[{"id":490,"href":"https:\/\/blog.grenzdebiel.dynv6.net\/index.php?rest_route=\/wp\/v2\/posts\/421\/revisions\/490"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/blog.grenzdebiel.dynv6.net\/index.php?rest_route=\/wp\/v2\/media\/426"}],"wp:attachment":[{"href":"https:\/\/blog.grenzdebiel.dynv6.net\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=421"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blog.grenzdebiel.dynv6.net\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=421"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blog.grenzdebiel.dynv6.net\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=421"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}