Der Music Player Daemon, kurz mpd, ist ein Dienst zum abspielen von Musik. Man möge sich nun fragen warum sollte ich den brauchen dazu noch als Dienst? Das schöne an dem Dienst ist das er so designed wurde das Programmlogik und Bedienung nicht fest mit einander gekoppelt sind. So ist es möglich das der Player von jedem Gerät im Netz fernbedienbar ist.
Die Ausgabe kann über den Audio-Ausgang des Rechners geschehen oder über den eingebauten HTTP-Server zu einem Client gestreamt werden.
Ich habe mein Cubietruck per Klinke am Verstärker angeschloßen und nutze einen der zahlreichen Clients um den mpd aus der ferne zu bedienen(MPDroid).
Im folgenden meine Config der /etc/mpd.conf:
# wo eure Musikdateien liegen music_directory "/music" playlist_directory "/var/lib/mpd/playlists" db_file "/var/lib/mpd/tag_cache" log_file "/var/log/mpd/mpd.log" pid_file "/var/run/mpd/pid" state_file "/var/lib/mpd/state" sticker_file "/var/lib/mpd/sticker.sql" # als benutzer <user> ausführen user "mpd" # auf IP ... lauschen any-> alle verfügbaren bind_to_address "any" port "6600" gapless_mp3_playback "yes" # mpd-datenbank allein aktualisieren auto_update "yes" # symlinks folgen aus dem verzeichnis bzw. innerhalb des verzeichnis follow_outside_symlinks "yes" follow_inside_symlinks "yes" # zugriffsschutz password "<euer password>@read,add,control,admin" default_permissions "read,add,control,admin" # hiermit kann der mpd auch http-streams verarbeiten input { plugin "curl" } # wie und wo soll die ausgabe erfolgen, hier 3,5mm Klinke des Cubietruck audio_output { type "alsa" name "My ALSA Device" } # mixer_type-> regelt die lautstärke # hardware -> regelt per hardware bedeutet alles wird leiser # software -> regelt lautstärke nur von eigener ausgabe # disabled -> nicht regelbar per "fernbedienung" mixer_type "software" # wie sollen die Dateinamen und ID3-Tags verarbeitet werden filesystem_charset "UTF-8" id3v1_encoding "UTF-8"
Ich habe noch eine kleine PHP-Datei mit einer SQLite DB gebaut in der ich youtube-Links abspeichere und so ich will direkt über die Oberfläche abspielen kann.
Am Ende wird nur die URL des Youtube-Links an ein Shellscript übergeben welche die URL des Streams an den mpd sendet. Es wird dafür „youtube-dl“ benötigt das Programm ist in Python geschrieben auf einen Debian/Ubuntu entweder per apt-get oder auch pip zu installieren.
mpc.sh:
#!/bin/bash ACTION= URL= MPCOPT="-h <IP of mpd>" if [ -z "$1" ] ; then echo "No option given."; exit 1; fi if [ "$1" == "add" ] || [ "$1" == "play" ] ; then if [ -z "$2" ] ; then echo "No URL given."; exit 1; fi URL=$2; fi ACTION=$1; if [ $ACTION == "add" ] ; then /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); fi if [ $ACTION == "play" ] ; then /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; fi exit 0;
Man beachte die Option welche mit youtube-dl an Youtube übergeben wird. Der mpd kann keine SSL-Streams verarbeiten jedenfalls nicht die von Youtube. Um Youtube endgültig zu überzeugen einen non-SSL Stream zu bekommen reicht es nicht aus „–prefer-insecure“ zu nutzen es muss auch der „richtige“ User-Agent gesetzt werden.