我有一个安装了nginx-rtmp-module的本地nginx Web服务器。
我有2个RTMP源,分别从rtmp://127.0.0.1/live-video
和rtmp://127.0.0.1/live-audio
馈入本地网络。然后,这两个将被合并并再次馈入rtmp://127.0.0.1/live
中。后者将是我将要使用的那个。
我这样做的原因是我想通过sox
进行降噪。
设置如下
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
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
rtmp://127.0.0.1/live
-它使用ffmpeg
组合上述两个源,然后输出到这样的URL中,这是我测试过的通过VLC(可以正常使用)命令查看的URL >
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的完整错误日志是here。
nginx服务器的配置为here。这是非常基本的,但是以后我将进一步使用它中继到多个目标RTMP服务器。
我使用的是Ubuntu 18.04、4.18.0-17-generic,具有8 GB的RAM,具有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的4个CPU内核
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进行噪声过滤,然后使用ffmpeg传输到目标rtmp。但是降噪还不令我满意。有关更新的命令,请参见上面的2.。根据{{3}},sox在理解几个字节方面存在问题,因此我在管道中使用flac格式。仍然有我的问题,因为此更新是为了改进2中的命令。