搜索插件、代码仓与 APP 分类

插件详情v3.17.0

flutter_voximplant

Voximplant 插件,用于将语音和视频通信嵌入到 Flutter 应用程序中。

AndroidiOS
近 30 天下载
3270
喜欢数
35
Pub 分数
140

安装插件

flutter pub add flutter_voximplant

插件介绍

基于插件公开信息、社区数据与项目使用情况整理的选型参考。

flutter_voximplant 包可实现将实时语音和视频通信无缝集成到 Flutter 应用程序中。该包由 Voximplant 开发,提供了一个简单的接口,用于建立点对点通话、管理音频和视频流以及处理通话事件。该插件支持 Android 和 iOS 平台,非常适合需要实时通信功能的跨平台应用。它利用 Voximplant 云基础设施,确保可靠的连接和高质量的媒体传输。开发者可以使用它以最少的设置构建远程医疗、客户服务或虚拟会议应用。该包为开源且持续维护。

适合场景

  • 应用内视频通话
  • 客户服务聊天应用
  • 远程医疗平台
  • 虚拟课堂
  • 远程协作工具

主要特点

  • 实时语音和视频通话
  • 跨平台支持(Android 和 iOS)
  • 与Voximplant云的轻松集成
  • 媒体流管理
  • 调用事件处理

适合对象

  • 开发实时通信应用的开发者
  • 需要快速VoIP集成的初创企业
  • 需要安全点对点通话的应用程序
  • 使用 Voximplant 后端服务的团队

使用建议

  • 需要Voximplant账户和API密钥
  • 依赖稳定的互联网连接
  • 可能需要原生SDK配置以启用高级功能
  • 受限于Voximplant的基础设施

原始 README

以下为关联源码仓库的 README 原文快照,最新内容请访问源码仓库。

flutter_voximplant

Voximplant Flutter SDK for embedding voice and video communication into Flutter applications.

Supported platforms

Platform Minimum version
Android 5.0 (API 21)
iOS 12.0

Requirements

  • Flutter >= 3.24.0
  • Dart SDK ^3.5.0
  • Android: JDK 17, Android Gradle Plugin and Kotlin versions that support compileSdk 35 (AGP 8.6+, Kotlin 2.x are recommended)
  • iOS: Xcode 15+, Swift 5.9+

Installation

Add the dependency to your application's pubspec.yaml:

dependencies:
  flutter_voximplant: ^3.17.0

Then run:

flutter pub get
iOS setup
Info.plist

Add NSMicrophoneUsageDescription and NSCameraUsageDescription entries to your application's Info.plist:

<key>NSMicrophoneUsageDescription</key>
<string>Microphone is required to make audio calls</string>
<key>NSCameraUsageDescription</key>
<string>Camera is required to make video calls</string>
Android setup

It is required to add Java 11 support in android/app/build.gradle:

android {
    compileOptions {
        sourceCompatibility JavaVersion.VERSION_11
        targetCompatibility JavaVersion.VERSION_11
    }
}

Usage

To get started, you'll need to register a free Voximplant developer account.

Initialization

Client is the main class of the SDK that provides access to Voximplant’s functions, the Voximplant().getClient() method is used to get its instance:

import 'package:flutter_voximplant/flutter_voximplant.dart';


VIClient client = Voximplant().getClient();
Connect and log in to the Voximplant Cloud

The VIClient.getClientState() method is used to get the current state of connection to the Voximplant cloud and perform the actions according to it.

When initializing and connecting the SDK to the Voximplant cloud, you need to specify the node to connect to. Your node is bound to your Voximplant account. To find which node your account belongs to, log in to your control panel and see the Credentials for working with API, SDK, SIP section on the main dashboard.

  const accountNode = VINode.NodeX;
  Future<String> loginWithPassword(String username, String password) async {
    VIClientState clientState = await _client.getClientState();
    if (clientState == VIClientState.LoggedIn) {
      return _displayName;
    }
    if (clientState == VIClientState.Disconnected) {
      await _client.connect(node: accountNode);
    }
    VIAuthResult authResult = await _client.login(username, password);
    _displayName = authResult.displayName;
    return _displayName;
  }
Make calls

To initiate a call we need the VIClient.call method. There is a VICallSettings class which could contain custom data and extra headers (SIP headers).

Since the call can behave in different ways, there is a group of call events. They can be triggered by the VICall class instance as the class contains all the functionality for call management.

  Future<VICall> makeAudioCall(String number) async {
     VICall call = await _client.call(number);
     call.onCallDisconnected = _onCallDisconnected;
     call.onCallFailed = _onCallFailed;
     call.onCallConnected = _onCallConnected;
     call.onCallRinging = _onCallRinging;
     call.onCallAudioStarted = _onCallAudioStarted;
     return call;
  }
   
  _onCallConnected(VICall call, Map<String, String>? headers) {
      print('Call connected');
  }
Receiving calls

Client.onIncomingCall is used to get incoming calls.

There are three methods for an incoming call: answer, decline and reject. An audio stream can be sent only after the answer method call.

  CallService._() {
    _client = Voximplant().getClient();
    _client.onIncomingCall = _onIncomingCall;
  }

  _onIncomingCall(VIClient client, VICall call, bool video, Map<String, String>? headers) async {
    await call.answer();
  }
Mid-call operations

Audio call can be put on/off hold

  _hold() async {
    try {
      await _call.hold(!_isOnHold);
      setState(() {
        _isOnHold = !_isOnHold;
      });
    } catch (e) {
      
    }

  }
Audio device management

VIAudioDeviceManager class API allow to:

  • get all available audio devices
  • get currently selected audio device
  • select audio device
  • handle active audio device changes and new audio devices (for example, Bluetooth headset or wired headset connection). These changes trigger the appropriate events.

All types of audio devices are represented in the VIAudioDevice enum.

Note that there are platform specific nuances in audio device management.

To select an audio device:

  _selectAudioDevice(VIAudioDevice device) async{
    VIAudioDeviceManager audioDeviceManager = Voximplant().getAudioDeviceManager();
    audioDeviceManager.onAudioDeviceChanged = _onAudioDeviceChange;
    await audioDeviceManager.selectAudioDevice(device);
  }

  _onAudioDeviceChange(VIAudioDeviceManager audioDeviceManager, AudioDevice audioDevice) {
    // audio device is changed
  }

Demo

https://github.com/voximplant/flutter_demos

Example

A sample application is available in example/. To run it:

cd example
flutter pub get
flutter run

所属分类

源码仓库

使用此插件的项目

暂无相关数据。