ffmpeg mpegts udp 流意外地产生急剧增加的数据包速率

ffmpeg mpegts udp 流意外地产生急剧增加的数据包速率

我正在使用 ffmpeg 3.4.5 进程将 MPEG-TS 视频从计算机屏幕传输到录像机。录像机有效地捕获网络流量(如混杂的 wireshark)并生成文件.cap。我使用的命令行是:

ffmpeg -v -8 -y -f fbdev -i /dev/fb0 -filter:v "crop=640:480:0:0" -threads 2 -preset ultrafast -tune zerolatency -vcodec libx264 -x264opts crf=20:vbv-maxrate=3000:vbv-bufsize=150:intra-refresh=1:slice-max-size=1500:keyint=30:ref=1 -f mpegts udp://$RECORDER_IP:1235?pkt_size=188&buffer_size=65535

从命令行可以看到,输入是Linux帧缓冲区。

然后需要从文件中重新组合视频.cap,我基本上是通过连接 UDP 数据报的有效载荷并将数据放入文件中来完成此操作.ts。这种方法长期以来一直运行良好。

最近我开始遇到问题,.cap与我之前看到的相比,文件每单位时间包含的数据包数量有所增加。这导致提取的.ts文件以慢动作播放。这种情况似乎只是有时发生。我的.cap一些文件显示正常的数据包速率(大约 650 个数据包/秒),而其他一些文件的数据包速率为 3.75 倍,而没有更改任何 ffmpeg 选项或录制器设置。

我甚至有一个.cap在两个相同的 ffmpeg 进程同时运行时创建的文件,唯一的区别在于命令行上提供的目标 IP 地址,我可以看到数据包以正常速率发送到一个 IP 地址,而数据包在同一个文件中以更快的速率发送到另一个 IP 地址.cap

我不明白为什么我看到的数据包速率不同。最终我需要让重新组装的视频文件以正确的速度可靠地播放。

我该如何实现这一点?我是否可以在 ffmpeg 命令行上添加更好的参数来避免数据包速率发生变化?还有其他可能的原因吗?

提前致谢!

相关内容