Video and voice calls: how Seldeo talks to the people you love
Why calls are a first-class Seldeo feature
Every social product has a messaging layer. Most either treat calling as an afterthought (a small button in the chat header that opens something unpolished) or lean on the operating system's own calling app to do the work.
Seldeo's calls are a first-class part of the product because the moments that matter most on a social network — the half-hour catch-up with a friend from home, the video call where three siblings are on their phones talking to a parent in a hospital, the "look at this" screen-share of a photo album — deserve a well-built call surface, not a hand-off to whatever the OS provides.
The stack
The calling layer on Seldeo runs over a dedicated real-time media network. Its job is:
- Signalling. Establishing the initial connection between peers.
- Media routing. Choosing between peer-to-peer routing (when both endpoints can reach each other directly) and relayed routing (when NATs or firewalls block direct P2P). Most calls default to relayed, because it is the reliability floor.
- Codec negotiation. Picking the best audio and video codecs supported by both endpoints, and adapting bitrate/resolution to available bandwidth in real time.
- Adaptive quality. Dropping video resolution or, in the worst case, dropping video entirely and keeping audio when the network deteriorates below what the current stream needs.
We use a dedicated real-time media provider for the transport rather than rolling our own WebRTC stack for one reason: reliability at global scale is expensive to build from scratch, and the compromise is not worth the alternative — a call that drops in the middle of the conversation that mattered.
What Seldeo owns above the transport
The transport handles the network; Seldeo owns everything above:
- Ring model. Who rings whom, how many devices ring per account, what the ring window is (15 seconds by default), what happens if no device answers.
- CallKit / ConnectionService integration. On iOS and Android, respectively, Seldeo integrates with the OS's system-calling UI so an incoming call rings even when the app is backgrounded and shows up in the phone's recent-calls history.
- Picture-in-picture. Both platforms support persistent PIP for an in-progress video call so you can navigate away from the app without dropping video.
- Foreground service. On Android, a foreground service keeps the call alive through low-memory conditions. The service is used only during a live call.
- In-app UI. All the visible surfaces — call sheet, mute buttons, camera switch, screen-share prompt, participant grid — are Seldeo's own code.
- Recording policy. No call is ever recorded on our servers. There is no "cloud recording" feature. If a participant records the call locally, they're responsible for doing so under the applicable jurisdiction's consent law.
The security posture for calls
Calls on Seldeo are:
- End-to-end encrypted between participants. The underlying transport handles routing but cannot decrypt call media. Our servers cannot decrypt call media either.
- Metadata-minimised. We log the fact that a call happened, the participants, and the start/end times. That's it. We do not log per-participant bitrate or network path.
- Consent-gated for the microphone and camera at the OS layer. Nothing about a call runs until the OS confirms the permission grant.
The one place a call metadata detail is shared beyond the participants is the presence signal: if you are on a call, your presence indicator to your friends may say "On a call" (subject to the granular presence controls in Settings → Privacy → Presence). Some users find that helpful. Others find it invasive. It defaults to off.
Group calls
Group video calls scale to six participants in the current release, and to ten in the next release we're finalising. The cap is a function of the layout — six participants can share a tile grid on a phone screen that is still readable; ten needs a scrollable grid we're testing.
For larger group calls (birthday call with the whole extended family), we recommend voice-only mode, which scales to about 25 participants comfortably.
Picture-in-picture, backgrounding, and battery
Two engineering choices we're proud of on the call layer:
- Battery. Seldeo's video call at HD burns roughly the same battery per hour as FaceTime at HD. That was a deliberate benchmark. It required tuning the encoder settings, disabling background bitrate scaling when video is off, and turning off camera preview when the app is in PIP.
- Backgrounding. Both iOS and Android throttle apps aggressively when the screen is off. Seldeo's call stack transparently drops video when the screen turns off (via the OS's call-continuity APIs) and restores it on screen-on. Callers on either side see a "video paused" tile during the interval, not a frozen frame.
Screen share
Screen sharing is available on both platforms during a video call, subject to the platform's own permission model. Screen shares are transmitted through the same E2EE media channel as camera video. We do not have a screen-share recording feature.
What happens when a call fails
Every call attempt goes through a small failure taxonomy:
- No devices available. The recipient has no paired devices with an active push registration, or presence indicates they're offline. The caller sees "Not available" and is offered the option to leave a voice note.
- No answer. No paired device picks up within the ring window. Recipient sees a missed-call badge, and the caller sees "No answer."
- Rejected. The recipient explicitly declined the call. The caller sees "Not available" (deliberately the same message as no-devices-available; a call recipient's choice is not exposed to the caller).
- Network drop. Media fails during the call. Seldeo attempts an automatic reconnect for up to 15 seconds before ending the call.
Every one of those states is logged to your call history so you can see what happened.
What we still owe you
- Voice-note fallback. Automatically offer to record a voice message when a call fails to connect.
- Meeting-style links. A shareable link that starts a call without requiring a friend connection, for business/community use. On the roadmap, not scheduled.
- Live captions. On-device captions for voice/video calls in supported languages. Under design.
Calls are the moment on Seldeo when the app has to disappear — the person on the other end of the line is what matters. Everything we build in this layer is measured against how close we get to that outcome.
