解码器音量控制

[与此页面关联的功能(DirectShow)是一项旧功能。 它已被 MediaPlayerIMFMediaEngine取代,并在媒体基金会 音频/视频捕获。 这些功能已针对 Windows 10 和 Windows 11 进行了优化。 Microsoft强烈建议新代码尽可能使用 MediaPlayerIMFMediaEngineMedia Foundation 中的音频/视频捕获,而不是 DirectShow。 Microsoft建议重写使用旧 API 的现有代码,以尽可能使用新 API。]

应用程序通过 IBasicAudio 接口控制音频音量。 为 KSProxy 提供了 IBasicAudio 接口处理程序。 若要使解码器能够处理 KSProxy 中的卷命令,必须在其设置脚本中添加多个注册表项,并支持 KSPROPSETID_Wave 属性集。

为驱动程序创建新的注册表项:

HKLM\SYSTEM\
  CurrentControlSet\Control
    DeviceClasses
      (decoder guid, eg 2721AE....)
        (Pnp id, eg ##?#VDGENDEV#...)
          #GLOBAL
            Device Parameters
              CLSID      REG_SZ   {17CCA...}
                FriendlyName   REG_SZ   WDM DVD Driver
                  Interfaces <--- create this key
                  {b9f8ac3e-0f71-11d2-b72c-00c04fb6bd3d} // Create this key.
    MediaInterfaces
      {b9f8ac3e-0f71-11d2-b72c-00c04fb6bd3d} // Create this key.
        (default)  REG_SZ   'KsProxy IBasicAudio handler' // Set this value.
        IID        REG_SZ   56 a8 68 b3 0a d4 11 ce b0 3a 00 20 af 0b a7 70 
                            // Create this key.

若要实现卷控制,驱动程序还必须支持 KSPROPSETID_Wave,以及 KsProperty.Id = KSPROPERTY_WAVE_VOLUME。 此属性通过 IKsPropertySet::GetIKsPropertySet::Set 方法传递到驱动程序。 LeftAttenuation 和 RightAttentuation 字段将左/右扬声器卷指定为从0x0000到0xffff的线性值。

解码器接口和规范