shared media servers

This commit is contained in:
2026-08-28 15:56:19 +02:00
parent 2452e6fba3
commit 059a1e2668
5 changed files with 152 additions and 14 deletions
+84
View File
@@ -0,0 +1,84 @@
#lang racket/base
(require rackunit
racket/file
racket/tcp
racket-upnp
racket-upnp/private/model
"../main.rkt")
(define (available-port)
(let ((listener (tcp-listen 0 4 #t "127.0.0.1")))
(let-values (((_local-host port _remote-host _remote-port)
(tcp-addresses listener #t)))
(tcp-close listener)
port)))
(define (test-renderer id)
(upnp-device
id
"urn:schemas-upnp-org:device:MediaRenderer:1"
"Test renderer"
"Test"
"Test"
"1"
#f
"http://127.0.0.1/device.xml"
"127.0.0.1"
#f
'()
'()
(hash)))
(define port (available-port))
(define file (make-temporary-file "racket-audio-dlna-shared-~a.flac"))
(define server #f)
(define first-player #f)
(define second-player #f)
(dynamic-wind
(λ ()
(call-with-output-file
file
#:exists 'truncate
(λ (output)
(write-bytes #"test audio" output)))
(set! server
(start-media-file-server
(format "http://127.0.0.1:~a/media/" port)
#:listen-ip "127.0.0.1"))
(set! first-player
(make-dlna-player
(test-renderer "uuid:first")
#:media-file-server server
#:listen-ip "127.0.0.1"
#:poll-seconds 60))
(set! second-player
(make-dlna-player
(test-renderer "uuid:second")
#:media-file-server server
#:listen-ip "127.0.0.1"
#:poll-seconds 60)))
(λ ()
(dlna-player-close! first-player)
(set! first-player #f)
(define first-uri
(media-file-server-publish! server file "after-first.flac"))
(check-true (string? first-uri))
(media-file-server-unpublish! server first-uri)
(dlna-player-close! second-player)
(set! second-player #f)
(define second-uri
(media-file-server-publish! server file "after-second.flac"))
(check-true (string? second-uri))
(media-file-server-unpublish! server second-uri))
(λ ()
(when first-player
(dlna-player-close! first-player))
(when second-player
(dlna-player-close! second-player))
(when server
(media-file-server-stop! server))
(when (file-exists? file)
(delete-file file))))