使用 ActivateAudioInterfaceAsync 采集不到 Microsoft Teams 播放给扬声器的声音,采集其他App(如浏览器等)的播放声音都是正常的。
MinBo Lv
0
信誉分
我的使用场景
我有一个软件(名字叫A),想在使用 Teams 开会的使用,将 Teams 播放的声音采集出来,进行一些其他的处理,如加字幕等。
音频的传递是: Teams 收到声音 -> Teams 将声音传给扬声器 -> 软件A采集到声音。
我遇到的问题
在 Teams 开会的时候,我能从扬声器中听到 Teams 其他用户说话的声音,但是我的软件A采集不到其他用户的声音。补充一点:我的软件A采集浏览器,网易云音乐是正常,只是采集不到 Teams 的声音。
我采集扬声器方式
AUDIOCLIENT_ACTIVATION_PARAMS params;
params.ActivationType = AUDIOCLIENT_ACTIVATION_TYPE_PROCESS_LOOPBACK;
params.ProcessLoopbackParams.ProcessLoopbackMode =
PROCESS_LOOPBACK_MODE_EXCLUDE_TARGET_PROCESS_TREE;
params.ProcessLoopbackParams.TargetProcessId = A的进程号(不是teams的进程号,这个我可以确认);
PROPVARIANT activateParams;
activateParams.vt = VT_BLOB;
activateParams.blob = {sizeof(params), reinterpret_cast<BYTE*>(¶ms)};
waiter_ = Microsoft::WRL::Make<WASAPIActivateAudioInterfaceCompletionWaiter>(event_observer_);
!waiter_->Init();
ComPtr<IActivateAudioInterfaceAsyncOperation> async_opt;
HRESULT hr = ActivateAudioInterfaceAsync(VIRTUAL_AUDIO_DEVICE_PROCESS_LOOPBACK, __uuidof(IAudioClient),
&activateParams, waiter_.Get(), &async_opt);
上面是我初始化 IAudioClient 的代码,我排除了A软件播放的声音,采集除了A以外的所有软件的声音,这肯定是包含了 Teams 的。
请帮忙看看是什么原因,我猜测可能和 Teams 播放音频的方式有关系(因为除了 Teams 其他软件都没有问题,可以正常采集到声音),是不是因为 Teams 使用独占的方式?有没有什么解决方案?
还有,如果我使用 IMMDevice::Activate 来获取 IAudioClient,是可以采集到 Teams 播放的声音的,但是这并不符合我最终的目的,因为我不想采集软件A播放的声音。
Microsoft::WRL::ComPtr<IMMDevice> mmDevice_;
mmDevice_->Activate(__uuidof(IAudioClient), CLSCTX_ALL, nullptr, &audioClient_);
问题现象补充
并不是所有的电脑上有这个问题,在我的台式机上,使用ActivateAudioInterfaceAsync是可以采集到Teams声音的,但是在我的联想T490上采集不到Teams的声音。
采集不到Teams声音
笔记本电脑
可以采集到Teams声音
台式机
非常谢谢
登录以回答