Release: v2.8.0
This commit is contained in:
@@ -62,8 +62,8 @@ sudo install/install.sh
|
|||||||
## Befehle
|
## Befehle
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
./stream-recorder.sh record <job> # Aufnahme starten
|
./stream-recorder.sh record [job] # Aufnahme starten (ohne Angabe: Auswahl)
|
||||||
./stream-recorder.sh stop <job> # Aufnahme stoppen
|
./stream-recorder.sh stop [job] # Aufnahme stoppen (ohne Angabe: Auswahl)
|
||||||
./stream-recorder.sh status # Laufende Aufnahmen anzeigen
|
./stream-recorder.sh status # Laufende Aufnahmen anzeigen
|
||||||
./stream-recorder.sh list # Alle Jobs anzeigen
|
./stream-recorder.sh list # Alle Jobs anzeigen
|
||||||
./stream-recorder.sh create # Neuen Job erstellen
|
./stream-recorder.sh create # Neuen Job erstellen
|
||||||
|
|||||||
+9
-7
@@ -4,12 +4,12 @@
|
|||||||
|
|
||||||
| Befehl | Beschreibung |
|
| Befehl | Beschreibung |
|
||||||
|----------------------|-------------------------------------------------|
|
|----------------------|-------------------------------------------------|
|
||||||
| `record <job>` | Einzelnen Stream aufzeichnen |
|
| `record [job]` | Einzelnen Stream aufzeichnen (ohne Angabe: Auswahl) |
|
||||||
| `record-all` | Alle Jobs gleichzeitig aufzeichnen |
|
| `record-all` | Alle Jobs gleichzeitig aufzeichnen |
|
||||||
| `create` | Neuen Job interaktiv erstellen |
|
| `create` | Neuen Job interaktiv erstellen |
|
||||||
| `quick` | Schnellaufnahme (URL direkt eingeben) |
|
| `quick` | Schnellaufnahme (URL direkt eingeben) |
|
||||||
| `upload <datei>` | Vorhandene Datei nach Plik hochladen |
|
| `upload <datei>` | Vorhandene Datei nach Plik hochladen |
|
||||||
| `stop <name>` | Aufnahme stoppen (Teilaufnahme wird hochgeladen)|
|
| `stop [name]` | Aufnahme stoppen (ohne Angabe: Auswahl) |
|
||||||
| `stop-all` | Alle Aufnahmen stoppen |
|
| `stop-all` | Alle Aufnahmen stoppen |
|
||||||
| `list` | Jobs und deren Zeitpläne anzeigen |
|
| `list` | Jobs und deren Zeitpläne anzeigen |
|
||||||
| `status` | Laufende Aufnahmen mit Details anzeigen |
|
| `status` | Laufende Aufnahmen mit Details anzeigen |
|
||||||
@@ -30,10 +30,11 @@
|
|||||||
|
|
||||||
### record
|
### record
|
||||||
|
|
||||||
Startet eine Aufnahme im Hintergrund (Standard) oder Vordergrund (`--foreground`).
|
Startet eine Aufnahme im Hintergrund (Standard) oder Vordergrund (`--foreground`). Ohne Job-Name wird eine interaktive Auswahl aller verfügbaren Jobs angezeigt.
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
./stream-recorder.sh record mein-stream
|
./stream-recorder.sh record # Job aus Liste wählen
|
||||||
|
./stream-recorder.sh record mein-stream # Direkt starten
|
||||||
./stream-recorder.sh --foreground record mein-stream
|
./stream-recorder.sh --foreground record mein-stream
|
||||||
./stream-recorder.sh -V record mein-stream
|
./stream-recorder.sh -V record mein-stream
|
||||||
```
|
```
|
||||||
@@ -56,11 +57,12 @@ Schnellaufnahme ohne Job-Datei. Fragt nach URL, Name, Typ und Dauer.
|
|||||||
|
|
||||||
### stop / stop-all
|
### stop / stop-all
|
||||||
|
|
||||||
Stoppt eine laufende Aufnahme. Wenn Plik aktiviert ist, wird die Teilaufnahme hochgeladen. Bei Segment-Splitting werden alle verbleibenden Segmente hochgeladen.
|
Stoppt eine laufende Aufnahme. Ohne Job-Name wird eine Auswahl angezeigt. Wenn Plik aktiviert ist, wird die Teilaufnahme hochgeladen. Bei Segment-Splitting werden alle verbleibenden Segmente hochgeladen.
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
./stream-recorder.sh stop mein-stream
|
./stream-recorder.sh stop # Job aus Liste wählen
|
||||||
./stream-recorder.sh stop-all
|
./stream-recorder.sh stop mein-stream # Direkt stoppen
|
||||||
|
./stream-recorder.sh stop-all # Alle stoppen
|
||||||
```
|
```
|
||||||
|
|
||||||
### status
|
### status
|
||||||
|
|||||||
+6
-2
@@ -49,14 +49,18 @@ Verfügbare Vorlagen:
|
|||||||
Die Dauer kann in verschiedenen Formaten angegeben werden:
|
Die Dauer kann in verschiedenen Formaten angegeben werden:
|
||||||
|
|
||||||
| Format | Bedeutung |
|
| Format | Bedeutung |
|
||||||
|----------|------------------|
|
|-----------|------------------|
|
||||||
| `3600` | 3600 Sekunden |
|
| `3600` | 3600 Sekunden |
|
||||||
| `1h` | 1 Stunde |
|
|
||||||
| `30m` | 30 Minuten |
|
| `30m` | 30 Minuten |
|
||||||
|
| `1h` | 1 Stunde |
|
||||||
| `1h30m` | 90 Minuten |
|
| `1h30m` | 90 Minuten |
|
||||||
|
| `48h` | 48 Stunden |
|
||||||
|
| `48h30m` | 48,5 Stunden |
|
||||||
| `2d` | 2 Tage |
|
| `2d` | 2 Tage |
|
||||||
| `1d12h` | 36 Stunden |
|
| `1d12h` | 36 Stunden |
|
||||||
|
|
||||||
|
Formate lassen sich frei kombinieren: `d` (Tage), `h` (Stunden), `m` (Minuten), `s` (Sekunden).
|
||||||
|
|
||||||
## Job-Angabe beim Starten
|
## Job-Angabe beim Starten
|
||||||
|
|
||||||
Der `record`-Befehl akzeptiert verschiedene Formate:
|
Der `record`-Befehl akzeptiert verschiedene Formate:
|
||||||
|
|||||||
+84
-14
@@ -8,15 +8,15 @@
|
|||||||
# Web: https://www.cleveradmin.de
|
# Web: https://www.cleveradmin.de
|
||||||
# Repository: https://git.techniverse.net/scriptos/stream-recorder.git
|
# Repository: https://git.techniverse.net/scriptos/stream-recorder.git
|
||||||
# License: MIT
|
# License: MIT
|
||||||
# Version: v2.7.0
|
# Version: v2.8.0
|
||||||
# Date: 07.09.2026
|
# Date: 07.09.2026
|
||||||
# Modifications: Segment-Splitting, erweiterter Status, verbessertes Stoppen
|
# Modifications: Segment-Splitting, erweiterter Status, interaktive Job-Auswahl, Konfig updatesicher
|
||||||
###############################################
|
###############################################
|
||||||
|
|
||||||
set -uo pipefail
|
set -uo pipefail
|
||||||
|
|
||||||
readonly SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
readonly SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
||||||
readonly VERSION="2.7.0"
|
readonly VERSION="2.8.0"
|
||||||
|
|
||||||
# --- Standardwerte (überschreibbar via Konfiguration) ---
|
# --- Standardwerte (überschreibbar via Konfiguration) ---
|
||||||
CONFIG_FILE="${SCRIPT_DIR}/config/stream-recorder.conf"
|
CONFIG_FILE="${SCRIPT_DIR}/config/stream-recorder.conf"
|
||||||
@@ -1053,9 +1053,21 @@ create_job() {
|
|||||||
echo "Kein Datum angegeben - Zeitplan deaktiviert."
|
echo "Kein Datum angegeben - Zeitplan deaktiviert."
|
||||||
sched_enabled="false"
|
sched_enabled="false"
|
||||||
else
|
else
|
||||||
read -rp "Laufzeit (z.B. 2h, 30m, 2d, 1d12h oder leer=unbegrenzt): " duration_input
|
read -rp "Endzeit oder Laufzeit (z.B. 22:00 oder 2h, 30m, 1d12h, leer=unbegrenzt): " end_input
|
||||||
if [[ -n "$duration_input" ]]; then
|
if [[ -n "$end_input" ]]; then
|
||||||
duration=$(parse_duration "$duration_input")
|
if [[ "$end_input" =~ ^[0-9]{1,2}:[0-9]{2}$ ]]; then
|
||||||
|
sched_stop="$end_input"
|
||||||
|
local start_min stop_min diff_min
|
||||||
|
start_min=$(_time_to_minutes "$sched_start")
|
||||||
|
stop_min=$(_time_to_minutes "$sched_stop")
|
||||||
|
if [[ $stop_min -gt $start_min ]]; then
|
||||||
|
diff_min=$((stop_min - start_min))
|
||||||
|
else
|
||||||
|
diff_min=$((1440 - start_min + stop_min))
|
||||||
|
fi
|
||||||
|
duration=$((diff_min * 60))
|
||||||
|
else
|
||||||
|
duration=$(parse_duration "$end_input")
|
||||||
if [[ -n "$duration" && $duration -lt 86400 ]]; then
|
if [[ -n "$duration" && $duration -lt 86400 ]]; then
|
||||||
local start_min end_min end_h end_m
|
local start_min end_min end_h end_m
|
||||||
start_min=$(_time_to_minutes "$sched_start")
|
start_min=$(_time_to_minutes "$sched_start")
|
||||||
@@ -1069,6 +1081,7 @@ create_job() {
|
|||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
if [[ "$sched_enabled" != "true" ]]; then
|
if [[ "$sched_enabled" != "true" ]]; then
|
||||||
read -rp "Laufzeit (z.B. 2h, 30m, 2d, 1d12h oder leer=unbegrenzt): " duration_input
|
read -rp "Laufzeit (z.B. 2h, 30m, 2d, 1d12h oder leer=unbegrenzt): " duration_input
|
||||||
@@ -1411,6 +1424,60 @@ stop_all() {
|
|||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
|
select_job() {
|
||||||
|
local -a job_files=()
|
||||||
|
local -a job_names=()
|
||||||
|
local -a job_urls=()
|
||||||
|
local -a job_stati=()
|
||||||
|
|
||||||
|
for job_file in "${JOBS_DIR}"/*.job; do
|
||||||
|
[[ -f "$job_file" ]] || continue
|
||||||
|
load_job "$job_file" 2>/dev/null || continue
|
||||||
|
|
||||||
|
local job_id
|
||||||
|
job_id=$(basename "$job_file" .job)
|
||||||
|
local status="bereit"
|
||||||
|
if is_recording "$job_id"; then
|
||||||
|
status="läuft"
|
||||||
|
fi
|
||||||
|
|
||||||
|
job_files+=("$job_file")
|
||||||
|
job_names+=("$STREAM_NAME")
|
||||||
|
job_urls+=("$STREAM_URL")
|
||||||
|
job_stati+=("$status")
|
||||||
|
done
|
||||||
|
|
||||||
|
if [[ ${#job_files[@]} -eq 0 ]]; then
|
||||||
|
echo "Keine .job-Dateien gefunden in: ${JOBS_DIR}"
|
||||||
|
echo "Erstelle einen Job: $(basename "$0") create"
|
||||||
|
return 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo ""
|
||||||
|
echo "Verfügbare Jobs:"
|
||||||
|
echo "$(printf '=%.0s' {1..50})"
|
||||||
|
echo ""
|
||||||
|
|
||||||
|
local i
|
||||||
|
for (( i=0; i < ${#job_files[@]}; i++ )); do
|
||||||
|
local num=$((i + 1))
|
||||||
|
local marker=" "
|
||||||
|
[[ "${job_stati[$i]}" == "läuft" ]] && marker="* "
|
||||||
|
printf " %s%d) %-25s [%s]\n" "$marker" "$num" "${job_names[$i]}" "${job_stati[$i]}"
|
||||||
|
done
|
||||||
|
|
||||||
|
echo ""
|
||||||
|
read -rp "Job auswählen (1-${#job_files[@]}): " choice
|
||||||
|
|
||||||
|
if [[ ! "$choice" =~ ^[0-9]+$ ]] || [[ "$choice" -lt 1 || "$choice" -gt ${#job_files[@]} ]]; then
|
||||||
|
echo "Ungültige Auswahl."
|
||||||
|
return 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
local idx=$((choice - 1))
|
||||||
|
echo "${job_files[$idx]}"
|
||||||
|
}
|
||||||
|
|
||||||
watch_logs() {
|
watch_logs() {
|
||||||
local log_file="${LOG_DIR}/stream-recorder.log"
|
local log_file="${LOG_DIR}/stream-recorder.log"
|
||||||
|
|
||||||
@@ -1437,12 +1504,12 @@ stream-recorder v${VERSION} - Generischer Stream-Recorder
|
|||||||
Verwendung: $(basename "$0") [Optionen] <Befehl> [Argumente]
|
Verwendung: $(basename "$0") [Optionen] <Befehl> [Argumente]
|
||||||
|
|
||||||
Befehle:
|
Befehle:
|
||||||
record <job> Einzelnen Stream aufzeichnen
|
record [job] Einzelnen Stream aufzeichnen (ohne Angabe: Auswahl)
|
||||||
record-all Alle Jobs aufzeichnen
|
record-all Alle Jobs aufzeichnen
|
||||||
create Neuen Job interaktiv erstellen
|
create Neuen Job interaktiv erstellen
|
||||||
quick Interaktive Schnellaufnahme (URL eingeben)
|
quick Interaktive Schnellaufnahme (URL eingeben)
|
||||||
upload <datei> Vorhandene Datei nach Plik hochladen
|
upload <datei> Vorhandene Datei nach Plik hochladen
|
||||||
stop <name> Aufnahme stoppen (Teilaufnahme wird hochgeladen)
|
stop [name] Aufnahme stoppen (ohne Angabe: Auswahl)
|
||||||
stop-all Alle Aufnahmen stoppen
|
stop-all Alle Aufnahmen stoppen
|
||||||
list Jobs und deren Zeitpläne anzeigen
|
list Jobs und deren Zeitpläne anzeigen
|
||||||
status Laufende Aufnahmen mit Details anzeigen
|
status Laufende Aufnahmen mit Details anzeigen
|
||||||
@@ -1499,12 +1566,12 @@ main() {
|
|||||||
|
|
||||||
case "$command" in
|
case "$command" in
|
||||||
record)
|
record)
|
||||||
if [[ -z "${1:-}" ]]; then
|
|
||||||
log "ERROR" "Job-Datei oder Job-Name erforderlich"
|
|
||||||
echo ""; usage; exit 1
|
|
||||||
fi
|
|
||||||
local job_file
|
local job_file
|
||||||
|
if [[ -z "${1:-}" ]]; then
|
||||||
|
job_file=$(select_job) || exit 1
|
||||||
|
else
|
||||||
job_file=$(resolve_job_path "$1")
|
job_file=$(resolve_job_path "$1")
|
||||||
|
fi
|
||||||
if [[ "$FOREGROUND" == "true" || "$VERBOSE" == "true" ]]; then
|
if [[ "$FOREGROUND" == "true" || "$VERBOSE" == "true" ]]; then
|
||||||
record_stream "$job_file"
|
record_stream "$job_file"
|
||||||
else
|
else
|
||||||
@@ -1532,9 +1599,12 @@ main() {
|
|||||||
scheduler) run_scheduler ;;
|
scheduler) run_scheduler ;;
|
||||||
stop)
|
stop)
|
||||||
if [[ -z "${1:-}" ]]; then
|
if [[ -z "${1:-}" ]]; then
|
||||||
log "ERROR" "Job-Name erforderlich"; exit 1
|
local job_file
|
||||||
fi
|
job_file=$(select_job) || exit 1
|
||||||
|
stop_recording "$(basename "$job_file" .job)"
|
||||||
|
else
|
||||||
stop_recording "$1"
|
stop_recording "$1"
|
||||||
|
fi
|
||||||
;;
|
;;
|
||||||
stop-all) stop_all ;;
|
stop-all) stop_all ;;
|
||||||
list) list_jobs ;;
|
list) list_jobs ;;
|
||||||
|
|||||||
Reference in New Issue
Block a user