- 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 |
||
|---|---|---|
| .. | ||
| README.org | ||
| aac-encoder.lisp | ||
| buffer.lisp | ||
| cl-streamer.asd | ||
| cl-streamer.lisp | ||
| conditions.lisp | ||
| encoder.lisp | ||
| fdkaac-ffi.lisp | ||
| icy-protocol.lisp | ||
| lame-ffi.lisp | ||
| package.lisp | ||
| stream-server.lisp | ||
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