121 lines
4.3 KiB
Markdown
121 lines
4.3 KiB
Markdown
# rkt-web-player
|
|
|
|
Een audioplayer met webinterface, gebouwd op de bestaande Racket-pakketten:
|
|
|
|
- `racket-audio` voor lokale weergave en metadata;
|
|
- `racket-upnp` en `racket-sonos` voor ontdekking van netwerkspelers;
|
|
- `racket-audio-dlna` voor het publiceren en afspelen van lokale bestanden;
|
|
- `racket-mimetypes`, `simple-ini` en `simple-log` voor ondersteunende taken.
|
|
|
|
## Starten
|
|
|
|
De gekoppelde ontwikkelpackages kunnen direct worden gebruikt:
|
|
|
|
```console
|
|
racket main.rkt D:\Muziek
|
|
```
|
|
|
|
Standaard opent de speler `http://127.0.0.1:8080/`. Iedere opgegeven map wordt
|
|
een afzonderlijke muziekbibliotheek. Bij het starten wordt alleen de inhoud van
|
|
de eerste rootmap gelezen; er vindt geen recursieve bibliotheekscan plaats.
|
|
|
|
```console
|
|
racket main.rkt --port 8090 --no-browser D:\Muziek D:\Podcasts
|
|
```
|
|
|
|
Met een klein INI-bestand zijn vaste defaults mogelijk:
|
|
|
|
```ini
|
|
[server]
|
|
listen-ip=127.0.0.1
|
|
port=8080
|
|
|
|
[player]
|
|
dlna-port=8734
|
|
|
|
[library]
|
|
paths=D:\Muziek;D:\Podcasts
|
|
```
|
|
|
|
Start dat bestand met `racket main.rkt --config rkt-web-player.ini`. Meerdere
|
|
bibliotheekpaden worden met een puntkomma gescheiden.
|
|
|
|
## Werking
|
|
|
|
De interface volgt de informatiearchitectuur van `rktplayer`, maar is
|
|
responsive en geschikt voor muis, toetsenbord en touch. Links staat de lazy
|
|
mappenbrowser met trackinformatie; rechts staan playlisttabs en de huidige
|
|
playlist. Een map wordt pas recursief gelezen wanneer die met **afspelen** of
|
|
**toevoegen** wordt gekozen. Trackmetadata wordt eveneens pas op dat moment
|
|
geladen.
|
|
|
|
De webinterface praat met een kleine JSON-API onder `/api`. Lokale weergave
|
|
wordt pas geïnitialiseerd bij het eerste afspeelcommando. De knop naast de
|
|
uitvoerkeuze start UPnP-discovery; gevonden Sonos-zones worden als logische
|
|
groepen aangeboden en niet nogmaals als losse UPnP-renderers.
|
|
|
|
Playlisttabs kunnen worden toegevoegd, geselecteerd, hernoemd door dubbel te
|
|
klikken en verwijderd. Tracks kunnen worden afgespeeld, verwijderd en met
|
|
drag-and-drop verplaatst. De tabs zijn in deze versie alleen in het geheugen
|
|
aanwezig en worden niet na een herstart hersteld.
|
|
|
|
De server luistert standaard alleen op localhost. Geef alleen bewust een
|
|
LAN-adres aan `--listen-ip`; de huidige opzet bevat geen authenticatie.
|
|
|
|
## Windows playback agent
|
|
|
|
Een lichte playback agent kan op een Windows-laptop draaien en meldt zichzelf
|
|
via HTTP bij de centrale RKT Web Player aan. De agent opent geen inkomende
|
|
netwerkpoort. Hij pollt de server voor opdrachten en rapporteert daarbij zijn
|
|
actuele afspeelstatus.
|
|
|
|
Start vanuit de broncode:
|
|
|
|
```console
|
|
racket player-agent.rkt
|
|
```
|
|
|
|
Dezelfde GUI kan vanuit een ander Racket-programma worden gestart:
|
|
|
|
```racket
|
|
#lang racket/base
|
|
|
|
(require rkt-web-player/player-agent)
|
|
|
|
(run-player-agent)
|
|
```
|
|
|
|
De GUI bewaart de server-URL, de gekozen naam en een eenmalig gegenereerde
|
|
256-bit applicatie-ID in `rkt-web-player-agent.ini` in de gebruikersspecifieke
|
|
Racket-configuratiemap. Vul als server bijvoorbeeld `http://192.168.1.10:8080`
|
|
in. De naam wordt in dezelfde agent-GUI ingesteld. Na registratie verschijnt
|
|
de agent met die naam als uitvoer van type `AGENT`; de server volgt latere
|
|
naamswijzigingen bij registratie en polling.
|
|
|
|
Onder **Afspelen** toont de agent het playlistnummer, de huidige track en
|
|
bestandsnaam, afspeeltoestand, verstreken en totale tijd, bitdiepte,
|
|
samplefrequentie, kanaalaantal en decoderformaat.
|
|
|
|
Een geselecteerde track wordt volledig naar een tijdelijk bestand gedownload
|
|
voordat `racket-audio` de weergave start. Tijdens het afspelen stuurt de server
|
|
al een `prefetch`-opdracht voor de volgende playlisttrack. De agent bewaart
|
|
daardoor maximaal het huidige en het volgende bestand lokaal. Bij de overgang
|
|
kan het vooraf opgehaalde bestand direct worden geopend zonder opnieuw over
|
|
het LAN te worden gedownload. Tijdelijke bestanden worden opgeruimd zodra ze
|
|
niet meer nodig zijn en bij afsluiten van de agent.
|
|
|
|
Een systeemvakfunctie is voorlopig niet opgenomen. De agent start geen
|
|
PowerShell-proces of andere externe tray-helper.
|
|
|
|
De applicatie-ID identificeert de agent en begrenst toegang tot zijn tijdelijke
|
|
media-URL, maar vervangt geen transportbeveiliging of authenticatie. Gebruik de
|
|
agent en server alleen op een vertrouwd LAN zolang de HTTP-server geen TLS en
|
|
gebruikersauthenticatie heeft.
|
|
|
|
## Controleren
|
|
|
|
```console
|
|
raco test private/library.rkt private/player.rkt
|
|
raco setup --check-pkg-deps rkt-web-player
|
|
```
|