使用智能重压转码内容

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

可以使用 Windows 媒体格式 SDK 将内容从一个比特率转码到另一个比特率。 通常,这只涉及对内容进行解码,然后再次将其编码为所需的比特率。 Windows Media Audio 9 编解码器支持智能重压,可实现比平时更好的质量的转码。

对于智能重压,必须使用 Windows Media Audio 编解码器对原始音频流进行编码。 支持所有版本的编解码器,但 Windows Media Audio 9 Professional 和 Windows Media Audio 9 Voice) (专用音频编解码器。 如果原始音频是使用 Windows Media Audio 9 无损编解码器进行编码的,则无需使用智能重新压缩,因为原始编码中不会丢失任何信息。

若要使用智能重新压缩,请执行以下步骤。

  1. 使用要读取的源文件设置读取器对象。 有关详细信息,请参阅 读取 ASF 文件
  2. 设置用于转码文件的编写器对象。 设置新文件的文件名。 选择要用于新文件的配置文件。 在编写器对象中设置所选配置文件。 有关详细信息,请参阅 编写 ASF 文件
  3. 通过调用 IWMReader::QueryInterface 获取指向读取器对象的 IWMProfile 接口的指针。
  4. 通过调用 IWMProfile::GetStream 检索要转码的音频流的 IWMStreamConfig 接口。
  5. 通过调用 IWMStreamConfig::QueryInterface 获取流配置对象的 IWMMediaProps 接口。
  6. 通过对 IWMMediaProps::GetMediaType 进行两次调用,检索流的WM_MEDIA_TYPE结构。 获取第一次调用时结构的大小,并为缓冲区分配内存,以便在第二次调用中传递。
  7. 通过调用 IWMWriter::GetInputProps ,获取指向编写器中输入 的 IWMInputMediaProps 接口的指针。
  8. 通过调用 IWMInputMediaProps::QueryInterface 获取输入媒体属性对象的 IWMPropertyVault 接口。
  9. 使用 IWMPropertyVault::SetProperty 方法设置 g_wszOriginalWaveFormat 属性。 使用步骤 6 中获取的 WAVEFORMATEX 结构作为 属性的值。
  10. 通过调用 IWMWriter::SetInputProps 并向其传递指向 IWMInputMediaProps 接口的指针,包括对输入媒体属性所做的更改。
  11. 开始从原始文件读取示例,并通过调用 IWMWriter::WriteSample 将它们传递给编写器

高级主题

IWMInputMediaProps 接口

IWMMediaProps 接口

IWMProfile 接口

IWMPropertyVault 接口

IWMStreamConfig 接口