跳转到主要内容
SMeetingEngine 是 SDK 的唯一对外入口。同一个 App 内只应创建一个实例并全局持有。 本页覆盖初始化、认证、会议管理、进出会议、状态查询、会中用户操作与会议外消息。媒体相关接口见 媒体控制,外设见 外设,主持人与管理接口见 会议管理。

初始化

init(logLevel:)

创建 SDK 实例。

属性

version

SDK 版本号,类型 String,静态属性。

srtc

底层 RTC 实例,类型 SRTCEngine。当会议层接口不足以满足需求时的逃生口。
请始终使用这个实例,不要自行创建第二个 SRTCEngine —— 会议与底层共享同一个实例,另起一个会导致状态分裂、消息通道重复、设备被抢占。

language

SDK 语言,类型 String?(如 "en"、"zh-CN"),默认 nil = 跟随系统语言。自 1.4.0 起提供。 与 meeting.srtc.language 是同一个进程级设置:会议层和 RTC 层请求后端都带 Accept-Language,后端业务错误(码 ≥ 1000)的文案随之返回中文或英文;SDK 自身的报错(SMeetingError.message / SRTCError.message)一律英文,不受影响。建议在 login 之前设置,之后修改对后续请求即时生效。

currentLanguage

当前实际生效的语言,类型 String,只读:language 已设置则为它,否则为系统首选语言,取不到时为 "zh"。自 1.4.0 起提供。 错误码与处理方式见 错误处理。

delegates

事件委托集合,类型 MulticastDelegate<SMeetingDelegate>。弱引用多播,支持多个观察者。

currentUserId

当前登录用户的 ID,类型 String?,未登录时为 nil。

isInRoom

当前是否在会议中,类型 Bool。

cameraTrack / screenTrack / mcuTrack

本地摄像头轨道(LocalCameraTrack?)、本地屏幕共享轨道(LocalScreenTrack?)、远端合屏轨道(RemoteVideoTrack?)。未开启对应能力时为 nil。

认证

login(token:)

登录会议 SDK。登录后才能调用其余接口。
返回值: 无 可能抛出:
  • SMeetingError.tokenInvalid —— token 格式无法解析
  • SMeetingError.tokenExpired —— token 已过期
  • SMeetingError.apiError(code:message:) —— 服务端拒绝登录
  • SMeetingError.networkError(_:)

logout()

退出登录。若仍在会议中会先自动退出会议,并停用会议外消息通道。
返回值: 无,不抛错。

会议管理(会前)

以下接口只要求已登录,不要求在会议中。

createRoom(_:)

创建会议。
返回值: (roomNo: String, meetingId: String) 可能抛出: SMeetingError.notLoggedIn、SMeetingError.apiError(code:message:)
不显式设置 meetingType 时按即时会议创建。

updateRoom(meetingId:req:)

修改会议(会前)。
返回值: 无 可能抛出: SMeetingError.notLoggedIn、SMeetingError.apiError(code:message:)

cancelRoom(meetingId:)

取消会议。
返回值: 无 可能抛出: SMeetingError.notLoggedIn、SMeetingError.apiError(code:message:)

detailRoom(meetingId:roomNo:)

获取会议详情,两个参数二选一。
返回值: MeetingInfo。详情回包不带创建时间,createdAt 为 0;1.5.0 起另带 entryMutePolicy、content(后端没给时为 nil),字段见 类型定义 可能抛出: SMeetingError.notLoggedIn、SMeetingError.apiError(code:message:)

attendeeRoom(page:)

我需要参加的会议(未开始或进行中)。
返回值: PageResult<MeetingInfo> 可能抛出: SMeetingError.notLoggedIn、SMeetingError.apiError(code:message:)

attendedRoom(page:)

历史会议。参数与返回值同 attendeeRoom(page:)。

roomParticipant(meetingId:page:perPage:)

某场会议的参会人员记录。
返回值: PageResult<ParticipantInfo> 可能抛出: SMeetingError.notLoggedIn、SMeetingError.apiError(code:message:)

进入 / 退出会议

enterRoom(_:)

进入会议。
返回值: 无 可能抛出:
  • SMeetingError.notLoggedIn
  • SMeetingError.alreadyInMeeting —— 已经在会议中,需要先 exitRoom()
  • SMeetingError.apiError(code:message:) —— 密码错误、会议不存在、被限制入会等
  • 底层连接建立失败时抛出的错误
成功后 SDK 会自动订阅远端音频,视频按需订阅。

exitRoom()

退出当前会议,登录状态保留。
返回值: 无,不抛错。不在会议中时调用会被安全忽略。

状态查询

getRoomInfo()

返回值: RoomInfo?,未在会议中时为 nil。

getWhiteBoard()

返回值: String?,当前会议的白板地址,没有时为 nil。

getUserInfo(_:)

返回值: MeetingUserInfo 可能抛出: SMeetingError.notInMeeting、SMeetingError.userNotFound(_:)(会议中没有这个成员)

getUsersInfo()

返回值: [String: MeetingUserInfo],uid 到成员的映射,未在会议中时为空字典。

getUsersInfoList()

返回值: [MeetingUserInfo],未在会议中时为空数组。

getRemoteVideoTrack(uid:desc:)

查询某位成员的某路视频轨道对象,不发起订阅。 返回值: Track?,成员不存在或未发布该轨道时为 nil。

会中用户操作

以下接口都要求在会议中,否则抛出 SMeetingError.notInMeeting;服务端拒绝时抛出 SMeetingError.apiError(code:message:)。

updateName(_:)

修改自己的会中昵称。

sendRoomChatMessage(_:type:targetId:)

发送会中聊天消息。

sendRoomCustomMessage(_:targetId:)

发送业务自定义消息。

requestHandup(_:) / cancelHandup(_:)

举手申请与取消。

rejectOpenMic(adminUid:) / rejectOpenCamera(adminUid:)

拒绝主持人的开麦 / 开摄像头邀请。

rollCallAnswer(rollCallUserId:)

点名应答。 可能抛出: SMeetingError.notLoggedIn、SMeetingError.apiError(code:message:)

会议外消息

enableIm()

启用会议外消息通道。
成功后触发一次 meeting(_:imDidConnect:),此后收到的会议外消息按 action 派发到 imCallCalling / imMeetingRemind / imAdminMoveOutWaitingRoom / imUserHelpSubMeeting,每条消息另外原样触发 imDidReceiveMessage,见 会议外消息。1.4.1 及以前这些事件实际不会派发,1.5.0 起修正。 返回值: 无 可能抛出: SMeetingError.notLoggedIn、SMeetingError.apiError(code:message:)、连接建立失败时的底层错误

disableIm()

停用会议外消息通道。
返回值: 无,不抛错。logout() 内部会自动调用。主动停用不会触发 meeting(_:imDidDisconnect:)。

虚拟背景

属设备级配置(作用于进程内唯一的共享摄像头采集链路),设置同时作用于全部会议。会中切换摄像头、关掉摄像头再打开、断线重连后都不需要业务层重新下发。用法与调优见 虚拟背景。 可能抛出: SRTCError.virtualBackgroundAlreadyInstalled、.virtualBackgroundNotInstalled、.virtualBackgroundModelNotFound(String)、.virtualBackgroundSessionFailed(String) 这一组是对音视频层的转发,会议层不另存一份状态,因此与直接用 meeting.srtc 调等价,推荐用会议层的方法。

相关页面