Not receiving audio on `AudioRawData` interface if the SDK doesn't detect a microphone or an audio device on the OS

Description
On the new Zoom Bot SDK we are facing an issue where if the SDK does’t detect a microphone or audio device in the OS, it doesn’t stream the audio on the AudioRawData class. As we are using the bot inside a docker container, it doesn’t have an audio interface there. Is this a known SDK limitation? is there any way we can programmatically prevent this behavior and get the audio stream? Thanks in advance!

Which Windows Meeting SDK version?
C++ Version - v5.10.1.4450

Prerequisites
Run the bot in an environment where there is no microphone or audio device detected by the OS.
In our case inside this docker image: http://mcr.microsoft.com/windows:1809-amd64

To Reproduce(If applicable)
Steps to reproduce the behavior:

  1. Start the Meeting SDK and connect to an existing meeting
  2. Make the host give recording permissions to the bot
  3. While audio is plying, see that NO audio buffers are coming trough the AudioRawData interfaces

Screenshots
If applicable, add screenshots to help explain your problem.

Device (please complete the following information):

  • OS: Windows 10, all devices that we tested this with.

Welcome, @matiasp,

Thank you for posting in the Developer Forum. To make I understand, can you share the following information :

  1. Is this happening only when using the docker container?

  2. Can you help us understand which section of Window Raw Data: Recording doc this happens at?

  3. Can you share if you only see this inside of the container?

  4. Also, would you be able to share if you are looking for audio input or output?

Window Raw Data

Hi @donte.zoom ! Thanks for looking into this.

This is happening on the docker container due to the fact that by default it doesn’t have an audio driver or device (neither input nor output).

In a computer with audio input/output capabilities we get audio on:

onMixedAudioRawDataReceived​(ZoomSDKAudioRawData rawData)

and 

onOneWayAudioRawDataReceived​(ZoomSDKAudioRawData rawData, int userId)

But we are not seeing data coming in the situation described with the docker image.

To clarify as well, we are only looking for the Audio Output from other participants of the meeting.
We do not need to generate any audio input on the conversation from the docker side (meaning we do not need to have a microphone) and Audio doesn’t need to be played inside the docker container (we forward it somewhere else). So for our use case we do not need to have any input/output audio devices, but we are seeing that apparently the SDK does not stream the audio data if they are not present in the OS.

Any thoughts or anything we can configure on the SDK for not to validate this internally?

Thank you very much!

Thank you for the details here, @matiasp! It is my understanding that the Zoom Client/SDK requires a physical or virtual mic to be present but it does not need to be used to enable raw audio in (into the meeting. Let me check with our SDK to see whether using a docker image is supported and what the best practices are to do so. In the case that the SDK is not designed to be used in a container, feel free to submit a headless use case feature request asking the SDK not to require a mic/speaker/camera. You can submit that request here: Feedback - Zoom

That aside, based on the Docket Forum, it seems the general suggestion is to emulate a microphone with Pulseaudio server. See a docker forum post with that suggestion here. Have you considered this approach?

Following up on this @matiasp, our engineers provided the recommended offered is to install a virtual mic or virtual speaker in your container setup. VB-CABLE Virtual Audio Device will give you both. See documentation here :

Thanks for the reply @donte.zoom. Yes, we are trying the VB-Cable solution and see if it works, but it’s proving difficult to configure inside the docker image.

Is there any chance this can be contemplated in the next release of the SDK for not necessarily requiring a MIC? or it will always work that way?

Thanks!

@matiasp,

Sorry to hear about the pain points you are experiencing configuring the VB-Cable solution inside the docker image. I’ve gone ahead and created a feature request for this [ZOOM-384578 ]. However, I’d like to gather more details to make sure nothing is missed. Can you submit a feature request here and share the tracking number associated with it? Alternatively, you can share the details here and I can update the ticket according. Please include the following details in your request:

  • User Stories: A detailed explanation of the request

  • What is the Problem/Use Case:

  • What Makes This Significant?

  • OS/Platform

  • Helpful attachments

Adding the information here so you can update the ticket. Thanks for following up with this.

  • User Stories: A detailed explanation of the request
    Make the Zoom Windows C++ SDK not require a Microphone or Audio Interface in order to receive the audio stream trough the Window Raw Data interface. In particular, this methods:
onMixedAudioRawDataReceived​(ZoomSDKAudioRawData rawData)
and 
onOneWayAudioRawDataReceived​(ZoomSDKAudioRawData rawData, int userId)
  • What is the Problem/Use Case:
    Allow the Zoom SDK to run in a docker / AWS Image that has no audio input/output devices but that can get the meeting audio and forward it somewhere else for it’s processing.

  • What Makes This Significant?
    This is a critical factor for scaling use cases where the Zoom SDK joins as a non-interactive participant, just to listen the audio.

  • OS/Platform
    Windows 10, all versions, though I suspect this applies to all Windows systems.

  • Helpful attachments
    Docker Image we use: http://mcr.microsoft.com/windows:1809-amd64

Hi @matiasp ,

I’m also working with the Raw Audio API and I’m receiving only 0 audio data. I thought this ticket might help me, but making sure there is a microphone and speaker on the machine running my app has not helped. Is there anything that needs to be done in the code to register the audio devices?

Any hints would be very welcome!

Tim.

Thank you for providing additional details, @matiasp! I"ve since updated the ticket ZOOM-384578 ]. I will get back to you if any further information is needed.

@tim.vandeurzen,

What virtual mic or virtual speaker are you using in your implementation? If you could provide some more clarity on your implementation, I would be happy to loop our engineers for alternative options.

@donte.zoom I haven’t set up any virtual devices. In this case I was running my app directly from Visual Studio and had a microphone plugged into the computer and a speaker as well. Is there anything in the SDK I should do or set-up to let it detect these devices? I’ve so far just followed the example code and the documentation, but there is quite a lot of it and it’s entirely possible I’ve missed a step or two.

Hi, @tim.vandeurzen, and @matiasp,

In your testing, have you subscribed to audio? Our engineers confirmed the Windows SDK does not require a mic/speaker to enable raw audio access. You can get raw audio data in a container as long as the following pre-requisites are met:

  1. Subscribed audio to receive callbacks onMixedAudioRawDataReceived and onOneWayAudioRawDataReceived
  2. Join audio to receive pcm_data value