nextcloud / nextcloud/talk-android

Video freezes after ~5 seconds when sending from Talk Android app, audio continues normally

Open
#6,151 1 comment 0 reactions 0 assignees View on GitHub

Nobody has claimed this yet.

bug
Dominant language
Kotlin
Stars
739
Forks
321
Avg merge
14h 59m
Merged PRs (30d)
151

Description

Steps to reproduce
Steps to reproduce
  1. 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)
  2. Both participants enable audio and video
  3. The Android participant uses the front camera
  4. The Android-side video shows correctly on the receiving end for the first ~5 seconds
  5. After that, the video stream from Android freezes on the receiver's side while continuing to display correctly on the Android device itself
  6. Audio from Android continues working perfectly for the duration of the call
  7. 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 forwarding
WebRTC 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-ip rules)
  • 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

  • Audio remains stable and bidirectional throughout the call
  • The Android user does not perceive any problem on their side (sees both videos correctly)
  • The receiving side sees the last frame frozen until the call ends
  • 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

    Open the contributing guide

    First steps

    1. Read the whole issue, then the project's contributing guide.
    2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
    3. Fork the repository and make your change on a branch.
    4. 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

    Get new issues in your inbox

    A short digest of beginner-friendly GitHub issues.