/ease_call_kit

Easemob Callkit

Primary LanguageDartOtherNOASSERTION

环信ease call kit

ease_call_kit是针对环信EaseCallKit的封装。

EaseCallKit是一套基于环信IM和声网音视频结合开发的音视频UI库,实现了1v1语音通话、视频通话,以及多人音视频通话的功能, EaseCallKit可以快速实现一些通用的音视频功能。

文章主要讲解环信ease_call_kit如何使用。

环信官网

环信iOS EaseCallKit集成文档

环信Android EaseCallKit集成文档

im flutter sdk:环信im flutter plugin,example中使用了ease call kit。

前期准备

在集成该库前,你需要满足以下条件:

  • 你已分别创建了环信应用及声网应用;
  • 已完成环信IM的基本功能,包括登录、好友、群组以及会话等的集成;
  • 上线之前开通声网token验证时,用户需要实现自己的AppServer'',根据环信ID,生成Token,创建Token服务及使用AppServer生成Token的过程参见声网文档

导入UI库

dependencies:
  im_flutter_sdk:  
    git:  
      url: https://github.com/easemob/ease_call_kit.git 
      ref: stable

导入头文件

import 'package:ease_call_kit/ease_call_kit.dart';

初始化

EaseCallKit.initWithConfig(EaseCallConfig(agoraAppId));

AgoraAppId 您声网的App ID,如果没有,需要您去注册声网并在项目管理中添加。

初始化前,需要您成功登陆环信,建议您把初始化ease call kit写在主页面。

呼叫

1v1

// callType: 呼叫类型,有`SingeAudio`和`SingeVideo`两种
EaseCallKit.startSingleCall('du002', callType: EaseCallType.SingeVideo);

多人

EaseCallKit.startInviteUsers(['du001', 'du002']);

监听事件

class _MyAppState extends State<MyApp> with EaseCallKitListener {
  @override
  void initState() {
    super.initState();
    var config = EaseCallKit.initWithConfig(EaseCallConfig(AgoraAppId));
    EaseCallKit.initWithConfig(config);
    EaseCallKit.listener = this;
  }
  
  ...
  
  @override
  void dispose() {
    EaseCallKit.dispose();
    super.dispose();
  }

  @override
  /// 通话结束时触发该回调 
  /// channelName 通话的通道名称,用于在声网水晶球查询通话质量 
  /// reason 通话结束原因 time 通话时长 
  /// callType 通话类型,EaseCallTypeAudio为语音通话,EaseCallTypeVideo为视频通话,EaseCallTypeMulti为多人通话
  void callDidEnd(String channelName, EaseCallEndReason reason, int time,
      EaseCallType callType) {
  }

  @override
  /// 通话中自己加入会议成功时触发该回调 
  /// channelName 呼叫使用的频道名称 
  /// uid 声网账户
  void callDidJoinChannel(String channelName, int uid) {
    debugPrint(
      "callDidJoinChannel channelName: $channelName, uid: $uid",
    );
  }
  
  @override
  /// 通话过程发生异常时,触发该回调 
  /// error 错误信息
  void callDidOccurError(EaseCallError error) {
  }

  @override
  /// 被叫开始振铃时,触发该回调
  /// 被叫开始振铃时,触发该回调 
  /// callType 通话类型 
  /// inviter 主叫的环信id 
  /// ext 邀请中的扩展信息
  void callDidReceive(EaseCallType callType, String inviter, Map ext) {
  }

  @override
  /// 加入音视频通话频道前触发该回调,用户需要在触发该回调后, 主动从AppServer获取声网token,然后调用EaseCallKit#setRTCToken方法将token设置进来 
  /// appId 声网通话使用的appId 
  /// channelName 呼叫使用的频道名称 
  /// eid 当前登录的环信id
  void callDidRequestRTCToken(String appId, String channelName, String eid) async {
  }


  @override
  /// 多人通话中,点击邀请按钮触发该回调 
  /// excludeUsers 当前会议中已存在的成员及已邀请的成员 
  /// ext 邀请中的扩展信息
  void multiCallDidInviting(List<String?> excludeUsers, Map? ext) {
  }
  
  @override
  /// 通话中对方加入会议时触发该回调 
  /// channelName 呼叫使用的频道名称 
  /// uid 声网账户 
  /// eid 当前登录的环信id
  void remoteUserDidJoinChannel(String channelName, int uid, String eid) {
  }
  
} 

iOS需要配置

环信iOS EaseCallKit集成文档

修改Podfile文件

iOS EaseCallKit 需要配置use_frameworks!,所以您项目中的Podfile文件中需要添加use_frameworks!

添加权限

应用需要音频设备及摄像头权限,在 info.plist 文件中,点击 + 图标,添加如下信息

Key Type Value
Privacy - Microphone Usage Description String 描述信息,如“环信需要使用您的麦克风”
Privacy - Camera Usage Description String 描述信息,如“环信需要使用您的摄像头”

Android需要配置

环信Android EaseCallKit集成文档

添加权限

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.hyphenate.easeim">
    <!-- 悬浮窗权限 -->
    <uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" />
    <!-- 访问网络权限 -->
    <uses-permission android:name="android.permission.INTERNET" />
    <!-- 麦克风权限 -->
    <uses-permission android:name="android.permission.RECORD_AUDIO" />
    <!-- 相机权限 -->
    <uses-permission android:name="android.permission.CAMERA" />
    ...
</manifest>

添加CallkitActivity

        <activity
            android:name="com.hyphenate.easecallkit.ui.EaseVideoCallActivity"
            android:configChanges="orientation|keyboardHidden|screenSize"
            android:excludeFromRecents="true"
            android:launchMode="singleInstance"
            android:screenOrientation="portrait"/>
        <activity
            android:name="com.hyphenate.easecallkit.ui.EaseMultipleVideoActivity"
            android:configChanges="orientation|keyboardHidden|screenSize"
            android:excludeFromRecents="true"
            android:launchMode="singleInstance"
            android:screenOrientation="portrait"/>

activity中没有默认theme,如果您的项目中没有配置默认theme,需要您为application添加默认theme

android:theme="@style/AppTheme"

<application
        android:name="io.flutter.app.FlutterApplication"
        android:label="ease_call_kit_example"
        android:icon="@mipmap/ic_launcher"
        android:theme="@style/AppTheme"
        android:usesCleartextTraffic="true" >