配置音频流

音频流通常是最直接的配置。 使用 IWMCodecInfo 的方法从编解码器获取 流配置,如从编解码器获取流配置信息中所述。 在大多数情况下,不应更改检索到的设置。

从枚举中选择的编解码器格式取决于使用配置文件创建的 ASF 文件的预期用途。 IWMCodecInfo2::GetCodecFormatDesc 检索的编解码器格式说明汇总了格式的特征。 如果应用程序未显示要在它们之间进行选择的说明,则可以在编解码器格式的 IWMStreamConfig 接口上调用 QueryInterface 以获取 IWMMediaProps 接口。 然后,可以通过调用 IWMMediaProps::GetMediaType 来检索WM_MEDIA_TYPE结构。 通过检查 WM_MEDIA_TYPE 结构和它指向的 WAVEFORMATEX 结构,可以确定编解码器格式的设置,并将其与要求进行比较。

获取 A/V 同步的音频格式

Windows Media Audio 编解码器和 Windows Media Audio Professional 编解码器都支持纯音频文件和音频/视频文件的格式。 仅音频格式针对仅包含音频数据的文件进行优化,而音频/视频格式针对具有视频流的文件中的音频进行优化。 枚举这些编解码器的编解码器格式时,音频/视频格式仅次于仅音频格式。 音频/视频格式说明都包含字符串“ (A/V) ”。 可以通过检查每秒的数据包数,以编程方式识别为音频/视频同步设计的格式。 如果比特率大于或等于每秒 32,000 位,则同步格式具有每秒 5 个或更多个数据包。 如果比特率小于每秒 32,000 位的格式使用每秒 3 个或更多个数据包,则可以与同步视频一起使用。 查找音频格式主题中的代码示例包含使此检查所需的代码:

if((pWave->nAvgBytesPerSec / pWave->nBlockAlign) >= 
       ((pWave->nAvgBytesPerSec >= 4000) ? 5.0 : 3.0))
{
    // Set this stream configuration as the new best match.
}

获取Low-Delay音频格式

Windows Media 9.1 编解码器和 Windows Media Audio 9.1 专业编解码器都支持低延迟格式。 这些格式的缓冲区窗口比其他音频格式小。 低延迟音频旨在提高文件或流频繁切换的情况下的性能;例如,一个应用程序在用户界面中列出要流式传输的歌曲,并允许用户在它们之间任意切换。

低延迟格式仅在 CBR 模式中可用, (单次或双通) 。 低延迟格式说明均包含字符串“低延迟”。 可以通过检查格式的比特率值以编程方式标识格式。 低延迟格式分配的比特率比等效的普通格式的比特率低 1 千位。 例如,Windows Media Audio 9.1 编解码器支持比特率为 192 kbps 的单传递 CBR 格式。 等效的低延迟格式的比特率为 191 kbps。 此外,除了 Windows Media Audio 9.1 编解码器支持的 5 kbps 单声道格式外,低延迟格式是唯一具有奇数比特率值的格式。

配置可变比特率音频

如果需要一个 Windows Media 音频编解码器 (VBR) 格式的可变比特率,可以通过在 IWMCodecInfo3::SetCodecEnumerationSetting 方法中设置枚举设置来获取它。 对于基于质量的 VBR,将 g_wszVBREnabled 设置为 True,将 g_wszNumPasses 设置为 1;对于双传递 VBR (受约束或不受约束的) ,将 g_wszNumPasses 设置为 2。 如果使用受约束的双传递 VBR,则必须使用 IWMPropertyVault 的方法手动设置流的最大比特率和缓冲区窗口,如 配置 VBR 流中所述。

在基于质量的 VBR 配置文件中,WAVEFORMATEX 结构的 nAvgBytesPerSec 成员将质量级别 (1 到 100) 包含在低序字节中,三个高阶字节设置为0x7fffff。 请勿尝试通过手动修改此值来修改质量设置;必须使用从编解码器检索的格式。 若要使用不同的质量值,必须枚举格式,直到找到满足需求的格式。 此外,不会在 ASF 文件中保留 nAvgBytesPerSec ;获取已使用读取器对象打开的文件的 WAVEFORMATEX 结构时, nAvgBytesPerSec 包含表示每秒平均字节数的近似值。

注意

配置音频流时,音频缓冲区窗口值不应大于文件中任何视频流的值。 通常这不是问题,因为音频缓冲区窗口值的范围应介于 1.5 到 3 秒之间,视频值的范围应介于 3 到 5 秒之间。 如果音频缓冲区窗口大于视频缓冲区窗口,则文件将播放与流稍微不同步的同步。

 

所有流通用的配置

配置流

查找音频格式