在IMediaControl :: Run上DirectShow MP4Demux应用程序内存不足

时间:2015-08-28 09:23:05

标签: c++ windows directshow mp4

我使用Geraint Davies' MP4Demux来传输一些先前编码的mp4文件。

在过去的调查中,我发现MP4Demux为加载时的所有原子分配内存。对于较小的文件,这可以正常工作,但使用更大的mp4文件(大约1.2GB)我在IMediaControl :: Run上出现内存不足错误。

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

1 个答案:

答案 0 :(得分:2)

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

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

有时它只是过程接近虚拟地址空间限制并且失败并不是立竿见影的,但内存压力使其他事情很快失败。