MediaFoundation,位图数组转换为mp4。

5

我将位图保存为BYTE数组,该数组以与Microsoft的CBitmap类非常相似和可互换的格式保存每个像素的RGB值。所以让我们考虑我有一组CBitmaps,并且我想使用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?
1个回答

6

转码 API 假定您在某种被 Media Foundation 识别的“格式”中拥有操作的源和目标。也就是说,源和目标都由 Media Foundation 源和接收器表示,然后该 API 覆盖了将一个转换为另一个的过程。

但这不适用于您的情况。您的源不符合 Media Foundation 的要求。

对于您的方案,适当的 API 是 Sink Writer。它提供了一个友好的界面,将非 Media Foundation 数据推送到 Media Foundation 管道中,并通过 Media Foundation 生成编码视频文件。

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

请查看教程:使用 Sink Writer 编码视频,了解相应的示例代码和指导过程。


你打算从 MFVideoFormat_MP4V 转码为 H.264/MP4 吗? - Roman R.
1
好的,这正是我最初想到的。因此,Windows Media Foundation中没有MFVideoFormat_MP4V编码器,因此出现了错误。实际上,您需要在媒体类型中使用MFVideoFormat_H264,并且.mp4作为目标文件扩展名将在内部解析为您请求的MP4格式。 - Roman R.
1
这有助于我想象如果我必须开发这些东西,我会如何去做。虽然乍一看不像,但在Media Foundation中有很多东西都是经过精心设计和关注的。至于文档,它肯定可以更好(以及示例、发布/更新说明、向后兼容性、编解码器/格式覆盖范围等)。 - Roman R.
一个小的后续问题,你知道我怎样通过Media Foundation编程获取所有可用的编解码器吗? - Alon Granot
显示剩余3条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接