shared media servers
This commit is contained in:
@@ -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))))
|
||||
Reference in New Issue
Block a user