使用DirectShow写入文件时出现帧丢失

时间:2018-06-25 10:09:08

标签: video video-capture directshow avi

我们的应用程序将未压缩的视频帧写入avi文件。如果性能不足,则丢弃帧(可能由Avi Muxer丢弃)。这当然不能解决。但是我们的问题是,我们没有找到一种方式来告知用户有关情况。我们测量发送到Avi Muxer的帧速率,这是正确的。但是我们可以看到写入性能不足,在写入的avi文件中丢失了帧。有人知道如何测量avi文件中写入帧的数量吗?

我找到了一个相关的问题here,但这并没有给我答案。

2 个答案:

答案 0 :(得分:1)

丢弃帧是因为未压缩视频的写入花费了太多时间,最终阻塞了流水线,因此视频捕获过滤器的捕获延迟,并且捕获过滤器在捕获时必须丢弃。

因此,您可以使用IAMDroppedFrames检查视频捕获过滤器,并随着捕获的进行找出丢弃状态。

接下来,您可以检查AVI Mux之前的视频帧的时间戳,并解释掉帧丢失的异常时间间隔。可以在管道中已有的任何自定义过滤器中完成此操作,如果没有自定义过滤器,则可以添加Sample Grabber实例只是为了关注流内容。

最后,一旦文件创建完成,您就可以回读视频轨道,并再次将帧时间与帧速率进行比较。一旦看到帧之间的距离大于预期的帧时间,就可以将其转换为丢帧的数量。

答案 1 :(得分:0)

如果要保存到标准硬盘驱动器,请考虑保存到SSD,因为它快得多,可以防止丢帧。

如果需要太多空间,请最终将SSD用作临时驱动器,然后在录制完成后,将.avi文件移动到后台的硬盘驱动器中。