实时音视频通话
BIMSdk 通过 BIMManager+Call、BIMCallSession 和不可变的 BIMCallSnapshot 提供单聊、群聊及临时多人通话能力。公共接口不会暴露 Jitsi 类型,接入方自行实现来电页和通话工具栏。
首次接入请先完成音视频模块安装、系统权限和全局监听。必须使用
BIMSdk/Call完整包并先登录 BIMSdk。
通话媒体由独立适配器承载。如果当前交付包未包含媒体适配器,发起、接听或加入会返回
BIMCallErrorMediaUnavailable(7201),但 VOIP 消息仍可解析为BIMCallMessage。
可在展示通话入口前检测媒体模块:
objc
BOOL available = [BIMManager sharedInstance].callMediaAvailable;swift
let available = BIMManager.sharedInstance().isCallMediaAvailable接入流程
- App 启动后注册全局
BIMCallListener,监听器对象需要由宿主强持有。 - 发起方构造
BIMCallStartOptions并调用startCall;被叫方在onCallReceived:中展示来电页。 - 保存回调中的
BIMCallSession,可立即挂载画面,使用BIMCallSnapshot驱动所有按钮和状态文案。 - 被叫只在
IncomingRinging状态接听或拒绝;发起方通过同一 Session 观察远端加入。 - 页面消失时卸载画面;用户结束通话时调用
hangupWithSucc:fail:。
SDK 不提供铃声、来电 UI、CallKit 或 PushKit 注册。需要系统来电能力时,宿主应自行维护 CallKit UUID 与 callID 的映射,并把 VoIP Push payload 转交 SDK。
标识说明
| 字段 | 用途 |
|---|---|
snapshot.callID | 即时呼内部 ID,用于恢复和主动加入群聊/临时多人通话 |
snapshot.meetingNumber | 9 位媒体会议号,主要用于展示和诊断 |
snapshot.target.identifier | 单聊用户 ID 或群 ID;临时多人场景为空 |
snapshot.organizerUserID | 当前动态组织者,可能在通话中发生变化 |
业务方不要用 meetingNumber 调用 joinCallWithID:,也不要把 callID 当作普通会议号。
通话消息
新版 Membership protobuf 和旧版 VOIP protobuf 都会转换为 BIMCallMessage。callID 是 /app/call/{meetingId} 使用的内部 ID,meetingNumber 是获取 Jitsi 参数时使用的 9 位会议号。接入方可以使用 mediaType、eventType 和 participantUserIDs 自定义通话记录 Cell;实时通话 UI 的规范状态仍应以 BIMCallListener 返回的 Snapshot 为准。
通话中的当前组织者由 snapshot.organizerUserID 和 participant 的 role 表示。组织者可以通过 transferOrganizerToUserID:succ:fail: 把角色转给另一名已加入成员。
BIMCallMessage 仍会进入 BIMMsgListener 和消息存储,适合生成聊天记录;实时页面的状态只能以 BIMCallListener 的 Snapshot 为准。
