强制Key-Frame插入

Windows媒体视频 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 文件