gpt4 book ai didi

c# - Windows Media Foundation:拔出音频捕获设备会返回错误事件

转载 作者:行者123 更新时间:2023-12-03 01:54:05 28 4
gpt4 key购买 nike

我正在使用Windows Media Foundation跟踪应用程序中的所有麦克风和摄像机。拔下麦克风时,我得到的是事件类型MEError而不是 MECaptureAudioSessionDeviceRemoved 。我尝试拔出通过USB和音频插孔连接的Mics,并且总是收到ID为MEError的事件类型。当我获得预期的MEVideoCaptureDeviceRemoved事件类型时,视频捕获设备(网络摄像头)未出现该问题。
麦克风已正确初始化,因为我可以正确听到音频。

我在互联网上发现了关于此特定问题(从媒体基金会拔下麦克风)的零信息。最重要的是,我是一名新手C#开发人员。我很好奇我为什么不得到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 -----*/
}

最佳答案

我不能确切地说出原因,但我可以建议您检查更多错误调用。音频捕获不同于视频捕获-视频捕获通常在帧之间大约有33 ms,但是音频捕获大约有5-10 ms,并且它可以生成MEError,然后Windows音频驱动程序生成MECaptureAudioSessionDeviceRemoved。
而且,通常MF源会产生错误链。尝试检查来自音频捕获源的更多错误调用。

关于c# - Windows Media Foundation:拔出音频捕获设备会返回错误事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37199851/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com