RTMP WriteN-Fehler bei Verwendung von NVENC, während libx264 über ffmpeg einwandfrei funktioniert

RTMP WriteN-Fehler bei Verwendung von NVENC, während libx264 über ffmpeg einwandfrei funktioniert

Ich versuche, einige Transcodierungstests durchzuführen, um herauszufinden, wie gut ffmpeg auf einigen unserer GPU-Server funktioniert.

Von meinem Desktop aus sende ich einen RTMP-Stream über OBS an ein Medienserversystem, das wir betreiben. Dann habe ich ffmpeg mit Argumenten gestartet, um diesen Feed vom Medienserver abzurufen und ihn an einen anderen Aufnahmepunkt auf diesem Server zurückzuschicken. Mit libx264 rufe ich es beispielsweise folgendermaßen auf:

ffmpeg -loglevel verbose -i "rtmp://server/live/matt-input live=1" -vcodec libx264 -ar 44100 -f flv "rtmp://server/live/matt-test1"

Dies ist als grundlegender Test ohne sinnvolle Konvertierung gedacht und funktioniert einwandfrei. Ich kann mich bei rtmp://server/live/matt-test1 anmelden und mein Video ansehen.

Wenn ich jedoch libx264 in nvec ändere:

ffmpeg -loglevel verbose -i "rtmp://server/live/matt-input live=1" -vcodec nvenc -ar 44100 -f flv "rtmp://server/live/matt-test1"

Nach etwa 70-90 Frames erhalte ich den Fehler WriteN, RTMP send error 104 (136 bytes). Die Metadaten, die ffmpeg aus diesem Video erkennt, sind:

Metadata:
  Server                NGINX RTMP (github.com/arut/nginx-rtmp-module)
  width                 1920.00
  height                1080.00
  displayWidth          1920.00
  displayHeight         1080.00
  duration              0.00
  framerate             30.00
  fps                   30.00
  videodatarate         0.00
  videocodecid          0.00
  audiodatarate         0.00
  audiocodecid          0.00
  profile
  level
Input #0, live_flv, from 'rtmp://server/live/matt-input live=1':
  Metadata:
    Server          : NGINX RTMP (github.com/arut/nginx-rtmp-module)
    displayWidth    : 1920
    displayHeight   : 1080
    fps             : 30
    profile         :
    level           :
  Duration: 00:00:00.00, start: 4.736000, bitrate: N/A
    Stream #0:0: Video: h264 (High), 3 reference frames, yuv420p(tv, bt709/bt709/iec61966-2-1), 1920x1080 (1920x1088) [SAR 1:1 DAR 16:9], 30.30 fps, 30 tbr, 1k tbn, 60 tbc
    Stream #0:1: Audio: aac (LC), 48000 Hz, stereo, fltp

Es scheint, dass NVENC eine gewisse Inkompatibilität mit RTMP hat, die libx264 nicht hat. Es ist auch interessant zu bemerken, dass ich, wenn ich ffmpeg verwende, um das Big Buck Bunny-Video zu kodieren und es hochzuladen rtmp://server/live/matt-input, NVENC problemlos verwenden kann, um das Video herunterzuziehen und wieder hochzuladen. Zur Referenz: Das BBB-Video wird von FFMPEG wie folgt angezeigt:

Metadata:
  Server                NGINX RTMP (github.com/arut/nginx-rtmp-module)
  width                 1920.00
  height                1080.00
  displayWidth          1920.00
  displayHeight         1080.00
  duration              0.00
  framerate             60.00
  fps                   60.00
  videodatarate         0.00
  videocodecid          7.00
  audiodatarate         125.00
  audiocodecid          1.00
  profile
  level
Input #0, live_flv, from 'rtmp://server/live/matt-input live=1':
  Metadata:
    Server          : NGINX RTMP (github.com/arut/nginx-rtmp-module)
    displayWidth    : 1920
    displayHeight   : 1080
    fps             : 60
    profile         :
    level           :
  Duration: 00:00:00.00, start: 1.950000, bitrate: N/A
    Stream #0:0: Video: h264 (High), yuv420p(tv), 1920x1080 [SAR 1:1 DAR 16:9], 62.50 fps, 60 tbr, 1k tbn, 120 tbc
    Stream #0:1: Audio: adpcm_swf, 44100 Hz, stereo, s16, 352 kb/s

Falls es hilft, ich habe FFMPEG kompiliert, gemäß den Anweisungen vonhttp://developer.download.nvidia.com/compute/redist/ffmpeg/1511-patch/FFMPEG-with-NVIDIA-Acceleration-on-Ubuntu_UG_v01.pdf, und der Anfang der ffmpeg-Ausgabe sieht so aus:

# ffmpeg -i "rtmp://server/live/matt-input live=1" -vcodec nvenc -ar 44100 -f flv "rtmp://server/live/matt-test1"
ffmpeg version N-76538-gb83c849 Copyright (c) 2000-2015 the FFmpeg developers
  built with gcc 4.8 (Ubuntu 4.8.4-2ubuntu1~14.04)
  configuration: --enable-nonfree --enable-nvenc --enable-nvresize --extra-cflags=-I../cudautils --extra-ldflags=-L../cudautils --enable-gpl --enable-libx264 --enable-librtmp
  libavutil      55.  5.100 / 55.  5.100
  libavcodec     57. 15.100 / 57. 15.100
  libavformat    57. 14.100 / 57. 14.100
  libavdevice    57.  0.100 / 57.  0.100
  libavfilter     6. 15.100 /  6. 15.100
  libswscale      4.  0.100 /  4.  0.100
  libswresample   2.  0.101 /  2.  0.101
  libpostproc    54.  0.100 / 54.  0.100

Ich habe versucht, meine OBS-Einstellungen einzeln zu ändern (sowohl Multiplattform- als auch Nicht-Multiplattform-Versionen), aber ohne Erfolg. Das Abrufen von anderen Streams scheint dasselbe zu verursachen, und der einzige Stream, den ich abrufen, transkodieren und dann über RTMP (über NVENC) erneut pushen konnte, scheint einer zu sein, der direkt von FFMPEG stammt.

Hat jemand Vorschläge, was falsch sein könnte? Liegt es an mir, dass RTMP fehlschlägt, oder ist es ein Fehler im NVENC-Encoder?

verwandte Informationen