AliMeetingSDK提供了音视频会议通用能力,主要功能点包括:
背景信息
操作任务
- 人员管理
- 媒体管理
- 设备管理
- 会控管理
执行结果
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会议响铃状态