39 lines
1.3 KiB
Common Lisp
39 lines
1.3 KiB
Common Lisp
(in-package #:cl-streamer)
|
|
|
|
(defvar *server* nil
|
|
"The global stream server instance.")
|
|
|
|
(defun ensure-server (&key (port *default-port*))
|
|
"Ensure a server instance exists, creating one if needed."
|
|
(unless *server*
|
|
(setf *server* (make-stream-server :port port)))
|
|
*server*)
|
|
|
|
(defun start (&key (port *default-port*))
|
|
"Start the streaming server with default configuration."
|
|
(let ((server (ensure-server :port port)))
|
|
(start-server server)))
|
|
|
|
(defun stop ()
|
|
"Stop the streaming server."
|
|
(when *server*
|
|
(stop-server *server*)))
|
|
|
|
(defun write-audio-data (mount-path data &key (start 0) (end (length data)))
|
|
"Write audio data to a mount point's buffer.
|
|
This is called by the audio pipeline to feed encoded audio."
|
|
(let* ((server (ensure-server))
|
|
(mount (gethash mount-path (server-mounts server))))
|
|
(when mount
|
|
(buffer-write (mount-buffer mount) data :start start :end end))))
|
|
|
|
(defun set-now-playing (mount-path title &optional url)
|
|
"Update the now-playing metadata for a mount point."
|
|
(let ((server (ensure-server)))
|
|
(update-metadata server mount-path :title title :url url)))
|
|
|
|
(defun get-listener-count (&optional mount-path)
|
|
"Get the current listener count."
|
|
(let ((server (ensure-server)))
|
|
(listener-count server mount-path)))
|