Release: v3.1.0
Build Release Docker Image / build-amd64 (release) Successful in 6s
Build Release Docker Image / build-arm64 (release) Successful in 10s
Build Release Docker Image / publish-release-manifest (release) Successful in 6s

This commit is contained in:
Patrick Asmus
2026-09-16 20:22:34 +02:00
parent ce1ccb91bb
commit a9a9a89cba
26 changed files with 552 additions and 332 deletions
Binary file not shown.

After

Width:  |  Height:  |  Size: 50 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 41 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 32 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 39 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 58 KiB

+15
View File
@@ -2,14 +2,29 @@
## Aktive Aufnahmen
![Dashboard Übersicht](assets/img1_dashboard.png)
Das Dashboard zeigt alle laufenden Aufnahmen mit:
- Laufzeit
- Dateigröße
- Verbleibende Zeit (bei Zeitlimit)
- Segment-Anzahl (bei Segment-Splitting)
## Letzte Aufnahmen
Unterhalb der aktiven Aufnahmen zeigt das Dashboard die letzten abgeschlossenen Aufnahmen. Per Klick auf eine Aufnahme wird eine Detailansicht ausgeklappt mit:
- **Status** — abgeschlossen, gestoppt oder Fehler (inkl. Fehlermeldung)
- **Start- und Endzeit**
- **Dauer und Dateigröße**
- **Plik-URL** — Direkter Link zum Download, falls die Aufnahme zu Plik hochgeladen wurde
- **Dateipfad** — Lokaler Pfad zur Aufnahmedatei (sofern nicht nach Upload gelöscht)
- **Stream-URL**
## Aufnahme verlängern
![Aufnahme verlängern](assets/img5_rec.png)
Laufende Aufnahmen können verlängert werden:
- **+15 / +30 / +60 / +120 Minuten** — Schnellauswahl
- **Eigene Dauer** — Beliebige Minutenzahl eingeben
+36 -2
View File
@@ -1,5 +1,7 @@
# Jobs
![Jobs](assets/img2_jobs-overview.png)
Jobs sind vorkonfigurierte Aufnahme-Vorlagen. Jeder Job definiert einen Stream, optional einen Zeitplan und Plugin-Einstellungen.
## Job erstellen
@@ -17,6 +19,8 @@ Im Web-UI unter **Jobs → + Neuer Job**.
| Feld | Beschreibung |
|------|-------------|
| **Senderbibliothek** | Sender aus der Bibliothek auswählen — URL und Typ werden übernommen |
| **Beschreibung** | Freitext-Notiz zum Job (wird auch in NTFY-Nachrichten mitgeschickt) |
| **Typ** | Automatisch erkannt aus URL. Manuell wählbar: RTMP, HLS, MP3, AAC, OGG, HTTP |
| **Ausgabeformat** | Dateiendung. Leer = automatisch (mp4 für Video, mp3 für Audio) |
| **Max. Dauer** | Zeitlimit in Minuten. Entfällt bei Zeitplan mit Endzeit |
@@ -30,7 +34,8 @@ Aktiviert automatische Aufnahmen zu festgelegten Zeiten.
| Feld | Beschreibung |
|------|-------------|
| **Einmalig** | Nur einmal am angegebenen Datum ausführen |
| **Datum** | Datum für einmalige Aufnahme |
| **Startdatum** | Datum für einmalige Aufnahme |
| **Enddatum** | Enddatum für mehrtägige Aufnahmen (leer = gleicher Tag) |
| **Tage** | Wochentage: `*` (täglich), `Mo-Fr`, `Sa,So`, `Mo,Mi,Fr` |
| **Startzeit** | Aufnahme-Beginn (HH:MM) |
| **Endzeit** | Aufnahme-Ende (HH:MM) — Dauer wird automatisch berechnet |
@@ -49,10 +54,39 @@ Wenn Start- und Endzeit gesetzt sind, wird die Aufnahmedauer automatisch berechn
Unterstützt: `Mo/Mon/Montag`, `Di/Tue/Dienstag`, `Mi/Wed/Mittwoch`, `Do/Thu/Donnerstag`, `Fr/Fri/Freitag`, `Sa/Sat/Samstag`, `So/Sun/Sonntag`
### Zeitpuffer
![Zeitpuffer](assets/img4_buffer.png)
Pro Job können Vor- und Nachlaufzeit konfiguriert werden, um die Aufnahme um den geplanten Zeitraum herum zu erweitern:
| Feld | Beschreibung |
|------|-------------|
| **Vorlaufzeit** | Aufnahme startet X Minuten vor der geplanten Startzeit |
| **Nachlaufzeit** | Aufnahme läuft X Minuten über die geplante Endzeit hinaus |
Die Standardwerte können in den Einstellungen unter **Zeitplan-Puffer** festgelegt werden.
### Mehrtägige Aufnahmen
Bei einmaligen Aufnahmen kann ein **Enddatum** angegeben werden, das nach dem Startdatum liegt. Die Aufnahmedauer wird dann automatisch über die Tagesgrenzen hinweg berechnet.
## Plugins pro Job
Jeder Job kann individuell Plugin-Funktionen aktivieren:
| Option | Beschreibung |
|--------|-------------|
| **Benachrichtigungen (NTFY)** | Push-Nachrichten bei Start, Stop und Fehlern für diesen Job |
| **Plik-Upload** | Automatischer Upload nach Aufnahme-Ende |
| **File nach Upload lokal löschen** | Lokale Datei nach erfolgreichem Plik-Upload entfernen |
Die globale NTFY- und Plik-Konfiguration (URL, Token, etc.) erfolgt in den [Einstellungen](konfiguration.md).
## Manuelle Aufnahme
Jobs können auch manuell über den **Aufnehmen**-Button gestartet werden, unabhängig vom Zeitplan.
## Schnellaufnahme
Für einmalige Aufnahmen ohne Job: **Dashboard → + Schnellaufnahme**. URL eingeben, optional Name und Dauer angeben, sofort starten.
Für einmalige Aufnahmen ohne Job: **Dashboard → + Schnellaufnahme**. URL eingeben (oder aus der Senderbibliothek wählen), optional Name und Dauer angeben, sofort starten.
+37 -2
View File
@@ -2,9 +2,11 @@
## config.yml
![Einstellungen](assets/img4_settings.png)
Die Konfiguration liegt in `data/config.yml` und kann über das Web-UI unter **Einstellungen** bearbeitet werden.
Beim ersten Start wird die Datei automatisch mit Standardwerten erstellt. Eine Vorlage mit Kommentaren findet sich in `config/config.yml.dist`.
Beim ersten Start wird die Datei automatisch mit Standardwerten erstellt. Eine Vorlage mit Kommentaren findet sich in `bin/config.yml.dist`.
## Abschnitte
@@ -13,9 +15,16 @@ Beim ersten Start wird die Datei automatisch mit Standardwerten erstellt. Eine V
| Parameter | Standard | Beschreibung |
|-----------|----------|-------------|
| `recording.download_path` | `/app/data/recordings` | Speicherort für Aufnahmen |
| `recording.max_retries` | `5` | Max. Reconnect-Versuche bei Verbindungsabbruch |
| `recording.max_retries` | `5` | Max. Reconnect-Versuche bei Verbindungsabbruch (0 = unbegrenzt) |
| `recording.retry_delay` | `5` | Wartezeit (Sekunden) zwischen Reconnect-Versuchen |
### Server
| Parameter | Standard | Beschreibung |
|-----------|----------|-------------|
| `server.host` | `0.0.0.0` | Bind-Adresse des Webservers |
| `server.port` | `8484` | Port des Webservers |
### Authentifizierung
| Parameter | Standard | Beschreibung |
@@ -24,6 +33,15 @@ Beim ersten Start wird die Datei automatisch mit Standardwerten erstellt. Eine V
| `auth.username` | `admin` | Benutzername |
| `auth.password` | `stream-recorder` | Passwort |
### Zeitplan-Puffer
Standardwerte für die Vor- und Nachlaufzeit bei neuen Jobs mit Zeitplan.
| Parameter | Standard | Beschreibung |
|-----------|----------|-------------|
| `schedule.default_pre_buffer` | `5` | Standard-Vorlaufzeit (Minuten) |
| `schedule.default_post_buffer` | `5` | Standard-Nachlaufzeit (Minuten) |
### NTFY
| Parameter | Standard | Beschreibung |
@@ -40,6 +58,12 @@ Beim ersten Start wird die Datei automatisch mit Standardwerten erstellt. Eine V
| `plik.api_key` | _(leer)_ | API Key für authentifizierte Uploads |
| `plik.ttl` | `30d` | Aufbewahrungsdauer der Uploads (`30d`, `12h`, etc.) |
### Logging
| Parameter | Standard | Beschreibung |
|-----------|----------|-------------|
| `logging.level` | `INFO` | Log-Level: `DEBUG`, `INFO`, `WARN`, `ERROR` |
## Beispiel
```yaml
@@ -48,11 +72,19 @@ recording:
max_retries: 5
retry_delay: 5
server:
host: "0.0.0.0"
port: 8484
auth:
enabled: true
username: admin
password: mein-passwort
schedule:
default_pre_buffer: 5
default_post_buffer: 5
ntfy:
url: https://ntfy.sh/stream-recorder
token: ""
@@ -62,4 +94,7 @@ plik:
url: https://plik.example.com
api_key: ""
ttl: 30d
logging:
level: INFO
```
+2 -30
View File
@@ -42,7 +42,7 @@ Automatischer Upload von Aufnahmen auf einen [Plik](https://github.com/root-gg/p
| Option | Beschreibung |
|--------|-------------|
| **Plik-Upload** | Upload nach Aufnahme-Ende aktivieren |
| **Nach Upload löschen** | Lokale Datei nach erfolgreichem Upload entfernen |
| **File nach Upload lokal löschen** | Lokale Datei nach erfolgreichem Upload entfernen |
### Links
@@ -50,36 +50,8 @@ Nach dem Upload werden zwei URLs generiert:
- **Browser-URL**: `https://plik.example.com/#/?id=UPLOAD_ID` — Übersichtsseite mit In-Browser-Wiedergabe
- **Download-URL**: Direkter Datei-Download
Bei aktiviertem NTFY wird die Browser-URL in der Push-Nachricht mitgeschickt.
Die Plik-URL wird in der Datenbank gespeichert und im Dashboard bei den **Letzten Aufnahmen** als klickbarer Link angezeigt. Bei aktiviertem NTFY wird die Browser-URL zusätzlich in der Push-Nachricht mitgeschickt.
### Segment-Upload
Bei Segment-Splitting werden alle Segmente einzeln hochgeladen. Die NTFY-Nachricht enthält die Anzahl der hochgeladenen Segmente.
---
## Euer-Radio Metadata-Monitor
Erkennt automatisch, ob eine bestimmte Show live sendet, indem der Stream-Titel via `ffprobe` abgefragt wird. Wenn das konfigurierte Pattern nicht mehr im Titel erscheint, wird die Aufnahme nach einer Karenzzeit gestoppt.
### Einrichtung
Pro Job im Web-UI:
| Option | Standard | Beschreibung |
|--------|----------|-------------|
| **Show-Pattern** | _(leer)_ | Text, der im Stream-Titel vorkommen muss (z.B. Sendungsname) |
| **Karenzzeit** | 5 Min. | Wie lange gewartet wird, nachdem das Pattern verschwunden ist |
| **Poll-Intervall** | 30 Sek. | Wie oft der Stream-Titel abgefragt wird |
### Funktionsweise
1. Der Monitor fragt regelmäßig den Stream-Titel per `ffprobe` ab
2. Solange das Pattern im Titel vorkommt, läuft die Aufnahme weiter
3. Wenn das Pattern verschwindet, startet die Karenzzeit
4. Taucht das Pattern innerhalb der Karenzzeit wieder auf, wird der Timer zurückgesetzt
5. Läuft die Karenzzeit ab, wird die Aufnahme gestoppt
### Anwendungsfall
Ideal für Streams mit wechselnden Shows (z.B. Internet-Radio), bei denen die Aufnahmedauer nicht vorher feststeht. Der Stream-Titel zeigt an, welche Show gerade läuft, und der Monitor erkennt automatisch das Ende.
+34
View File
@@ -0,0 +1,34 @@
# Sender
![Sender](assets/img3_channel.png)
Die Senderbibliothek verwaltet häufig genutzte Streams zentral. Einmal angelegte Sender können in Jobs und Schnellaufnahmen per Dropdown ausgewählt werden — die Stream-URL und der Typ werden automatisch übernommen.
## Sender anlegen
Im Web-UI unter **Sender → + Neuer Sender**.
| Feld | Pflicht | Beschreibung |
|------|---------|-------------|
| **Name** | Ja | Sendername (z.B. `WDR 2`, `DLF Kultur`) |
| **Typ** | Nein | Stream-Typ: `auto` (Standard), RTMP, HLS, MP3, AAC, OGG, HTTP |
| **Stream-URL** | Ja | URL des Streams (z.B. `https://wdr-wdr2-live.icecast.wdr.de/wdr/wdr2/live/mp3/256/stream.mp3`) |
| **Beschreibung** | Nein | Freitext-Notiz (z.B. `Hauptstream, 256 kbit/s`) |
## Sender bearbeiten & löschen
In der Sender-Übersicht stehen pro Eintrag die Buttons **Bearbeiten** und **Löschen** zur Verfügung. Das Löschen eines Senders hat keinen Einfluss auf bereits existierende Jobs — die Stream-URL bleibt im Job erhalten.
## Verwendung in Jobs
Beim Erstellen oder Bearbeiten eines Jobs kann über das Dropdown **Senderbibliothek** ein gespeicherter Sender ausgewählt werden. Dabei werden automatisch übernommen:
- **Stream-URL** und **Typ** — die URL-Eingabe wird ausgeblendet
- **Name** — falls das Namensfeld noch leer ist
- **Beschreibung** — falls das Beschreibungsfeld noch leer ist
Alternativ bleibt die Option **URL manuell eingeben** bestehen.
## Verwendung in Schnellaufnahmen
Auch bei Schnellaufnahmen (Dashboard → + Schnellaufnahme) steht die Senderbibliothek als Dropdown zur Verfügung. Bei Auswahl werden URL, Typ und Name übernommen.