Error de RTMP WriteN al usar NVENC mientras libx264 funciona bien a través de ffmpeg

Error de RTMP WriteN al usar NVENC mientras libx264 funciona bien a través de ffmpeg

Estoy intentando ejecutar algunas pruebas de transcodificación para determinar qué tan bien funciona ffmpeg en algunos servidores GPU que tenemos.

Desde mi escritorio estoy enviando una transmisión RTMP a través de OBS a un sistema de servidor de medios que tenemos en ejecución. Luego comencé ffmpeg con argumentos para extraer esa fuente del servidor de medios y enviarla de regreso a un punto de ingesta diferente en ese servidor. Entonces, por ejemplo, con libx264 lo invoco con lo siguiente:

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

Esto pretende ser una prueba básica sin realizar ninguna conversión significativa, y funciona perfectamente. Puedo suscribirme a rtmp://server/live/matt-test1 y ver mi video.

Sin embargo, cuando cambio libx264 a nvec:

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

Después de unos 70-90 fotogramas me da el error WriteN, RTMP send error 104 (136 bytes). Los metadatos que ffmpeg ve en este video son:

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

Parece que NVENC tiene cierta incompatibilidad con rtmp que libx264 no tiene. También es interesante notar que si uso ffmpeg para codificar el video del conejito de Big Buck y lo envío a rtmp://server/live/matt-input, entonces puedo usar NVENC con éxito para bajar el video y volver a subirlo sin problemas. Como referencia, FFMPEG ve el vídeo de BBB como:

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

Si ayuda, compilé FFMPEG siguiendo las instrucciones dehttp://developer.download.nvidia.com/compute/redist/ffmpeg/1511-patch/FFMPEG-with-NVIDIA-Acceleration-on-Ubuntu_UG_v01.pdfy el comienzo de la salida de ffmpeg se ve así:

# 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

Intenté cambiar la configuración de OBS una a la vez (tanto en la versión multiplataforma como en la no multiplataforma) sin éxito. La extracción de otras transmisiones parece causar que suceda lo mismo, y la única transmisión que he podido extraer, transcodificar y luego volver a enviar a través de RTMP (a través de NVENC) parece ser una que se origina directamente desde FFMPEG.

¿Alguien tiene alguna sugerencia sobre lo que podría estar mal? ¿Hay algo por mi parte que está provocando que rtmp falle o es un error en el codificador NVENC?

información relacionada