Skip to content
v1
文档/iOS SDK/开发指南

实时音视频通话

BIMSdk 通过 BIMManager+CallBIMCallSession 和不可变的 BIMCallSnapshot 提供单聊、群聊及临时多人通话能力。公共接口不会暴露 Jitsi 类型,接入方自行实现来电页和通话工具栏。

首次接入请先完成音视频模块安装、系统权限和全局监听。必须使用 BIMSdk/Call 完整包并先登录 BIMSdk。

通话媒体由独立适配器承载。如果当前交付包未包含媒体适配器,发起、接听或加入会返回 BIMCallErrorMediaUnavailable(7201),但 VOIP 消息仍可解析为 BIMCallMessage

可在展示通话入口前检测媒体模块:

objc
BOOL available = [BIMManager sharedInstance].callMediaAvailable;
swift
let available = BIMManager.sharedInstance().isCallMediaAvailable

接入流程

  1. App 启动后注册全局 BIMCallListener,监听器对象需要由宿主强持有。
  2. 发起方构造 BIMCallStartOptions 并调用 startCall;被叫方在 onCallReceived: 中展示来电页。
  3. 保存回调中的 BIMCallSession,可立即挂载画面,使用 BIMCallSnapshot 驱动所有按钮和状态文案。
  4. 被叫只在 IncomingRinging 状态接听或拒绝;发起方通过同一 Session 观察远端加入。
  5. 页面消失时卸载画面;用户结束通话时调用 hangupWithSucc:fail:

SDK 不提供铃声、来电 UI、CallKit 或 PushKit 注册。需要系统来电能力时,宿主应自行维护 CallKit UUID 与 callID 的映射,并把 VoIP Push payload 转交 SDK。

标识说明

字段用途
snapshot.callID即时呼内部 ID,用于恢复和主动加入群聊/临时多人通话
snapshot.meetingNumber9 位媒体会议号,主要用于展示和诊断
snapshot.target.identifier单聊用户 ID 或群 ID;临时多人场景为空
snapshot.organizerUserID当前动态组织者,可能在通话中发生变化

业务方不要用 meetingNumber 调用 joinCallWithID:,也不要把 callID 当作普通会议号。

通话消息

新版 Membership protobuf 和旧版 VOIP protobuf 都会转换为 BIMCallMessagecallID/app/call/{meetingId} 使用的内部 ID,meetingNumber 是获取 Jitsi 参数时使用的 9 位会议号。接入方可以使用 mediaTypeeventTypeparticipantUserIDs 自定义通话记录 Cell;实时通话 UI 的规范状态仍应以 BIMCallListener 返回的 Snapshot 为准。

通话中的当前组织者由 snapshot.organizerUserID 和 participant 的 role 表示。组织者可以通过 transferOrganizerToUserID:succ:fail: 把角色转给另一名已加入成员。

BIMCallMessage 仍会进入 BIMMsgListener 和消息存储,适合生成聊天记录;实时页面的状态只能以 BIMCallListener 的 Snapshot 为准。