即使使用 -fflags nobuffer,FFPlay 也会缓冲数据包

即使使用 -fflags nobuffer,FFPlay 也会缓冲数据包

因此,我正在使用将 mp4 视频流式传输ffmpeg到另一台主机,然后使用 读取该流ffplay。以下是我使用的命令:

对于 IP 为 192.168.1.1 的发送主机:

ffmpeg -re -i sample.mp4 -strict 2 -preset ultrafast -vcodec copy -an -f rtp rtp://192.168.3.1:5010 -sdpfile sample.sdp

对于 IP 为 192.168.3.1 的接收主机:

ffplay -rtbufsize 0 -reorder_queue_size 0 -fflags nobuffer+fastseek -protocol_whitelist file,udp,rtp -i sample sample.sdp

到目前为止一切运行良好。然后我尝试模拟两个主机之间的故障链接(使用ip link set eth0 down或限制带宽tc),并希望立即看到结果。

例如,当我关闭两个主机之间的链接时,我期望ffplay停止播放。但事实并非如此。ffplay流停止后仍继续播放 7-8 秒的视频,这意味着某处存在某种缓冲。

此外,当我恢复链接时,我立即看到 UDP 数据包到达接收器,但又ffplay需要 10 秒钟才能启动视频。我尝试了所有可能的命令来关闭缓冲,ffplay但无济于事。

有没有办法在连接丢失/恢复后立即开始/停止播放?

PS 我也尝试使用使用 TCP 的 RTMP,但结果更糟。

答案1

好的,摆弄了 ffmpeg 和 ffplay 选项后,我发现它们可以按我想要的方式工作:

流媒体端:ffmpeg -re -i sample.mp4 -f mpegts -codec:v mpeg1video -s 640x480 -b:v 800k -bf 0 -codec:a mp2 -ar 44100 -ac 1 -b:a 128k udp://192.168.3.1:5000

接收方:ffplay -probesize 32 -sync ext -fflags nobuffer udp://localhost:5000

当我关闭连接两个主机的链接时,ffplay 播放会立即停止,并在链接恢复后重新启动。

相关内容