6 Publishing Media Files
| (require racket-upnp/media-file-server) | |
| package: racket-upnp | |
This module publishes local files through a small Racket web server. The underlying Racket file dispatcher streams files and supports both HEAD requests and HTTP byte ranges. Byte ranges are important for media-renderer probing and seeking.
procedure
(media-file-server? value) → boolean?
value : any/c
procedure
(start-media-file-server url [ #:listen-ip listen-ip]) → media-file-server? url : string? listen-ip : (or/c #f string?) = #f
When listen-ip is #f, the server listens on all local interfaces. Supply a local address, such as 10.7.3.118, to restrict the listener to that interface.
procedure
(media-file-server-url server) → string?
server : media-file-server?
procedure
(media-file-server-publish! server file url [ #:mime-type mime-type]) → string? server : media-file-server? file : path-string? url : string? mime-type : (or/c #f bytes? string?) = #f
The URL may be relative to the server URL:
(define uri (media-file-server-publish! files "C:/muziek/test.flac" "test.flac"))
It may also be the complete URL, provided that its origin and path prefix match the server:
(media-file-server-publish! files "C:/muziek/test.flac" "http://10.7.3.118:8080/media/test.flac")
The MIME type is inferred for common audio, video, and image extensions. Use #:mime-type to override it.
procedure
(media-file-server-unpublish! server url) → void?
server : media-file-server? url : string?
procedure
(media-file-server-didl-lite server url [ #:title title #:artist artist #:album album #:genre genre #:year year #:track track #:duration duration #:id id #:parent-id parent-id]) → string? server : media-file-server? url : string? title : (or/c #f string?) = #f artist : (or/c #f string?) = #f album : (or/c #f string?) = #f genre : (or/c #f string?) = #f year : (or/c #f exact-nonnegative-integer?) = #f track : (or/c #f exact-nonnegative-integer?) = #f duration : (or/c #f nonnegative-real?) = #f id : string? = "0" parent-id : string? = "0"
Pass the result as #:metadata or #:next-metadata to the media-renderer functions. Supplying the duration is recommended because some renderers use it when deciding whether time seeking is available.
procedure
(media-file-server-stop! server) → void?
server : media-file-server?
6.1 Playing local files
(define files (start-media-file-server "http://10.7.3.118:8080/media/" #:listen-ip "10.7.3.118")) (define first-uri (media-file-server-publish! files "C:/muziek/first.flac" "first.flac")) (define second-uri (media-file-server-publish! files "C:/muziek/second.flac" "second.flac")) (define first-metadata (media-file-server-didl-lite files first-uri #:title "First track" #:duration 639)) (define second-metadata (media-file-server-didl-lite files second-uri #:title "Second track" #:duration 242)) (media-renderer-play-uri! renderer first-uri #:metadata first-metadata #:next-uri second-uri #:next-metadata second-metadata)
Keep the URLs published until the renderer has finished reading them.