c++ - 设置 ITEMWriter 写入 4K 视频

标签 c++ video wmv asf windows-media-encoder

本题是关于使用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/

相关文章:

google-chrome - 在 Chrome 中嵌入 .WMV 文件

winforms - DirectShow/WinForms 中的硬件加速视频

c++ - 我怎样才能用osg api在osgearth上画一个三角形

.net - MediaElement 可以播放哪些类型的视频?

c++ - 如何在运行时给出 "hello world"?

javascript - 如何制作过期/签名视频嵌入网址

java - 将视频嵌入到 Java 应用程序中?

c# - 使用 C# 将视频从 Mp4、avi 格式转换为 wmv 格式

c++ - 如何使用友元运算符存储一串字符?

php - 如何从 php 运行 linux 命令