av_interleaved_write_frame (): сброс соединения по пиру - использование ffmpeg, подключенного к локальному nginx - PullRequest
0 голосов
/ 06 апреля 2019

У меня установлен локальный веб-сервер nginx с nginx-rtmp-module .

У меня есть 2 источника RTMP, которые подаются в локальную сеть на rtmp://127.0.0.1/live-video и rtmp://127.0.0.1/live-audio,Затем эти двойки будут объединены и снова введены в rtmp://127.0.0.1/live.Последний будет тем, который я буду использовать.

Причина, по которой я это сделал, заключается в том, что я хочу сделать шумоподавление с помощью sox.

Установка выглядит следующим образом

  1. rtmp://127.0.0.1/live-video - он использует ffmpeg для захвата только экрана (видео) и затем выводит на такой URL с помощью команды

    ffmpeg -analyzeduration 0 -video_size 1280x1080 -framerate 25 -f x11grab -i :0.0 -vcodec libx264 -flags +global_header -preset ultrafast -minrate 7200 -maxrate 8k -vsync 1 -f flv -metadata streamName=ZombieHeroLiveStream rtmp://127.0.0.1/live-video
    
  2. rtmp://127.0.0.1/live-audio - он использует sox для шумоподавления, а затем ffmpeg для подачи на такой URL с помощью команды

     ffmpeg -f alsa -ac 1 -i default -preset ultrafast -f flac - | sox - -p noisered /tmp/noise.prof 0.21 | ffmpeg -analyzeduration 0 -thread_queue_size 2 -i - -f flv -preset ultrafast rtmp://127.0.0.1/live-audio
    
  3. rtmp://127.0.0.1/live - он использует ffmpeg для объединениявыше двух источников затем выводят в такой URL, это тот, который я тестировал просмотр через VLC (который работает нормально) с командой

     ffmpeg -analyzeduration 0 -thread_queue_size 512 -rtmp_live live -flags +global_header -i "rtmp://127.0.0.1/live-video" -analyzeduration 0 -thread_queue_size 512 -rtmp_live live -flags +global_header -i "rtmp://127.0.0.1/live-audio" -c:v copy -c:a copy -map 0:v -map 1:a -async 1 -vsync 1 -video_size 1280x1080 -fflags +genpts -framerate 30 -preset ultrafast -minrate 7200 -maxrate 8k -flags +global_header -segment_list_flags +live -rtmp_live live -f flv -metadata streamName=ZombieHeroLiveStream "rtmp://127.0.0.1/live"
    

Настройка работает отлично, я протестировал и подтвердилпросмотр через VLC с таргетингом на URL-адрес 3. Проблема в том, что в течение нескольких раз после запуска всех трех вышеперечисленных вариантов 1. завершится и, таким образом, остановится вся кодировка.Отображаемая ошибка:

av_interleaved_write_frame(): Connection reset by peer29.88 bitrate=2021.8kbits/s dup=1791 drop=0 speed=0.998x    
    Last message repeated 2 times
...

Error writing trailer of rtmp://127.0.0.1/live-video: Connection reset by peer

Независимо от того, как я изменяю и изменяю флаги / параметры командной строки, она будет заканчиваться, как ошибка выше.Обратите внимание, что я довольно сильно изменил флаги, поэтому некоторые флаги могут быть не нужны.

Полный журнал ошибок от 1. is здесь .

КонфигурацияСервер nginx здесь .Он довольно простой, но позже я буду использовать его для ретрансляции на несколько целевых RTMP-серверов.

Я нахожусь на Ubuntu 18.04, 4.18.0-17-generic с 8 ГБ ОЗУ, 4 ядрами ЦП сffmpeg ffmpeg version 3.4.4-0ubuntu0.18.04.1 Copyright (c) 2000-2018 the FFmpeg developers built with gcc 7 (Ubuntu 7.3.0-16ubuntu3), а с Nginx

nginx version: nginx/1.14.2
built by gcc 7.3.0 (Ubuntu 7.3.0-27ubuntu1~18.04) 
built with OpenSSL 1.1.0g  2 Nov 2017 (running with OpenSSL 1.1.1b  26 Feb 2019)
TLS SNI support enabled
configure arguments: --with-http_ssl_module --add-module=../nginx-rtmp-module-1.2.1

Итак, опять вопрос, как я могу исправить такую ​​проблему?Будем благодарны за любые предложения.

Важное редактирование : Я только что узнал, что ввел неправильную дублированную команду для 3. Теперь она исправлена!Извините за это.

Обновление : я могу записать звук с помощью ffmpeg, затем выполнить шумовой фильтр с помощью sox, а затем выполнить потоковую передачу на целевой rtmp с помощью ffmpeg.Но шумоподавление меня пока не устраивает.См. Выше в 2. для его обновленной команды.И согласно this , у sox есть проблема в понимании нескольких байтов, поэтому вместо этого я использую формат flac в конвейере.Тем не менее мой вопрос остался, так как это обновление для улучшения для команды в 2.

...