分配输出格式

某些编解码器可以将数字媒体数据解压缩为多种未压缩格式。 可以使用异步读取器或同步读取器查找特定输出的所有受支持格式。

若要检查输出的所有可用格式,请执行以下步骤。 对于异步读取器和同步读取器,这些过程是相同的。 如果接口名称不同,同步读取器方法列在异步读取器方法后的括号中。

  1. 创建读取器对象并加载要读取的文件。 有关详细信息,请参阅 创建读取器和打开文件 (或 创建同步读取器和打开文件) 。

  2. 确定要查找其可用格式的输出。 如果还不知道要使用哪个输出,可以使用标识输出编号中的过程来标识文件中的 输出

  3. 通过调用 IWMReader::GetOutputFormatCount (或 IWMSyncReader::GetOutputFormatCount) ,检索所需输出的可用格式总数。

  4. 一次循环访问一种可用格式,为每个格式执行以下步骤:

    • 通过调用 IWMReader::GetOutputFormat (或 IWMSyncReader::GetOutputFormat) 检索当前输出格式的 IWMOutputMediaProps 接口。

    • 通过两次调用 IWMMediaProps::GetMediaType 来检索输出格式的WM_MEDIA_TYPE结构。 进行第一次调用以获取结构的大小,然后为其分配内存,并在第二次调用时传递指向已分配内存的指针。

    • WM_MEDIA_TYPE.subtype 中查找输出格式的媒体子类型。

    • 对于视频,如果当前子类型是要用于输出的格式,请中断循环。 否则,请转到下一个迭代。

      对于音频,必须根据要求检查 WAVEFORMATEX 结构中的值。 WM_MEDIA_TYPE.pbFormat 指向音频输出的 WAVEFORMATEX 结构。

  5. 找到所需的输出后,请通过调用 IWMReader::SetOutputProps (或 IWMSyncReader::SetOutputProps) 来设置它以用于读取器。 必须传递指向在循环的第一步中获取的 IWMOutputMediaProps 接口的指针。

IWMMediaProps 接口

IWMOutputMediaProps 接口

IWMReader 接口

IWMSyncReader 接口

使用输出