Streamingdienste im Internet gibt es viele, einige davon hat man vllt. sogar schon mal genutzt – sei es als user oder als broadcaster. Diese Dienste sind praktisch, weil man sich nen Account eben im Web klicken kann, sie meist irgendwelche sozialen Features haben und vllt. sogar Aufzeichnungen der Übertragungen erstellen können. Sehr viel mehr Flexibilität ist aber nicht zu erwarten.
Mehr Freiheiten hat man aber definitiv mit seinem eigenen Streaming Server – nicht zuletzt weil es so kaum Beschränkungen gibt, was man übertragen darf (von rechtlich fragwürdigen Inhalten mal abgesehen).
Dieser Streaming Server ist mit nginx, einer freien Webserver Software und einem optionalen Modul recht einfach aufzusetzen, dafür benötigt man logischerweise erstmal einen Server, wobei es zumindest für erste Tests relativ egal ist, wie stark er ist, das kann ein Rootserver, ein kleiner V-Server oder gar ein Raspberry Pi sein.
Hierzu installieren wir (auf einem Debian System) erstmal zum Kompilieren die nötigen Abhängigkeiten: (alle Schritte als user root)
$ aptitude install build-essential libpcre3 libpcre3-dev libssl-dev git-core
Dann den aktuellen Mainline Version des nginx Quellcodes:
$ cd /usr/local/src/ $ wget http://nginx.org/download/nginx-1.5.12.tar.gz
Und den aktuellen Snapshot des rtmp-Moduls:
$ git clone https://github.com/arut/nginx-rtmp-module.git
Nun alles entpacken und in das Verzeichnis wechseln:
$ tar xfvz nginx-1.5.12.tar.gz $ cd nginx-1.5.12
Wir konfigurieren den Quellcode so, dass das rtmp Modul gleich mit reinkompiliert wird:
$ ./configure --with-http_ssl_module --add-module=../nginx-rtmp-module $ make $ make install
Jetzt ist der nginx unter /usr/local/nginx/ intalliert und kann konfiguriert werden. Hierzu reicht für erste einfache (lokale) Tests schon eine simple application wie im Beispiel live zu sehen, möchte man etwas mehr „security-by-obscurity“, kann man eine weitere app anlegen, die mit hidden path „geschützt“ Streams annimmt und auf die live app pusht – bei Bedarf sogar mit Rekodierung oder Aufzeichnung:
# keep $PATH env PATH; #needed to be able to call program names without full path rtmp { server { listen [::]:1935 ipv6only=off; # needed to listen to IPv4 *and* IPv6 chunk_size 4096; application hyper-secret-hidden-app-name { live on; # one-to-many streaming meta copy; push rtmp://localhost/live/; # push stream to app "live" # push rtmp://live−fra.twitch.tv/app/; # exec avconv −i rtmp://localhost/secret_input_1395149336/$name −c copy −f flv rtmp://localhost/live/$name; allow publish 192.168.122.0/24; allow publish 192.168.126.0/24; allow publish 212.124.40.2; deny publish all; allow play 127.0.0.1; deny play all; record all; record_path /tmp/rec; record_unique on; record_interval 60s; exec_record_done avconv −i $path −c copy /var/www/cloud.commander1024.de/docs/streamdumps/$basename.mp4; } application live { live on; record off; allow publish 127.0.0.1; deny publish all; allow play all; } } }
Dieser Stream kann nun mit ffmpeg, avconv, praktischen Skriptsammlungen wie der von wargio oder gängigen grafischen Programmen wie der Open Broadcaster Software (OBS), Xsplit bespielt werden.
Zum Abspielen bietet sich jeder halbwegs gescheite Mediaplayer von vlc über (s)mplayer an, sowie diverse (Flash)-basierte Player zum Einbetten in Webseiten. Als Beispiele seinen das der Flowplayer oder der JW Player genannt. Will man den Stream ohne Flash abspielen oder auch auf iOS Geräten, muss man den Stream wieder mit avconv umverpacken in das .mp4 Containerformat und lässt sich so ebenfalls mit dem rtmp Modul streamen, hier deswegen noch ein Hinweis auf die Doku des Moduls.
Hallo Marcus,
Ich hoffe, dass dieser Thread nicht zu alt ist, aber ich hätte da mal eine Frage. Ich will meine Videos selber streamen. Kann ich einen solchen nginx server auch irgendwie über all inkl einrichten. Hab dort 250 gb, die ich kaum nutze.
Und bevor ich jetzt 60 Euro für Vimeo ausgebe, würde ich die Videos gern selber hosten…
Die haben mir gesagt, dass das nicht funktioniert. Aber geht das irgendwie?
[…] https://obsproject.com/forum/resources/how-to-set-up-your-own-private-rtmp-server-using-nginx.50/ https://www.commander1024.de/wordpress/2014/03/eigenen-rtmp-streaming-server-aufsetzen/ Weitere Infos […]
Was muss ich machen, damit ich den livestream nicht nur lokal sende, sondern auf meiner Website einbinden kann, und es alle sehen können?
Habe alles so gemacht wie beschrieben, ich kann den server bespielen, aber wenn ich dann versuche es mit vlt abzuspielen, oder einem anderen den link schicke (mit protfreigabe und allem) das geht es trozdem nicht. wie kann ich das beheben !?
Hallo Marcus,
deine Beschreibung ist kurz, schmerzlos und trifft den Nagel auf den Kopf.
O.K. warum ich schreibe?
Warum steht deine Seite auf meiner Firfox 37.0.1 canonical 1.0 Blacklist?
Uwe
SSL Zertifikat abgelaufen und deshalb schlägt auch der OCSP Test fehl. Ist aber nicht weiter schlimm, verschlüsselt ist es dennoch alles, bin nur zu faul zum Verlängern …