ex_im_flutter_call 0.0.4 copy "ex_im_flutter_call: ^0.0.4" to clipboard
ex_im_flutter_call: ^0.0.4 copied to clipboard

A Flutter plugin for audio/video calling - provides WebRTC-based 1v1 and group calling functionality for ex_im_flutter_chat.

ex_im_flutter_call #

ExIm Flutter Call SDK - 基于 WebRTC 的音视频通话 Flutter 插件。

功能特性 #

  • 1v1 音频/视频通话
  • 群组音频/视频通话
  • 通话状态管理
  • 媒体控制(摄像头切换、静音、扬声器)
  • 来电接听/拒绝
  • 通话计时
  • 屏幕常亮

前置条件 #

本插件依赖 ex_im_flutter_chat 插件。使用前必须先初始化 Chat SDK 并登录。

安装 #

pubspec.yaml 中添加依赖:

dependencies:
  ex_im_flutter_chat: ^0.0.4
  ex_im_flutter_call: ^0.0.1

快速开始 #

1. 初始化 SDK #

import 'package:ex_im_flutter_chat/ex_im_flutter_chat.dart';
import 'package:ex_im_flutter_call/ex_im_flutter_call.dart';

// 先初始化 Chat SDK 并登录
ExImChat.instance.init(tenantId: 'your_tenant_id');
await ExImChat.instance.loginWithEmail(email: 'user@example.com', password: 'password');
await ExImChat.instance.connect();

// 然后初始化 Call SDK
ExImCall.instance.init();

2. 发起通话 #

// 发起视频通话
await ExImCall.instance.call(
  targetUserId: 'user_id',
  callType: CallTypeEnum.video,
  targetNickname: '张三',
  targetFaceUrl: 'https://example.com/avatar.jpg',
);

// 发起语音通话
await ExImCall.instance.call(
  targetUserId: 'user_id',
  callType: CallTypeEnum.audio,
  targetNickname: '张三',
  targetFaceUrl: 'https://example.com/avatar.jpg',
);

3. 监听通话状态 #

// 监听通话状态
ExImCall.instance.callStateStream.listen((state) {
  print('通话状态: ${state.mode}');

  switch (state.mode) {
    case RtcServiceMode.idle:
      print('空闲');
      break;
    case RtcServiceMode.dial:
      print('拨号中...');
      break;
    case RtcServiceMode.invite:
      print('来电: ${state.remoteNickname}');
      break;
    case RtcServiceMode.talking:
      print('通话中: ${state.callDuration}秒');
      break;
    case RtcServiceMode.connecting:
      print('连接中...');
      break;
    default:
      break;
  }
});

// 监听媒体状态
ExImCall.instance.mediaStateStream.listen((state) {
  print('视频: ${state.isVideoEnabled}');
  print('音频: ${state.isAudioEnabled}');
  print('扬声器: ${state.isSpeakerOn}');
});

4. 接听/拒绝来电 #

// 接听
await ExImCall.instance.accept();

// 拒绝
await ExImCall.instance.reject();

5. 媒体控制 #

// 切换摄像头(前置/后置)
await ExImCall.instance.switchCamera();

// 开关视频
await ExImCall.instance.toggleVideo();

// 开关麦克风
await ExImCall.instance.toggleAudio();

// 开关扬声器
await ExImCall.instance.toggleSpeaker();

6. 挂断通话 #

await ExImCall.instance.hangup();

7. 群组通话 #

// 发起群组通话
await ExImCall.instance.groupCall(
  groupId: 'group_id',
  userIds: ['user1', 'user2', 'user3'],
  callType: CallTypeEnum.video,
  memberInfos: [
    GroupCallMemberInfo(oderId: 'user1', nickname: '张三', faceUrl: '...'),
    GroupCallMemberInfo(oderId: 'user2', nickname: '李四', faceUrl: '...'),
  ],
);

视频渲染 #

// 获取本地视频渲染器
final localRenderer = ExImCall.instance.rtcEngine.localRenderer;

// 获取远端视频渲染器
final remoteRenderer = ExImCall.instance.rtcEngine.remoteRenderer;

// 在 Widget 中使用
RTCVideoView(localRenderer!)
RTCVideoView(remoteRenderer!)

API 文档 #

ExImCall #

方法 说明
init() 初始化 SDK
call(...) 发起 1v1 通话
groupCall(...) 发起群组通话
accept() 接听来电
reject() 拒绝来电
hangup() 挂断通话
switchCamera() 切换摄像头
toggleVideo() 开关视频
toggleAudio() 开关麦克风
toggleSpeaker() 开关扬声器
dispose() 释放资源

CallState #

属性 说明
mode 通话状态(idle/dial/invite/talking/connecting)
isGroupCall 是否群通话
roomId 房间 ID
callType 通话类型(audio/video)
remoteUserId 对方用户 ID
remoteNickname 对方昵称
remoteFaceUrl 对方头像
callDuration 通话时长(秒)

MediaState #

属性 说明
isVideoEnabled 视频是否开启
isAudioEnabled 音频是否开启
isSpeakerOn 扬声器是否开启
isFrontCamera 是否前置摄像头
hasRemoteStream 是否有远端流

平台支持 #

平台 支持
Android
iOS

权限配置 #

Android #

AndroidManifest.xml 中添加:

<uses-permission android:name="android.permission.CAMERA" />
<uses-permission android:name="android.permission.RECORD_AUDIO" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.WAKE_LOCK" />

iOS #

Info.plist 中添加:

<key>NSCameraUsageDescription</key>
<string>需要摄像头权限以进行视频通话</string>
<key>NSMicrophoneUsageDescription</key>
<string>需要麦克风权限以进行语音通话</string>

注意事项 #

  • 必须先初始化 ex_im_flutter_chat 并登录后才能使用本插件
  • 通话前请确保已获取摄像头和麦克风权限
  • 退出应用前请调用 dispose() 释放资源

License #

MIT License

0
likes
0
points
286
downloads

Publisher

unverified uploader

Weekly Downloads

A Flutter plugin for audio/video calling - provides WebRTC-based 1v1 and group calling functionality for ex_im_flutter_chat.

Repository (GitHub)
View/report issues

License

unknown (license)

Dependencies

cached_network_image, ex_im_flutter_chat, flutter, flutter_screenutil, flutter_webrtc, wakelock_plus

More

Packages that depend on ex_im_flutter_call

Packages that implement ex_im_flutter_call