Raspberry Pi Zero W Kamera via Twitch streamen

2019-06-08 - christian - raspberry pi, streaming

Seit einigen Tagen haben wir in der nerdbridge einen 3D Drucker. Um die meist langwierigen Druckaufträge auch von Zuhause/Unterwegs überwachen zu können, lasse ich einen Raspberry Pi Zero W mit einer Raspberry Pi Kamera via Twitch streamen.

Was gebraucht wird

  • Einen Twitch Account
  • Den Stream Key des Twitch Accounts
  • Raspberry Pi Zero W + Raspberry Pi Kamera
  • Irgendwas zum befestigen und ausrichten

Camera

Camera

Installation

  • Das aktuellste Raspbian installieren
  • Via raspi-config die Kamera aktivieren
  • Das Paket libav-tools installieren

Das Script

#!/bin/bash

# https://stream.twitch.tv/ingests/

# twitch settings
STREAMKEY=live_XXXXXXXXX_YYYYYYYYYYYYYYYYYYYYYYYYYYYYY
ENDPOINTS=(rtmp://live-fra.twitch.tv/app rtmp://live-ber.twitch.tv/app rtmp://live-ams.twitch.tv/app)

# stream settings
VIDEOFPS=25
BITRATE=2000000
CONVFRAMERATE=30
CONVGOP=30
CONVPIXFORMAT=yuv420p
CONVOUTFORMAT=flv

I=0
while true
do

    # get the current endpoint
    EPIDX=$(( $I % ${#ENDPOINTS[@]} ))
    CURENDPOINT=${ENDPOINTS[$EPIDX]}

    echo "Using $CURENDPOINT as twitch endpoint"

    # start the stream
    raspivid -t 0 -fps $VIDEOFPS -b $BITRATE -o - | \
        avconv -i - -vcodec copy -an \
            -r $CONVFRAMERATE \
            -g $CONVGOP \
            -bufsize $BITRATE \
            -pix_fmt $CONVPIXFORMAT \
            -f $CONVOUTFORMAT \
            "$CURENDPOINT/$STREAMKEY"

    # cooldown when stream was aborted
    echo
    echo "Stream exited unexpected. Wait 60 seconds and restart..."
    echo

    sleep 60

    # jump to next endpoint
    I=$(( $I + 1 ))

done

Funktionsweise

Twitch stellt auf einer Seite verschiedene Endpunkte für das Einspeisen von Videosignalen via rtmp zur Verfügung. Das Script verbindet sich mit einem der drei Endpunkte und beginnt das Kamerabild zu streamen.

Kommt es zu einem Verbindungsabbruch wird nach einer Pause von 60 Sekunden die Verbindung zum nächsten Endpunkt in der Liste hergestellt.

Ich empfehle das Script in einer screen Session laufen zu lassen.

Weitere Ideen

  • Script als systemd daemon installieren
  • LED welche signalisiert ob gestreamt wird
  • Push Button welcher den Stream starten bzw stoppen kann

Quellen


go back Creative Commons License
serverless.industries Image by Carl Lender (CC BY 2.0)