Built to order

Video Calling Android App with Group Calls and Screen Sharing

This project builds a video calling Android app with group calls and screen sharing using WebRTC media and Firebase signalling. To build it, create an Android app in Kotlin, set up a signalling server for SDP offer/answer exchange, gather ICE candidates through STUN/TURN servers, connect peers with RTCPeerConnection, and route group calls through an SFU so each phone sends one stream. Screen sharing uses the MediaProjection API to capture the display. Suitable for B.E./B.Tech final-year projects in Computer Engineering, IT and Electronics & Telecommunication.

Android Firebase AuthenticationGitKotlin · Android SDKFirebase Realtime DatabaseWebRTCMediaProjection APINode.js mediasoup SFUcoturnSoftware
Video Calling Android App with Group Calls and Screen Sharing — project thumbnail preview
More project photos (2)

The problem

Video calling is now the default way student teams meet their guides, run reviews and present demos, yet the apps they rely on are closed products whose internals cannot be studied or explained in a viva. A student who wants to understand how this video calling Android app actually works — how two phones find each other across networks, agree on codecs, encrypt the media and keep six video streams in sync — finds no open implementation. This project closes that gap by building a video calling Android app with group calls and screen sharing, using WebRTC for the media plane and Firebase for signalling. The app supports one-to-one and group calls, in-call chat, mute and camera controls, room codes for joining, and screen sharing through Android's MediaProjection API. Because every layer is visible — signalling, ICE negotiation, DTLS-SRTP encryption and SFU forwarding — the student can trace a call from the join button to the first video frame.

SYSTEM FLOW

6 components 5 connections

Live flow
Drag to explore
100%
userCaller

Host creates a room in the app and shares the room code with the group.

Follow the working sequence

How it works

A call begins when the host creates a room and the app writes a room code to Firebase; the other phones join with that code and the signalling channel opens. Each phone creates an RTCPeerConnection, gathers ICE candidates — its local address, the public address a STUN server reports, and, if needed, a relay address from the TURN server — and exchanges an SDP offer and answer through Firebase to agree codecs and encryption. The DTLS handshake runs over the chosen path, derives the SRTP keys, and media starts flowing: in a group call each phone sends one stream to the selective forwarding unit, which forwards it to the other participants without decoding it. Screen sharing adds a second video track from the MediaProjection API through renegotiation on the same connection. Chat messages travel over Firebase, mute and camera toggles update the local tracks, and when the last participant leaves, the room closes and its signalling records are removed.

  1. The host creates a room in the app; Firebase stores the room code and the host's SDP offer.
  2. Joining phones enter the code, read the offer, and answer with their own SDP and ICE candidates.
  3. ICE tests the candidate pairs — host address, server-reflexive address via STUN, relay address via TURN — and picks a working path through any NAT.
  4. The DTLS handshake derives the SRTP keys, and encrypted audio and video start flowing peer-to-peer for a two-person call, or through the SFU for a group call.
  5. Each participant's video is rendered in the grid, the active speaker is highlighted, and the call timer runs.
  6. Screen sharing starts from the share button after the Android capture-consent prompt; the display is sent as a second video track.
  7. Chat, mute, camera toggle, hand-raise and leave update through Firebase and the local peer connection.
  8. When the call ends, media tracks are stopped, peer connections are closed, and the room record is removed from Firebase.

Builder note (from the demo build): screen sharing is added as a second video track on the same RTCPeerConnection through a renegotiation offer — adding it without renegotiation leaves the remote side showing the camera only, which is the most common first-build failure in this project.

Tech stack:

  • Kotlin · Android SDK
  • WebRTC (RTCPeerConnection)
  • Firebase Realtime Database (signalling + chat)
  • Firebase Authentication
  • MediaProjection API (screen share)
  • Node.js · mediasoup SFU (group media)
  • coturn (TURN relay)
  • Git
Parameter Value
Platform Android 8.0 (API 26) or higher (minimum)
Language Kotlin
Media engine WebRTC · RTCPeerConnection · DTLS-SRTP encrypted media
Signalling Firebase Realtime Database (SDP + ICE exchange)
Group media Node.js · mediasoup SFU (design target)
Participants per room Up to 6 (design target)
Video 720p at 30 fps (design target)
Screen share 1080p capture via MediaProjection API (design target)
STUN stun.l.google.com:19302 (public server, development use)
TURN Self-hosted coturn relay (required for symmetric NAT)
Chat Text messages over Firebase (base build)
App size Approximately 25 MB (expected)

Project features

The app is built around four capabilities that together make a calling product: group video calls for up to 6 participants, screen sharing, in-call chat, and room-code joining. Group calls run through a selective forwarding unit, so each phone sends one 720p video stream upstream and receives one stream per other participant, which keeps mobile bandwidth and battery use far lower than a mesh where every phone sends a stream to every other phone. Screen sharing captures the display through Android's MediaProjection API and adds it as a second video track on the same peer connection, so a presenter can walk the group through slides or code without leaving the call. In-call chat, mute and camera controls, a live call timer, a participant list with hand-raise, and a per-peer call-quality panel round out the experience, and every one of these features is implemented in the base build — nothing in the list below is a mock-up or a planned addition.

  • [Group video calls] Up to 6 participants in one room through a selective forwarding unit (SFU): each phone sends one video stream upstream and receives one stream per other participant, instead of a mesh where every phone streams to every other phone.
  • [Screen sharing] The display is captured through Android's MediaProjection API and sent as a second video track on the same peer connection, so slides, code or documents can be presented live inside the call.
  • [One-to-one video calls] Direct peer-to-peer calls between two phones with DTLS-SRTP encrypted media; no media server sits in the path for a two-person call.
  • [In-call chat] Text messages sent over the same Firebase channel used for call signalling, with sender names and timestamps, visible to everyone in the room.
  • [Room codes and join links] Every call gets a short room code and a shareable link; joining needs no account beyond Firebase Authentication, and the host controls who is admitted.
  • [Call controls and participant list] Mute, camera toggle, hand-raise, active-speaker highlighting, a live call timer and a participant list showing who is speaking, muted or presenting.
  • [Call-quality panel] Per-peer bitrate, packet loss and round-trip time read from WebRTC getStats, so connection problems can be diagnosed during the call instead of guessed at afterwards.

Optional customisation (not in the base build): server-side call recording and live captions. Future scope: breakout rooms, virtual backgrounds and a whiteboard.

What is included

  • Complete Android source code (Kotlin) with WebRTC integration
  • Node.js mediasoup SFU server code with setup guide
  • Firebase project configuration (Authentication + Realtime Database rules)
  • Working demo build with the group-call, screen-share and chat screens
  • Project report PDF (architecture, signalling flow, ICE and DTLS explanation)
  • PPT presentation for final review
  • Viva Q&A preparation document (WebRTC, SDP, ICE, STUN/TURN, SFU)

Limitations & prerequisites

  • Group calls need internet in the base build: signalling and media both travel over the network, and same-Wi-Fi calls without internet are not included.
  • Call quality depends on each participant's network: packet loss and low bandwidth reduce video quality, and the app adapts resolution down rather than dropping the call (design behaviour).
  • Screen sharing needs the Android capture-consent prompt every session, and windows marked FLAG_SECURE appear black in the shared stream.
  • Without a TURN relay, calls fail for participants behind symmetric NATs or strict firewalls; the relay must be hosted and kept running.
  • The base build has no call recording; recording needs a server-side recorder and is an optional add-on.
  • Video is 720p by design target; 1080p group video would raise bandwidth and battery use beyond what typical student phones sustain (design decision, not a measured limit).
  • Media is encrypted in transit with DTLS-SRTP, but the SFU terminates the encrypted transport to forward streams, so group calls are not end-to-end encrypted in the strict sense.

Frequently Asked Questions

Is this project suitable for a final-year project?

Yes — for Computer Engineering, IT and Electronics & Telecommunication students. It demonstrates real-time media over WebRTC, signalling design, NAT traversal with ICE/STUN/TURN, DTLS-SRTP encryption and SFU-based group calling, all in a working Android app that can be shown live. The report explains each layer, so the work can be defended in a review without relying on any closed product.

What is an SFU and why does this project use one?

An SFU (selective forwarding unit) is a server that receives one video stream from each participant and forwards it to the others without decoding it. In a 6-person mesh each phone would send 5 streams and receive 5; with an SFU each phone sends 1 and receives 5, which keeps mobile bandwidth and battery use manageable. That is why group calls route through the SFU while one-to-one calls stay direct peer-to-peer.

Does it work without internet?

No, not in the base build — every participant needs an internet connection, because signalling runs over Firebase and media runs over the internet, and without connectivity the app cannot exchange SDP offers or ICE candidates, so no call can start. Same-Wi-Fi direct calling with host ICE candidates is possible in principle, but not implemented — it is a possible extension.

Can calls be recorded?

Not in the base build. Recording a WebRTC call needs a server-side recorder that subscribes to the SFU streams and writes them to disk, which is a separate component with its own storage, consent prompts and file handling, so it cannot be switched on from the app alone. It can be added as an optional customisation on request, with an on-screen recording indicator.

What does screen sharing need on Android?

The MediaProjection API, available from Android 5.0 and used here with Android 8.0 as the minimum. Every sharing session starts with a system consent prompt that names the app, and the user can stop sharing from the notification shade at any time. The captured display is added as a second video track on the existing peer connection.

How many people can join one call?

Up to 6 participants per room in the base build, which is a design target chosen so a mid-range phone can decode 5 incoming 720p streams. The SFU itself can forward to more, but each extra participant adds one more downstream stream per phone, so larger rooms need lower resolutions or stronger devices.

Components & software requirements
  • Kotlin · Android SDK
  • WebRTC (RTCPeerConnection)
  • Firebase Realtime Database (signalling + chat)
  • Firebase Authentication
  • MediaProjection API (screen share)
  • Node.js · mediasoup SFU (group media)
  • coturn (TURN relay)
  • Git
Delivery information

Built-to-order project. Delivery timeline is shared after order confirmation based on current queue.

Support terms

Complete documentation, setup guide, and viva preparation included. Support for setup and explanation provided.

Download free synopsis (PDF)

Enter your name and WhatsApp number — the synopsis PDF downloads immediately. We may send occasional project updates on WhatsApp; no spam.

Get a quotation