livqenoDocs

RTCTroubleshooting

Troubleshooting

Common call problems, what causes them, and how to fix them.

Something not working in a call? Find your problem below. Each entry says what you'll see, why it happens, and how to fix it.

Before you dig in, collect two things. They answer most questions fast:

  1. The error.code from room.on('error') or the catch around join().
  2. room.getDiagnostics() from the user's device. It's safe to share; it contains no token or secret. See Diagnostics.
ProblemJump to
The browser might not support WebRTCCheck browser support
Video is black, no errorBlack video, no error
No soundNo audio
Screen share has no soundScreen share has no audio
Device names are blankDevice labels are empty
The call never connectsA call fails to connect at all
React Native: RTCPeerConnection is not definedSee below
The app crashes when asking for the cameraSee below

Check browser support

import { isBrowserSupported, getBrowserSupportDetails } from '@livqeno/rtc';
 
if (!isBrowserSupported()) {
  const { missing } = getBrowserSupportDetails(); // e.g. ['RTCPeerConnection']
}

This checks what the browser can actually do, not its name. So when a browser adds support later, it starts working on its own.

Black video, no error

This is almost always a permission problem, not a bug in your code. If camera permission was quietly denied, the track never starts, and no error is thrown.

  1. Run getBrowserSupportDetails().
  2. Check that camera permission was really granted.
  3. On React Native or Flutter, call permissions.check() or look in the OS settings. See Permissions.

No audio, or a remote track plays from the wrong device

Browsers (especially Safari) block sound until the user clicks or taps something. This is called an autoplay restriction.

Fix: if you attach a track before the user has clicked anything, start it muted, then unmute on the first click.

Screen share has no audio

Audio is only shared when you ask for it, enableScreenShare({ audio: true }), and the browser returns some. Chrome and Edge do when the user ticks "Share tab audio" (or "Share system audio") in the picker; Firefox and Safari never do, and the share then goes ahead as video only, with no error. See Share the audio too.

Device labels are empty

Browsers hide device names until the user grants permission at least once. This is a privacy rule. The SDK can't get around it.

Fix: call client.getDevices() again after the first successful enableCamera() or enableMicrophone().

A call fails to connect at all

The user clicks Join and nothing happens, or it spins and fails. Check these in order (most common first):

  1. Has the token expired? Tokens are short-lived on purpose.
  2. Did you pass iceServers from the token response? Don't build it by hand. A missing TURN server is the #1 cause of "works on Wi-Fi, fails on cellular or office networks".
  3. What's the error.code? ROOM_NOT_FOUND means the room passed to join() isn't the one the token was made for.

Mobile

React Native and Flutter are both officially supported. See React Native and Flutter. They use the same RTC and chat logic as @livqeno/rtc and @livqeno/chat, so a fix usually reaches all platforms at once.

Mobile-only topics:

"RTCPeerConnection is not defined" (React Native)

The WebRTC globals weren't set up yet.

Creating a Livqeno sets them up for you. But if you use WebRTC before that (for example, a camera preview before joining), call bootstrapLivqenoNative() yourself first, in index.js.

App crashes instantly when asking for camera/microphone (React Native, Flutter)

NSCameraUsageDescription or NSMicrophoneUsageDescription is missing from Info.plist. iOS kills the app instead of showing an error.

Fix: add both. See Permissions.

Not available yet

  • You can't see each participant's live connection state.
  • Data messages aren't saved for people who join later. Use Chat if you need history.

Still stuck?

Contact support. Include:

  • Your SDK version
  • Your browser (or device)
  • Anything room.on('error') reported