From acf534762e32b585ec596a748aa5c830dd973a2a Mon Sep 17 00:00:00 2001 From: scriptos Date: Mon, 6 Nov 2023 21:16:23 +0100 Subject: [PATCH] Umzug in eigenes Repo --- README.md | 12 +++- erde-stream-recorder.sh | 118 ++++++++++++++++++++++++++++++++++++++++ 2 files changed, 129 insertions(+), 1 deletion(-) create mode 100644 erde-stream-recorder.sh diff --git a/README.md b/README.md index 658884e..7bae320 100644 --- a/README.md +++ b/README.md @@ -1,2 +1,12 @@ -# rtmp-stream-recorder +# RTMP Stream Recorder für die Bash +Dies Skript ermöglicht die lokale Aufzeichnung von RTMP-Streams und speichert diese als *.mp4-Dateien ab. Das Skript überprüft zunächst, ob das Programm "ffmpeg" installiert ist und installiert es gegebenenfalls. Es erstellt dann ein Downloadverzeichnis und bietet dem Benutzer die Möglichkeit, zwischen verschiedenen Streams auszuwählen. Bei Auswahl eines Streams wird die Aufzeichnung gestartet und im Downloadverzeichnis gespeichert. Das Skript enthält auch eine Funktion zum Abbrechen der Aufzeichnung und bietet die Option, die zuletzt erstellte Datei zu löschen. + +Das Skript bietet die folgenden Funktionen: + +- Auswahl Streams (oder Eingabe einer benutzerdefinierten Stream-URL und Stream-Namen) +- Aufzeichnung des ausgewählten Streams und Speicherung im angegebenen Downloadverzeichnis +- Überprüfung und Installation von "ffmpeg", wenn es nicht vorhanden ist +- Abbruch der Aufzeichnung per Interrupt (INT-Signal) mit der Möglichkeit, die zuletzt erstellte Datei zu löschen + +Aufruf: ./bash erde-stream-recorder.sh diff --git a/erde-stream-recorder.sh b/erde-stream-recorder.sh new file mode 100644 index 0000000..ef7a3cf --- /dev/null +++ b/erde-stream-recorder.sh @@ -0,0 +1,118 @@ +#!/bin/bash +# Script Name: erde-stream-recorder.sh +# Beschreibung: Zeichnet den Euer.TV Stream lokal auf und speichert diesen als *.mp4-File ab. +# Aufruf: ./bash erde-stream-recorder.sh +# Autor: Patrick Asmus +# Web: https://www.media-techport.de +# Git-Reposit.: https://git.media-techport.de/scriptos/private-script-collection.git +# Version: 1.2.3 +# Datum: 10.10.2023 +# Modifikation: Texte angepasst +##################################################### + +# Signal-Handler für das INT-Signal (Interrupt) +function handle_interrupt() { + echo "Aufzeichnung abgebrochen." + echo "Möchten Sie die zuletzt erstellte Datei löschen? (Y/n)" + read -n 1 -r response + if [[ "$response" =~ ^[Yy]$ ]]; then + rm -f "$output_file" + echo "Datei gelöscht: $output_file" + fi + exit 0 +} + +# Überprüfung, ob ffmpeg installiert ist +if ! command -v ffmpeg &> /dev/null; then + echo "ffmpeg ist nicht installiert. Das Skript wird ffmpeg installieren." + sudo apt update + sudo apt install -y ffmpeg + if [ $? -ne 0 ]; then + echo "Fehler beim Installieren von ffmpeg. Beenden." + exit 1 + fi +fi + +# Downloadpfad +download_path="/home/downloads/erde-streams" +mkdir -p $download_path + +# Stream-Informationen Variablen +stream1_name="Euer.TV-Stream_Main" +stream1_url="rtmp://rtmp21.euer.tv/live/1080p" + +stream2_name="Euer.TV-Stream_Donnerwolke" +stream2_url="rtmp://hls21.euer.tv/source/donnerwolke" + +stream3_name="Euer.TV-Stream_SchiWaGoA" +stream3_url="rtmp://hls21.euer.tv/source/schiwagoa" + +# Funktion zur Aufzeichnung eines Streams +function record_stream() { + stream_name="$1" + stream_url="$2" + + while true; do + timestamp=$(date +'%Y%m%d%H%M%S') + output_file="$download_path/$stream_name-$timestamp.mp4" + echo "Starte Aufzeichnung von $stream_name..." + + while true; do + ffmpeg -i "$stream_url" -c copy "$output_file" + ret_code=$? + if [ $ret_code -eq 0 ]; then + echo "Die Aufzeichnung von $stream_name wurde abgeschlossen und als $output_file gespeichert." + break + else + echo "Fehler bei der Aufzeichnung von $stream_name (Fehlercode: $ret_code)." + echo "Warte 3 Sekunden, um erneut zu versuchen..." + sleep 3 + fi + done + + echo "Drücken Sie 'Q', um die Aufzeichnung zu beenden, oder 'Enter', um fortzufahren..." + read -n 1 -s -r key + if [ "$key" = "Q" ] || [ "$key" = "q" ]; then + echo "Aufzeichnung beendet." + exit 0 + fi + done +} + +# Stream-Abbruch beim INT-Signal (Interrupt) behandeln +trap handle_interrupt INT + +# Menü für Stream-Auswahl +while true; do + echo "Bitte wählen Sie einen Stream aus:" + echo "1. $stream1_name" + echo "2. $stream2_name" + echo "3. $stream3_name" + echo "4. Eigenen Stream eingeben" + echo "5. Beenden" + read -p "Ihre Auswahl: " choice + + case "$choice" in + 1) + record_stream "$stream1_name" "$stream1_url" + ;; + 2) + record_stream "$stream2_name" "$stream2_url" + ;; + 3) + record_stream "$stream3_name" "$stream3_url" + ;; + 4) + read -p "Geben Sie die URL des Streams ein: " custom_url + read -p "Geben Sie einen Namen für den Stream ein: " custom_name + record_stream "$custom_name" "$custom_url" + ;; + 5) + echo "Aufzeichnung beendet." + exit 0 + ;; + *) + echo "Ungültige Auswahl. Bitte erneut versuchen." + ;; + esac +done \ No newline at end of file