Natenoms Wiki

Weil Teilen Spaß macht :)

Benutzer-Werkzeuge

Webseiten-Werkzeuge


Seitenleiste

Übersetzungen dieser Seite:

Navigation



Lizenz dieses Wikis
Über dieses Wiki
Feed des Wikis
Impressum


Was gerade in meinem Blog geschieht:

mumble:audiobots:music_bot_mpd_mumble_jack

Musik-Bot für Mumble mit MPD und JACK

Zur Klärung

Was ist MPD ?

Der Music Player Daemon (MPD) ist ein Musik-Player, der Musik an verschiedenste Ausgaben senden kann, wie z. B. an Icecast, lokale Soundkarten, Jack, usw. Auch die Eingaben sind vielfältig, wie z. B. Icecast.

Um einen MPD zu steuern, gibt es viele verschiedene Clienten, eine vollständige Liste aller MPD-Clienten gibt es hier. Diese Clienten geben jedoch nicht direkt den Ton aus sondern dienen nur der reinen Steuerung.

Wieso Mumble mit Jack statt PulseAudio?

Es wird übrigens Jack verwendet weil Mumble in Verbindung mit Bots nicht immer zuverlässig einen PulseAudio-Ausgabekanal belegt. Jack ist hier zuverlässiger.

Vor allem aber ist die CPU-Belastung von Jack deutlich geringer, siehe hier.

Daher müssen wir uns Mumble aus den Quellen selbst kompilieren, um den Jack-Patch integrieren zu können.

Ziel dieser Anleitung

Benutzer in Mumble sollen Zugang zu einem wie auch immer gearteten Interface bekommen, um die Musik eines Mumble-Bots steuern zu können. Dazu gibt es auf dem Server einen Fundus an freier Musik.

Manche Benutzer bekommen direkten Zugang über das Netzwerk und können somit jeden MPD-Clienten verwenden (z. B. gmpc); andere erhalten Zugriff auf ein Web-Interface (Patchfork), über das man alles machen kann.

Alternativ können Benutzer mit SSH-Zugriff auf den Server direkt in der Serverkonsole das Programm ncmpcpp verwenden.

Es ist natürlich möglich, mit diesem Setup beliebig viele Kombinationen aus MPD und Mumble zu erstellen; dazu muss lediglich jedes Mumble ein eigenes Verezeichnis bekommen, siehe unter Mumble Portabel - Linux.

Auch MPD benötigt je ein eigenes Verzeichnis. Und es wird ein neues Startscript benötigt, welches hier noch hochgeladen wird.

Allgemein gesagt muss man bei jedem weiteren Bot folgende Dinge tun: MPD kopieren, Mumble kopieren, bei Mumble das Zertifikat löschen und per x11vnc einrichten lassen, dann in startall.sh einfach in die drei oberen Zeilen die Bots eintragen.

Verzeichnisstruktur nach der Einrichtung aller Dinge

/home/music/
/home/bot/mpd/
/home/bot/mumble/

Ablauf

Zuerst werden alle Dinge einzeln eingerichtet und zum Schluss wird dies alles in ein Script gegossen, was alle automatisch startet.

Voraussetzungen

  • Debian 7 (am besten auf einem Server)
  • eine Soundkarte auf dem Server wird nicht benötigt

Benötigte Leistung

Dieses Setup läuft hier in einer virtuellen Maschine (KVM), hat 160 MiB RAM und eine vCPU. Belegt sind nach dem Start ca. 102 MiB RAM. Die CPU-Belastung innerhalb der VM liegt dauerhaft bei ca. 10 %.

Installation

Benötigte Debian-Pakete installieren

apt-get -y install build-essential qt4-dev-tools libqt4-dev \
libspeex1 libspeex-dev libboost-dev libasound2-dev libssl-dev g++ \
libspeechd-dev libcap-dev libspeexdsp-dev \
libprotobuf-dev protobuf-compiler libogg-dev \
libavahi-compat-libdnssd-dev libsndfile1-dev libxi-dev \
git xvfb x11vnc libjack-jackd2-dev jackd2 openbox

Die Frage nach der Echtzeit Priorität für jackd2 kann man mit Nein beantworten.

MPD aus den Backports installieren

Wir benötigen eine neuere Version von MPD als die bei Debian 7 verfügbare. Dazu greifen wir zu den Backports.

Wie man Backports einbindet, steht detailiert unter https://backports.debian.org/Instructions/.

Im Prinzip reicht es aus, die folgende Zeile ans Ende der Datei /etc/apt/source.list anfügen:

deb https://ftp.de.debian.org/debian wheezy-backports main

Danach ein

apt-get update && apt-get -t wheezy-backports install mpd

Hinweis: Selbst kompilieren fällt weg, da mpd eine neuere Version der glib benötigt (>= 2.16).

Damit MPD nicht System-seitig läuft, ändert man die Datei /etc/default/mpd und setzt den Wert von START_MPD auf false.

Da bei der Installation direkt MPD gestartet wurde, beendet man es mit

service mpd stop

Benutzer bot und Musik-Verzeichnis erstellen

Um alles beisammen zu haben, erstellt man den neuen Benutzer „bot“:

adduser bot

Erstellung des Musik-Verzeichnisses

mkdir /home/music && chown bot /home/music

Alle weiteren Anweisungen in dieser Anleitung führt man nur noch als Benutzer „bot“ aus, indem man den Kontext wechselt:

su - bot

Jetzt wäre ein guter Zeitpunkt, etwas Musik ins Musik-Verzeichnis zu kopieren, wie auch immer man dies anstellen möchte.

Jack starten

Zur Ersteinrichtung muss der Jack-Server laufen:

jackd --no-realtime -d dummy >/dev/null 2>&1

Es wird der Treiber „dummy“ verwendet, damit man keine echte Soundkarte benötigt.

Xvfb starten

Da auf dem Linux-Server kein XServer läuft, benötigt man einen Fake-Bildschirm, den Mumble zur Darstellung nutzen kann; hier verwenden wir xvfb (X virtual frame buffer). In diesen Fake-Bildschirm kann man sich auch mit VNC einklinken.

Starten kann man diesen Fake-XServer mit:

Xvfb -screen 0 800x600x8 >/dev/null 2>&1 &

Damit ein gestartetes Programm später auf den virtuellen XServer zugreifen kann, wird es wie folgt gestartet:

DISPLAY=:0 programm

Dies ist später beim Start von Mumble relevant.

MPD einrichten und starten

Benötigte Verzeichnisse erstellen:

mkdir -p mpd/playlists

Konfiguration von MPD

Nachvolgend die vollständige Konfigurationsdatei mpd.conf, die man im Verzeichnis /home/bot/mpd/ erstellt oder direkt herunterlädt mit:

wget https://wiki.natenom.de/_export/code/mumble/audiobots/music_bot_mpd_mumble_jack?codeblock=12 -O ~/mpd/mpd.conf
mpd.conf
music_directory         "/home/music"
playlist_directory      "/home/bot/mpd/playlists"
db_file                 "/home/bot/mpd/tag_cache"
log_file                "/home/bot/mpd/mpd.log"
pid_file                "/home/bot/mpd/pid"
state_file              "/home/bot/mpd/state"
sticker_file            "/home/bot/mpd/sticker.sql"
bind_to_address         "localhost"
input {
        plugin "curl"
}
audio_output {       
       type    "jack"       
       name    "mpd_jack"     
       mixer_type      "software"
}
filesystem_charset              "UTF-8"
id3v1_encoding                  "UTF-8"

Der Mixer-Typ ist auf Software eingestellt, damit man im MPD-Clienten die Lautstärke auch ohne Soundkarte verändern kann.

Der Name (mpd_jack) hat nichts mit der Benennung der Jack-Ports zu tun sondern es ist der Name, wie er z. B. in MPC-Clienten als Ausgabe auftaucht.

MPD starten

cd && mpd mpd/mpd.conf

Die Meldung über die fehlende Datei tag_cache kann man ignorieren, sie wird automatisch angelegt.

Mumble installieren und konfigurieren

Mumble installieren

Mumble aus git holen:

git clone git://github.com/mumble-voip/mumble.git mumble

cd mumble && git submodule init && git submodule update

git checkout tags/1.2.8

wget "https://sourceforge.net/p/mumble/patches/_discuss/thread/1bfdbda2/a90e/attachment/mumble-jack-support.patch" -O mumble-jack-support.patch

git apply mumble-jack-support.patch

qmake CONFIG+="no-11x no-pulseaudio no-oss no-server pch no-bonjour no-g15 no-portaudio no-speechd opus jack packaged" main.pro -recursive

make -j3

#Jetzt befindet sich das startbare Mumble im Unterordner release.

Mumble konfigurieren

Mumble kann man erst einrichten, wenn Xvfb und Jack laufen.

Man muss Mumble anweisen, den entsprechenden Fake-XServer zu verwenden und kann ihn wie folgt starten:

cd && DISPLAY=:0 ./mumble/release/mumble >/dev/null 2>&1 &

Jetzt kann man auf dem Server x11vnc starten:

DISPLAY=:0 x11vnc >/dev/null 2>&1 &

Nun lauscht x11vnc auf dem Server auf Port 5900 an localhost. Damit man hierauf Zugriff erhält, verwendet man ssh von zuhause aus:

ssh -L 5900:localhost:5900 bot@server 'x11vnc -localhost -display :0'

Jetzt hat man auf seinem lokalen Rechner Zugriff auf den Port 5900, der auf den Server weitergeleitet wird und kann z. B. vncviewer starten:

vncviewer localhost

Jetzt kann man Mumble für einen Bot entsprechend einrichten, siehe unter Mumble-Einstellungen für Bots optimieren:

Wichtig ist jetzt, dass man Mumble nach der Konfiguration ordentlich beendet, da dann erst die Konfiguration gespeichert wird.

MPD mit einem Clienten steuern

Man sollte natürlich also in der Lage sein, sich mit MPD zu verbinden und einen bereits hochgeladenen Song abzuspielen.

Ich verwende z. B. gmpc über einen SSH-Tunnel mit folgendem Aufruf:

ssh -L 6600:localhost:6600 bot@serverip -N

Eine gute Anleitung zu gmpc gibt es unter https://wiki.ubuntuusers.de/GNOME_Music_Player_Client.

Jack-Ports miteinander verbinden

Der Aufbau der Verbindung mit Jack funktioniert nur dann, wenn MPD Musik abspielt, daher kann man den folgenden Schritt weglassen sich darauf verlassen, dass das später vorgestellt Script alles richtig macht :)

So verbindet man die „Ausgabe von MPD“ und die „Eingabe von Mumble“ miteinander:

jack_connect "mumble:input" "Music Player Daemon:left"

Wir nutzen übrigens nur einen Kanal, da der Sound sonst übersteuert ist.

Alles automatisieren

Jetzt, da alles eingerichtet ist, kann man beginnen, alle Vorgänge mit einem Bash-Script zu automatisieren, damit beim Start des Servers nur noch dieses Script ausgeführt werden muss, z. B. indem man es in /etc/rc.local einträgt.

Dazu gibt es ein Script, welches man entweder selbst einfügen kann oder sich herunterlädt mit

cd && wget https://wiki.natenom.de/_export/code/mumble/audiobots/music_bot_mpd_mumble_jack?codeblock=23 -O start.sh

In beiden Fällen muss man es danach noch ausführbar machen mit:

chmod a+x start.sh
start.sh
#!/bin/bash
#Start the Bot :)
 
killall -9 jackd
killall -9 Xvfb
killall -9 mumble
killall mpd
 
echo Sleeping 5 secs... #nur zur Sicherheit
sleep 5
 
echo Starting jackd...
jackd --no-realtime -d dummy >/dev/null 2>&1  & #Dummy-Ausgabe, da der Server keine Soundkarte hat
 
echo Sleeping 10 secs... #nur zur Sicherheit
sleep 10
 
echo Starting mpd...
mpd mpd/mpd.conf &
 
echo Starting Xvfb...
Xvfb -screen 0 800x600x8 >/dev/null 2>&1 &
 
sleep 5 #nur zur Sicherheit
 
echo Starting mumble
DISPLAY=:0 ./mumble/release/mumble mumble://mumble.natenom.com:64738 -m >/dev/null 2>&1 &
 
echo Sleeping 2 secs...
sleep 2
 
DISPLAY=:0 /usr/bin/openbox &
 
# Die folgende Schleife ist notwendig, um Mumble immer wiedermit dem Jack-Port von MPD zu verbinden, da diese Verbindung z. B. beendet wird, sobald man in MPD die Wiedergabe beendet.
while true;
  do
    jack_connect "mumble:input" "Music Player Daemon:left" >/dev/null 2>&1 
    sleep 5
  done

Automatisch mit dem Server starten

Nun loggt man sich als Benutzer bot ab, ist wieder root und fügt in die Datei /etc/rc.local vor der letzten Zeile „exit 0“ folgenden Text ein:

su - -c "./start.sh" mpd &

Damit wird alles beim Start des Server automatisch gestartet.

Fertig

Nun kann der Bot seinen Dienst verrichten :)

mumble/audiobots/music_bot_mpd_mumble_jack.txt · Zuletzt geändert: 2015/11/26 17:54 von Natenom