Skip to main content
苹果平台有两套 SMeeting SDK,先确认你要用哪一套。 本章是 Objective-C 的 MeetingKit(CocoaPods 分发,仅 iOS);另有一套 Swift 原生 SDK(import SMeeting,Swift Package 形态,同时支持 iOS 与 macOS),见 Swift SDK新项目建议用 Swift SDK。 两套 API 不能混用,也不要在同一工程里同时引入。

环境准备

  • iOS 16.0 及以上版本(2.1.0 起,此前为 iOS 10.0)
  • Xcode 10.0 及以上版本
2.1.0 起 SDK 内置虚拟背景,最低系统要求由 iOS 10.0 提升到 iOS 16.0,接入工程的 IPHONEOS_DEPLOYMENT_TARGETPodfileplatform :ios 都需要不低于 16.0,否则依赖无法参与解析。虚拟背景的推理引擎 onnxruntime-cRTCEngineKit 的 podspec 传递引入,Podfile 中不需要显式声明。
2.0.0 起,组件分为两层:MeetingKit 是全局单例,负责登录、即时通讯、会议查询与预约、共享设备(摄像头、音频路由、屏幕采集)与房间实例的创建;MeetingKitRoom 是房间实例,负责进出房间与一切会中操作。同一账号可以创建多个房间实例并同时加入多个房间。

step 1:导入 SDK 并设置 App 权限

导入 SDK

1、在您的 Podfile 文件中添加以下依赖。
2、执行以下命令,安装组件。
说明: 如果无法安装 MeetingKit 最新版本,执行以下命令更新本地的 CocoaPods 仓库列表:
如果,还是拉取不到最新版本可以尝试指定 MeetingKit 的源:
3、在所使用到 MeetingKit 组件的地方引入头文件。

配置 App 权限

使用音视频功能,需要授权麦克风、摄像头以及相册的使用权限。在 App 的 Info.plist 中添加以下几项,分别对应麦克风、摄像头和相册在系统弹出授权对话框时的提示信息。

step 2:登录和登出

登录

在调用 SDK 的任何其他函数之前,需要进行 SDK 登录操作,在您的项目中添加如下代码,它的作用是通过调用 MeetingKit 中的相关接口完成会议组件的初始化。这个步骤非常关键,因为只有在登录成功后才能正常使用 MeetingKit 的各项功能:
enableLocalLog默认值为YES。启用后会采集全进程日志到本地文件,同时保留宿主 App 的控制台输出。继续使用不带logConfig参数的登录接口时,也会采用该默认值。

登出

step 3:创建房间

构建会议参数

会议参数由很多的字段构成,但通常您只需要关注特定几个字段,详情可参看 SEAMeetingParam
  • 下表描述了**SEAMeetingParam**对象的部分属性。

创建房间

创建 SEAMeetingParam 对象后,调用 SDK 的 createRoom 函数创建云会议房间。

step 4:创建房间实例并加入房间

2.0.0 起,会中的一切操作与事件都属于房间维度。加入房间前先通过 createRoomWithDelegate: 创建 MeetingKitRoom 实例,并在创建时传入房间事件代理。

设置委托

组件有两个事件协议,按事件归属分别实现:
  • MeetingKitDelegate:全局事件(音频路由变更、应用性能),通过 addDelegate: 设置;
  • MeetingKitRoomDelegate:房间内事件(进出房间、成员状态、消息、云录制、码流质量等),在创建房间实例时传入。

创建房间实例

需要同时加入多个房间时,多次调用 createRoomWithDelegate: 分别持有各自的实例,各房间的媒体与业务状态相互独立。

实现回调事件

MeetingKitRoomDelegate 的每个回调首参都是事件来源的房间实例,多房间场景下据此区分事件归属,房间号与会议标识可从 room.roomNoroom.meetingId 读取。
  • 错误事件回调
  • 进入房间事件回调
  • 远端用户加入房间回调
  • 远端用户离开房间回调
  • 用户摄像头状态变化回调
  • 用户麦克风状态变化回调

创建加入会议参数

在调用 enterRoom 接口时,需要填写 SEAMeetingEnterParam 关键参数,详情可参看 SEAMeetingEnterParam

加入房间

创建 SEAMeetingEnterParam 对象后,调用 SDK 的 enterRoom 函数加入云会议房间。
值得注意的是,该方法的成功参数不能作为加入房间的真实情况,仅用于接口层面的调用成功使用,即:接口调用结束。要想确认加入房间是否真实成功,需要通过上述委托监听 onEnterRoom 事件来实现。

离开房间

调用该接口会让用户离开自己所在的房间,并释放摄像头、麦克风、扬声器等设备资源。 等资源释放完毕之后,SDK 会通过onSuccess回调向您通知。 如果您要再次调用enterRoom:(),建议等待onSuccess回调到来之后再执行之后的操作,以避免摄像头或麦克风被占用等异常问题。
房间实例调用 exitRoom: 之后即失效,需要重新入会时请通过 createRoomWithDelegate: 创建新实例。调用 logout 会离开并销毁全部房间实例,无需逐个退出。

step 5:打开和关闭摄像头

请求开启或关闭摄像头后,服务会通过一系列逻辑确定用户的摄像头状态。此时,组件会收到onUserCameraStateChanged事件。

打开摄像头

关闭摄像头

需要注意的是,以上方法的成功参数不能作为摄像头状态的真实情况,仅用于接口层面的调用成功使用,即:接口调用结束。为保证摄像头状态客户端与服务端的一致性,需要通过委托监听 onUserCameraStateChanged 事件来实现。

step 6:打开和关闭麦克风

请求开启或关闭麦克风后,服务会通过一系列逻辑确定用户的麦克风状态。此时,组件会收到onUserMicStateChanged事件。

打开麦克风

关闭麦克风

需要注意的是,以上方法的成功参数不能作为麦克风状态的真实情况,仅用于接口层面的调用成功使用,即:接口调用结束。为保证麦克风状态客户端与服务端的一致性,需要通过委托监听 onUserMicStateChanged 事件来实现。

step 7:订阅和取消订阅远端用户画面

订阅远端用户画面

  • 下表描述了SEAVideoStreamType视频流类型的所有值。

取消订阅远端用户画面

取消订阅指定远端用户的所有视频画面

取消订阅所有远端用户的视频画面

组件未提供一次性退订全部成员的接口,业务层遍历成员列表逐个调用 stopAllRemoteViewWithUserId: 即可。
注:取消订阅成员视频画面后,组件会自行释放渲染控件。