Technischer Leitfaden
Diese Seite richtet sich an fortgeschrittene Nutzer und Integratoren: wie Tune aufgebaut ist, seine API und betriebliche Details. Für die alltäglichen Einstellungen siehe Konfiguration.
Architektur
- Server: ein einziges Programm,
tune-server, geschrieben in Rust. Es indiziert die Bibliothek, dekodiert Audio, steuert Geräte und liefert die Weboberfläche, die API und die Audiostreams aus, alles über einen Port (standardmäßig 8888). - Weboberfläche: eine Svelte-Anwendung, die vom Server ausgeliefert wird (der Ordner
web/neben dem Programm, oderTUNE_WEB_DIR). - Datenbank: standardmäßig SQLite, optional PostgreSQL (siehe Konfiguration). Migrationen laufen beim Start.
- Dekodierung: integrierte Decoder (Symphonia sowie die eigenen WavPack- und APE-Decoder von Tune und libopus). Das Resampling nutzt Sinc-Interpolation (rubato). Die Wiedergabe läuft nicht über ffmpeg; mit den veröffentlichten Builds wird ein minimales ffmpeg ausgeliefert, nur für die AAC-Kodierung des Konverters.
- Erkennung: SSDP für DLNA/UPnP, mDNS für AirPlay und Chromecast, Squeezebox-Erkennung auf UDP 3483.
- Tune tritt im Netzwerk außerdem als UPnP-Medienserver auf (seine Bibliothek ist für DLNA-Steuerungs-Apps sichtbar) und, Zone für Zone, als UPnP-Renderer.
HTTP-API
Alle Routen liegen unter /api/v1. Eine JSON-Liste der Routen wird unter GET /api/v1/system/api-docs bereitgestellt (der Link API-Dokumentation unter Einstellungen › System › Über). Tune stellt keine OpenAPI-Beschreibung bereit.
| Route | Zweck |
|---|---|
GET /api/v1/system/health | Serverzustand: ok oder degraded (HTTP 200), error (HTTP 503) |
GET /api/v1/system/version | Serverversion |
GET /api/v1/system/stats | Statistiken (vom Health-Check des Docker-Images verwendet) |
POST /api/v1/system/scan, GET /api/v1/system/scan/status | Einen Scan starten, seinen Fortschritt verfolgen |
GET /api/v1/system/logs?lines=N | Letzte Protokollzeilen (standardmäßig 1000) |
GET /api/v1/system/diagnostics/bundle | Diagnosearchiv |
GET /api/v1/zones | Liste der Zonen |
GET /api/v1/zones/{id}/status | Wiedergabestatus einer Zone |
POST /api/v1/zones/{id}/play, /pause, /resume, /stop, /next, /previous, /seek, /volume | Wiedergabebefehle |
GET /api/v1/zones/{id}/queue | Warteschlange |
GET /api/v1/search | Suche in der Bibliothek und in den Diensten |
GET /api/v1/library/albums, /artists, /tracks | Bibliothek |
Echtzeitereignisse (Wiedergabe, Warteschlange, Scan …) laufen über einen WebSocket unter /ws (oder /api/v1/ws). Die alten Routen /api/scan ohne v1 gibt es nicht mehr.
Authentifizierung
Die Authentifizierung ist standardmäßig ausgeschaltet, wodurch die API für das gesamte lokale Netzwerk offen ist. Sie wird über die API eingeschaltet (/api/v1/auth/config). Konten sind Tune-Profile, Passwörter werden mit Argon2 gehasht, und Sitzungen sind 24-Stunden-JWTs. Ein langlebiges API-Token wird mit POST /api/v1/auth/token ausgestellt. Akzeptierte Header: Authorization: Bearer <token> und Authorization: ApiKey <key>. Auch bei eingeschalteter Authentifizierung bleiben /system/health und /system/version öffentlich. Tune liefert kein HTTPS aus: Setzen Sie bei Bedarf einen Reverse-Proxy davor.
Squeezebox- / LMS-Kompatibilität
- Integrierter SlimProto-Server auf Port 3483 (TCP und UDP, konfigurierbar mit
TUNE_SLIMPROTO_PORT), für Squeezelite- und Squeezebox-Player. - LMS-kompatibler Text-Befehlsport auf 9090 (
TUNE_CLI_PORT), der zum nächsten freien Port wechselt, wenn 9090 belegt ist.
Betrieb
- .deb-Paket: Programm in
/opt/tune/, Daten in/var/lib/tune/, Konfiguration in/etc/default/tune-server(bleibt bei Upgrades erhalten), Unittune-server.service, die als Benutzertuneläuft.apt purgeentfernt/var/lib/tunenie. - Docker: Image
renesenses/tune(amd64, arm64). Es läuft als Nicht-Root-Benutzertune(uid 1000), mit den Volumes/dataund/music. Es enthält weder lokale Audioausgänge noch PostgreSQL. Unter arm64 ist AirPlay 2 nicht verfügbar, und Tune verwendet AirPlay 1. - Tune OS: auf Fedora basierend. Programm in
/opt/tune, Diensttune, Daten in/opt/tune/data, Port 80 auf 8888 weitergeleitet, SSH aktiviert (Root-Anmeldung verweigert). - Protokolle:
RUST_LOGerlaubt eine feine Filterung pro Modul.
Siehe auch
- Konfiguration: Variablen, Ports, Speicherorte
- OAAT: das Protokoll von Tune
- Tastenkürzel