asteroid/cl-streamer
Glenn Thompson e1be88a54a feat: Initial cl-streamer skeleton for CL-native streaming
- Architecture document outlining Icecast/Liquidsoap replacement
- Core streaming server with ICY metadata protocol support
- Thread-safe ring buffer for audio data
- Mount point abstraction with metadata updates
- Multi-client connection handling

This is experimental groundwork for integrating with Harmony/cl-mixed
and playlisp/parsector for a pure CL streaming solution.
2026-03-03 16:30:49 +03:00
..
README.org feat: Initial cl-streamer skeleton for CL-native streaming 2026-03-03 16:30:49 +03:00
buffer.lisp feat: Initial cl-streamer skeleton for CL-native streaming 2026-03-03 16:30:49 +03:00
cl-streamer.asd feat: Initial cl-streamer skeleton for CL-native streaming 2026-03-03 16:30:49 +03:00
cl-streamer.lisp feat: Initial cl-streamer skeleton for CL-native streaming 2026-03-03 16:30:49 +03:00
conditions.lisp feat: Initial cl-streamer skeleton for CL-native streaming 2026-03-03 16:30:49 +03:00
icy-protocol.lisp feat: Initial cl-streamer skeleton for CL-native streaming 2026-03-03 16:30:49 +03:00
package.lisp feat: Initial cl-streamer skeleton for CL-native streaming 2026-03-03 16:30:49 +03:00
stream-server.lisp feat: Initial cl-streamer skeleton for CL-native streaming 2026-03-03 16:30:49 +03:00

README.org

CL-Streamer

Overview

CL-Streamer is a Common Lisp audio streaming server designed to replace Icecast and Liquidsoap in the Asteroid Radio project.

Status

EXPERIMENTAL - This is an early proof-of-concept.

Features

  • HTTP streaming with ICY metadata protocol
  • Multiple mount points
  • Thread-safe ring buffers for audio data
  • Listener statistics

Dependencies

  • alexandria
  • bordeaux-threads
  • usocket
  • flexi-streams
  • chunga
  • log4cl
  • split-sequence

Optional (for audio backend):

  • harmony
  • cl-mixed
  • cl-mixed-mpg123

Quick Start

(ql:quickload :cl-streamer)

;; Create and start server
(cl-streamer:start :port 8000)

;; Add a mount point
(cl-streamer:add-mount cl-streamer:*server* "/stream.mp3"
                       :content-type "audio/mpeg"
                       :bitrate 128
                       :name "Asteroid Radio")

;; Update now-playing metadata
(cl-streamer:set-now-playing "/stream.mp3" "Artist - Track Title")

;; Write audio data (from encoder)
(cl-streamer:write-audio-data "/stream.mp3" encoded-mp3-bytes)

;; Check listeners
(cl-streamer:get-listener-count)

;; Stop server
(cl-streamer:stop)

Architecture

See docs/CL-STREAMING-ARCHITECTURE.org for the full design document.

License

AGPL-3.0