Die Tage kam das Thema auf einen eigenen Streaming Server aufzubauen. Wir kennen ja Youtube, Twitch, Restream.io, Twitter Periscope und viele weitere Dienste die Streaming anbieten. Was da immer auf der Strecke bleibt ist der Datenschutz und die Privatsphäre. Also muss eine eigene Lösung her.
Neue Technologie
Got sei Dank, sind wir von dem Adobe Flash Player erlöst worden und es gibt neue Möglichkeiten des Streaming auf den eigenen Server in Verbindung mit einem Webbrowser ohne Zusatzsoftware. Viele kennen die OpenSource Software OBS und benutzen diese in Zusammenhang mit den oben genannten Plattformen.
Zum Einsatz kommt RTMP mit HLS auf einem Nginx Webserver. HTTP Live Streaming (HLS) ist eines der am häufigsten verwendeten Protokolle für Video-Streaming. Auch wenn es HTTP Live Streaming heißt, wird es sowohl für On-Demand-Streaming als auch für Live-Streaming eingesetzt. HLS zerlegt Videodateien in kleinere HTTP-Dateien und wird via HTTP-Protokoll übertragen. Endgeräte aller Art laden diese HTTP-Dateien herunter und geben diese direkt als Video wieder.
Info zur eigenen Sache:
Als aktiver Leser fällt Dir sicher auf, dass ich in den letzten Monaten nur noch Raspberry Pi Projekt mit Docker veröffentliche. Das mag den einen oder anderen Leser massiv stören, was auch ein paar Abmeldungen der Newsletter nach sich zieht. Nur ist es so dass Docker auf einem Raspberry Pi enorme Vorteile hat. Wenn der Container nicht läuft, löscht man diesen. Ein neues Raspberry Pi Image auf der SD-Karte ist nicht nötig. Neuen Container bauen, diesen starten, fertig ist die Geschichte. Was für eine Arbeitserleichterung Docker inzwischen für mich ist. Du informierst dich ja über Neuigkeiten und Trends. Genau das mach ich, zeige Trends. Auch wenn in Kubernetes, Docker verbannt ist, bedeutet dass noch lange nicht das Docker out ist. Kubernetes baut in Zukunft eigene Container Images. Docker wurde auch erst mit einer neuen Finanzspritze unterstützt.
Wer mit Docker immer noch auf Kriegsfuß steht und sich dem Thema nicht anfreunden will oder kann, sage ich, mach es einfach mal. Setzt Dich hin und installiere „Docker“. Starte dann mit kleinen Projekten. Installiere dann Portainer und Du hast eine schöne Weboberfläche wo alles möglich ist. Der Einstieg ist wirklich einfach und lohnenswert. Verlass die alten Pfade und nimm Dir Zeit für Docker.
Anforderung
Welche Prozesse sind auf dem Streaming Server aktiv:
- Codierung, dh. Videos werden in H.264-Codierung oder H.265-Codierung umformatiert. Viele Endgeräte ohne nötige Plugins können diese Dateien direkt ausgeben.
- Segmentierung, dh. Video werden in Dateischnipsel auf den Server gespeichert. Die Länge kann variieren und beträgt im Standard 10 Sekunden. Eine Indexdatei z.B. stream.m3u8 wird hierfür permanent erzeugt die die Reihenfolge der Videodateien enthält. HLS erstellt Duplikate für verschiedene Video Qualitätsstufen wie z.B. 480p, 720p, 1080p und weitere.
Bitraten-adaptives Streaming wird dadurch möglich. Die Endgeräte bestimmen die Videoqualität und nicht der Server. Dies ist vor allem bei wechselnden Datenraten im Mobilfunk sehr hilfreich, da das Video nicht abgebrochen wird, sondern je nach Netzanbindung die Qualität selbständig erhöht oder verringert.
Was wird benötigt
- Raspberry Pi 4 / 4 GB RAM ( https://amzn.to/3lPCJAn ) *
- USB Adapter für SSD Drive ( https://amzn.to/394Gwo7 ) *
- SSD mit 250GB ( https://amzn.to/2PpgnK4 ) *
- USB-Kamera mit Mikrofon ( https://amzn.to/3ceESCD ) *
- Docker Installation Siehe Anleitung
https://blog.unixweb.de/docker-auf-raspberry-pi-sinnvoll/
In diesem Fall keine SD-Karte benutzen, da massiv viele Daten auf den Speicher geschrieben und gelöscht werden. In kürzester Zeit wäre die SD-Karte kaputt. Für einen Testaufbau kann man natürlich eine SD-Karte nutzen. Für den Dauerbetrieb muss es eine SSD-Drive sein. Die Einkaufsliste oben wurde von mir verprobt und alle Komponenten sind an einem Raspberry Pi 4 fehlerfrei im Betrieb.
Ein Architekturbild
Diese soll den allgemeinen Aufbau erklären:
Installation Software
Wenn Docker erfolgreich installiert wurde nach meiner Anleitung starten wir die Vorbereitung für den Aufbau des Docker Container.
mkdir -p docker/restreamer cd docker/restreamer vi docker-compose.yml
Erstelle eine Datei : docker-compose.yml mit unten angezeigten Inhalt:
version: '3' services: restreamer: container_name: restreamer image: datarhei/restreamer-armv7l:latest privileged: true restart: always environment: - RS_USERNAME=admin - RS_PASSWORD=ichbingeheim - RS_MODE=USBCAM - RS_AUDIO=acc - RS_USBCAM_AUDIO=true - RS_USBCAM_AUDIODEVICE=2 - RS_USBCAM_AUDIOLAYOUT=mono - RS_USBCAM_AUDIOSAMPLING=44100 - RS_LOGLEVEL=4 ports: - 8080:8080 devices: - /dev/snd - /dev/video0:/dev/video tmpfs: - /tmp/hls volumes: - ./data/restreamer-config:/restreamer/db
Video Support
v4l2-ctl --list-devices
Als Ausgabe sollte folgendes angezeigt werden:
bcm2835-codec-decode (platform:bcm2835-codec): /dev/video10 /dev/video11 /dev/video12 bcm2835-isp (platform:bcm2835-isp): /dev/video13 /dev/video14 /dev/video15 /dev/video16 eMeet Nova: eMeet Nova (usb-0000:01:00.0-1.4): /dev/video0 /dev/video1
Die Ausgabe von „/dev/video0“ ist das Gerät mit dem die Software mit der Kamera kommuniziert.
Audio Support
Überprüfe jetzt ob das Audiogerät vorhanden ist:
arecord --list-devices
Die Ausgabe sollte ein Audiogerät anzeigen:
**** Liste der Hardware-Geräte (CAPTURE) **** Karte 2: Nova [eMeet Nova], Gerät 0: USB Audio [USB Audio] Sub-Geräte: 1/1 Sub-Gerät #0: subdevice #0
Das Audiogerät muss mit dem Eintrag „RS_USBCAM_AUDIODEVICE=2“ übereinstimmen. Sollte hier eine andere Adresse unter „Karte“ sein, dann ist dieser Eintrag zu übernehmen.
Wenn alle Parameter richtig eingetragen sind, starte den Docker Container:
docker-compose up -d Starting restreamer ... done
docker-compose ps Name Command State Ports ---------------------------------------------------------------- restreamer ./run.sh Up 0.0.0.0:8080->8080/tcp, 8181/tcp
Starte nun den Browser mit folgender URL: http://<IP-Raspberry>:8080
Es sollte eine Login Webseite anzeigt werden:
Trage als Videoquelle folgende URL ein und klicke auf „Start“.
rtmp://127.0.0.1/live/usbcam.stream
Öffne folgende URL im Browser :
http://<IP-Raspberry>:8080/player.html
Der Screenshot oben zeigt den Load mit zwei gestarteten Docker Container. Der eine Container läuft mit der USB-Kamera und der zweite läuft mit einer IP-Kamera. Der Raspberry Pi 4 mit 4GB RAM kann das locker verarbeiten.
Unten ein Bild der Statistik Auswertung des aktuellen Stream.
Bei Fragen die Kommentarfunktion oder das Kontaktformular nutzen.
Viel Spaß beim nachbauen und anschließenden streamen, eventuell sieht man sich Online 🙂
Beste Grüße Joachim
Alle Artikel auf dieser Seite sind mit einem sogenannte Provision-Links. Wenn du auf so einen Verweislink klickst und über diesen Link einkaufst, bekomme ich von deinem Einkauf eine Provision. Weiterführende Infos gibt es hier unter Punkt 8 in der Datenschutzerklärung https://blog.unixweb.de/datenschutzerklaerung/
Funktioniert 1A, allerdings ist selbst im LAN die Verzögerung extrem.