SMeeting 是 SDK 的唯一对外入口。同一个 App 内只应创建一个实例并全局持有。
本页覆盖初始化、认证、会议管理、进出会议、状态查询、会中用户操作与会议外消息。媒体相关接口见 媒体控制,外设见 外设,主持人与管理接口见 会议管理。
初始化
init(logLevel:)
创建 SDK 实例。
属性
version
String,静态属性。
srtc
底层 RTC 实例,类型 SRTC。当会议层接口不足以满足需求时的逃生口。
请始终使用这个实例,不要自行创建第二个 SRTC —— 会议与底层共享同一个实例,另起一个会导致状态分裂、消息通道重复、设备被抢占。
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
可能抛出: 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.notLoggedInSMeetingError.alreadyInMeeting—— 已经在会议中,需要先exitRoom()SMeetingError.apiError(code:message:)—— 密码错误、会议不存在、被限制入会等- 底层连接建立失败时抛出的错误
exitRoom()
退出当前会议,登录状态保留。
状态查询
getRoomInfo()
返回值: RoomInfo?,未在会议中时为 nil。
getWhiteBoard()
返回值: String?,当前会议的白板地址,没有时为 nil。
getUserInfo(_:)
返回值:
MeetingUserInfo
可能抛出: SMeetingError.notInMeeting、SMeetingError.internalError(_:)(会议中没有这个成员)
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()
启用会议外消息通道。
SMeetingError.notLoggedIn、SMeetingError.apiError(code:message:)、连接建立失败时的底层错误
disableIm()
停用会议外消息通道。
logout() 内部会自动调用。