我将位图保存为 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/