使用异步读取器传递压缩示例

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

异步读取器可以从 ASF 文件中的流中传递压缩的示例。 将流从一个文件复制到另一个文件时,应用程序通常会提供压缩的示例。 不建议重新压缩已从压缩流重建的数据,因为编码过程中会丢失数据。 多次压缩的数字媒体的质量将明显下降。

从 ASF 文件中提取数据后,Windows Media Format SDK 不提供任何解码数据的方法。 如果收到压缩的样本,并且以后想要解压缩它们,则必须提供自己的代码才能执行此操作。 绕过此限制的一种方法是将压缩样本写入新的 ASF 文件,然后将其重新读取为普通的未压缩样本。

若要使用异步读取器接收压缩示例,请执行以下步骤。

  1. 实现 IWMReaderCallbackAdvanced::OnStreamSample 回调。 此回调在函数上与 IWMReaderCallback::OnSample 基本相同,只不过它按流编号提供样本,并且样本仍被压缩。
  2. 在开始播放之前,通过调用 IWMReader::QueryInterface 获取指向读取器对象的 IWMReaderAdvanced 接口的指针。
  3. 通过调用 IWMReaderAdvanced::SetReceiveStreamSamples,将读取器配置为为所需流提供压缩示例。
  4. 对需要压缩样本传送的每个流重复步骤 3。

注意

图像流对压缩流传送无效。 如果将图像流从一个文件复制到另一个文件,它将在新文件中不起作用。 若要将图像流从文件复制到文件,请按输出编号检索图像流样本,并将其包含在新文件中,就像包括新图像流一样。

 

IWMReaderCallbackAdvanced 接口

使用异步读取器读取文件