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:
- The
error.codefromroom.on('error')or thecatcharoundjoin(). room.getDiagnostics()from the user's device. It's safe to share; it contains no token or secret. See Diagnostics.
| Problem | Jump to |
|---|---|
| The browser might not support WebRTC | Check browser support |
| Video is black, no error | Black video, no error |
| No sound | No audio |
| Screen share has no sound | Screen share has no audio |
| Device names are blank | Device labels are empty |
| The call never connects | A call fails to connect at all |
React Native: RTCPeerConnection is not defined | See below |
| The app crashes when asking for the camera | See 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.
- Run
getBrowserSupportDetails(). - Check that camera permission was really granted.
- 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):
- Has the token expired? Tokens are short-lived on purpose.
- Did you pass
iceServersfrom 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". - What's the
error.code?ROOM_NOT_FOUNDmeans the room passed tojoin()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:
- Permissions: camera and mic prompts differ by platform.
- Background Audio: React Native only.
- Audio routing: see each SDK's own page.
"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