---
audience: everyone
summary: Audio dropouts, video freezing, echo, can't hear, can't join.
title: Call quality issues
path: troubleshooting/call-quality-issues
status: published
---

# Call quality issues

## Can't join a call

Symptom: clicking **Join** does nothing or returns an error.

Causes:

- **Browser permissions**: microphone / camera not granted. Click
  the camera icon in the address bar to allow. After granting,
  refresh the call.
- **LiveKit unreachable** from your network: corporate firewall
  blocking UDP/WebRTC. The call panel shows
  `SW_CALL_LIVEKIT_UNREACHABLE`. Admin: check
  `SCAIWAVE_LIVEKIT_URL` and that the LiveKit instance accepts
  connections from your network.
- **Already in another call** elsewhere: the client can only be in
  one call at a time. Leave the other first.

## One-way audio

You can hear them; they can't hear you. Or vice versa.

- **Mic muted**: check the mute button — sometimes auto-muted on
  join if the room has > 4 participants.
- **Wrong input device**: ScaiWave defaults to the OS default mic.
  Switch via the call panel's **⚙️** menu → Audio.
- **OS-level mute**: Windows / macOS sometimes have separate
  app-level mute. Check OS sound settings.

## Echo

Almost always one participant *not* using headphones with their
mic. The SFU does AEC but not perfectly when there's a hardware
loop.

Quick test: mute everyone except the suspected loud one; echo
should disappear when you find them.

## Video freeze

- Tab is in the background and the browser is throttling. Refocus
  the tab.
- Bandwidth low. LiveKit's adaptive bitrate should handle it; if
  not, the **⚙️** menu → Video → cap at 360p to force a lower
  bitrate.
- Hardware acceleration glitch (Linux + nouveau is the common
  culprit). Force CPU encode via `chrome://flags`.

## Screen share not visible

The sharer started, you see "X is sharing" but no video.

- Browser permission for screen share isn't system-level the way
  camera is — usually permission was denied at the OS picker.
  Sharer: re-click **Share screen**, pick a source, allow.
- ScaiWave's PiP popout doesn't render screen share on Firefox
  (the Document PiP API isn't available there). View in the main
  window.

## Recording missing

Started a recording but it doesn't appear in the room afterwards.

- LiveKit egress can take up to a minute after the call ends
  before the file is finalised and the webhook fires.
- Check `GET /v1/calls/{id}/recordings` — if empty after 5
  minutes, admin checks LiveKit egress logs and MinIO bucket
  permissions.

## Transcription empty / nonsensical

- Audio quality too low (very quiet, lots of background noise).
- Wrong language hint — ScaiGrid's speech model picks better when
  given a hint via the **Language** picker before starting.

## Where to look (admin)

- LiveKit's logs: webhook activity, egress status.
- ScaiWave logs: `swp.call.*` events, any
  `SW_CALL_LIVEKIT_UNREACHABLE`.
- ScaiGrid logs: transcription job status.
