我正在使用Windows Media Foundation来跟踪应用程序中的所有麦克风和摄像头。当我拔下麦克风时,我收到事件类型MEError
而不是MECaptureAudioSessionDeviceRemoved
。我尝试拔掉通过USB和音频插孔连接的麦克风,我总是得到一个标识为MEError
的事件类型。视频捕获设备(网络摄像头)没有出现此问题,因为我得到了预期的MEVideoCaptureDeviceRemoved
事件类型。
麦克风正在初始化,因为我可以正确地听到音频。
我已经在互联网上找到了关于这个特定(有媒体基础的拔出麦克风)问题的零信息。最重要的是,我是新手C#dev。我很想知道为什么我没有得到MECaptureAudioSessionDeviceRemoved
而是得到MEError
?这是Mic驱动程序开发人员没有实现的东西,或者如果我的代码中存在错误,它是否是预期的东西?
这是我获取EventType的代码(我的问题不完全必要)此函数所属的类实现IMFAsyncCallback
-
HRESULT MicCaptureSession::Invoke(IMFAsyncResult* pAsyncResult)
{
ComPointerCustom<IMFMediaEvent> pEvent;
HRESULT hr = S_OK;
std::lock_guard<std::mutex> lock(m_critSec);
if (pAsyncResult == 0)
{
return E_UNEXPECTED;
}
hr = m_localSession->EndGetEvent(pAsyncResult, &pEvent);
MediaEventType eventType;
HRESULT hr = S_OK;
HRESULT hrStatus = S_OK;
UINT32 TopoStatus = MF_TOPOSTATUS_INVALID;
if (pEvent== NULL)
return E_UNEXPECTED;
hr = pEvent->GetType(&eventType); <------ Y U NO WORK ??
if (FAILED(hr))
{
return E_UNEXPECTED;
}
hr = pEvent->GetStatus(&hrStatus);
if (FAILED(hr))
{
return E_UNEXPECTED;
}
/* ----- MORE CODE -----*/
}
答案 0 :(得分:0)
我不能确切地说出它的原因,但我可以建议你查看更多的错误调用。音频捕获与视频捕获不同 - 视频捕获通常在帧之间有大约33 ms,但音频捕获大约有5 - 10 ms,并且它可以生成MEError,然后Windows Audio驱动程序生成MECaptureAudioSessionDeviceRemoved。 此外,通常MF源会产生错误链。尝试从音频捕获源检查更多错误调用。