使用接收器编写器
概述
文件容器类型
接收器编写器内置支持多种文件容器类型。 有关完整列表,请参阅 MF_TRANSCODE_CONTAINERTYPE。 可以通过编写自定义 媒体接收器来支持其他容器类型。 文件容器是在创建接收器编写器的新实例时指定的。
流格式
对于每个流,应用程序必须指定以下内容。
- 输入格式是应用程序发送到接收器编写器的格式。
- 输出格式是将写入文件的格式。
输入和输出格式可以压缩或未压缩。 接收器编写器支持以下组合:
- 具有压缩输出的未压缩输入。 这是典型情况,用于编码或转码方案。 Microsoft Media Foundation 编码器必须可用,它接受输入类型并编码为输出类型。
- 具有相同输出的压缩输入。 使用此组合在不转码的情况下重新生成文件。
- 具有相同输出的未压缩输入。 使用此组合将未压缩的音频或视频写入文件容器。
接收器编写器不支持视频大小调整、帧速率转换或音频重新采样,除非编码器提供这些功能。 否则,应用程序可以使用 数字信号处理器 来转换输入数据,然后再将数据发送到
创建接收器编写器
有两个函数用于创建接收器编写器:
- MFCreateSinkWriterFromURL 获取输出文件的 URL 或指向字节流的指针。 此函数在内部创建媒体接收器。
- MFCreateSinkWriterFromMediaSink 将指针指向应用程序已创建的媒体接收器。
如果使用其中一个内置媒体接收器,则 MFCreateSinkWriterFromURL 函数更可取,因为调用方不需要配置媒体接收器。
MFCreateSinkWriterFromURL 方法提供了多个用于指定文件容器类型的选项。 在最简单的情况下,函数使用 URL 中的文件扩展名来选择文件容器。 有关详细信息,请参阅函数参考页。
例如,以下代码指定 URL 的文件名“output.wmv”。 根据文件扩展名,接收器编写器将加载 ASF 媒体接收器 ,以创建高级系统格式 (ASF) 文件。
HRESULT hr = MFCreateSinkWriterFromURL(L"output.wmv", NULL, NULL, &pSinkWriter);
对于 MFCreateSinkWriterFromMediaSink,文件类型由媒体接收器确定。
相关主题