关于IMFStreamSink的ProcessSample方法的几个疑问

HoWe Yu 61 信誉分
2024-12-31T03:07:55.4866667+00:00

我正在开发将视频帧渲染至内存的程序,在处理样本时,有以下疑问:

1.传入的样本是解码后的数据吗

2.单个视频帧会不会分成多个样本

3.媒体会话在是按帧率调用ProcessSample还是连续调用

Windows API - Win32
Windows API - Win32
一组适用于桌面和服务器应用程序的核心 Windows 应用程序编程接口 (API)。 以前称为 Win32 API。
123 个问题
C++
C++
一种通用的高级编程语言,作为 C 编程语言的扩展而创建,除了用于低级别内存操作的功能外,还具有面向对象、泛型和功能性等特点。
158 个问题
0 个注释 无注释
{count} 票

接受的答案
  1. Jeanine Zhang-MSFT 10,281 信誉分 Microsoft 供应商
    2024-12-31T06:46:02.3333333+00:00

    你好,

    欢迎来到Q&A论坛

    传入的样本是解码后的数据吗

    IMFStreamSink::ProcessSample方法将示例传送到流。媒体接收器处理此示例。传入的样本不是解码后的数据。在媒体接收器可以接收样本之前,客户端必须在流接收器上设置媒体类型。该示例通常包含流的有效数据,这些数据是否需要进行解码,取决于输出的媒体类型。

    参考这个文档:Media Foundation 转换解码

    单个视频帧会不会分成多个样本

    单个视频帧可以被拆分为多个样本。视频帧可能会被分成几个较小的样本,以便单独处理。

    媒体会话在是按帧率调用ProcessSample还是连续调用

    Media Sink 消耗样本的速率由 Presentation Clock 控制。

    大多数媒体接收器以异步方式处理样本,因此 Stream Sink 可以一次发送多个样本请求。

    每个流接收器发送一个或多个 MEStreamSinkRequestSample 事件。为了响应其中每个事件,客户端获取该流的下一个数据示例,并调用 IMFStreamSink::ProcessSample。

    ProcessSample的调用取决于媒体接收器的实现和媒体流的计时要求。可以按媒体类型指定的帧速率调用它,如果媒体接收器需要快速处理多个样本,则可以连续调用它

    更多细节我建议你参考这个文档:媒体接收器

    Thank you

    Jeanine


0 个其他答案

排序依据: 非常有帮助

你的答案

问题作者可以将答案标记为“接受的答案”,这有助于用户了解已解决作者问题的答案。