mirror of
https://github.com/kemko/icecast-ripper.git
synced 2026-01-01 15:55:42 +03:00
b5f23a50b7844e323e37e6a4986806323bf4daef
* feat: integrate MP3 duration extraction and silence handling - Added a new dependency on github.com/tcolgate/mp3 for MP3 frame decoding. - Implemented actual MP3 duration retrieval in the scanRecordings function, falling back to an estimation if retrieval fails. - Introduced a silent frame asset for generating silence in audio streams. - Created a silence reader to provide a continuous stream of silent frames. - Added necessary documentation and licensing for the new MP3 package. - Updated .gitignore to exclude MP3 files except for the internal data directory. * feat: update README and improve application configuration and logging * refactor: remove unused GenerateFileHash function and improve resource cleanup in MP3 and recorder modules
Icecast Ripper
A lightweight Go application that automatically monitors Icecast audio streams, records them when they go live, and serves recordings via an RSS feed for podcast clients.
Features
- Smart Stream Detection: Monitors Icecast streams and detects when they go live
- Automatic Recording: Records live streams to MP3 files with timestamps
- Podcast-Ready RSS Feed: Generates an RSS feed compatible with podcast clients
- Web Server: Built-in HTTP server for accessing recordings and RSS feed
- Containerized: Ready to run with Docker and Docker Compose
- Configurable: Easy configuration via environment variables
Quick Start
Using Docker
docker run -d \
--name icecast-ripper \
-p 8080:8080 \
-e STREAM_URL=http://example.com:8000/stream \
-v ./recordings:/recordings \
ghcr.io/kemko/icecast-ripper:latest
Using Docker Compose
services:
icecast-ripper:
image: ghcr.io/kemko/icecast-ripper:latest
ports:
- "8080:8080"
environment:
- STREAM_URL=http://example.com:8000/stream
- PUBLIC_URL=https://your-domain.com # For RSS feed links
volumes:
- ./recordings:/recordings
Running the Binary
Download the latest release and run:
export STREAM_URL=http://example.com:8000/stream
./icecast-ripper
Configuration
Configure Icecast Ripper with these environment variables:
| Variable | Description | Default | Required |
|---|---|---|---|
STREAM_URL |
URL of the Icecast stream to monitor | - | Yes |
CHECK_INTERVAL |
How often to check if the stream is live | 1m | No |
RECORDINGS_PATH |
Where to store recordings | ./recordings | No |
TEMP_PATH |
Where to store temporary files | /tmp | No |
BIND_ADDRESS |
HTTP server address:port | :8080 | No |
PUBLIC_URL |
Public URL for RSS feed links | http://localhost:8080 | No |
LOG_LEVEL |
Logging level (debug, info, warn, error) | info | No |
Endpoints
GET /rss- RSS feed of recordings (for podcast apps)GET /recordings/- Direct access to stored recordings
Building From Source
Requires Go 1.22 or higher:
git clone https://github.com/kemko/icecast-ripper.git
cd icecast-ripper
make build
How It Works
- The application checks if the specified Icecast stream is live
- When the stream is detected as live, recording begins
- Recording continues until the stream ends or is interrupted
- Recordings are saved with timestamps in the configured directory
- The RSS feed is automatically updated with new recordings
License
This project is licensed under the MIT License - see the LICENSE file for details.
Languages
Go
93.3%
Dockerfile
3.7%
Makefile
3%