Steps to reproduce
Observed live on a real call (Android Talk v24.0.3, HPB + Janus, spreed 24.0.4):
- Participant A (Firefox) joins a call but its publisher on the MCU never comes up (e.g. getUserMedia never resolves, or a Janus-side failure)
- Participant B (Android) joins the call — its own publisher connects fine
- Android sends
requestoffer to subscribe to A's stream
Expected behaviour
If subscribing fails, Android retries (with backoff) and/or shows an error state. When A's publisher appears later, B starts receiving the stream.
Actual behaviour
The HPB answers {"type":"error","error":{"code":"client_not_found","message":"No MCU client found to send message to."}} (after the 10 s mcuTimeout). The Android app logs the error and does nothing else: WebSocketInstance.processErrorMessage only handles no_such_session and hello_expected; every other error code is dropped. requestoffer is sent exactly once, when the subscriber PeerConnectionWrapper is constructed (PeerConnectionWrapper.java ctor, hasMCU && "video".equals(videoStreamType) branch) and is never retried. The call UI shows the connecting spinner forever.
The same silent-death happens if the requestoffer response is simply lost during a reconnect — no error is even received.
Device brand and model
Samsung Galaxy S25 Ultra
Android version
16
Nextcloud Talk app version
master
Nextcloud server version
34.0.3
Talk version
24.0.4
Custom Signaling server configured
Yes (specify version in Additional Information)
Custom TURN server configured
Yes
Custom STUN server configured
Yes
Android logs
Client (logcat, 11:32 phone time):
WebSocketInstance: Received error: {"type":"error","error":{"code":"client_not_found","message":"No MCU client found to send message to."}}
Server log
Server (HPB, 08:32 UTC — 10 s after join):
hub.go:2978: Could not create MCU subscriber for session k5l5… to send
{"type":"requestoffer","sid":"","roomType":"video","payload":null} to o8VN…: context deadline exceeded
The Android publisher itself was fully established (Janus: "DTLS handshake completed", "WebRTC media is now available") — only the subscriber setup failed, and nothing recovered it.
Additional information
No response
Steps to reproduce
Observed live on a real call (Android Talk v24.0.3, HPB + Janus, spreed 24.0.4):
requestofferto subscribe to A's streamExpected behaviour
If subscribing fails, Android retries (with backoff) and/or shows an error state. When A's publisher appears later, B starts receiving the stream.
Actual behaviour
The HPB answers
{"type":"error","error":{"code":"client_not_found","message":"No MCU client found to send message to."}}(after the 10 smcuTimeout). The Android app logs the error and does nothing else:WebSocketInstance.processErrorMessageonly handlesno_such_sessionandhello_expected; every other error code is dropped.requestofferis sent exactly once, when the subscriberPeerConnectionWrapperis constructed (PeerConnectionWrapper.javactor,hasMCU && "video".equals(videoStreamType)branch) and is never retried. The call UI shows the connecting spinner forever.The same silent-death happens if the
requestofferresponse is simply lost during a reconnect — no error is even received.Device brand and model
Samsung Galaxy S25 Ultra
Android version
16
Nextcloud Talk app version
master
Nextcloud server version
34.0.3
Talk version
24.0.4
Custom Signaling server configured
Yes (specify version in Additional Information)
Custom TURN server configured
Yes
Custom STUN server configured
Yes
Android logs
Client (logcat, 11:32 phone time):
Server log
Additional information
No response