通过 ffmpeg 和 NGINX 传输视频的效率大约为 80%

通过 ffmpeg 和 NGINX 传输视频的效率大约为 80%

服务器 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 大小。

相关内容