DokuWiki

It's better when it's simple

User Tools

Site Tools


editing

This is an old revision of the document!


Livestreaming-Service (WunderTv)

Vorwort

Mein Name ist FRANCK JUNIOR DJOUMESSI und ich bin unterwegs in Fachbereich Angewandte Informatik. Ich habe in Rahmen der Lehrveranstaltung „Einführung von Internetdiensten“ eine live Streaming eingerichtet. wo ich ein Video von der Hochschule zur Verfügung stellen. Leider hat es nicht geklappt wegen Zugriffsrechte. Außerdem würde ich von Professor Sebastian Rieger und Herrn Christoph Hardegen unterstützt.

Kurzbeschreibung

Unter LiveStreaming versteht man Echtübertragung von Video und/oder Media,dass echtzeit bereitgestellt wird. Mein Internetdienst ist eine über eine Webseite verfügbarer live Streaming. Ich würde sowohl von einem letzten Projekt von 2016 inspiriert als auch von ein paar Webseite in Internet wie zum Beispiel: http://www.footstream.tv/

Präsentation

Beteiligte

FRANCK JUNIOR DJOUMESSI
E-Mail: franck [dot] junior [at] rocketmail [dot] com
Administrator

Architektur

  1. « Die Anwendung stellt die Benutzerschnittstelle zur Verfügung und startet den NGINX-Webserver mit der mitgelieferten Konfiguration (in /usr/local/nginx-streaming/conf/nginx.conf ) »
  2. FFmpeg holt den Video stream und leitet ihn an den lokal laufenden NGINX RTMP-Server weiter
  3. NGINX-RTMP liefert den videostream an die Adresse: rtmp:localhost/live360p/reiseFulda1.flv
  4. jw Video Player ruft den videostream auf
  5. Zusätzlich nimmt FFmpeg den lokalen NGINX-RTMP-Videostream und schiebt die Quelle an der Webseite

Abhängigkeit

  1. Server1: wunderserver
    • Interne IP-addresse:192.168.0.9
    • Floating IP-addresse:192.168.73.145
  2. Server2: wunderserver2
    • Interne IP-addresse:192.168.0.16
    • Floating IP-addresse:192.168.73.145
  3. HA Proxy und LoadBalancer
    • Interne IP-addresse:192.168.0.15
    • Floating IP-addresse:192.168.73.153

WunderTV ist von mehreren Elementen abhängig. Das wichtigste Element ist wunderserver, weil Streaming komplett von diese läuft. Darüber hinaus würde wunderserver2 nicht total eingerichtet, da die Übertragung der Dateien von wunderserver (wunderserver war mehr als 20giga) zu viel Zeit nimmt. Übrigens prüft der Loadbalancer welche Server verfügbar ist. Der wird eingerichtet sodass, wenn ein Sever nicht erreichbar ist, würde die zweite Server einfach übernommen. Es kann sein, dass ein von dem Server durch Malware oder anderen Schadversuch nicht mehr erreichbar ist. Aber wenn Loadbalancer befallen wird, funktioniert das Ganze nicht mehr. Ein zweiter Server in dieser Fall wunderserver2 könnte für mehrere Redundanzen sorgen.

Nginx mit RTMP module: Installation und Konfiguration

https://www.vultr.com/docs/setup-nginx-rtmp-on-ubuntu-14-04

Nginx ist eine der schneller Webserver. Es ist nicht nur moderne sondern auch flexibel.es muss manuell komplett als root installiert und Eingerichten werden.
lokale verzeichnis von nginx: /usr/local/nginx-streaming/

In Datei nginx wird wichtige Software für die Installation heruntergeladen.
die konfiguration von nginx

Für Compiler und git apt-get install git gcc make

Für the library: apt-get install libpcre3-dev

Für SSL modules: apt-get install libssl-dev

Nginx 1.4.3 source code: https://github.com/arut/nginx-rtmp-module mit der Kommando wget wird die Datei heruntergeladen und mit „unzip“ entpackt.

Falls Unzip_Package noch nicht installiert mit sudo apt-get install unzip installieren.
Dann nginx mit RTMP Module kompilieren:
./configure –add-module=/root/nginx/nginx-rtmp-module/ –with-http_ssl_module –prefix=/usr/local/nginx-streaming/

Am ende folgende Kommando ausführen:

  1. Make
  2. Make install

Um Statistic von Streaming zu sehen, brauchen wir stats.xml .das wurde von der nginx Datei zu /var/www/ copiert. Jetzt ist die Konfiguration fertig und müssen wir nginx restarten mit: /usr/local/nginx-streaming/sbin/nginx

Zu stoppen und/oder starten nginx kann auch folgende Kommando benutzt:

Sudo service nginx stop
Sudo service nginx start

Video Transkodierung: FFMPEG

FFMPEG wird verwendet, um eingehende Streams zu transkodieren und ein Vorschaubild zu erstellen. Dabei werden verschiedene Qualitätsstufen bereitgestellt. FFMPEG aus den offiziellen Paketquellen besitzt leider nicht alle benötigten Features, weshalb es manuell kompiliert werden muss. “

Installation und Konfiguration

installation und konfiguration gehen wie folgt

Installation:

  1. sudo apt-get install ffmpeg
  2. sudo apt-get install software-properties-common

Konfiguration Datei in /usr/local/nginx-streaming/conf

  1. cd /usr/local/nginx-streaming/conf
  2. nano nginx.conf

In Konfiguration Datei es gibt zwei block: RTMP und http

  • RTMP

Listen 1935: rtmp funktioniert in Port 1935
Application live: hier wird der Format von Video umgesetzt
Input Format: .mp4
Output Format: .flv
Input Video Source: /var/videos/MP4/
Output Video Source: rtmp:localhost/live360P/reiseFulda.flv
Mit diesem Kommando wird das Video umgewandelt:
exec ffmpeg -i /var/videos/MP4/reiseFulda1.mp4 -threads 1 -c:v libx264 -profile:v baseline -b:v 350K -s 640×360 -f flv -c:a aac -ac 1 -strict -2 -b:a 56k rtmp:
localhost/live360p/reiseFulda1.flv lol

<hidden>
</hidden>

Trouble Shooting

Oft gibt es Problem bei Einbindung der Web Player zu der Webseite

Server Startet nginx Server nicht selbst. Transkodierung von zu Streaming Video geht nicht automatisch
Beim Ausführung der nginx_server bekommen wir Fehler, dass Port sind schon belegt (sieht Bilder)

Prozessablauf für die Fehlerbehebung

Ein Skript wurde hergestellt um diese Problem zu beheben

  1. Alle nginx stoppen
  2. Gucke welche port/ipaddress benutzt nginx
  3. Starte der Richtige nginx in /usr/local/nginx-streaming/sbin/nginx
  4. Schaue nochmals welche Port ist besetzt
  5. Alle ffmpeg stoppen
  6. Ausführe ich die Transcodierung

Dns-Server: Installation und Konfiguration

In /etc/bind/named.conf.options ipaddresse von Google(8.8.8.8) in Forwards block hinzufügen.

keine externe zugrifft würde konfiguriert. <hidden> </hidden>

Skalierung, Backup und Restore

Unter Skalierung versteht man die Möglichkeit der Anpassung von der Server an eine kommende Situation ohne große Veränderung von Architekturen. Das kann kein Problem bei mir sein, da wir erstmals eine Dynamische Festplatte bekommen haben(laut Prof Rieger). Mit der Loadbalancer könnte abhängig von der Abfrage entweder ein Server zur Verfügung stellen. Komponenten die einzeln keine Funktionalität(Abhängigkeiten) haben werden zusammengefasst und einzeln lauffähige Komponenten gekapselt. Loadbalancer prüft welche Server ist verfügbar. Und diese wird für die Streaming benutzt. Der Ausfall einer Komponente die anderen Bestandteile des Servers unbrauchbar macht, sind sie zusammengefasst.

Da meine Instance zu groß(20giga) war könnte ich keine Schattenkopie erstellen. Damit andere Server gleiche Konfiguration bekommen, gibt es viel Möglichkeiten:

  • Wichtige Datei von der erste Server zu den anderen Servern kopieren
  • Oder nur die Konfiguration Datei exportieren (Vorteil: zeit sparen)

Hinzu wurde eine eigene Script für Backup zu hergestellt.

Hinweis: Hinweis: Skript soll alle Konfiguration Datei von nginx lokale speichern. Bei Ausfall einer Server könnte diese einfach wiederherstellen Es ist zwar nicht die beste Methode aber es gibt keine Methode, die 100% sicher ist.

Falls Script nicht funktionniert,gibt es auch die Möglichkeit eine Ftp_Session (mit Winscp oder FileZilla) zu der Server zu erstellen. Dann Dateien lokale kopiert. Einfache aber dauert ewig bei große Festplatte. Und bei Ausfall nur wiederherstellen.

Was mein Projekt betrifft habe ich Winscp benutzt und usr_Datei lokale gespeichert.( es gibt noch wichtige Datei wie zum Beispiel Root).
Vorteil von Winscp: funktioniert gut mit Putty

Monitoring

Bei mir gibt es zwei teile von monitoring:

  1. Monitoring von der Streaming selbst
  2. Monitoring von der Server

Monitoring von WunderTV erfolgt durch absetzen eines Ping-Requests und Empfang einer Ping-Response.
Und auch mit aufruft von dieser Url: http://192.168.73.145/stats Dadurch könnte ersehen Welche Video läuft und auch Streaming aktive oder nicht.

  • Streaming: inaktive

<hidden> </hidden>

  • Streaming: aktive

<hidden></hidden>

HAProxy für Load-Balancing: Installation und konfiguration

https://gridscale.io/community/tutorials/haproxy-tutorial-installation-debian-linux/ <hidden> </hidden> Ich habe die Konfiguration von haproxy nicht fertig gemacht aber ich gebe wie die Konfiguration gemacht könnten.

Installation: sudo apt-get install haproxy

Die Konfiguration erfolgt indem ich diese Datei /etc/default/haproxy editiere und 0 auf 1 setzen
<hidden></hidden>

Dann nano /etc/haproxy/haproxy.cfg

Hier werden ein paar Veränderung gemacht:

Wenn ich möchte, dass HAProxy bei jedem Systemart ausgeführt wird, verwende ich die Befehl update-rc.d.:
Sudo update-rc.d haproxy defaults

Dann bei Aufruf diese url auf eine Webseite http://192.168.73.153/haproxy?stats

Webseite

In meiner Webseite kann der Benutzer

  1. Sich anmelden
  2. Ein paar video anschauen
  3. Video suchen
  4. Chat(noch nicht implementiert)

Screenshot fertige webseite

<hidden></hidden>

Quelle zusammengefasst

editing.1584477812.txt.gz · Last modified: 2020-03-17 21:43 by franckjunior

Except where otherwise noted, content on this wiki is licensed under the following license: CC Attribution-Share Alike 4.0 International
CC Attribution-Share Alike 4.0 International Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki