Navigation
Navigation
Der in dieser Anleitung verwendete Bot wird nicht mehr weiterentwickelt und es kann sein, dass die Anleitung nicht mehr funktioniert.
Es wird empfohlen, den Nachfolder des Bots zu verwenden. Eine Installationsanleitung dafür gibt es unter http://mumble-ruby-pluginbot.readthedocs.io/en/master/installation_howto.html.
Pro Mumble-Bot laufen je eine Instanz des MPD (Music Player Daemon), die Musik an eine Named Pipe schickt und ein Mumble-Ruby-Bot, der diesen Stream an den Mumble-Server sendet.
Das großartige daran ist, dass Mumble-Ruby seit kurzem Opus verwendet.
MPD spielt dabei eine definierte Playlist ab, die einzelne Stücke oder auch Radiosender enthalten kann.
Wieso gerade MPD und nicht z. B. mplayer? (anklicken zum Anzeigen):
Wieso gerade MPD und nicht z. B. mplayer? (anklicken zum Anzeigen):
Habe auch mit mplayer experimentiert, was mit entsprechenden Einstellunen auch funktioniert; z. B.
mplayer -ao pcm:file=/tmp/play.fifo -af resample=48000,channels=1 https://streamadresse.tld.
Doch einzelne Stücke lassen sich damit nicht abspielen, weil sich anscheinend mumble-ruby nur solange Musik holt, wie auch aktiv in die Pipe geschrieben wird; jedoch haut mplayer das so schnell wie möglich dort hinein und ist bei einem 2 Minuten Lied nach 10 Sekunden fertig. Nach dieser Zeit stoppt auch die Übertragung von mumble-ruby. Habe zu wenig Wissen um das fachlich zu erklären/verstehen.
Ausserdem beginnt mumble-ruby erst mit der Übertragung, wenn auch Daten anliegen, d. h. man muss mplayer und den Bot jedes Mal neu anweisen, etwas zu senden/lesen.
MPD hat hier den Vorteil, dass es wohl auch „Stille“ sendet, also immer etwas in der Pipe ist, man muss beides also nur einmalig starten und kann zwischendrin beliebig umschalten.
Wenn jemand weiss, wie man das mit mplayer oder einem anderen Programm besser machen kann, so möge er sich bitte melden :)
Mit dem Programm mpc kann man MPD steuern.
Alternativ lässt sic zum Steuern von MPD z. B. der Web-Client Rompr verwenden, diese wird jedoch hier nicht behandelt.
Um direkt die Möglichkeit zu haben, mehrere Bots laufen zu lassen, läuft die Konfiguration nach folgendem Schema ab:
Folgende Verzeichnisstruktur wird es am Ende dieser Anleitung geben:
/home/botmaster/ ├── mpd1 │ ├── playlists │ ├── mpd1.log │ ├── mpd.conf │ ├── mpd.fifo │ ├── pid │ ├── state │ ├── sticker.sql │ └── tag_cache ├── mumble-ruby │ └── [...] ├── music ├── scripts │ ├── mumble-ruby-mpd-bot.rb │ ├── start-all-mpd.sh │ └── start-all-mumble-ruby-bots.sh ├── user_certificates │ └── bot1_test_cert [...]
Unter Debian müssen folgende Abhängigkeiten als root oder mit sudo installiert werden:
apt-get install mpd mpc tmux bzip2 patch
Die Meldung am Ende über die fehlende Datenbank „/var/lib/mpd/tag_cache“ kann man ignorieren, diese wird später automatisch angelegt.
Da der System-weit installierte MPD nicht benötigt wird, deaktiviert man ihn, indem man als root oder mittels sudo in in der Datei /etc/default/mpd
die Variable START_MPD
von true nach false ändert; somit wird der Dienst beim nächsten Systemstart nicht mehr gestartet.
Siehe unter Mumble-Ruby installieren.
Ausgehend von der oben genannten Anleitung zur Installation von Mumble-Ruby führt man noch folgende Kommandos zur Vorbereitung aus:
su - botmaster
source ~/.rvm/scripts/rvm
rvm use @bots
Nun installiert man die benötigte Ruby-Bibliothek, damit Mumble-Ruby mpd steuern kann:
rvm @bots do gem install ruby-mpd
Ausgabe (anklicken zum Anzeigen):
Ausgabe (anklicken zum Anzeigen):
Fetching: ruby-mpd-0.3.1.gem (100%) Successfully installed ruby-mpd-0.3.1 Parsing documentation for ruby-mpd-0.3.1 Installing ri documentation for ruby-mpd-0.3.1 Done installing documentation for ruby-mpd after 1 seconds 1 gem installed
mkdir /home/botmaster/scripts
mkdir /home/botmaster/music
mkdir /home/botmaster/user_certificates
Verzeichnisse für Bot 1 erstellen:
mkdir -p /home/botmaster/mpd1/playlists
Konfiguration für Bot 1 herunterladen und an den richtigen Ort ablegen:
wget https://github.com/Natenom/mumble-ruby-related/raw/master/configs/mpd.conf -O ~/mpd1/mpd.conf
Für Bot 1 sind keine Anpassungen notwendig, für jeden weiteren Bot muss jedes Vorkommen der Zahl „1“ durch „2“, usw. ersetzt werden.
Weitere Erklärungen zur Konfiguration (anklicken zum Ansehen):
Weitere Erklärungen zur Konfiguration (anklicken zum Ansehen):
Angucken kann man sich die Datei hier.
Von den Standardeinstellungen für Sound abweichend verwendet man hier statt der Samplingrate von 44100 Hz eine von 48000 Hz, die auch bei Mumble verwendet wird. Außerdem brauchen wir nur ein Mono-Signal.
Der Mixer-Typ ist auf Software eingestellt, damit man im MPD-Clienten die Lautstärke auch ohne Soundkarte verändern kann.
Das folgende Script wird verwendet, um einen Bot auf den Server zu bringen und automatisch Musik von einer MPD-Instanz senden zu lassen.
Script herunterladen und am passenden Ort ablegen:
wget https://github.com/Natenom/mumble-ruby-related/raw/master/scripts/mumble-ruby-mpd-bot.rb -O ~/scripts/mumble-ruby-mpd-bot.rb
Das Script kann man hier ansehen. Es ist eine angepasste Version von einem der SuperTux's bots, die zusätzlich Parameter kennt.
Die Tastenkombination Strg+C beendet den Bot.
Syntax für das Script:
mumbleserver_host mumbleserver_port mumbleserver_username mumbleserver_userpassword mumbleserver_targetchannel quality_bitrate mpd_fifopath mpd_path mpd_host mpd_port
Für Bot 1:
ruby /home/botmaster/scripts/mumble-ruby-mpd-bot.rb mumble.natenom.com 64738 Bot1_Test "" "Sitzecke" 96000 /home/botmaster/mpd1/mpd.fifo localhost 7701
Ein Start würde jetzt natürlich noch nicht funktionieren, da MPD nicht läuft.
Vorsicht bei der Qualitätsangabe:
Wenn der Server nur eine beschränkte Bandbreite erlaubt 1), dann darf hier maximal die vom Mumble-Server erlaubte Qualität verwendet werden, denn Mumble-Ruby hält sich nicht an angegebene Beschränkungen und sendet mit eingestellter Bandbreite, was dann auf solchen Server dazu führt, dass die Bots beginnen zu stottern.
Erzeugtes Zertifikat:
Für jeden Benutzernamen wird beim Start des Scripts im aktuellen Arbeitspfad ein neues Verzeichnis namens BOTNAME_cert erstellt, welches das automatisch erstellte Client-Zertifikat des Bots enthält. Dieses Verzeichnis kann man nach dem Test löschen.
In die folgende Datei werden alle MPD-Instanzen eingetragen und dann gestartet:
Script herunterladen und am passenden Ort ablegen:
wget https://github.com/Natenom/mumble-ruby-related/raw/master/scripts/start-all-mpd.sh -O ~/scripts/start-all-mpd.sh
Dann muss man es noch ausführbar machen:
chmod u+x /home/botmaster/scripts/start-all-mpd.sh
Das folgende Bash-Script dient zum Starten aller Mumble-Ruby-Bots. Aufgrund der anfangs genannten Problematik, dass im Hintergrund gestartete Ruby-Scripte keine Musik senden, wird jeder Bot in einer eigenen TMUX-Sesssion gestartet.
Das Script herunterladen und am passenden Ort ablegen:
wget https://github.com/Natenom/mumble-ruby-related/raw/master/scripts/start-all-mumble-ruby-bots.sh -O /home/botmaster/scripts/start-all-mumble-ruby-bots.sh
Ansehen kann man das Script hier.
Es startet nur unseren ersten Bot 1; für weitere Bots einfach das Script entsprechend anpassen.
Das Script muss noch ausführbar gemacht werden:
chmod u+x /home/botmaster/scripts/start-all-mumble-ruby-bots.sh
Nun kann man alles testen, indem man beide Script nacheinander startet:
/home/botmaster/scripts/start-all-mpd.sh
/home/botmaster/scripts/start-all-mumble-ruby-bots.sh
Jetzt sollte sich auf dem Mumble-Server ein Bot befinden, der Musik von TheRadio.cc abspielt.
Vergiss nicht, im script „/home/botmaster/scripts/start-all-mumble-ruby-bots.sh“ die Daten für den Mumble-Server anzupassen, auch den Kanalnamen.
Damit bei einem Reboot alles automatisch startet, trägt man als root Folgendes in die /etc/rc.local ein:
su - botmaster -c "/home/botmaster/scripts/start-all-mpd.sh" & su - botmaster -c "/home/botmaster/scripts/start-all-mumble-ruby-bots.sh" &
Die Streams sind immer wieder abgebrochen, dies ist allerdings ein Problem von mpd; es hilft, wenn man in regelmäßigen Abständen per Cron einfach folgendes ausführt:
#!/bin/bash for i in $(seq 1 9); do mpc -p 770${i} play; done
In die crontab fügt man einfach folgende Zeile ein:
*/10 * * * * ./refreshmpd.sh
Keine Sorge, der Stream wird nicht neu gestartet, wenn man play ausführt, während der MPD sendet.