配置视频编码 (Microsoft Media Foundation)

要配置视频编码器,请执行以下步骤:

  1. 使用 IPropertyBag::Write 在编码器 DMO 上设置任何属性。 以下列表汇总了对 CBR 视频流进行编码所需的最小属性集(所有这些值都具有可以使用的默认值):

    • MFPKEY_VIDEOWINDOW 属性指定要用于流的缓冲区窗口。 有关缓冲区窗口设置及其影响内容的详细信息,请参阅编码方法。 默认缓冲区窗口为 3 秒,适用于许多方案。
    • 视频复杂性设置为确定编码内容的质量与编码所需的时间之间的权衡。 如果未设置值,则使用默认值。 但是,可以通过调用 IWMCodecProps::GetCodecProp 来检索 g_wszWMVCComplexityExLive、g_wszWMVCComplexityExOffline 和 g_wszWMVCComplexityExMax,查找特定编解码器的建议模式。 然后,可以将 MFPKEY_COMPLEXITYEX 设置为介于 0 和报告的最大复杂性之间的值。
    • MFPKEY_CRISP 指定视频平滑度和编码帧的图像质量的相对重要性。 在大多数情况下,默认值运行良好。
    • 对于存储在 ASF 以外的容器中的视频内容,必须将 MFPKEY_ASFOVERHEADPERFRAME 属性设置为 0。 此值不是默认选项。

    有关配置 VBR 流的信息,请参阅使用 VBR 编码

  2. 为输入类型配置 DMO_MEDIA_TYPE 结构,或者如果使用的是 Media Foundation SDK,请使用 MFInitMediaTypeFromVideoInfoHeader 函数。 使用 VIDEOINFOHEADER 结构描述未压缩的输入内容。 编解码器不会调整视频大小或转换颜色空间。

  3. 使用 IMediaObject::SetInputTypeIMFTransform::SetInputType 设置输入类型。

  4. 配置编码器的输出类型。 编码器枚举除 VIDEOINFOHEADER 结构的 dwBitrate 成员或 IMFMediaType 接口的 MF_MT_AVG_BITRATE 属性之外的完整输出类型。 如果在设置输入类型之前检索输出类型,则传递的 DMO_MEDIA_TYPE 结构将没有关联的 VIDEOINFOHEADER

  5. 检索编解码器私有数据并将其追加到传递给 DMO_MEDIA_TYPE 结构或 IMFMediaType 结构的 VIDEOINFOHEADER 结构中。 有关详细信息,请参阅使用视频编解码器专用数据

  6. 通过调用 IMediaObject::SetOutputTypeIMFTransform::SetOutputType 方法来设置输出类型。 要么传递带有 pbFormat 成员中引用的完整 VIDEOINFOHEADER 结构(包括附加的私有数据)的 DMO_MEDIA_TYPE 结构,要么通过调用 MFInitMediaTypeFromVideoInfoHeader 构造一个 IMFMediaType

注意

视频编码器对象支持两个输出。 第二个输出用于编码器“发布视图”。 它提供未压缩样本,就像它们将从解码器中传递一样。 这使您能够监视编码的质量,而无需等到整个流被处理。 此输出是可选的。 如果要使用它,请按照用于设置编码器输入类型的相同过程配置其类型。

使用视频