Wenn’s laft dann laft’s
Ende März habe ich bereits über das famose Skript berichtet, welches es erlaubt den kleinen Urfahraner Meisen beim Wachsen zuzuschauen. Das Skript dafür hat erstaunlich lange funktioniert, nämlich über ein Monat lang. Währenddessen wurde das Nest fertiggebastelt, sage und schreibe neun Eier gelegt, die Kücken sind geschlüpft und treiben jetzt als ausgefressene Wuserl ihr Unwesen (3. Mai 2024):
Raspberry RIP
Aber jetzt ist es doch soweit gekommen: Der Stream war weg. Wie es scheint war aber der ganze dazugehörige Raspberry Pi auf einmal nicht mehr aufrufbar (nur ein kompletter Neustart des kleinen Rechners hat geholfen). Das ist nicht optimal. Aber noch schlimmer ist, dass ich nicht einmal weiß, wie oft beispielsweise das Skript den Videostream neustarten hat müssen. Das wollte ich eigentlich vorher schon ändern, aber das Originalskript hat so gut funktioniert, dass ich es sein hab’ lassen. Aber jetzt ist die perfekte Gelegenheit dafür.
Skript mit Log!
Das neue Skript betreibt jetzt auch Logging und die Einstellungen des Streams sind jetzt etwas übersichtlicher vorzunehmen:
#!/bin/bash
# Determine the directory where the script is located
SCRIPT_DIR="$(dirname "$(readlink -f "$0")")"
LOG_FILE="${SCRIPT_DIR}/streaming.log"
BITRATE=3000000
WIDTH=1920
HEIGHT=1080
RTMP_URL="rtmp://localhost/live/1234"
SLEEP_DURATION=1
# Function to log with timestamp
log() {
local msg="$(date '+%Y-%m-%d %H:%M:%S') - $1"
echo "$msg" # Print to standard output
echo "$msg" >> "$LOG_FILE" # Append to log file
}
# Signal handling for graceful termination
trap "log 'Stream terminated by signal'; exit" SIGINT SIGTERM
# Check if log file exists and is writable
if [ ! -w "$LOG_FILE" ] && [ ! -f "$LOG_FILE" ]; then
touch "$LOG_FILE"
fi
# Infinite loop to keep the process running
while true; do
log "Starting stream..."
libcamera-vid -t 0 --inline --listen --bitrate $BITRATE --width $WIDTH --height $HEIGHT -o - | \
gst-launch-1.0 -v fdsrc ! h264parse ! flvmux ! rtmpsink location="${RTMP_URL} live=1"
if [ $? -ne 0 ]; then
log "Stream stopped unexpectedly. Restarting..."
else
log "Stream stopped. Restarting..."
fi
sleep $SLEEP_DURATION
done
Die Logs werden in eine Textdatei im selben Ordenr geschrieben. Und gestartet wird das Ganze einfach so:
Schon rattert der Stream wieder los…
… und beim nächsten Mal hat man zumindest etwas mehr Infos, was jetzt alles so passiert ist:
Indessen: Rasantes Vogelwachstum
Ein Blick hin zu den Vögeln zeicht ein reges Treiben in der rechten Vogelhaushälfte:
Die Meisen werden schon recht schnell groß, lang werden’s wohl nicht mehr alle dort hausen.