Een van mijn klanten vroeg mij, na het lezen van mijn bericht over de Raspberry Pi of het mogelijk is om via een Raspberry Pi te streamen naar 4 Facebook paginas, Youtube en Twitch tegelijk. Ik antwoorde eerlijk dat ik dat niet wist. Maar ik heb het geprobeerd en het is mogelijk.
Het doel is voor Quin van de forever27club, die wekelijks een live stream talk radio verzorgen, om de maandelijkse kosten voor restream.oi weg te werken.

wat hebben we nodig

  1. Raspberry Pi 4 4GB
  2. een behuizing voor de Raspberry Pi, bij voorkeur een die ook goed koelt (Mijn voorkeur gaat uit naar zoiets)
  3. Power supply voor de Raspberry Pi
  4. Een SD kaartmet A1 of A2 rating
  5. Micro HDMI naar HDMI converter kabel
Raspberry Pi4 restream device

Hoe te beginnen

Eerst moeten we de SD card gereed maken.

Ga naar https://www.raspberrypi.org/software/ en download Raspberry Pi imager. Dat is een applicatie die het eenvoudig maakt Raspberry Pi OS op de SD kaart te zetten. Na downloaden en installeren zie je onderstaand scherm.

Druk op “SELECTEER OS” en selecter de gewenste optie.
Hoewel ander en daarna Rapsberry Pi OS Lite (32 bit) genoeg zou zijn, koos ik voor Raspberry PI OS (32 bit). De reden voor die keuze is dat ik in een later stadion wil kijken of ik een web gebasserde gebruikersinterface kan maken voor het aanpassen van de stream configuratie.
Selecteer je SD kaart en klik op schrijf. Als het schrijven gereed is neem de SD kaart en stop deze in de Raspberry Pi. Verbind je Pi met je netwerk (bij voorkeur bedraad) sluit een monitor, muis en toetsenbord aan. (Ik gebruik en draadloze muis en toetsenbord die samen dezelfde ontvanger gebruiken, maar usb werkt ook, na de setup heb je deze niet meer nodig)

Na het doorlopen van de installatie procedure en het beantwoorden van de vragen eindig je met een scherm zoals hieronder.

Raspberry Pi Desktop

Klik op het vierde icoon oin de bovenbalk om een terminal venster te openen.

Allereerst zullen we om veiligheids redenen het standaard wachtwoord voor de gebruiker pi wijzigen. (Het standaard wachtwoord is “raspberry”). In de terminal typen we onderstaande regel gevolgd door enter.

sudo raspi-config
Raspi-config

Kies de eerste menu optie en in het volgden de menu de derde optie (S3) om het wachtwoord te wijzigen. Je moet het wachtwoord 2 keer ingeven, en tijdens het ingeven zie je niet wat je typt.

Vervolgens willen we het mogelijk maken om de Pi over het netwerk te benaderne en te beheren zodat het makkelijker is om de configuratie bestanden erin te kopieren. Dus kiezen we optie 3 Interface options en daarna P2 SSH. We activeren SSH en kiezen “<Finish>”. Nu zijn we terug in de terminal.

Het laatste wat we hier doen is dat we kijken wat het IP adres van de Pi is. type de volgende regel en druk op enter.

sudo ifconfig
ifconfig

In de afbeelding hierboven zie je het resultaat ifconfig. eth0 is de bedraadde netwerk aansluiting. In de tweede regel direct na inet zien we het IP adres voor de pi: 10.0.0.106 (in dit geval).

WE gaan de Pi opnieuw opstarten. Type de volgende regel gevolgd door enter

sudo reboot -h now

Zodra de Pi opnieuw is gestart kunnen we vanaf iedere computer in het netwerk verbinden met de Pi. Ik geef er de voorkeur aan om daarvoor putty te gebruiken. Je kunt dat downloaden of een ander terminal programma naar keuze gebruiken.

In Putty gebruiken we het eerder gevonden IP adres vinken SSH aan en zorgen dat de poort op 22 staat.

Ptty

Als je nu de verbinding opent krijg je een terminal voor de Pi op je scherm.

Terminal

Type pi (de gebruikersnaam) druk op enter. Gebruik je eerder ingestelde wachtwoord en druk op enter. Je bent nu verbonden met de Pi.

Connected

Allereerst willen we er voor zorgen dat alle software van de laatste updates is voorzien. Type de volgende regels en druk op enter na elke regel. Als er updates zijn druk op “Y” om ze te installeren.

sudo apt update
sudo apt upgrade

Nu wordt het tijd om de benodigde software te installeren. Type de volgende regel en druk op enter

sudo apt install nginx libnginx-mod-rtmp

Nu de pakketten zijn geïnstalleerd moet we nog configureren.

sudo nano /etc/nginx/nginx.conf

scroll naar het eind van het bestand en kopieer onderstaande regels

  server {
    listen 1935;

    application live {
      # Enable livestreaming
      live on;

      # Disable recording
      record off;

      # Restream to youtube
      push rtmp://a.rtmp.youtube.com/live2/<streamkey>;

      # Push URL with the Twitch stream key
      push rtmp://live-cdg.twitch.tv/app/<streamkey>;      
    }
  }
}

Om het bestand op te slaan druk je ctrl-x en enter.

Is is je wellicht opgevallen dat er in deze configuratie niets is opgenomen voor Facebook. Dat klopt. Want als we kijken naar de stream url voor Facebook zien we dat deze rtmps gebruikt in plaats van rtmp.

rtmps://live-api-s.facebook.com:443/rtmp/

Facebook ondersteund sinds November 2019 geen rtmp (zonder s meer) en libnginx-mod-rtmp ondersteund geen rtmps. We hebben dus een klein omweg nodig.
Gelukkig bestaat daarvoor Stunnel een proxy ontworpen on TLS encryptie functionaliteit toe te voegen zonder code aan te passen.

We moeten dus stunnel installeren:

sudo apt install stunnel

En uiteraard moeten we stunnel ook configureren

sudo nano /etc/stunnel/stunnel.conf

Voeg de volgende regels toe en sla het bestand op.

setuid = stunnel4
setgid = stunnel4
pid=/tmp/stunnel.pid
output = /var/log/stunnel4/stunnel.log
include = /etc/stunnel/conf.d

Nu moeten we stunnel activeren

nano /etc/default/stunnel4

Voeg de volgende regel toe aan het eind van het bestand en sla het bestand op.

ENABLE=1

Nu moeten we de tunnel voor het Facebook Live adres nog toevoegen

sudo mkdir /etc/stunnel/conf.d
sudo nano /etc/stunnel/conf.d/fb.conf

Voeg de volgende regels toe aan het eind van het bestand en sla het bestand op.

[fb-live]
client = yes
accept = 127.0.0.1:19350
connect = live-api-s.facebook.com:443
verifyChain = no

En als laatste herstarten we stunnel en controleren de status.

sudo systemctl restart stunnel4 && sudo systemctl status stunnel4

Nu is stunnel klaar voor gebruik . In plaats van de normale regel voor Facebook

push rtmps://live-api-s.facebook.com:443/rtmp/<streamkey>

Kunnen we nu deze regel gebruiken.

push rtmp://127.0.0.1:19350/rtmp/<facebook-live-stream-key>;

Dat zetten we dus in de nginx.conf

sudo nano /etc/nginx/nginx.conf

Zorg dat het er als volgt uit ziet:

rtmp {
  server {
    listen 1935;

    application live {
      # Enable livestreaming
      live on;

      # Disable recording
      record off;

      # Restream to youtube
      push rtmp://a.rtmp.youtube.com/live2/<streamkey>;

      # Push URL with the Twitch stream key
      push rtmp://live-cdg.twitch.tv/app/<streamkey>;

      # Restream to facebook we need to use stunnel 
      # since rtmps is not supported
       push rtmp://127.0.0.1:19350/rtmp/<streamkey>;

    }
  }
}

Wil je naar meerdere Youtube Twitch of Facebook kanalen streamen, kopieer de betreffende regel en pas de streamkey aan.

Deze post is ook in het engels op de site geplaatst.