全部产品
云市场
云游戏

iOS MeetingSDK集成手册

更新时间:2020-02-25 17:11:36

1 简介

AliMeetingSDK提供了音视频会议通用能力,主要功能点包括:

  1. 人员管理
  2. 媒体管理
  3. 设备管理
  4. 会控管理

2 集成iOS端

2.1 依赖及环境配置

AliMeetingSDK支持使用Objective-C、Swift语言接入,支持armv7 & arm64

限制:armv7及iPhone 6以下设备只支持音频会议,不支持视频会议

2.1.1 下载AliMeetingSDK.zip到本地,并解压

AliMeetingSDK_1.0.0.7_20200224_12693129.zip

2.1.2 添加AliMeetingSDK.framework

添加路径为 Xcode - General - Frameworks, Libraries, and Embedded Content配置

2.1.3 开启VOIP模式

需要打开Background Modes开关,并勾选“Voice over IP”选项以允许应用在后台时能够正常通话VOIP

3 示例工程

AliMeetingSample_iOS_2a488d71d1_20191211.zip

4 入会参数配置

入会参数配置

  1. NSDictionary *config = @{
  2. AMSDKMeetingConfigClientAppId:SAFESTR(clientAppId),
  3. AMSDKMeetingConfigUserId:SAFESTR(userId),
  4. AMSDKMeetingConfigMeetingUUID:SAFESTR(meetingUUID),
  5. AMSDKMeetingConfigMemberUUID:SAFESTR(memberUUID),
  6. AMSDKMeetingConfigMeetingToken:SAFESTR(meetingToken),
  7. AMSDKMeetingConfigMeetingDomain:SAFESTR(meetingDomain)
  8. };

5 加入会议

  1. self.manager = [[AMSDKMeetingManager alloc] initWithMeetingConfig:config callback:self];
  2. [self.manager joinMeeting];

6 监听会议状态

会议状态

  1. //! 会议状态
  2. typedef NS_ENUM(NSInteger, AMSDKMeetingStatus) {
  3. //! 初始状态
  4. AMSDKMeetingStatus_IDLE = 0,
  5. //! 连接中
  6. AMSDKMeetingStatus_JOINING = 1,
  7. //! 已连接
  8. AMSDKMeetingStatus_JOINED = 2,
  9. //! 重连中
  10. AMSDKMeetingStatus_REJOINING = 3,
  11. //! 连接出错
  12. AMSDKMeetingStatus_ERROR = 4,
  13. //! 会议终止
  14. AMSDKMeetingStatus_FINISHED = 5
  15. };

在AMSDKMeetingCallback 包含了会议状态的回调,各个方法的含义为:

  1. /**
  2. * AMSDKMeetingCallback用于会议回调,所有回调方法均在主线程执行
  3. */
  4. @protocol AMSDKMeetingCallback <NSObject>
  5. @optional
  6. //! 会议状态
  7. - (void)onMeetingStatusChange:(AMSDKMeetingStatus)meetingStatus;
  8. //! 入会成功
  9. - (void)onMeetingJoined;
  10. //! 入会出现错误
  11. - (void)onError:(AMSDKErrorCode)code reason:(NSString *)reason;
  12. //! 参会列表发生变化
  13. - (void)onClientListChange:(AMSDKClientListEvent)event list:(NSArray<AMSDKMeetingClient *> *)list;
  14. //! 参会端发生变化
  15. - (void)onClientStatusChange:(AMSDKMeetingClient *)client event:(AMSDKStatusEvent)event;
  16. //! 媒体流状态改变,client 为自己,一般为带宽较低,服务端建议主动断流,需要用户手动断流,client 为其他人时,一般为服务端不给端发送对应client的流了,收到该回调时状态已经发生改变
  17. - (void)onStreamStatusChange:(AMSDKMeetingClient *)client streamActive:(BOOL)streamActive;
  18. //! 会议结束
  19. - (void)onMeetingFinish:(AMSDKFinishCode)code reason:(NSString *)reason;
  20. //! 收到DataChannel消息
  21. - (void)onChannelMessage:(NSString *)msg;
  22. //! 啸叫状态改变
  23. - (void)onWhistlingNoiseStatusChange;
  24. @end
  1. /**
  2. * Meeting Client状态事件
  3. */
  4. typedef NS_ENUM(NSInteger, AMSDKStatusEvent) {
  5. //! 在线/离线
  6. AMSDKStatusEvent_ONLINE = 0,
  7. //! 打开/关闭视频
  8. AMSDKStatusEvent_VIDEO = 1,
  9. //! 打开/关闭音频
  10. AMSDKStatusEvent_AUDIO = 2,
  11. //! 开始/结束发言
  12. AMSDKStatusEvent_TALKING = 3,
  13. //! 开始/结束响铃
  14. AMSDKStatusEvent_RINGING = 4,
  15. //! 网络质量变化
  16. AMSDKStatusEvent_NETWORK_QUALITY = 5,
  17. //! 切换主讲人
  18. AMSDKStatusEvent_MAIN_SPEAKER = 6,
  19. //! 流状态发生改变
  20. AMSDKStatusEvent_STREAM_READY = 7
  21. };

7 用户画面渲染

SDK 将 分享流、入会用户、会议室等统一封装成AMSDKMeetingClient 对象,该类实例不能外部创建,仅支持内部生成。用户可以使用封装好的AMSDKRenderView 对用户视频流进行渲染,在进行渲染之前,建议先通过AMSDKMeetingClient 判断当前实例是否视频可用,然后再将AMSDKRenderView对象通过[client addRenderView:renderView] 传入client进行渲染,在渲染结束或者View 销毁时,需要用户主动调用[client removeRenderView:renderView] 解除渲染关系AMSDKRenderView渲染目前支持两种缩放方式,通过AMSDKScalingType 进行控制。

  1. //! 视频渲染方式
  2. typedef NS_ENUM(NSInteger, AMSDKScalingType) {
  3. //! 在保持长宽比的前提下进行缩放,在容器内完整显示
  4. AMSDKScalingType_ASPECT_FIT,
  5. //! 在保持长宽比的前提下进行缩放图片,充满容器
  6. AMSDKScalingType_ASPECT_FILL,
  7. //! iOS暂不支持,如果设置此值,会当做AMSDKScalingType_ASPECT_FILL处理
  8. AMSDKScalingType_ASPECT_BALANCED
  9. };

8 会议控制

会议控制通过AMSDKMeetingClient 进行,包含禁用音频、禁用视频、不接收视频流,发起呼叫及挂断等功能。

  1. //! 禁用音频,会影响其他端之间的表现,比如mute成员A,则会除了当前入会端外,其他入会到的看到的A也会被禁音
  2. - (void)muteAudio:(BOOL)muted callback:(AMSDKActionCallback _Nullable)callback;
  3. //! 禁用视频,会影响其他端之间的表现,比如mute成员A,则会除了当前入会端外,其他入会到的看到的A也会被禁视频
  4. - (void)muteVideo:(BOOL)muted callback:(AMSDKActionCallback _Nullable)callback;
  5. //! 针对非publisher成员生效,enable== true 接收对应Client 的视频流,enable == false 接收对应client的视频流,视频流是否已准备好通过 isStreamReady() 判断
  6. - (void)enableVideo:(BOOL)enabled callback:(AMSDKActionCallback _Nullable)callback;
  7. //! 发起呼叫
  8. - (void)call:(AMSDKJoinDeviceType)type callback:(AMSDKActionCallback _Nullable)callback;
  9. //! 挂断
  10. - (void)hangup:(AMSDKActionCallback _Nullable)callback;

对于设备相关的控制,使用设备管理类AMSDKDeviceManager,主要用于切换摄像头,启用/关闭扬声器等。

  1. //! 根据摄像头 Index 切换摄像头,参数见@AMSDKCameraDeviceFacing
  2. - (void)switchCamera:(AMSDKCameraDeviceFacing)facing;
  3. //! 根据摄像头 Index 自动切换摄像头
  4. - (void)switchCamera;
  5. //! 启动/关闭扬声器
  6. - (void)enableSpeaker:(BOOL)enabled;

9 结束会议

通过AMSDKMeetingManager中的leaveMeeting 或者finishMeeting进行操作,leaveMeeting 表示自己离开会议,finishMeeting在自己离开会议的同时,还会将当前会议中其他正在会议中的其他人员结束会议。

更新日志

1.0.0.7 (2020-02-24)

  • 【增加】AMSDKMeetingClient增加属性isVideoStreamEnabled
  • 【修复】媒体信令异常断开问题
  • 【修复】媒体信令引起的偶现Crash问题

1.0.0.5 (2019-12-03)

  • 【增加】[AMSDKMediaDeviceManager enableProximitySensor:]方法,用于开启关闭Proximity Sensor
  • 【修复】只有一方入会时出现白噪声的问题
  • 【修复】发生重连时,其它端入会userId字段可能无法获取的问题
  • 【修复】发生重连时,其它端入会视频状态可能不一致的问题

1.0.0.4 (2019-11-30)

  • 【删除】私有API引用

1.0.0.3 (2019-11-25)

  • 【修复】电话会议未接收投屏视频流问题

1.0.0.2 (2019-11-20)

  • 【修复】媒体信令sid安全问题
  • 【修复】关闭远端视频流可能导致视频状态不一致的问题

1.0.0.1 (2019-11-15)

  • 【删除】入会配置项AMSDKMeetingConfigSlsInfo
  • 【增加】入会配置项AMSDKMeetingConfigSecureTransport
  • 【增加】supportsVideo方法判断是否支持视频会议
  • 【增加】setScalingTypeMatchOrientation:scalingTypeMismatchOrientation:方法
  • 【增加】userId字段
  • 【修复】MCU会议响铃状态