rtmp-stream-recorder/erde-stream-recorder.sh
2023-11-06 21:16:23 +01:00

118 lines
3.6 KiB
Bash

#!/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