Linphone Flutter Plugin is a Flutter plugin that allows you to integrate Linphone SDK's native Android calling functionalities into your Flutter application. This plugin is designed for VOIP calling using the UDP protocol, making it ideal for real-time voice communication in your app.
- Native Android Integration: Utilize the power of Linphone SDK for seamless VOIP calling.
- UDP Protocol Support: Ensures fast and efficient communication with minimal latency.
- Call Handling: Initiate, receive, and manage VOIP calls directly from your Flutter app.
- Call Logs: Retrieve call history for tracking and analysis.
- Mute, Speaker, and Call Transfer: Control the call state with advanced features.
To use this plugin, add linphone_flutter_plugin
as a dependency in your pubspec.yaml
file:
- Run this command:
$ dart pub add linphone_flutter_plugin
- Import the plugin
import 'package:linphone_flutter_plugin/linphoneflutterplugin.dart';
- Add permission in AndroidManifest.xml
<manifest...>
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.RECORD_AUDIO" />
<uses-permission android:name="android.permission.CALL_PHONE" />
<uses-permission android:name="android.permission.CAMERA" />
<uses-permission android:name="android.permission.SYSTEM_CAMERA" />
<uses-permission android:name="android.permission.FOREGROUND_SERVICE_CAMERA" />
<uses-permission android:name="android.permission.FOREGROUND_SERVICE_PHONE_CALL" />
<uses-permission android:name="android.permission.MANAGE_OWN_CALLS" />
<uses-permission android:name="android.permission.FOREGROUND_SERVICE_MICROPHONE" />
<uses-permission android:name="android.permission.FOREGROUND_SERVICE" />
</manifest>
- Before you can make or receive calls, you need to initialize the Linphone plugin and request the necessary permissions.
final _linphoneSdkPlugin = LinphoneFlutterPlugin();
Future<void> initLinphone() async {
await _linphoneSdkPlugin.requestPermissions();
}
- To start using Linphone, you need to log in with your SIP credentials.
Future<void> login({
required String username,
required String password,
required String domain,
}) async {
await _linphoneSdkPlugin.login(userName: username, domain: domain, password: password);
}
- Initiate a call by specifying the recipient’s number.
Future<void> call(String number) async {
await _linphoneSdkPlugin.call(number: number);
}
- You can listen for incoming calls and handle them accordingly.
_linphoneSdkPlugin.addCallStateListener().listen((CallState state) {
if (state == CallState.IncomingReceived) {
// Handle incoming call
}
});
- End an ongoing call.
Future<void> hangUp() async {
await _linphoneSdkPlugin.hangUp();
}
Check out the example directory for a complete example of how to use this plugin.
Contributions are welcome! Please submit issues and pull requests to help improve the plugin.
This project is licensed under the MIT License. See the LICENSE file for details.