Flutter features
Flutter Video Call: 3 Proven Ways to Add Video Calling to Your App
Adding a Flutter video call feature looks simple in a demo and gets serious in production: group rooms, poor connections, incoming calls on a locked phone, privacy and a bill that grows with every minute. This guide compares the three ways to add video calling to a Flutter app, explains what sits under the screen, lists the mobile traps that cost the most time, and shows how to plan the feature so it works for real users, not only in a test room.
Short answer
There are three ways to add a Flutter video call feature. A managed video SDK such as Agora or LiveKit Cloud is the fastest and handles servers, scaling and poor networks for you, billed per minute. A self hosted open source media server, for example LiveKit on your own cloud with the flutter_webrtc stack, gives you control over data and running costs but needs a team to operate it. Embedding an existing meeting tool by link is the cheapest start, but gives the least control. Whichever you choose, plan for incoming calls on a locked phone, permissions, background behaviour, tokens for room access and testing on real devices and networks.
Key takeaways on Flutter video calls
- Do not build the media server yourself. Use a managed SDK or a proven open source server; the hard part is already solved.
- Incoming calls are the hard part on mobile. Ringing on a locked phone needs CallKit on iOS and the Android calling APIs.
- Security is designed, not added. Short lived tokens per room, server side permissions and a clear policy on recording.
- Test where users are. Weak mobile networks, older phones and switching between Wi Fi and cellular reveal what an office test never does.
3 ways to add a Flutter video call feature
The right choice depends on how central video is to your product, how many people join a call and how sensitive the conversations are.
Managed video SDK
A provider runs the media servers worldwide. Your Flutter app uses its SDK, and your backend creates rooms and access tokens.
Best for: most products, from one to one consultations to group rooms.
Self hosted open source
You run an open source media server on your own cloud and connect the app through its Flutter SDK or WebRTC directly.
Best for: strict data residency, very high volume, or a team that can operate it.
Embed a meeting tool
The app opens a meeting in an existing video tool by link or a web view. No media code in your app.
Best for: testing demand, or when video is a small side feature.
For most first versions we recommend a managed SDK. It lets the team spend its weeks on what makes your product different, the booking, the payment, the follow up after the call, instead of on media infrastructure. If the product grows and the per minute bill becomes a real line in the budget, moving to a self hosted server later is a planned project, not an emergency, provided the app was built with a thin layer around the video provider.
What sits under a Flutter video call
A video call is not one feature but a small stack. Knowing the layers helps you read an estimate and ask the right questions.
Only the top and bottom layers are truly yours to design. The middle is where a provider or an open source server saves months of work.
The video itself is solved. What makes a Flutter video call feature good is everything around it: ringing, permissions, reconnection and the moment after the call ends.
The mobile traps that cost the most time
These are the parts of a Flutter video call feature that demos skip and real users find within days.
Incoming calls on a locked phone
A call that only rings while the app is open is not a call. On iOS this means VoIP push and CallKit; on Android, high priority notifications and the system calling APIs. Plan it from the start.
Permissions at the right moment
Ask for camera and microphone when the user first joins a call, explain why, and handle a refusal gracefully with a way to fix it in settings.
Background and interruptions
A phone call, switching apps or locking the screen must not silently drop the room. Decide what keeps running and what pauses.
Weak and changing networks
Moving from Wi Fi to cellular, a lift, a basement. The call should lower quality, show a clear message and reconnect on its own.
Older and cheaper phones
Group rooms with many video tiles can overheat a phone and drain the battery. Limit visible video streams and test on budget devices.
Store review
Apps using VoIP push and background audio are reviewed for how they use them. Use these capabilities only for real calls, as the platform rules describe.
We learned the value of testing in the real environment on Liniowiec, an offline navigation app: everything worked in the simulator, and only the first trips on the water showed lost connections and wrong positions. Real time features behave the same way. Test calls on real phones, on real mobile networks, in the places your users will actually be.
Need video calling in your Flutter app? Tell us who calls whom and how many people join a room, and we will tell you which approach we would choose and why.
Features to plan for a Flutter video call
- One to one or group rooms. A consultation between two people and a class of thirty are different products. Group rooms need a media server and a layout for many participants.
- Scheduling and joining. Most calls belong to something: a booking, a class, a support ticket. Link the room to it, open it a few minutes before the start and close it after.
- Waiting room and roles. Hosts admit guests, mute participants and end the call. Decide the roles before the design.
- Screen sharing. Useful for support, training and consultations; on mobile it needs extra platform work, so confirm it is needed.
- Chat and files during the call. Often expected, often small. Keep messages after the call ends if they matter for the service.
- Recording. Has legal and storage consequences. Ask for consent, store securely and decide how long recordings live.
- After the call. A summary, a follow up booking, a payment or a rating. This is where the business value of the call usually sits.
Security and privacy for video calls
Treat every room as private by default. The app should never join a room directly with a fixed key. Your backend checks who the user is and whether they belong in this room, then issues a short lived token for that room only. Tokens expire, rooms close after the session, and nobody can guess their way into a call.
Most managed providers and open source servers encrypt media in transit. If your product handles health, legal or financial conversations, ask specifically about end to end encryption, where media servers are located and how recordings are stored, and write the answers into the scope. For European users, keeping data in the EU is often a requirement, which can decide between a managed provider and a self hosted server.
Finally, decide what you store. Call metadata such as time, duration and participants is usually enough for the business. Recordings and transcripts are sensitive data with a cost and a responsibility attached; keep them only when the service really needs them.
Adding video calling to an existing Flutter app
Video is often added to an app that already works: a booking app that wants online sessions, a marketplace that wants consultations, an internal tool that wants remote support. The good news is that a Flutter video call feature fits well into an existing codebase, because the call screen and the SDK sit in their own module.
The work around it is what needs attention: connecting rooms to existing bookings or orders, adding the incoming call flow, updating permissions and store listings, and extending the backend with room and token logic. When we take on a feature like this in an app built by another team, we start with a short review of the codebase and the release process, as described in adding features to an existing Flutter app.
If you are choosing a team for the job, the questions in how to choose a Flutter app development company apply directly: ask how they would handle incoming calls on iOS, reconnection on weak networks and token based room access, and listen for concrete answers.
A realistic plan for the first release
The fastest way to a working Flutter video call feature is to split it into two releases. The first one proves that calls work for your users: one to one or small group rooms, joining from inside the app at the scheduled time, camera and microphone controls, reconnection on a weak network and a clear message when something goes wrong. Calls start while the app is open, which keeps the first release small.
The second release adds what makes calls feel native: ringing on a locked phone through CallKit and the Android calling APIs, a waiting room, screen sharing or recording if your users need them, and the steps after the call such as a summary, a follow up booking or a payment.
Between the two, watch real calls. How long do they last, how often do people reconnect, on which phones do problems appear, and do users actually miss the features you postponed? Those answers decide the second release better than any plan written before the first call happened, the same loop we describe in MVP iteration.
One decision should be made in the first release even if it is not visible: keep the video provider behind a thin layer in the code. It costs little at the start and makes every later change, a new provider, a self hosted server or a new call type, a contained piece of work instead of a rewrite.
How to keep running costs under control
- Limit video where it adds nothing. Audio only for some call types, lower resolution for thumbnails, and video off by default in large rooms.
- Close rooms automatically. Forgotten open rooms are billed minutes. End them when the last host leaves or the session time ends.
- Keep the provider replaceable. A thin layer between the app and the video SDK makes a later move to another provider or a self hosted server a contained change.
- Watch the numbers monthly. Minutes per user, peak concurrent rooms and recording storage. They tell you when the approach should change.
Ongoing costs of running an app, beyond video, are covered in mobile app maintenance cost.
About the source
Who is answering this?
- Company
- Apps Value, mobile app development agency
- Location
- Cracow, Poland
- Markets served
- United States, Western Europe, Nordics
- Experience
- 6 years, 19+ projects delivered, 13+ positive client reviews
- Main technology
- Flutter for iOS, Android and web from one codebase
- Backend
- NestJS, Supabase, PostgreSQL, AWS, Google Cloud
FAQ
How do you add a video call to a Flutter app?
Use a managed video SDK with a Flutter package, a self hosted open source media server connected through WebRTC, or embed an existing meeting tool. Your backend creates rooms and issues short lived access tokens, and the app handles the call screen, permissions and incoming calls.
Which SDK is best for Flutter video calls?
It depends on scale, budget and data requirements. Managed providers such as Agora and LiveKit Cloud are the fastest start; LiveKit can also be self hosted. Compare Flutter support, group room limits, pricing per minute and where data is processed.
Does Flutter support WebRTC?
Yes. The flutter_webrtc package provides WebRTC for iOS, Android, web and desktop, and most video SDKs for Flutter build on WebRTC under the hood.
How do incoming video calls work when the app is closed?
On iOS, the backend sends a VoIP push and the app reports the call to CallKit, which shows the native incoming call screen. On Android, a high priority notification and the system calling APIs do the same job.
Can a Flutter video call support group rooms?
Yes. Group rooms need a media server, either from a managed provider or self hosted, plus a layout for many participants and limits on how many video streams each phone shows at once.
Are Flutter video calls secure?
They can be. Use short lived tokens per room issued by your backend, encrypted media in transit, and for sensitive conversations confirm end to end encryption, server locations and recording policies with the provider.
Can video calling be added to an existing Flutter app?
Yes. The call module sits on its own, but rooms must be connected to existing bookings or orders, the backend needs room and token logic, and incoming call handling and permissions must be added.
Related guides

Written by
Thomas Siudut
Co-Founder and CEO, Apps Value
Thomas sets the company's long term strategy and direction, identifies market opportunities, and owns business development and client acquisition. He works with clients from the first strategy conversation, so their business goals, not just their feature list, drive every decision.
Adding video calls to your app?
Tell us who calls whom, how many people join a room and what happens after the call. We will tell you which approach fits, what it takes to build, and how to keep the running costs predictable.
