'How can i implement conference call video chat with WebRTC in flutter (Android & Ios)
I am trying to implement conference video call with WebRTC in flutter for Android & Ios now unable to find any solution to user conference video chat using webRTC
Solution 1:[1]
Try following example of this package https://pub.dev/packages/flutter_webrtc
For P2P you will need a server component which is available at https://github.com/flutter-webrtc/flutter-webrtc-server
Solution 2:[2]
Here is an Example :
1st You Need to Add this dependency :
dependencies:
flutter_webrtc: ^0.8.0
then :
import 'dart:core';
import 'package:flutter/foundation.dart'
show debugDefaultTargetPlatformOverride;
import 'package:flutter/material.dart';
import 'package:flutter_background/flutter_background.dart';
import 'package:flutter_webrtc/flutter_webrtc.dart';
import 'src/data_channel_sample.dart';
import 'src/get_display_media_sample.dart';
import 'src/get_user_media_sample.dart'
if (dart.library.html) 'src/get_user_media_sample_web.dart';
import 'src/loopback_sample.dart';
import 'src/route_item.dart';
void main() {
if (WebRTC.platformIsDesktop) {
debugDefaultTargetPlatformOverride = TargetPlatform.fuchsia;
} else if (WebRTC.platformIsAndroid) {
WidgetsFlutterBinding.ensureInitialized();
startForegroundService();
}
runApp(MyApp());
}
Future<bool> startForegroundService() async {
final androidConfig = FlutterBackgroundAndroidConfig(
notificationTitle: 'Title of the notification',
notificationText: 'Text of the notification',
notificationImportance: AndroidNotificationImportance.Default,
notificationIcon: AndroidResource(
name: 'background_icon',
defType: 'drawable'), // Default is ic_launcher from folder mipmap
);
await FlutterBackground.initialize(androidConfig: androidConfig);
return FlutterBackground.enableBackgroundExecution();
}
class MyApp extends StatefulWidget {
@override
_MyAppState createState() => _MyAppState();
}
class _MyAppState extends State<MyApp> {
late List<RouteItem> items;
@override
void initState() {
super.initState();
_initItems();
}
ListBody _buildRow(context, item) {
return ListBody(children: <Widget>[
ListTile(
title: Text(item.title),
onTap: () => item.push(context),
trailing: Icon(Icons.arrow_right),
),
Divider()
]);
}
@override
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
appBar: AppBar(
title: Text('Flutter-WebRTC example'),
),
body: ListView.builder(
shrinkWrap: true,
padding: const EdgeInsets.all(0.0),
itemCount: items.length,
itemBuilder: (context, i) {
return _buildRow(context, items[i]);
})),
);
}
void _initItems() {
items = <RouteItem>[
RouteItem(
title: 'GetUserMedia',
push: (BuildContext context) {
Navigator.push(
context,
MaterialPageRoute(
builder: (BuildContext context) => GetUserMediaSample()));
}),
RouteItem(
title: 'GetDisplayMedia',
push: (BuildContext context) {
Navigator.push(
context,
MaterialPageRoute(
builder: (BuildContext context) =>
GetDisplayMediaSample()));
}),
RouteItem(
title: 'LoopBack Sample',
push: (BuildContext context) {
Navigator.push(
context,
MaterialPageRoute(
builder: (BuildContext context) => LoopBackSample()));
}),
RouteItem(
title: 'DataChannel',
push: (BuildContext context) {
Navigator.push(
context,
MaterialPageRoute(
builder: (BuildContext context) => DataChannelSample()));
}),
];
}
}
Solution 3:[3]
The flutter_webrtc package documentation isn't very extensive when it comes to building Flutter WebRTC apps.
To add audio/video communication to your Flutter app using WebRTC, add the dependency:
flutter pub add flutter_webrtc
Add permissions for iOS:
Add the following permission entry to your Info.plist file, located in /ios/Runner/Info.plist:
<key>NSCameraUsageDescription</key>
<string>$(PRODUCT_NAME) Camera Usage!</string>
<key>NSMicrophoneUsageDescription</key>
<string>$(PRODUCT_NAME) Microphone Usage!</string>
Add permissions for Android:
To enable user permissions on Android, add the following to the Android Manifest file, located in /android/app/src/main/AndroidManifest.xml:
<uses-feature android:name="android.hardware.camera" />
<uses-feature android:name="android.hardware.camera.autofocus" />
<uses-permission android:name="android.permission.CAMERA" />
<uses-permission android:name="android.permission.RECORD_AUDIO" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.CHANGE_NETWORK_STATE" />
<uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS" />
You'll need to also make some changes to
build.gradle
Next, start by rendering a Local User on screen:
Then, we need to connect to a remote user and render their video. For this, we need to understand how WebRTC works. The related terms to it like NAT (Network Address Translation), ICE (Interactive Connectivity Establishment), STUN (Session Traversal Utilities), TURN, etc.
We generate an offer and an answer to connect two peers.
You can check out this comprehensive guide on Flutter WebRTC to build an audio/video communication app.
Sources
This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.
Source: Stack Overflow
| Solution | Source |
|---|---|
| Solution 1 | Dev |
| Solution 2 | Tasnuva Tavasum oshin |
| Solution 3 | Aditya Thakur |


