Skip to main content

Ghost Busting Voice Chats

What This Solves

Sometimes calls will have "ghosts," people who display as being in a call even though they are not. You can tell this happened in cases where the person is in call with "waiting for media" above their portrait.

Why This Problem Exists

Voice data is not actually done inside the matrix network directly. Instead another network is leveraged using something called Livekit. Livekit serves as the backbone for passing real-time audio and video data, so the primary purpose of the matrix chat is to send information about Livekit, and give the permission for users to join specific Livekit rooms. This works well, but if something desyncs this process, a ghost is formed. Commonly, if your matrix crashes, you'll lose connection to Livekit, but your matrix status wont have a follow up "user disconnected" status sent (since the client is too crashed to send it).

What Information You Need

You will need to full MXID of the person (it looks like @username:example.com).

Forging the Event
  1. Right click the voice room, and click "settings"

    image.png

  2. Click onto the developer tools tab

    image.png

  3. Click to expand the room state

    image.png

  4. Click to expand the org.matrix.msc3401.call.member state events

    image.png

  5. You'll see a massive amount of state events. Each person should have one, but rarely a single person will have multiple. If you see multiple with the mxid of the ghost you are trying to destroy, go through them in order, and do this step, and the one that follows, on each until it works.

    Click to expand the state event for the ghost user

    image.png

  6. Click "edit" at the top right of the state event

    image.png

  7. Select all the text under the JSON content

    image.png

  8. Delete the content and replace it with "{}"

    image.png

  9. Press save

    image.png

Now the ghost should be killed. If it was not a ghost, and was a real person, you should hear a very quick leave and rejoin sound. You will then both be confused.