(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

注意

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

 

使用视频