Livekit Meet audio capturing problem

Hi LiveKit community, I am new to Livekit.

I’m debugging a microphone issue with LiveKit Meet.

My setup: I am not using any cloud. I am doing things locally

  • Windows + Python 3.12

  • Local LiveKit server

  • LiveKit Agents 1.8.0

  • Deepgram STT

  • Django/Celery backend

  • Microphone: Realtek Microphone Array

The agent joins the room and subscribes to the microphone correctly. VAD detects speech, but Deepgram produces no transcript.

I then recorded the raw incoming microphone track on the Python side using rtc.AudioStream. When using LiveKit Meet, the WAV file contains mostly loud/noisy/distorted audio instead of my voice.

However:

  • Windows Sound Recorder → clear audio

  • Browser getUserMedia() recording → clear audio

  • Minimal LiveKit JS client publishing the same mic → clear audio on the Python side

  • LiveKit Meet in both Chrome and Edge → noisy audio

My working direct client publishes the mic with:

setMicrophoneEnabled(true, {
  deviceId: { exact: deviceId },
  echoCancellation: false,
  noiseSuppression: false,
  autoGainControl: false,
});

I checked the Meet source and saw:

audioCaptureDefaults: {
  deviceId: props.userChoices.audioDeviceId ?? undefined,
},

followed by:

room.localParticipant.setMicrophoneEnabled(true)

So I’m wondering if one of the default WebRTC audio-processing settings in Meet is causing the issue.

Has anyone seen this before, especially with Realtek microphone arrays?

Would explicitly setting:

echoCancellation: false,
noiseSuppression: false,
autoGainControl: false

inside audioCaptureDefaults be the right next test?

Also, is there an easy way to inspect the actual MediaStreamTrack.getSettings() used by LiveKit Meet? Is there any better option to have a full conversation/interaction with agent(other than lk agent console)?

@khanaleena0709 Yes, that’s it. And there are four flags, not three.

  client-sdk-js/src/room/defaults.ts:

  export const audioDefaults = {
    deviceId: { ideal: 'default' },
    autoGainControl: true,
    echoCancellation: true,
    noiseSuppression: true,
    voiceIsolation: true,
  };

Room.ts merges instead of replacing:

  this.options.audioCaptureDefaults = {
    ...audioDefaults,
    ...options?.audioCaptureDefaults,
  };

So Meet passing just { deviceId } leaves all four on. Watch voiceIsolation, you didn’t list it and it’s the most aggressive one. On a Realtek array that’s already beamforming, that’s where I’d look first. The merge means your overrides win, so adding all four is the right test.

To see the settings, with the room in scope:


  room.localParticipant
    .getTrackPublication(Track.Source.Microphone)
    ?.track?.mediaStreamTrack.getSettings()

For the last one, try the Agent Console. Docs say it’s “compatible with agents running anywhere… self-hosted, or running locally on your machine”. It’s hosted at cloud.livekit.io though, and your server is local, so check it can reach you first.

You said that using a “Minimal LiveKit JS client publishing the same mic” worked, but you might also try https://github.com/livekit-examples/agent-starter-react. I can’t think why that wouldn’t work for self-hosted LiveKit, you can just modify the LiveKit_URL.

I have not come across an issue like this before, usually LiveKit Meet “Just works” so perhaps it is something specific to your audio configuration.