在imedicontrol上直接显示MP4Demux应用程序内存不足

DirectShow MP4Demux application out of memory on IMediaControl::Run

本文关键字:MP4Demux 应用程序 内存不足 显示 imedicontrol      更新时间:2023-10-16

我正在使用Geraint Davies的MP4Demux来传输一些以前编码的mp4文件。

在过去的调查中,我发现MP4Demux在加载时为所有原子分配内存。对于较小的文件,这工作ok,但使用较大的mp4文件(约1.2GB),我得到一个内存不足的错误在imedi控件::运行。

一种选择是重写/编辑mp4 demux,使其具有内存池/循环缓冲区,并且仅在需要/请求时读取帧,但我想知道是否有更简单的解决方案,例如以某种方式增加DirectShow应用程序可以使用的内存(虽然它是32位控制台应用程序)。

图中典型的内存消费者是内存分配器。撇开潜在的原因不谈,有时分配过多:缓冲区太多和/或缓冲区太大。分配通常发生在停止到暂停的转换中,这可能是Run调用的一部分(它实际上是Pause调用的一部分,但是如果您在停止时调用Run,那么也会有隐式的Pause调用)。

无论原因是什么,分配器是首先要检查的:暂停图形并检查进程私有字节,进程虚拟地址消耗,分配器属性(GraphStudioNext和DirectShowSpy应该一起能够做到这一点),并检查它是否有意义或它是抓取太多。

有时它只是使进程太接近虚拟地址空间限制而不是立即失败,但是内存压力使其他东西在不久之后失败。