配置 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结构或 IMFMediaTypeVIDEOINFOHEADER 结构。 有关详细信息,请参阅 使用视频编解码器专用数据

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

注意

视频编码器对象支持两个输出。 第二个输出用于编码器“帖子视图”。 它提供未压缩的样本,因为它们将从解码器传递。 这样,便可以监视编码质量,而无需等待处理整个流。 此输出是可选的。 如果要使用它,请按照用于设置编码器输入类型的相同过程配置其类型。

 

使用视频