2

这个问题是关于使用 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。

4

1 回答 1

0

It's about video encoder's memory requirements: at this resolution the application does not fit standard 2 GB of address space of a 32-bit application. You might want to link with /LARGEADDRESSAWARE to bypass out of memory condition.

于 2016-08-11T09:47:46.553 回答