ease_call_kit
是针对环信EaseCallKit
的封装。
EaseCallKit是一套基于环信IM和声网音视频结合开发的音视频UI库,实现了1v1语音通话、视频通话,以及多人音视频通话的功能, EaseCallKit可以快速实现一些通用的音视频功能。
文章主要讲解环信ease_call_kit
如何使用。
im flutter sdk:环信im flutter plugin,example中使用了ease call kit。
在集成该库前,你需要满足以下条件:
- 你已分别创建了环信应用及声网应用;
- 已完成环信IM的基本功能,包括登录、好友、群组以及会话等的集成;
- 上线之前开通声网token验证时,用户需要实现自己的AppServer'',根据环信ID,生成Token,创建Token服务及使用AppServer生成Token的过程参见声网文档
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写在主页面。
// 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 EaseCallKit 需要配置use_frameworks!
,所以您项目中的Podfile
文件中需要添加use_frameworks!
应用需要音频设备及摄像头权限,在 info.plist 文件中,点击 + 图标,添加如下信息
Key | Type | Value |
---|---|---|
Privacy - Microphone Usage Description | String | 描述信息,如“环信需要使用您的麦克风” |
Privacy - Camera Usage Description | String | 描述信息,如“环信需要使用您的摄像头” |
<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>
<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" >