在服务器 1我正在运行它(并且它正在循环):
ffmpeg -re -stream_loop -1 -i game.webm -c:v libx264 -preset veryfast -b:v 6000k -maxrate 6000k -bufsize 6000k -pix_fmt yuv420p -f flv rtmp://1.1.1.1/live
在服务器 2我已经设置了 NGINX 并且正在运行这个:
ffmpeg -y -i rtmp://localhost/live -c copy -f flv game-SPOOL.mp4 -c copy -f flv - | ffplay -f flv -
由于服务器 1 上的命令处于循环中,我只是继续运行并停止服务器 2 上的命令。
奇怪的是,大约 80% 的时间它可以成功传输视频和音频,但 20% 的时间只有音频可以传输。
在所有 ffmpeg 输出文本中,我包含了一些我认为最重要的信息。如您所见,当它失败时,它实际上不会拾取视频流(流 #0:1)。
服务器2工作时进行输出(ffplay输出视频和音频)
Input #0, flv, from 'rtmp://localhost/live': sq= 0B f=0/0
Metadata:
|RtmpSampleAccess: true
Server : NGINX RTMP (github.com/arut/nginx-rtmp-module)
displayWidth : 1920
displayHeight : 1080
fps : 30
profile :
level :
Duration: 00:00:00.00, start: 5685.882000, bitrate: N/A
Stream #0:0: Audio: mp3, 48000 Hz, stereo, fltp, 128 kb/s
Stream #0:1: Video: h264 (High), yuv420p(progressive), 1920x1080 [SAR 1:1 DAR 16:9], 5999 kb/s, 30 fps, 30 tbr, 1k tbn, 60 tbc
不起作用时在服务器2上输出(ffplay输出视频和音频)
Input #0, flv, from 'rtmp://localhost/live': sq= 0B f=0/0
Metadata:
|RtmpSampleAccess: true
Server : NGINX RTMP (github.com/arut/nginx-rtmp-module)
displayWidth : 1920
displayHeight : 1080
fps : 30
profile :
level :
Duration: 00:00:00.00, start: 5309.446000, bitrate: N/A
Stream #0:0: Audio: mp3, 48000 Hz, stereo, fltp, 128 kb/s
答案1
将 wait_video 添加到配置中。
https://github.com/arut/nginx-rtmp-module/wiki/Directives#wait_video
您可能还应该在广播端设置较小的 GOP 大小。