配置音频流

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

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

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

Windows媒体音频编解码器和Windows媒体音频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媒体音频 9.1 Professional编解码器都支持低延迟格式。 这些格式具有比其他音频格式较小的缓冲区窗口。 低延迟音频旨在提高文件或流频繁切换时的性能;例如,一个应用程序,其中列出了许多用于在用户界面中流式传输的歌曲,并允许用户在它们之间任意切换。

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

配置可变比特率音频

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

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

注意

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

 

所有流的通用配置

配置流

查找音频格式