nextcloud / nextcloud/talk-android
Video freezes after ~5 seconds when sending from Talk Android app, audio continues normally
Nobody has claimed this yet.
- Dominant language
- Kotlin
- Stars
- 739
- Forks
- 321
- Avg merge
- 14h 59m
- Merged PRs (30d)
- 151
Description
Steps to reproduce
Steps to reproduce
- Start a 1-on-1 video call in Nextcloud Talk between an Android participant (using the official Talk Android app) and a desktop participant (Firefox on Linux)
- Both participants enable audio and video
- The Android participant uses the front camera
- The Android-side video shows correctly on the receiving end for the first ~5 seconds
- After that, the video stream from Android freezes on the receiver's side while continuing to display correctly on the Android device itself
- Audio from Android continues working perfectly for the duration of the call
- The Android user keeps seeing both their own preview and the remote participant's video without issues
Workaround
Joining the call from the Chrome browser on the same Android device works perfectly — video streams correctly without any freezing for the entire call duration. This strongly suggests the issue is specific to the WebRTC implementation in the Talk Android app.
Reproducibility
Reproduced consistently in 4 out of 4 attempts. Always freezes around the 5-second mark.
Server configuration
Component | Version -- | -- Nextcloud | 33.0.3 Talk (spreed) | 23.0.4 Talk Support app | 5.0.0 Signaling server (HPB) | nextcloud-spreed-signaling 2.1.1~docker coturn | 4.10.0 OS (server) | Ubuntu Server 24.04 LTS Deployment | Docker Compose, all services in containers Signaling mode | external (HPB enabled) TURN/STUN | Properly configured with external-ip, public DDNS realm, port 3478 UDP/TCP forwarded to coturn Internet exposure | Cloudflare Tunnel for HTTP/HTTPS (signaling.* via tunnel); coturn 3478 directly through router port forwardingWebRTC stats from receiver side (Firefox about:webrtc)
The receiving connection establishes correctly via the signaling server. The selected ICE candidate pair is host ↔ prflx over UDP and remains in succeeded state for the entire call. Audio packets arrive continuously from the Android sender. Video packets arrive only during the first ~5 seconds, then bytesReceived for the video track remains static while audio continues incrementing normally.
Total packet loss observed: <0.01% (essentially none). RTT to Android client reported by signaling server: stable at ~90–110 ms throughout the call.
Server-side log analysis
- Signaling server: no errors, both clients maintain stable WebSocket connections, RTT measurements stable
- coturn: no errors, no rejected sessions (after configuring proper
allowed-peer-ip/denied-peer-iprules) - Nextcloud Talk: no errors visible in
nextcloud.log
Hypothesis
Since the same network path, same device, same call setup works flawlessly when using Chrome on Android, the issue appears to be in the WebRTC encoder/sender pipeline of the Talk Android app. Possible causes:
- The Android app's video encoder may be failing to push frames after the initial keyframes, while the audio encoder continues
- Missing keyframe regeneration when the encoder enters a stalled state
- Possible interaction with Pixel 9a's specific camera HAL (front camera in this case)
Additional notes
This is a self-hosted instance with a single user testing. The bug is fully reproducible. I'm happy to provide additional logs, packet captures, or test specific configurations if the maintainers want to narrow down the issue.
Expected behaviour
Video from the Android app should keep streaming continuously to the remote participant for the entire duration of the call, the same way audio does.
Actual behaviour
Video from Android freezes on the receiver's end (Firefox on Linux desktop) after about 5 seconds
Device brand and model
Pixel 9a
Android version
16
Nextcloud Talk app version
23.0.1
Nextcloud server version
33.0.3
Talk version
No response
Custom Signaling server configured
None
Custom TURN server configured
None
Custom STUN server configured
None
Android logs
No response
Server log
Additional information
No response
Contributor guide
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
Research direction
Start by reproducing the freeze with the Talk Android app on the Pixel 9a using the front camera, comparing it with Chrome on the same device. Inspect the Android WebRTC encoder/sender pipeline and use Firefox about:webrtc plus Android and server logs to identify why video bytes stop while audio continues; done means continuous video reaches the receiver for the full call.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- android, kotlin
- Domain
- audio-video-rtc, mobile
- Issue type
- Bug
- Difficulty
- 4/5
- Estimated time
- 3-5 days
- Activity status
- Quiet
- Clarity
- Needs clarification
- Newbie friendliness
- 35/100