For two weeks, every 1:1 audio and video call in our Flutter app failed the same boring way: the caller saw "Callingβ¦", the screen flipped to "Ended" about a second later, and the callee's phone never rang. The client logs looked fine. The peer connection reached have-local-offer and then closed.
The temptation is to pick one suspect and start there. We spent the first evening on the relay server, which was genuinely broken β and fixing it changed nothing, because two other bugs sat in front of it. This is the story of all three, plus the small traps that were still waiting after them.
The symptom: have-local-offer , then silence
Worth stating precisely, because it narrows the search:
The app created an offer, set it as its local description, and sent it.
The backend accepted the WebSocket message without an error.
No answer ever arrived.β¦