Meeting SDK Type and Version
Meeting SDK for Linux v7.0.5.3527, running headless in Docker (Ubuntu 22.04, Xvfb + PulseAudio virtual devices)
Description
Trying to send synthesized audio into a meeting via the virtual mic API (IZoomSDKAudioRawDataHelper::setExternalAudioSource / IZoomSDKVirtualAudioMicEvent / IZoomSDKAudioRawDataSender::send). Every step of the API sequence reports success, but the audio never actually reaches other participants.
Error?
No error at any point. GetZoomLastError() returns nullptr throughout. Every relevant call returns SDKERR_SUCCESS.
Troubleshooting Routes
- Confirmed unmuted via
UnMuteAudio()(SDKERR_SUCCESS) and visually confirmed unmuted in the Zoom client’s participant list - Tried Host, Co-Host, and “Allow Recording on Computer” permissions individually - no difference in outcome
- Found that
onMicStartSendnever fires untilCanStartRawRecording()/StartRawRecording()succeed first - recording permission appears to be a prerequisite for the send pipeline to activate at all - Replaced a flat sine tone with an amplitude-modulated (~4Hz tremolo) tone in case Zoom’s noise suppression/VAD was filtering out a non-speech-like signal - no change
- Tested in both the main session and inside a breakout room - same result in both
- Searched the forum extensively (raw data license deprecation threads, permission requirement threads) - nothing matches this exact symptom
How To Reproduce
- Authenticate via JWT (
SDKAuth), join withSDK_UT_WITHOUT_LOGIN JoinVoip()→SDKERR_SUCCESSUnMuteAudio(myUserId)→SDKERR_SUCCESS- Host grants Host/Co-Host/local recording permission
CanStartRawRecording()→SDKERR_SUCCESS,StartRawRecording()→SDKERR_SUCCESSGetAudioRawdataHelper()->setExternalAudioSource(this)→SDKERR_SUCCESSonMicInitialize(pSender)firesonMicStartSend()firessend()called every 20ms with valid 16-bit PCM, 32000Hz, mono, for 30+ seconds continuously - every callSDKERR_SUCCESS- Result: bot’s participant tile never shows the “speaking” indicator; a human participant in the same session hears nothing
Separately: ISettingService::GetAudioSettings() returns nullptr in this same environment - is IAudioSettingContext supported on Linux?
(I checked the two similar topics Discourse suggested - “Not receiving audio on AudioRawData interface if the SDK doesn’t detect a microphone…” and “Send Raw Audio using Windows Meeting SDK” - neither matches this: the first is about the receive path, and the second is about onMicStartSend not firing reliably, whereas in my case onMicStartSend fires reliably and send() succeeds continuously with zero errors, but never reaches other participants.)