Files
icecast-ripper/README.md
Dmitry Andreev b5f23a50b7
Some checks failed
CodeQL / Analyze (go) (push) Has been cancelled
Docker / build (push) Has been cancelled
golangci-lint / lint (push) Has been cancelled
Integrate MP3 duration extraction and silence handling (#6)
* 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
2025-04-13 15:56:22 +03:00

91 lines
2.6 KiB
Markdown

# 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
```bash
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
```yaml
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:
```bash
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:
```bash
git clone https://github.com/kemko/icecast-ripper.git
cd icecast-ripper
make build
```
## How It Works
1. The application checks if the specified Icecast stream is live
2. When the stream is detected as live, recording begins
3. Recording continues until the stream ends or is interrupted
4. Recordings are saved with timestamps in the configured directory
5. The RSS feed is automatically updated with new recordings
## License
This project is licensed under the MIT License - see the LICENSE file for details.