talk-android icon indicating copy to clipboard operation
talk-android copied to clipboard

Call started from talk android gets dropped when a participant joins

Open kinuris opened this issue 2 months ago • 3 comments

Steps to reproduce

  1. Start a group chat call from the talk-android app
  2. In another account, join in the call

Expected behaviour

Call is established between 2 participants

Actual behaviour

Call is dropped by the talk android app, leaving only the other participant in the call

Device brand and model

Samsung Galaxy A16 5G

Android version

15

Nextcloud Talk app version

22.0.2

Nextcloud server version

32

Talk version

22

Custom Signaling server configured

Yes (specify version in Additional Information)

Custom TURN server configured

Yes

Custom STUN server configured

No

Android logs

No response

Server log


Additional information

No response

kinuris avatar Oct 09 '25 03:10 kinuris

Does the android app crash at this point? (Then maybe it is related to https://github.com/nextcloud/talk-android/issues/5073 ) What exactly happens with the app when the "Call is dropped"?

mahibi avatar Oct 09 '25 14:10 mahibi

Thanks for the response @mahibi

The app just goes 'Something went wrong' and then navigates back to the chat. The chat record just says 'You left the call'. This has been consistent, app doesn't crash or anything.

kinuris avatar Oct 10 '25 00:10 kinuris

talk_call_logs.txt

Similar problem with me. Web to web call is going through and working fine, from mobile web browser or desktop web browser! Talk desktop (windows) calls are going fine. Just the talk android app is dropping the call (shows leaving the call then goes back to the chat view) immediately after joining it.


Talk Mobile App Diagnosis Content:

Meta information

Generation of system report Nov 1, 2025 6:43:45 AM

Phone

Device samsung SM-S938B

Android version 36

Google Play services Google Play services are available

App

App name Nextcloud Talk

App version v22.0.2

Build flavor gplay

Battery settings Battery optimization is ignored, all fine

Notification permissions Notifications are granted

Calls notification channel enabled? Yes

Messages notification channel enabled? Yes

Firebase push token #############

Latest firebase push token generation Oct 31, 2025 6:01:32 PM

Latest firebase push token fetch Nov 1, 2025 6:36:47 AM

Registered users 1

Current account

Server #############

User #############

User status enabled? Yes

Server notification app installed? Yes

Latest push registration at server Nov 1, 2025 6:36:48 AM

Latest push registration at push proxy Nov 1, 2025 6:36:48 AM

Server version 32.0.1

Server Talk version 22.0.2

Signaling Mode External


Server Setup Details

Infrastructure:

  • Nextcloud Server: 32.0.1
  • Talk App: 22.0.2
  • External Signaling Server: nextcloud-spreed-signaling (latest)
  • TURN Server: coturn 4.6.2
  • All services running on separate Hetzner Cloud VPS instances

Configuration:

  • External signaling server configured and working
  • TURN server configured with UDP/TCP on port 3478
  • TURN relay ports: 49152-65535 (UDP/TCP)
  • All firewall ports properly opened
  • Nginx reverse proxy with WebSocket support

What Works:

  • ✅ Desktop browser → Desktop browser calls
  • ✅ Mobile browser → Desktop browser calls
  • ✅ Mobile browser → Mobile browser calls
  • ✅ Desktop app (Windows) → Any participant calls
  • ✅ Chat, notifications, and all other features in mobile app

What Fails:

  • ❌ Mobile app → Any participant (call drops immediately after joining)
  • ❌ Any participant → Mobile app (same behavior)

Server Logs During Failed Call

Signaling Server Log:

clientsession.go:480: Session xxx joined room ftiv2gnz
room.go:789: Session xxx joined call ftiv2gnz
client.go:373: Error reading from client xxx: websocket: close 1006 (abnormal closure): unexpected EOF
hub.go:1067: Unregister xxx
clientsession.go:494: Session xxx left call ftiv2gnz

TURN Server Log:

session new, realm=<turn.domain>, username=<...>
session ALLOCATE processed, success
session usage: realm=<turn.domain>, username=<...>, rp=13, rb=1472, sp=7, sb=620
peer usage: realm=<turn.domain>, username=<...>, rp=0, rb=0, sp=0, sb=0
session closed, reason: allocation timeout

Key Observations

  1. WebSocket Connection Closes Abnormally: The signaling server logs show websocket: close 1006 (abnormal closure): unexpected EOF - the mobile app is closing the WebSocket connection unexpectedly.

  2. TURN Allocation Succeeds But No Media: The TURN server shows successful allocation but peer usage counters are all zero (rp=0, rb=0, sp=0, sb=0), indicating no media is being relayed.

  3. Network Independent: Issue occurs on both WiFi and mobile data (4G/5G), ruling out network-specific problems.

  4. Permissions Verified: All permissions granted, battery optimization disabled, background activity unrestricted.

  5. Server Configuration Verified: Web calls working perfectly proves server-side configuration is correct.

Call Flow Analysis

  1. ✅ Mobile app initiates call
  2. ✅ Signaling server receives connection
  3. ✅ Session joins room
  4. ✅ Session joins call
  5. ✅ TURN allocation succeeds
  6. WebSocket closes abnormally (app-side issue)
  7. ❌ Call drops immediately

The issue appears to be in the mobile app's WebRTC/WebSocket handling when using external signaling servers. The app seems to be closing its own WebSocket connection to the signaling server during the ICE negotiation phase.

Tested Workarounds

  • ✅ Using mobile web browser works perfectly
  • ❌ Reinstalling app: No effect
  • ❌ Clearing app cache: No effect
  • ❌ Different networks: No effect
  • ❌ Server-side timeout adjustments: No effect

Additional Context

This issue is critical for users relying on the mobile app for video calls. The workaround of using the mobile browser is functional but defeats the purpose of having a dedicated app.


Update

I've found that the app is using the standard android logging, so grabbed the log using the adb logcat. The log file is attached.

From the logs, it looks like an issue in the session id. (maybe a buggy code in CallActivity.kt (2262-2266) where using nextcloud session id in external signaling?!)

mhh1422 avatar Nov 01 '25 03:11 mhh1422