通过 IWMDMDevice 获取格式功能
用于查询设备播放功能的推荐方法是 IWMDMDevice3::GetFormatCapability。 但是,如果设备不支持此方法,则应用程序可以改为调用 IWMDMDevice::GetFormatSupport ,以从设备中检索 _WAVEFORMATEX结构和 MIME 格式作为字符串的受支持音频格式数组。
以下步骤显示了应用程序如何使用此方法来查询设备中支持的格式:
- 调用 GetFormatSupport 以检索音频和 mime 格式的数组。
- 循环访问检索到的音频格式,并检查每个 _WAVEFORMATEX 结构,以尝试找到可接受的音频格式
- 如果需要, (遍历检索到的 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;
}
相关主题