2016-05-14 11 views
0

das ist, was ich jetzt tue:Einzel RTMP zu anpassungsfähigen Streaming mit einem freien Medienserver und Bedienfeld

Ich bin ein Live-TV-Kanal mit einem teradek vidiu senden, die das Video über RTMP an eine AWS sendet EC2-Instanz mit flinkem Streamer-Server, vor Monaten mit wmspanel konfiguriert (in der Testphase). Der flinke Server transkodiert das rtmp und gibt mir einen HLS (m3u8), den ich auf der Webseite mit peer5 (jwplayer) abspiele. Das Problem dabei ist, dass das Live-Video nur in HD ist und die Clients mit langsamen Verbindungen das Video nicht sehen können oder manchmal stottern.

, was ich will:

ich einen anpassungsfähigen Strom will, dass jeder anschließen kann niedrige Geschwindigkeit, ein niedrigeres Bitrate Video sehen, und mit hohen Geschwindigkeit ein HD-Video sehen. Ich weiß, dass ich dies mit Servern wie wowza und anderen tun kann, das Problem ist der Preis, ich möchte einen kostenlosen Server mit kostenlosem Control Panel. Flinke Server ist kostenlos, aber wmspanel ist nicht, und jetzt kann ich nicht ändern oder etwas zu flinken machen, weil die Probezeit auf wmspanel vorbei ist!

Bitte helfen Sie mir dabei!

Antwort

1

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".

+1

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 –

+0

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

+0

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! –