asteroid/cl-streamer
Glenn Thompson 6c15441a08 feat: Add MP3 and AAC encoder FFI bindings
- LAME FFI (lame-ffi.lisp) for MP3 encoding
- FDK-AAC FFI (fdkaac-ffi.lisp) for AAC encoding
- High-level encoder wrappers (encoder.lisp, aac-encoder.lisp)
- Fix compilation warnings in buffer.lisp and icy-protocol.lisp

Both encoders tested and loading successfully:
- LAME version: 3.101
- FDK-AAC: libfdk-aac.so.2

Next steps: Harmony integration for audio pipeline
2026-03-03 16:46:29 +03:00
..
README.org feat: Initial cl-streamer skeleton for CL-native streaming 2026-03-03 16:30:49 +03:00
aac-encoder.lisp feat: Add MP3 and AAC encoder FFI bindings 2026-03-03 16:46:29 +03:00
buffer.lisp feat: Add MP3 and AAC encoder FFI bindings 2026-03-03 16:46:29 +03:00
cl-streamer.asd feat: Add MP3 and AAC encoder FFI bindings 2026-03-03 16:46:29 +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
encoder.lisp feat: Add MP3 and AAC encoder FFI bindings 2026-03-03 16:46:29 +03:00
fdkaac-ffi.lisp feat: Add MP3 and AAC encoder FFI bindings 2026-03-03 16:46:29 +03:00
icy-protocol.lisp feat: Add MP3 and AAC encoder FFI bindings 2026-03-03 16:46:29 +03:00
lame-ffi.lisp feat: Add MP3 and AAC encoder FFI bindings 2026-03-03 16:46:29 +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