我正在使用Windows媒體基礎來跟蹤應用程序中的所有麥克風和攝像機。當我拔下麥克風時,我收到事件類型而不是MECaptureAudioSessionDeviceRemoved
。我試圖通過USB和音頻插孔拔掉麥克風,我總是得到一個事件類型,編號爲。視頻捕捉設備(網絡攝像頭)沒有看到這個問題,因爲我得到了預期的MEVideoCaptureDeviceRemoved
事件類型。 麥克風正在正確初始化,因爲我可以正確聽到音頻。Windows媒體基礎:拔下音頻捕獲設備返回錯誤事件
我在互聯網上發現了關於這個特殊(與媒體基礎拔掉麥克風)問題的零信息。最重要的是,我是一個新手C#開發人員。我很想知道爲什麼我沒有得到MECaptureAudioSessionDeviceRemoved
但得到?這是Mic驅動程序開發人員沒有實現的東西,或者如果我的代碼中存在錯誤,是否會出現這種情況?
這裏是我用於獲取事件類型(不完全是必要的,我的問題)這個函數所屬的類代碼來實現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 -----*/
}
好點,我檢查了這一點。只有一個調用發生,並且是MEError類型。此後不再有事件調用。同樣在網絡攝像機上拔掉,只有一個事件,並且類型爲EVideoCaptureDeviceRemoved。 – Ashwin
這是一個不尋常的問題。我有一些MF的經驗,並捕捉視頻和音頻:[捕捉 - 實時視頻 - 從網絡攝像頭在Windows](http://www.codeproject.com/Articles/776058/Capturing-Live- Video-from-Web-camera-on-Windows-an),[CaptureManager-SDK](http://www.codeproject.com/Articles/1017223/CaptureManager-SDK)。來自MSDN - MECaptureAudioSessionDeviceRemoved事件 當設備被移除時由音頻捕獲源發送。這意味着此事件必須由Source發送,但在代碼中,您嘗試通過MicCaptureSession從會話中捕獲它。什麼會議? –
另一個好點。我的每個Mic設備都是[IMFMediaEventGenerator](https://msdn.microsoft.com/en-us/library/windows/desktop/ms701755%28v=vs.85%29.aspx)類型,我將MicCaptureSession(使用此[BeginGetEvent](https://msdn.microsoft.com/en-us/library/windows/desktop/ms701637%28v=vs.85%29.aspx)向設備實現IMFAsyncCallback)。感謝您的幫助。處理不是由我寫的代碼。 – Ashwin