4.5 KiB
rkt-web-player
Een audioplayer met webinterface, gebouwd op de bestaande Racket-pakketten:
racket-audiovoor lokale weergave en metadata;racket-upnpenracket-sonosvoor ontdekking van netwerkspelers;racket-audio-dlnavoor het publiceren en afspelen van lokale bestanden;racket-mimetypes,simple-iniensimple-logvoor ondersteunende taken.
Starten
De gekoppelde ontwikkelpackages kunnen direct worden gebruikt:
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.
racket main.rkt --port 8090 --no-browser D:\Muziek D:\Podcasts
Met een klein INI-bestand zijn vaste defaults mogelijk:
[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:
racket player-agent.rkt
Dezelfde GUI kan vanuit een ander Racket-programma worden gestart:
#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
opent de agent het vooraf opgehaalde bestand direct bij decoder-EOF. Daardoor
blijven polling en netwerkvertraging buiten het tijdkritische audiopad en kan
racket-audio de volgende track achter de nog uitspelende uitvoerbuffer zetten.
De server wordt bijgewerkt zodra het nieuwe music-id werkelijk hoorbaar is en
stuurt vervolgens de daaropvolgende prefetch. 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
raco test private/library.rkt private/player.rkt
raco setup --check-pkg-deps rkt-web-player