强制Key-Frame插入

[与此页面关联的功能 Windows Media Format 11 SDK 是一项旧功能。 它已被源读取器和接收器编写器取代。 源读取器和接收器编写器已针对Windows 10和Windows 11进行了优化。 如果可能,Microsoft 强烈建议新代码使用源读取器和接收器编写器,而不是 Windows Media 格式 11 SDK。 如果可能,Microsoft 建议重写使用旧 API 的现有代码以使用新 API。]

Windows Media Video 9 编解码器支持强制关键帧插入。 将示例传递给编写器时,可以指定必须将其编码为 关键帧

若要强制插入示例的关键帧,请执行以下步骤。

  1. 分配用于保存样本的缓冲区,并通过调用 IWMWriter::AllocateSample 检索指向包含缓冲区的 INSSBuffer 接口的指针。
  2. 通过调用 INSSBuffer::GetBufferAndLength 检索步骤 1 中创建的缓冲区的位置和大小。
  3. 将示例数据复制到缓冲区位置,确保传递的样本适合分配的缓冲区。 根据示例的来源,可以使用各种函数来复制数据。 例如,如果要从 AVI 文件复制流,则可以使用 AVI 函数 AVIStreamRead
  4. 通过调用 INSSBuffer::SetLength 更新缓冲区中使用的数据量,以反映样本的实际大小。
  5. 通过调用 INSSBuffer::QueryInterface 获取指向 INSSBuffer3 接口的指针。
  6. 通过调用 INSSBuffer3::SetProperty 方法设置 WM_SampleExtensionGUID_OutputCleanPoint 属性,将示例设置为强制关键帧。 此属性是一个布尔值;将其设置为 TRUE
  7. 使用 IWMWriter::WriteSample 方法将缓冲区接口连同输入号和采样时间一起传递给编写器。

IWMWriter::WriteSample

编写示例

可变比特率 (VBR) 编码

编写 ASF 文件