Alles, was Sie fragen, kann mit nginx, dem nginx-rtmp Modul und ffmpeg, alles freie Software getan werden. Ich habe ein ähnliches Setup wie Sie (BlackMagic H264 Pro anstelle von Teradek, aber ansonsten das gleiche), ein paar TV-Kanäle zu übertragen.
Das einzige Problem ist, dass Sie Nginx selbst mit dem rtmp-Modul kompilieren müssten und wenn Sie ein Control Panel irgendeiner Art benötigen, müssten Sie es selbst schreiben.
Mein Setup funktioniert wie folgt:
1.- BM H264 Pro auf die lokalen Server an den Live-Switcher angeschlossen sendet einen HD-Stream auf eine EC2-Instanz mit Fedora 23
2.- Nginx-rtmp nimmt die Eingabe und ruft ffmpeg auf, um sechs verschiedene HLS-Livestreams (180p, 240p, 360p, 480p, 720p, 1080p) zu erstellen, die dann über CloudFront CDN bedient werden, um die Geschwindigkeit sicherzustellen.
Es funktioniert wirklich gut und ich hatte keine Probleme, CloudFront nimmt die Streams direkt von der EC2-Instanz und die Geschwindigkeit ist erstaunlich. Sie benötigen eine ziemlich mächtige Instanz (ich benutze ein m4.4xlarge) für die parallele Kodierung.
Mit PHP (oder einer anderen Sprache, ich mag nur PHP dafür) können Sie ein Bedienfeld und andere Nettigkeiten haben. Zum Beispiel verfolge ich alle Ansichten, pausiere, mache GeoIP und andere Metriken mit diesem Setup.
---------Update 4. August --------
meine conf-Datei für nginx hier:
application live-video {
access_log /webdata/logs/access/publish.log;
live on;
record all;
wait_key on;
record_path /webdata/batch/video;
record_unique on;
drop_idle_publisher 2s;
interleave on;
allow play all;
allow publish all;
notify_method get;
exec_push /usr/bin/ffmpeg -y -re -i rtmp://localhost:1935/live-video/$name -keyint_min 30 -x264opts "keyint=30:min-keyint=30:no-scenecut" -g 30 -r:v 30 -s 320x180 -b:v 256k -c:v libx264 -preset ultrafast -pix_fmt yuv420p -profile:v baseline -level 3.0 -c:a libfaac -ac 1 -ar 48000 -b:a 96k -f flv rtmp://localhost:1935/stream-video/240p -keyint_min 30 -x264opts "keyint=30:min-keyint=30:no-scenecut" -g 30 -r:v 30 -s 640x360 -b:v 512k -c:v libx264 -preset ultrafast -pix_fmt yuv420p -profile:v baseline -level 3.0 -c:a libfaac -ac 1 -ar 48000 -b:a 96k -f flv rtmp://localhost:1935/stream-video/360p -keyint_min 30 -x264opts "keyint=30:min-keyint=30:no-scenecut" -g 30 -r:v 30 -s 854x480 -b:v 1024k -c:v libx264 -preset ultrafast -pix_fmt yuv420p -profile:v baseline -level 3.0 -c:a libfaac -ac 1 -ar 48000 -b:a 96k -f flv rtmp://localhost:1935/stream-video/480p -c:a libfaac -ac 1 -ar 48000 -b:a 64k -f flv rtmp://localhost:1935/stream-video/aacp;
access_log off;
}
application stream-video {
live on;
access_log /webdata/logs/access/stream-video.log;
hls on;
hls_fragment 10s;
hls_playlist_length 5m;
hls_path /webdata/html/live/video;
}
Der Live-Stream RTMP veröffentlicht wird:// Server: 1935/Live-Video/Stream? Token = TOK; Dies ruft ffmpeg für die On-The-Fly-Transkodierung zu vier Qualitäten auf und veröffentlicht sie in der App "stream-video". Sie veröffentlichen also "Live-Video" und Ihre Nutzer sehen "Stream-Video".
Hallo hdezela. Danke für deine Antwort. Aber: 1) Muss ich mir nginx kompilieren? Gibt es ein vorgefertigtes Paket, das ich benutzen kann? 2) Wie verbinden Sie sich mit Cloudfront?Weil ich das mit s3 probiert habe, aber ich kann nur keinen Livestream abspielen, nur Dateien, die in s3 gespeichert sind. Danke –
Hallo Amin; 1) Ich habe kein vorgefertigtes nginx-rtmp-Binary gesehen, obwohl das Kompilieren selbst ziemlich einfach ist (im Grunde konfigurieren/make/make install), obwohl Sie sicherstellen müssen, dass alle Voraussetzungen vorhanden sind. 2) Sie können Ihre EC2-Instanz mit CloudFront mit einem benutzerdefinierten Ursprung verbinden, verwenden Sie einfach die reguläre URL Ihres Servers als Ausgangspunkt (http://docs.aws.amazon.com/AmazonCloudFront/latest/DeveloperGuide/DownloadDistS3AndCustomOrigins.html) . – hdezela
Hdzela Entschuldigung für die Verzögerung. Ich habe nginx kompiliert und jetzt habe ich 1 hls Strom. Aber ich war nicht in der Lage, die anderen minderwertigen Streams zu erstellen. Kannst du bitte deine nginx.conf teilen? Vielen Dank! –