本题是关于使用Window Media API输出4K WMV视频(虽然理论上WMV不支持输出到4K)
在 32 位和 64 位 Win10 上调用 IWMWriter->BeginWriting() 后(在两个系统上 BeginWriting() 返回 S_OK),程序占用大约 450MB 内存。
之后我开始使用 IWMWriter->AllocateSample() 分配样本缓冲区并使用 IWMWriter->WriteSample() 将其写入接收器。
在 64 位 Win10 上,转换可以正常完成,但在 32 位 Win10 上,WriteSample() 在写入几帧后失败并出现“内存不足”错误。
我在 2 个系统上看到的唯一区别是:在调用 BeginWriting() 之前,64Win10 占用 110 MB 内存,因此在调用 BeginWriting() 之后,使用 110+450。 在 32 位 Win10 上,在 BeginWriting() 之前使用 150 MB,因此之后使用 150+450。
失败转换的峰值工作集只有 761MB,任何人都知道为什么在这种情况下 WriteSample() 返回内存不足。有什么解决方法吗?
==更新:=========================================== ==
源视频同时包含视频和音频,在失败的情况下程序写入视频和音频并且写入视频失败。
如果我从文件中取出音轨使其只包含视频,则转换可以正常完成。峰值工作集为 716MB。
最佳答案
这是关于视频编码器的内存要求:在此分辨率下,应用程序不适合 32 位应用程序的标准 2 GB 地址空间。您可能想链接 /LARGEADDRESSAWARE绕过内存不足的情况。
关于c++ - 设置 ITEMWriter 写入 4K 视频,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38889312/