我收到的H.264 stream
使用的SDK中的DVR。 有内存泄漏和我认为这是导致所有泄漏的SDK。 但是,当我记录的数据流,并通过从磁盘(不涉及任何第三方DLL)的一个读起的帧中的一个,我注意到,这个问题是不是该dll,但流本身。
足够奇怪, DivX H264 Decoder
是不导致内存泄漏,但是当流很长时间运行时,有时的DivX解码器崩溃以及唯一的编解码器。 我更愿意使用Microsoft DTV-DVD Video Decoder
,但它会导致巨大的内存泄漏和下降很多帧。 我尝试过许多其他的H.264解码器的工作方式。
我检查了h.264 frames
使用一些h.264 parsers
与其他一些自由问题流比较,但我没有发现任何东西从日志明显。
由于我的问题是关于H.264框架结构,我已经准备了一个名为源过滤FramesFromFileSourceFilter
,你可以从下面下载。
http://www.akaydin.com/directshow/FramesFromFileSourceFilter.zip
这是一个Visual Studio 2008
项目和所有的依赖关系都包含在相对位置的文件夹(包括H.264帧)的zip文件。 所以,你需要做的是编译项目,注册与输出regsvr32.exe
并运行你的GraphEdit或GraphStudio想要的任何H.264解码过滤器。 实施例图是下面。
也H264帧是在低于其是由VLC可玩的链接的单个原始H264文件(带有错误FPS由于原来是12 FPS)。
http://www.akaydin.com/directshow/stream.zip
题:
什么可能导致除的DivX解码器与国内外众多知名H264解码器的内存泄漏问题。 什么是错与此流?
更新1
读取数据线被移除和功能转移到FillBuffer不使用任何缓冲和标志。 问题是一样的。
http://www.akaydin.com/directshow/FramesFromFileSourceFilterUpdate1.zip
更新2
UPDATE1使用Sleep()
在FillBuffer()
函数,它是导致一些问题。 现在我除去Sleep()
和用于SetTime()
以具有12〜FPS。 这也解决了Microsoft DTV-DVD Video Decoder
的下落框架的问题,但没有解决内存问题。
http://www.akaydin.com/directshow/FramesFromFileSourceFilterUpdate2.zip
内存增加发生在Working Set
而已。 Virtual Bytes
和Private Bytes
似乎是稳定的。 什么可能导致连续Working Set
内存增量仅发生与Microsoft DTV-DVD Video Decoder
?