On this page:
start-media-file-server
media-file-server-url
media-file-server-publish!
media-file-server-unpublish!
media-file-server-stop!
5.1 Playing local files
9.2

5 Publishing Media Files🔗ℹ

 (require (file "../media-file-server.rkt")) package: base

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

(start-media-file-server url 
  [#:listen-ip listen-ip]) 
  media-file-server?
  url : string?
  listen-ip : (or/c #f string?) = #f
Starts a server for the HTTP origin and path prefix in url. The URL must be an absolute http:// URL. A trailing slash is added when needed.

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?
Returns the normalized base URL of 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
Publishes file at url and returns the absolute URL.

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?
Removes the URL mapping. Requests that are already in progress may still finish.

procedure

(media-file-server-stop! server)  void?

  server : media-file-server?
Stops the web server. Repeated calls have no effect.

5.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"))
 
(media-renderer-play-uri!
 renderer
 first-uri
 #:next-uri second-uri)

Keep the URLs published until the renderer has finished reading them.