Asset UPnP auf FreeBSD

Asset UPnP auf FreeBSD

Linn hat sich bei ihren DS Netzwerkplayern wie meinem Klimax Renew DS um das gekümmert, was sie am besten können: Musik spielen. Für alles andere haben sie das Rad nicht neu erfunden, sondern auf das bereits vorhandene DLNA/UPnP-Protokoll gesetzt.

Man benötigt also einen Digital Media Server (DMS) im Netzwerk, der die digitale Musik bereitstellt sowie einen Digital Media Controller (DMC), mit dem man die Wiedergabe dann steuert.

Letzteres löst die Kinsky-Software von Linn recht gut (wenn auch nicht perfekt), die es kostenlos für Mac, Windows und iOS-Geräte gibt.

Für den Medienserver soll natürlich mein FreeBSD-Server herhalten, den ich ohnehin schon am Laufen habe, aber eine wirklich brauchbare DLNA/UPnP Lösung zu finden, die gut mit Audiodaten umgehen kann, ist nicht einfach:

  • MiniDLNA kommt nativ aus den FreeBSD Ports, stürzt aber ständig ab und überträgt keine Coverbilder, was den Spaß am Browsen der Sammlung deutlich mindert.
  • Twonky Media ist zwar ein Linux-Programm und kostet €15, läuft aber ohne großen Aufwand unter FreeBSD und ist halbwegs schnell aufgesetzt. Die Coverbilder werden teilweise angezeigt (nicht alle). Haken: Alles ist schnarchlangsam, vom Scannen der Medienverzeichnisse (damit könnte ich leben) bis zum Browsen durch die Ordner (damit nicht). Dazu kam bei mir ca. 1 Absturz pro Tag.
  • MediaTomb kommt auch aus den FreeBSD-Ports und glänzt durch eine brilliante Idee: Der Server integriert eine Javascript-Engine. Beim Scannen der Medienverzeichnisse wird für jede gefundene Datei ein eigenes, anpassbares Skript aufgerufen, das bestimmt, wo im Navigationsbaum das Medium verlinkt wird. Dieser Mechanismus funktioniert auch recht gut, man müsste sich nur die Zeit nehmen, die Skripten anzupassen. Großes Manko neben ca. einem Absturz pro Woche sind auch hier wieder die fehlenden Coverbilder.

Vermutlich wäre ich mangels besserer Alternativen bei Mediatomb hängengeblieben, hätte ich dann nicht durch Zufall entdeckt, dass es Asset UPnP inzwischen auch für Linux gibt. Vom selben Hersteller kommt auch dBpoweramp, ein ganz hervorragender CD-Ripper für Windows (Wenn man mal 1000+ CDs gerippt hat, weiß man das zu schätzen ;-) ).

Der Server läuft bisher unglaublich stabil und sehr sehr schnell, zeigt alle Coverbilder an und unterstützt dabei sogar Protokollerweiterungen von Linn wie skalierende Cover. Man merkt einfach, dass die Software auf das Verwalten von Audiofiles optimiert ist, Videos oder Bilder werden gar nicht erst übertragen. Dafür werden die Metadaten der Songs wirklich vernünftig ausgewertet und bisher kann ich nur feststellen, dass Asset UPnP hier als erster Mediaserver, den ich mir ansehe einfach alles einfach richtig[tm] macht. Der Navigationsbaum ist zwar nicht ganz so flexibel wie der von Mediatomb, aber dennoch hochgradig (und mit deutlich weniger Aufwand) konfigurierbar.

Die €22 für die Vollversion zahle ich mehr als gerne.

Installation

Die Installation ist eigentlich recht einfach und braucht nur ein wenig Kleber:

Zunächst braucht es eine minimale Linuxumgebung, falls nicht schon vorhanden. Dort hinein installieren wir den Tarball:

$ cd /usr/ports/emulators/linux_base-f10 && make install distclean
$ mkdir /compat/linux/asset
$ fetch -o - http://www.dbpoweramp.com/beta/Asset-Linux-x86.tar.gz | tar xf - -C /compat/linux/asset

Damit Asset UPnP beim Start seine En- und Decoder findet, muss man ein bisschen tricksen:

$ ln -s /compat/linux/asset/bin/encoder /compat/linux
$ ln -s /compat/linux/asset/bin/decoder /compat/linux

Der Autostart der Linux-ABI und des (noch zu erstellenden) AssetUPnP muss aktiviert werden:

$ echo 'linux_enable="YES" # enable linux ABI' >> /etc/rc.conf
$ echo 'assetupnp_enable="YES" # enable Asset UPnP server' >> /etc/rc.conf

Jetzt braucht es noch das passende Startup-Skript, das den Server starten und stoppen kann:

#!/bin/sh

# PROVIDE: assetupnp
# REQUIRE: DAEMON cleanvar linux
# BEFORE:  LOGIN
# KEYWORD: shutdown

. /etc/rc.subr

name=assetupnp
rcvar=assetupnp_enable
pidfile=/var/run/${name}.pid
pidfile_daemon=/var/run/${name}_daemon.pid

installdir=/compat/linux/asset
command=$installdir/bin/AssetUPnP
command_args="> /var/run/${name}.startup 2>&1"

start_cmd="assetupnp_start"
stop_cmd="assetupnp_stop"

assetupnp_start() {
  /usr/sbin/daemon -c -r -p ${pidfile} -P ${pidfile_daemon} ${command} ${command_args}
}

assetupnp_stop() {
  kill `cat ${pidfile_daemon}`
  sleep 1
  procs=`check_process ${command}`
  kill $procs
  wait_for_pids $procs
}

load_rc_config $name
run_rc_command "$1"

Jetzt sollte alles laufen:

$ service assetupnp start
Asset UPnP startup...
Version: Built on Feb 19 2014
Functionality: Trial 15 Days Remaining
Supported formats: .wav .bwf .m4a .mp4 .m4b .aac .opus .mp3 .mp2 .m2a .mpga .mpa .mpx .mpg .mp1 .mpeg .flac .ogg .oga .mpc .mpp .mp+ .wv .aif .aiff .aifc .w64
Starting Asset web interface at http://127.0.0.1:45537
Detected IP address:

Mit dem Browser bekommt man jetzt auf Port 45537 das Wartungsinterface von Asset UPnP.

Ein sauberer Shutdown funktioniert auch:

$ service assetupnp stop
Stopping UPnP service.
Waiting for PIDS: 72350 72351 72352 72354 72355.
© 2024 Tobias Henöckl