![ffmpeg 使用 UDP 输出时出现高数据包丢失](https://linux22.com/image/1577952/ffmpeg%20%E4%BD%BF%E7%94%A8%20UDP%20%E8%BE%93%E5%87%BA%E6%97%B6%E5%87%BA%E7%8E%B0%E9%AB%98%E6%95%B0%E6%8D%AE%E5%8C%85%E4%B8%A2%E5%A4%B1.png)
我正在尝试使用 ffmpeg 将我们的 hls 流转码为 UDP 多播流,但丢失的数据包太多。
我正在使用以下命令进行转码
ffmpeg \
-loglevel warning \
-nostats \
-re \
-max_reload 2 \
-i "http://hls-server/stream/playlist.m3u8" \
-c:v copy \
-c:a copy \
-f mpegts \
-flush_packets 0 \
"udp://remote-ip:40001?pkt_size=1316&buffer_size=8388608"
在远程主机上,我正在运行检查 mpegts 标头连续性计数器的客户端,并且每分钟都会出现几次错误。
我已经使用 iperf - 100 mb/s 测试了服务器之间的链接半小时,没有丢失一个数据包。
我让这个测试与 ffmpeg 并行运行,并且 ffmpeg 流出现了前面提到的数据包丢失,但是 iperf 没有出现数据包丢失。
我已经尝试调整 net.core.rmem_max 和 net.core.wmem_max,但没有成功。我尝试增加网卡缓冲区,ethtool -G tx xxx
也没有成功。我已经尝试了多个版本的 ffmpeg 3.3.9、3.4.5、4.0.3 和 4.1。
有人知道什么原因导致此问题以及如何解决它吗?