Benutzer-Werkzeuge

Webseiten-Werkzeuge


Writing /srv/www/htdocs/udo/singollo.de/linux.singollo.de/public_html/data/cache/f/f449b160f0692c754c727ae446fe2464.metadata failed
scripts:streamen_mit_mpd

Streamen mit MPD

Ich beschreibe hier die Nutzung des MPDs als AutoDJ, insbesondere als Ergänzung zu Icecast-Streams (Webradio) von Nutzen.

Einrichtung des MPD

Ich gehe hier nicht auf alle Optionen des MPDs ein, dafür gibt es zuviele gute Anleitungen im Netz (z.B. wiki.ubuntuusers.de.

Im ersten Teil der Konfiguration werden die globalen Einträge eingetragen, der zweite Teil behandelt die Audio-Streams.

Global

music_directory                 "/srv/media/AutoDJ"
playlist_directory              "/var/lib/mpd/playlists"
db_file                         "/var/lib/mpd/mpd.db"
#log_file                       "/var/log/mpd.log" 
pid_file                        "/var/lib/mpd/mpd.pid"
bind_to_address                 "::"
port                            "6600"
log_level                       "default"
mixer_type                      "software"
id3v1_encoding                  "ISO-8859-1"
audio_buffer_size               "512"
buffer_before_play              "3%"
filesystem_charset              "UTF-8"

MPD streamt selbst

audio_output {
    type            "httpd"
    name            "MPD HTTP Stream"
    encoder         "lame"          # optional, vorbis oder lame
    port            "8000"
#   quality         "5.0"           # entweder
    bitrate         "128"           # oder
    max_clientes    "10"
}

MPD leitet an Icecast weiter

audio_output {
    type        "shout"
    encoding    "mp3"
    name        "Auto DJ"
    host        "127.0.0.1"
    port        "8000"
    mount       "/auto"
    password    "xxxxxxxx"
    bitrate     "64"
    format      "44100:16:2"
    user        "source"
    description "Stream"
}

MPD und Alsa

audio_output {
    type "alsa"
    name "Aureon 7.1 USB"
    device "analog"
}

Null-Device

Dieser Teil der Konfiguration muss bei Streams verwendet werden, wenn parallel keine Ausgabe über eine Soundkarte erfolgt.

audio_output {
    type "null"
    name "Null Output"
    mixer_type "none"                  # optional
}

AutoDJ

Normalerweise spielt der MPD die Musikdateien aus dem angegebenen Verzeichnis oder wird mit einer Playlist gefüttert. Damit man wechselnde Playlisten für den AutoDJ erstellen kann, kopiert man Musikdateien im MP3- oder OGG-Format in das angegebene Verzeichnis und ruft das unten stehende Script auf.

autodj.sh update

Das Script durchstöbert das Verzeichnis, normalisiert die Lautstärke und nennt die MP3-Dateien nach den Tags. Danach kann der MPD mit der neuen Playlist gefüttert werden.

autodj.sh start

Das Stoppen des MPDs über

autodj.sh stop

führt nicht zum Anhalten des MPDs, sondern lädt eine feste Playlist, welche nur eine Datei mit Stille enthält. Dieser Trick diente mir dazu, um eine Pause zwischen zwei externen Streams (z.B. Übergabeverzögerung bei DJ-Wechsel im Webradio) zu überbrücken und den Stream nicht zu verlieren. Icecast kennt dazu die Option „fallback-mount“.

#!/bin/sh
 
PLAYLIST=/var/lib/mpd/playlists/autodj.m3u
DIR=/srv/media/AutoDJ
 
MPC=`which mpc`
NORMALIZE=`which normalize`
EYED3=/usr/local/bin/eyeD3
VORBISGAIN=`which vorbisgain`
ID3V2=`which id3v2`
 
if [ ! -d $DIR ]; then
        echo "Directory for AutoDJ not found"
        exit 1
fi
 
mp3 () {
        find "$1" -type f -iname '*.mp3' |
        while read file; do
                #$ID3V2 -d -C "$file"
                if [ "$NORMALIZE" != "" -a -x "$NORMALIZE" ]; then
                        $NORMALIZE -q -a -10db "$file";
                fi
                if [ "$EYED3" != "" -a -x "$EYED3" ]; then
                        $EYED3 --rename="%A-%t" --to-v2.4 --fs-encoding=UTF8 "$file" >/dev/null
                fi
        done;
}
 
ogg () {
        find "$1" -type f -iname '*.ogg' |
        while read file; do
                ARTIST=`ogginfo "$file" | grep -i "ARTIST=" | awk -F= '{print $2}'`
                TITLE=`ogginfo "$file" | grep -i "TITLE=" | awk -F= '{print $2}'`
                if [ ! -f "$1/$ARTIST - $TITLE.ogg" ]; then
                        if [ "$VORBISGAIN" != "" -a -x "$VORBISGAIN" ]; then
                                $VORBISGAIN -q -g -10 "$file"
                        fi
                        mv "$file" "$1/$ARTIST - $TITLE.ogg"
                fi
        done;
}
 
case $1 in
        -update)
                if [ -f $PLAYLIST ]; then
                        rm $PLAYLIST
                fi
                mp3 $DIR
                ogg $DIR
                find $DIR -type f \( -iname '*.mp3' -o -iname '*.ogg' \)  -exec basename {} \; > $PLAYLIST
                echo "found `/usr/bin/grep -c "" $PLAYLIST` songs for playlist autodj..."
                $MPC update
                ;;
        -start)
                $MPC crop
                $MPC load autodj
                $MPC play 2
                $MPC del 1
                ;;
        -stop)
                $MPC crop
                $MPC load quiet
                $MPC current --wait
                $MPC playlist | /usr/bin/grep -c "" | /usr/bin/xargs $MPC play
                $MPC del 1
                ;;
esac
scripts/streamen_mit_mpd.txt · Zuletzt geändert: 25.01.2015 14:55 von udo