J'utilise Windows Media Foundation pour garder une trace de tous les micros et caméras dans une application. Je reçois le type d'événement MEError
au lieu de MECaptureAudioSessionDeviceRemoved
lorsque je débranche un micro. J'ai essayé de débrancher des micros branchés via une prise USB et audio et j'ai toujours un eventtype avec l'identifiant MEError
. Le problème n'est pas vu avec le périphérique de capture vidéo (webcam) car j'obtiens le type d'événement attendu MEVideoCaptureDeviceRemoved
. Les micros sont initialisés correctement car j'entends correctement l'audio.Windows Media Foundation: débrancher le périphérique de capture audio renvoie un mauvais événement
J'ai trouvé zéro information sur ce problème particulier (débranchement du micro avec la fondation de médias) sur les internets. En plus de cela, je suis un débutant C# dev. Je suis curieux de comprendre pourquoi je ne reçois pas le MECaptureAudioSessionDeviceRemoved
mais obtenir le MEError
? Est-ce quelque chose que le développeur du pilote Mic n'a pas implémenté ou est-ce quelque chose attendu si une erreur existe dans mon code?
Voici mon code pour obtenir le EventType (Pas exactement nécessaire à ma question) La classe cette fonction appartient implémente 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 -----*/
}
Bon point et j'ai vérifié pour cela. Il y a seulement une invocation qui arrive et qui est de type MEError. Il n'y a plus d'événement invoqué après cela. Idem sur webcam débranchez, un seul événement et qui est de type EVideoCaptureDeviceRemoved. – Ashwin
C'est une question inhabituelle. J'ai une certaine expérience avec MF et capturer la vidéo et l'audio dessus: [Capture-Live-vidéo-de-Web-caméra-sur-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). De l'événement MSDN - MECaptureAudioSessionDeviceRemoved Envoyé par une source de capture audio lorsque le périphérique est supprimé. Cela signifie que cet événement doit être envoyé par Source, mais dans le code, vous essayez de l'attraper par MicCaptureSession à partir de la session. Quelle session? –
Un autre bon point. Chacun de mon périphérique Mic est de type [IMFMediaEventGenerator] (https://msdn.microsoft.com/en-us/library/windows/desktop/ms701755%28v=vs.85%29.aspx) et je branche MicCaptureSession (implémente IMFAsyncCallback) sur le périphérique à l'aide de [BeginGetEvent] (https://msdn.microsoft.com/en-us/library/windows/desktop/ms701637%28v=vs.85%29.aspx). Merci d'avoir aidé. Traiter avec du code pas écrit par moi. – Ashwin