【问题标题】:Playing IMFSamples using Media Foundation使用 Media Foundation 播放 IMFSamples
【发布时间】:2017-03-17 05:33:48
【问题描述】:

我正在使用 Windows Media Foundation 创建示例应用程序。

我使用 Source Reader IMFSourceReader 读取媒体文件,然后在使用自定义 MFT IMFTransform 处理样本 IMFSamples 之后。

在 MFT 中,我处理了 IMFSamples,如何在窗口中播放/显示它们。我不想使用 EVR 进行显示。

我也读过这个问题:
How to play IMFMediaSample in media foundation?

根据我的建议,我需要使用MFPlay 来播放样本,但具体如何做到这一点。

在界面IMFPMediaPlayer我找不到任何可以推送媒体样本的方法。
https://msdn.microsoft.com/en-us/library/windows/desktop/dd374329(v=vs.85).aspx

【问题讨论】:

  • 如果 IMFSample 包含 DXGI 或 D3D9 表面,您可以使用 DX 显示它。否则,您可以使用 GDI 将 IMFMediaBuffer 显示到窗口中。这是你需要的吗?
  • @VuVirt :我如何找到 IMFSample 是否包含 DXGI 或 D3D9 表面。还有我们如何使用 GDI 在窗口中显示 IMFMediaBuffer,如果你有任何例子。我有一个自定义混合器,它在视频样本中混合一个图像并生成样本。我需要在视频窗口中显示此示例。

标签: c++ winapi video ms-media-foundation


【解决方案1】:

IMFSample 是原始数据的包装器。如果您碰巧放弃了用于播放/演示的标准 API 产品(例如用于视频的 EVR),您将不得不从媒体示例对象中提取数据并以其他方式使用它,例如自行决定使用其他 API。

这不必完全是可视化,您的消费理念不受限制:写入文件、通过网络发送等。对于可视化,您可以选择其他 Windows API:DirectX、DirectShow、旧版 DirectDraw、GDI、GDI+ , Direct2D 等。

IMFSample 不会立即被其他 API 接受,因为它不是它的设计用途。在 Media Foundation API 中,EVR 是为演示而设计的,而 EVR 是您应该使用的。

The video sample object is a specialized implementation of the IMFSample interface for use with the Enhanced Video Renderer (EVR)...

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-07-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-10-04
    相关资源
    最近更新 更多