c++ - MediaFoundation,位图数组到 mp4

标签 c++ video bitmap mp4 ms-media-foundation

我将位图保存为 BYTE 数组,它以与 Microsoft 的 CBitmap 类非常相似且可互换的格式保存每个像素的 RGB 值。因此,让我们考虑一下我有一个 CBitmap 数组,我想使用 MediaFoundation Transcode Api 将它们转换为 mp4,如本例所示:toMp4 .然而在这个例子中,他们从一个 url 流式传输。

 // Use the source resolver to create the media source
  hr = pResolver->CreateObjectFromURL(pszURL, MF_RESOLUTION_MEDIASOURCE, NULL, &ObjectType, &pSource);

在我的例子中,我的位图在内存中。所以我相信我可以改用这个功能。 IMFSourceResolver::CreateObjectFromByteStream

我不确定这是否可行。作为总结,我如何使用转码 api 将我的 CBitmap 数组转换为 mp4?

最佳答案

转码 API 假设您拥有媒体基础认可的特定“格式”的操作源和目标。也就是说,source 和 destination 都由 Media Foundation 的 sources 和 sinks 表示,然后 API 涵盖了将一个转换为另一个的过程。

你的情况不是这样。您的来源对媒体基金会不友好。

对于您的场景,合适的 API 是 Sink Writer .它提供了一个友好的接口(interface)来将非媒体基础数据推送到媒体基础管道,并通过媒体基础生成编码的视频文件。

也就是说,您从图像中获取位图位,将 Sink Writer 实例配置为接受此类输入格式,然后由它负责编码。

参见 Tutorial: Using the Sink Writer to Encode Video获取相应的示例代码和整个过程的指导。

关于c++ - MediaFoundation,位图数组到 mp4,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44587850/

相关文章:

c++ - OpenCV 从一组点绘制一条线

c++ - 替换(或重新实现?)std::function 用于一些统计和测试

c++ - 链接器未在目标文件中找到现有引用

jquery - fancybox 2 画廊的幻灯片,包含图像和视频,但等待视频完成

c++ - 在 C++ 中将指针传递给函数

html - 自动播放YouTube YouTube链接

javascript - VideoJS : Stopping video on modal close and not embedding in page

java - 显示与所有应用程序的对话框时出现 android outOfMemoryError

android - 在 Android 上将大型位图文件调整为缩放的输出文件

android - 位图分配如何在奥利奥上工作,以及如何调查它们的内存?