使用接收器编写器

概述

文件容器类型

接收器编写器内置支持多种文件容器类型。 有关完整列表,请参阅 MF_TRANSCODE_CONTAINERTYPE。 可以通过编写自定义 媒体接收器来支持其他容器类型。 文件容器是在创建接收器编写器的新实例时指定的。

流格式

对于每个流,应用程序必须指定以下内容。

  • 输入格式是应用程序发送到接收器编写器的格式。
  • 输出格式是将写入文件的格式。

输入和输出格式可以压缩或未压缩。 接收器编写器支持以下组合:

  • 具有压缩输出的未压缩输入。 这是典型情况,用于编码或转码方案。 Microsoft Media Foundation 编码器必须可用,它接受输入类型并编码为输出类型。
  • 具有相同输出的压缩输入。 使用此组合在不转码的情况下重新生成文件。
  • 具有相同输出的未压缩输入。 使用此组合将未压缩的音频或视频写入文件容器。

接收器编写器不支持视频大小调整、帧速率转换或音频重新采样,除非编码器提供这些功能。 否则,应用程序可以使用 数字信号处理器 来转换输入数据,然后再将数据发送到

创建接收器编写器

有两个函数用于创建接收器编写器:

如果使用其中一个内置媒体接收器,则 MFCreateSinkWriterFromURL 函数更可取,因为调用方不需要配置媒体接收器。

MFCreateSinkWriterFromURL 方法提供了多个用于指定文件容器类型的选项。 在最简单的情况下,函数使用 URL 中的文件扩展名来选择文件容器。 有关详细信息,请参阅函数参考页。

例如,以下代码指定 URL 的文件名“output.wmv”。 根据文件扩展名,接收器编写器将加载 ASF 媒体接收器 ,以创建高级系统格式 (ASF) 文件。

    HRESULT hr = MFCreateSinkWriterFromURL(L"output.wmv", NULL, NULL, &pSinkWriter);

对于 MFCreateSinkWriterFromMediaSink,文件类型由媒体接收器确定。

接收器编写器