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”选项以允许应用在后台时能够正常通话

3 示例工程

AliMeetingSample_iOS_2a488d71d1_20191211.zip

4 入会参数配置

入会参数配置

NSDictionary *config = @{
                             AMSDKMeetingConfigClientAppId:SAFESTR(clientAppId),
                             AMSDKMeetingConfigUserId:SAFESTR(userId),
                             AMSDKMeetingConfigMeetingUUID:SAFESTR(meetingUUID),
                             AMSDKMeetingConfigMemberUUID:SAFESTR(memberUUID),
                             AMSDKMeetingConfigMeetingToken:SAFESTR(meetingToken),
                             AMSDKMeetingConfigMeetingDomain:SAFESTR(meetingDomain)
                             };

5 加入会议

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

6 监听会议状态

会议状态

//! 会议状态
typedef NS_ENUM(NSInteger, AMSDKMeetingStatus) {
    //! 初始状态
    AMSDKMeetingStatus_IDLE          =  0,
    //! 连接中
    AMSDKMeetingStatus_JOINING       =  1,
    //! 已连接
    AMSDKMeetingStatus_JOINED        =  2,
    //! 重连中
    AMSDKMeetingStatus_REJOINING     =  3,
    //! 连接出错
    AMSDKMeetingStatus_ERROR         =  4,
    //! 会议终止
    AMSDKMeetingStatus_FINISHED      =  5
};

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

/**
 * AMSDKMeetingCallback用于会议回调,所有回调方法均在主线程执行
 */
@protocol AMSDKMeetingCallback <NSObject>

@optional

//! 会议状态
- (void)onMeetingStatusChange:(AMSDKMeetingStatus)meetingStatus;

//! 入会成功
- (void)onMeetingJoined;

//! 入会出现错误
- (void)onError:(AMSDKErrorCode)code reason:(NSString *)reason;

//! 参会列表发生变化
- (void)onClientListChange:(AMSDKClientListEvent)event list:(NSArray<AMSDKMeetingClient *> *)list;

//! 参会端发生变化
- (void)onClientStatusChange:(AMSDKMeetingClient *)client event:(AMSDKStatusEvent)event;

//! 媒体流状态改变,client 为自己,一般为带宽较低,服务端建议主动断流,需要用户手动断流,client 为其他人时,一般为服务端不给端发送对应client的流了,收到该回调时状态已经发生改变
- (void)onStreamStatusChange:(AMSDKMeetingClient *)client streamActive:(BOOL)streamActive;

//! 会议结束
- (void)onMeetingFinish:(AMSDKFinishCode)code reason:(NSString *)reason;

//! 收到DataChannel消息
- (void)onChannelMessage:(NSString *)msg;

 //! 啸叫状态改变
- (void)onWhistlingNoiseStatusChange;

@end
/**
 * Meeting Client状态事件
 */
typedef NS_ENUM(NSInteger, AMSDKStatusEvent) {
    //! 在线/离线
    AMSDKStatusEvent_ONLINE                 =   0,
    //! 打开/关闭视频
    AMSDKStatusEvent_VIDEO                  =   1,
    //! 打开/关闭音频
    AMSDKStatusEvent_AUDIO                  =   2,
    //! 开始/结束发言
    AMSDKStatusEvent_TALKING                =   3,
    //! 开始/结束响铃
    AMSDKStatusEvent_RINGING                =   4,
    //! 网络质量变化
    AMSDKStatusEvent_NETWORK_QUALITY        =   5,
    //! 切换主讲人
    AMSDKStatusEvent_MAIN_SPEAKER           =   6,
    //! 流状态发生改变
    AMSDKStatusEvent_STREAM_READY           =   7
};

7 用户画面渲染

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

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

8 会议控制

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

//! 禁用音频,会影响其他端之间的表现,比如mute成员A,则会除了当前入会端外,其他入会到的看到的A也会被禁音
- (void)muteAudio:(BOOL)muted callback:(AMSDKActionCallback _Nullable)callback;

//! 禁用视频,会影响其他端之间的表现,比如mute成员A,则会除了当前入会端外,其他入会到的看到的A也会被禁视频
- (void)muteVideo:(BOOL)muted callback:(AMSDKActionCallback _Nullable)callback;

//! 针对非publisher成员生效,enable== true 接收对应Client 的视频流,enable == false 接收对应client的视频流,视频流是否已准备好通过 isStreamReady() 判断
- (void)enableVideo:(BOOL)enabled callback:(AMSDKActionCallback _Nullable)callback;

//! 发起呼叫
- (void)call:(AMSDKJoinDeviceType)type callback:(AMSDKActionCallback _Nullable)callback;

//! 挂断
- (void)hangup:(AMSDKActionCallback _Nullable)callback;

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

//! 根据摄像头 Index 切换摄像头,参数见@AMSDKCameraDeviceFacing
- (void)switchCamera:(AMSDKCameraDeviceFacing)facing;

//! 根据摄像头 Index 自动切换摄像头
- (void)switchCamera;

//! 启动/关闭扬声器
- (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会议响铃状态