通过 IWMDMDevice 获取格式功能

用于查询设备播放功能的推荐方法是 IWMDMDevice3::GetFormatCapability。 但是,如果设备不支持此方法,则应用程序可以改为调用 IWMDMDevice::GetFormatSupport ,以从设备中检索 _WAVEFORMATEX结构和 MIME 格式作为字符串的受支持音频格式数组。

以下步骤显示了应用程序如何使用此方法来查询设备中支持的格式:

  1. 调用 GetFormatSupport 以检索音频和 mime 格式的数组。
  2. 循环访问检索到的音频格式,并检查每个 _WAVEFORMATEX 结构,以尝试找到可接受的音频格式
  3. 如果需要, (遍历检索到的 MIME 格式字符串,) 查找可接受的文件类型。 SDK 不定义 MIME 格式的常量;应使用行业标准值 (可在 iana.org 网站) 找到。 设备应列出它支持的特定 MIME 类型。

以下 C++ 代码演示如何使用 GetFormatSupport 从设备检索格式功能。

// Function to print out device caps for a device 
// that supports only IWMDMDevice.
void CWMDMController::GetCaps(IWMDMDevice* pDevice)
{
    HRESULT hr = S_OK;

    // Get all capabilities for audio and mime support.
    _WAVEFORMATEX* pAudioFormats;
    LPWSTR* pMimeFormats;
    UINT numAudioFormats = 0;
    UINT numMimeFormats = 0;
    hr = pDevice->GetFormatSupport(
        &pAudioFormats,
        &numAudioFormats,
        &pMimeFormats,
        &numMimeFormats);
    if (FAILED(hr)) return;

    // Print out audio format data.
    if (numAudioFormats > 0)
    {
        // TODO: Display a banner for the supported audio-format listing.
    }
    else
    {
        // TODO: Display a message indicating that no audio formats are supported.
    }
    for (int i = 0; i < numAudioFormats; i++)
    {
       // TODO: For each valid audio format, display the max channel, 
       // max samples/second, avg. bytes/sec, block alignment, and 
       // max bits/sample values.
    }

    // Print out MIME formats.
    if (numMimeFormats > 0)
        // TODO: Display a banner to precede the MIME format listing.
    else
        // TODO: Display a banner indicating that no MIME formats are supported.
    for (i = 0; i < numMimeFormats; i++)
    {
        // TODO: Display the specified MIME format.
    }
    return;
}

发现设备格式功能

在支持 IWMDMDevice3 的设备上获取格式功能