Files
rkt-web-player/README.md
T
2026-08-27 10:49:28 +02:00

120 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 de huidige track, afspeeltoestand, verstreken
en totale tijd, decoderformaat en samplefrequentie. Op Windows kan de agent via
de optie onderaan actief blijven in het systeemvak wanneer het venster wordt
gesloten. Dubbelklik op het pictogram om het venster terug te halen; via het
contextmenu kan de agent volledig worden afgesloten. Hiervoor gebruikt de
agent de standaard Windows Forms-notificatiezone via de aanwezige Windows
PowerShell. Op andere platforms blijft de optie uitgeschakeld.
De eerste implementatie downloadt een geselecteerde track volledig naar een
tijdelijk bestand voordat `racket-audio` de weergave start. Daardoor is de
implementatie klein en zijn geen gedeelde mappen nodig, maar het starten van
grote bestanden kan merkbaar langer duren. Het tijdelijke bestand wordt bij de
volgende track of bij afsluiten verwijderd.
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
```