# 会议管理

用于管理视频会议的会议相关功能。

# 主持人功能

# 锁定会议/解除锁定

/**
 * @brief       锁定会议/解除锁定,只有主持人才能调用该接口
 *              锁定后无法通过会议号加,会议被锁定后必须再次调用该接口来解锁。
 *              操作结果(成功或失败)通过 onLockResult 回调。
 *              操作成功后会议中所有成员收到 onCommandReceive 的回调,对应的JCConferenceCommandInfo.type
 *              为 JCConferenceCommandInfoTypeLock,JCConferenceInfo.lock表示当前会议是否被锁定。
 */
- (bool)lock;

只有主持人才能调用该接口。

操作成功后会议中所有成员收到 onCommandReceivedResult (opens new window) 的回调,对应的 JCConferenceCommandInfo.type (opens new window)COMMANDINFO_LOCK

JCConference.ConferenceInfo.lock 表示当前会议是否被锁定。

示例代码:

[conference lock];

调用该方法后会收到 onLockResult (opens new window) 回调。

/**
 * @brief                   锁定/解锁会议结果回调
 *
 * @param operationId       操作id
 * @param succ              true 表示成功,false 表示失败
 * @param reason            原因,当 result 为 false 时该值有效 目前只返回 JCConferenceReasonNone
 */
- (void)onLockResult:(int)operationId succ:(bool)succ reason:(int)reason;

# 更改主持人

/**
 * @brief               更改主持人,只有主持人才能调用
 *                      移交主持人,主持人才能调用该接口,结果回调onChangeChairmanResult
 *                      请求成功后会议中所有成员收到onCommandReceive的回调,
 *                      对应的JCConferenceCommandInfo.type为JCConferenceCommandInfoTypeChangeChariman
 *
 * @param participant   被移交的成员对象
 * @return              返回操作id,返回-1表示接口调用失败,成功则返回操作id
 */
- (int)changeChairman:(JCConferenceParticipant *)participant;

只有主持人才能调用该接口。

示例代码:

JCConferenceInfo *confInfo = conference.getConferenceInfo;
JCConferenceParticipant *participant = [confInfo getParticipant:@"userId"];
[conference changeChairman:participant];

调用该方法后会收到 onChangeChairmanResult (opens new window) 回调。

/**
 * @brief                   更改主持人结果回调
 *
 * @param operationId       操作id
 * @param succ              true 表示成功,false 表示失败
 * @param reason            原因,当 result 为 false 时该值有效 目前只返回 JCConferenceReasonNone
 */
- (void)onChangeChairmanResult:(int)operationId succ:(bool)succ reason:(int)reason;

# 踢出成员

/**
 * @brief               踢出成员,主持人才能调用改接口
 *
 * @param participants  会议中成员对象
 * @return              返回 true 表示接口调用成功,false 表示失败
 */
- (bool)kick:(NSArray<JCConferenceParticipant *> *)participants;

只有主持人才能调用该接口。

示例代码:

NSMutableArray *array = [NSMutableArray array];
JCConferenceInfo *confInfo = conference.getConferenceInfo;
JCConferenceParticipant *participant = [confInfo getParticipant:@"userId"];
[array addObject:participant];
[conference kick:array];

# 成员静音/解除静音

/**
 * @brief               成员静音/解除静音,主持人才能调用该接口
 *                      静音后成员无法发言。可以通过再次调用该接口来解除成员静音。JCConferenceParticipant.isMute
 表示成员是否被静音,通过 onConferenceParticipantUpdate 回调通知界面该成员是否被静音
 * @param mute         true 静音,false 解除静音
 * @param participants  被静音的成员
 * @return              返回 true 成功向服务器发起成员静音/解除静音请求,false 未发起成员静音/解除静音请求
 */
- (bool)mute:(bool)mute participant:(JCConferenceParticipant *)participant;

只有主持人才能调用该接口。

示例代码:

JCConferenceInfo *confInfo = conference.getConferenceInfo;
JCConferenceParticipant *participant = [confInfo getParticipant:@"userId"];
[conference mute:true participant:participant];

调用该方法后会收到 onConferenceParticipantUpdate (opens new window) 回调。

/**
 *  @brief                  更新会议信息结果回调
 *  @param participant      成员对象
 *  @param changedParam     变化标识集合
 */
- (void)onConferenceParticipantUpdate:(JCConferenceParticipant *)participant changedParam:(JCConferenceParticipantChangedParam *)changedParam;

# 全场静音/解除全场静音

/**
 * @brief                全场静音/解除全场静音
 *                       静音后除主持人外都无法发言。全场静音后可以通过再次调用该接口来解锁,也可以单个对用户进行解除静音。
 *                       请求成功后会议中所有成员收到 onCommandReceived 的回调,对应 JCConferenceCommandInfo.type为JCConferenceCommandInfoTypeAllMute。 JCConference.ConferenceInfo.allMute 表示当前会议是否被静音。
 * @param mute       true 静音,false 解除静音
 * @return 返回 true 成功向服务器发起全场静音/解除全场静音请求,false 未发起全场静音/解除全场静音请求
 */
- (bool)muteAll:(bool)mute;

示例代码:

[conference muteAll:true];

调用该方法后,会议中所有成员会收到 onCommandReceivedResult (opens new window) 的回调,对应 JCConferenceCommandInfo.type (opens new window)JCConferenceCommandInfoTypeAllMute (opens new window)

/**
 * @brief                   收到会议属性变化或会议其他通知
 *
 * @param type              消息类型
 *
 */
- (void)onCommandReceivedResult:(JCConferenceCommandInfo *)commandInfo;

# 邀请成员屏幕共享

/**
 * @brief 主持人指定人员共享桌面
 * @param userId 指定人员用户id
 * @return true表示成功,false表示失败
 */
- (bool)inviteToScreenShare:(NSString *)userId;

示例代码:

[conference inviteToScreenShare:@"被邀请成员的userId"];

只有主持人才能调用该接口。

# 邀请成员发言

/**
 * @brief 主持人指定人员发言
 * @param userId 接收者id
 * @return true表示成功,false表示失败
 */
- (bool)inviteToSpeak:(NSString *)userId;

示例代码:

[conference inviteToSpeak:@"被邀请成员的userId"];

只有主持人才能调用该接口。

# 转语音会议

/**
 * @brief 转语音会议
 * @return true表示成功,false表示失败
 */
- (bool)transferToAudioConf;

示例代码:

[conference transferToAudioConf];

只有主持人才能调用该接口。

# 开启、变更会议字幕

/**
 * @brief                 开启或者变更会议字幕
 *
 * @param subTitleInfo         字幕对象
 * @see   JCConferenceSubTitleInfo
 */
 - (bool)startOrUpdateSubTitle:(JCConferenceSubTitleInfo *)subTitleInfo;

其中 JCConferenceSubTitleInfo (opens new window) 包含:

//字幕内容
@property (nonatomic, copy) NSString *content;
//字幕是否轮播
@property (nonatomic, assign) bool carouseOn;

当会议字幕开启或者变更后,会议中的成员会收到 onSubTitleStartOrUpdate (opens new window) 回调:

/**
 * @brief 收到会议字幕开启或者变更通知
 * @param subTtitleInfo 字幕对象
 * @see JCConferenceSubTitleInfo
 */
 - (void)onSubTitleStartOrUpdate:(JCConferenceSubTitleInfo *)subTitleInfo;

示例代码:

JCConferenceSubTitleInfo *subTitleInfo = [[JCConferenceSubTitleInfo alloc] init];
subTitleInfo.carouseOn = true;
subTitleInfo.content = @"字幕内容";
[conference startOrUpdateSubTitle:subTitleInfo];

只有主持人才能调用该接口。

# 关闭会议字幕

/**
 *  @brief                关闭会议字幕
 */
 - (bool)stopSubTitle;

当会议字幕关闭后,会议中的成员会收到 onSubTitleStop (opens new window) 回调:

/**
 *  @brief                收到会议字幕关闭通知
 */
 - (void)onSubTitleStop;;

示例代码:

[conference stopSubTitle];

只有主持人才能调用该接口。

# 延时预约会议时长

/**
 * @brief       延时预约会议时长,只有主持人才能调用。
 *              当预约的会议即将结束(结束前5分钟),主持人会收到回调 onCommandReceivedResult(JCConferenceCommandInfoType为JCConferenceCommandInfoTypeDelayRemind),主持人可以调用该接口延长会议。
 * @param time  延长的时间,单位分钟
 * @reutrn      返回操作id,返回-1表示接口调用失败
 */
- (int)delay:(int)time;

只有主持人才能调用该接口。

当预约的会议即将结束(结束前5分钟),主持人会收到回调 onCommandReceivedResult (opens new window)typeCOMMANDINFO_DELAY_REMIND,主持人可以调用该接口延长会议。

示例代码:

[conference delay:5];

# 成员管理

# 拒绝屏幕共享

/**
 * @brief 被主持人邀请屏幕共享,拒绝共享
 * @param userId 主持人id
 * @return true表示成功,false表示失败
 */
- (bool)rejectToScreenShare:(NSString *)userId;

示例代码:

[conference rejectToScreenShare:@"主持人id"];

# 设置(自己)主持人

/**
 * @brief 设置主持人(自己)
 * @param isChairman 是否为主持人
 * @return 返回 true 接口调用成功
 */
- (bool)setChairman:(bool)isChairman;

调用该接口后,会议中的成员会收到 onChairmanUpdate (opens new window) 回调。

/**
 * @brief 设置主持人操作结果回调,成功后会触发 onChairmanUpdate 回调
 *
 * @param memberList  更新的成员
 */
- (void)onChairmanUpdate:(NSArray <JCConferenceParticipant *> *)memberList;

示例代码:

[conference setChairman:true];

# 更新成员(自己)扩展信息

/**
 * @brief       更新成员(自己)扩展信息,会议中的成员会收到 onConferenceParticipantUpdate 回调。
 * @param expandInfo 扩展信息
 * @return      返回操作id,返回-1表示接口调用失败
 */
- (int)updateParticipantExpandInfo:(NSString *)expandInfo;

调用该接口后,会议中的成员会收到 onConferenceParticipantUpdate (opens new window) 回调。

/**
 * @brief                  查询会议信息结果回调
 * @param participant      成员对象
 * @param changedParam     变化标识集合
 */
- (void)onConferenceParticipantUpdate:(JCConferenceParticipant *)participant changedParam:(JCConferenceParticipantChangedParam *)changedParam;

示例代码:

[conference updateParticipantExpandInfo:@"扩展信息"];

# 设置焦点成员

/**
 * @brief 设置焦点成员,界面可以对焦点成员在视频布局中展示。设置成功会议中所有成员收到onCommandReceivedResult的回调
 * @param userId 成员UserId,传 nil 取消所有焦点成员
 * @reutrn 返回 true 接口调用成功
 */
- (bool)focusParticipant:(NSArray<NSString *> *)userId;

设置成功会议中所有成员收到 JCConferenceCommandInfoType (opens new window)JCConferenceCommandInfoTypeFocus (opens new window) 的回调。

/**
 * @brief 收到会议属性变化或会议其他通知
 *
 * @param type 消息类型
 *
 */
- (void)onCommandReceivedResult:(JCConferenceCommandInfo *)commandInfo;

# 成员举手/取消举手

/**
 * @brief 成员举手/取消举手
    普通成员可以调用该接口举手或取消举手
    如有成员举手,主持人可以调用该接口取消成员举手
    设置成功会议中所有成员会收到onCommandReceivedResult的回调
 * @param userId 成员UserId
 * @param handUp 举手或取消举手
 * @return 返回 true 接口调用成功
 */
- (bool)handUpParticipant:(NSArray<NSString *> *)userId handUp:(bool)handUp;

设置成功会议中所有成员收到 JCConferenceCommandInfoType (opens new window)JCConferenceCommandInfoTypeHandUp (opens new window) 的回调。

/**
 * @brief 收到会议属性变化或会议其他通知
 *
 * @param type 消息类型
 *
 */
- (void)onCommandReceivedResult:(JCConferenceCommandInfo *)commandInfo;

# 更改成员角色

/**
 * @brief 更改成员的角色
 * 设置成功会议中所有成员收到onCommandReceivedResult的回调,对应的JCConferenceCommandInfo.type为JCConferenceCommandInfoType.ChangeRole
 * 设置失败自己收到onCommandReceivedResult回调
 * @param users          成员id
 * @param type 更改的角色类型
 * @return 返回true表示接口调用成功
 */
- (bool)changeParticipantRole:(NSArray<NSString *> *)users type:(JCConferenceParticipantType)type;

participantType 的值有:

///视频成员(能订阅其他成员的媒体数据,能发送自己的音视频数据)
JCConferenceParticipantTypeVideo,
///音频成员(能订阅其他成员的媒体数据,能发送自己的音频数据)
JCConferenceParticipantTypeAudio,
///观众(只能接收其他成员的媒体数据)
JCConferenceParticipantTypeAudience

设置成功会议中所有成员收到 commandInfo.typeJCConferenceCommandInfoTypeChangeRole (opens new window) 的回调。

/**
 * @brief 收到会议属性变化或会议其他通知
 *
 * @param type 消息类型
 *
 */
- (void)onCommandReceivedResult:(JCConferenceCommandInfo *)commandInfo;

示例代码:

NSArray<NSString *> *users = [[NSArray alloc]initWithObjects:userId, nil];
[JCManager.shared.conference changeParticipantRole:users type:JCConferenceParticipantTypeVideo];

# 邀请成员

邀请成员有两种接口:

  1. 不携带自定义信息,直接传入被邀请成员的数组。
/**
 * @brief           邀请成员加入
 *
 * @param users     成员数组
 */
- (int)invite:(NSArray<NSString *> *)users;
  1. 可携带自定义信息并发送给被邀请人。
/**
 * @brief           邀请成员加入会议,JCConferenceInviteInfo.expandInfo 可携带自定义信息并发送给被邀请人
 * @param users     被邀请人的NSArray
 * @return          -1 表示接口调用失败
 */
- (int)inviteEx:(NSArray<JCConferenceInviteInfo *> *)users;

示例代码:

NSString *user = @"userId";
NSMutableArray *array = [[NSMutableArray array];
[array addObject:user];
// 不携带自定义信息
[conference invite:array];
JCConferenceInviteInfo *users;
NSMutableArray *arrayEx = [[NSMutableArray array];
// 携带自定义信息
[conference inviteEx:arrayEx];

邀请接口调用后,会收到 onInviteResult (opens new window) 回调。

/**
 * @brief                   邀请结果回调
 *
 * @param operationId       操作id
 * @param succ              true 表示成功,false 表示失败
 * @param reason            原因,当 result 为 false 时该值有效 目前只返回 JCConferenceReasonNone
 */
- (void)onInviteResult:(int)operationId succ:(bool)succ resaon:(int)reason;

邀请发出后,被邀请的成员会收到 onInviteReceived (opens new window) 回调。

/**
 * @brief                   收到会议邀请回调
 *
 * @param confInfo          会议
 * @param inviter           邀请者
 * @param userInfo          发送邀请时携带的自定义信息
 */
- (void)onInviteReceived:(JCConferenceInfo *)confInfo inviter:(JCConferenceParticipant *)inviter userInfo:(JCConferenceInviteInfo *)userInfo;

# 设置待加入成员

/**
 * @brief            设置待加入成员,设置结果回调 onImportCandidatesResult。设置成功后会议的所有成员收到回调
 *                    onConferenceCandidatesChanged,成员列表中的JCConferenceParticipant isJoined 为 false。
 *
 * @param candidates 待加入成员列表
 * @param info       自定义信息
 * @return           返回操作id,返回-1表示接口调用失败,成功则返回操作id
 */
- (int)importCandidates:(NSArray<JCConferenceCandidate *> *)candidates info:(NSString *)info;

示例代码:

JCConferenceCandidate *candidates;
NSMutableArray *array = [[NSMutableArray array];
[array addObject:candidates];
[conference importCandidates:array info:@"自定义信息"];

该接口调用后会收到 onImportCandidatesResult (opens new window) 回调。

/**
 * @brief                   设置待加入成员结果回调
 *
 * @param operationId       操作id
 * @param succ              true 表示成功,false 表示失败
 * @param reason            原因,当 result 为 false 时该值有效 目前只返回 JCConferenceReasonNone
 */
- (void)onImportCandidatesResult:(int)operationId succ:(bool)succ resaon:(int)reason;

待加入成员设置成功后,会议的所有成员会收到 onConferenceCandidatesChanged (opens new window) 回调,成员列表中的 JCConferenceParticipant (opens new window) isJoinedfalse

# 移除待加入成员

/**
 * @brief            移除待加入成员,该成员是自己,调用后会议的所有成员收到回调 onConferenceCandidatesChanged
 *                   如果发起邀请时调用 ImportCandidates 接口,被邀请成员收到邀请后拒绝邀请,则需调用该接口。
 *
 * @param confNumber 收到邀请的会议号
 * @return           返回操作id,返回-1表示接口调用失败,成功则返回操作id
 */
- (int)rejectCandidate:(NSString *)confNumber;

移除待加入成员接口调用后,会议的所有成员收到 onConferenceCandidatesChanged (opens new window) 回调。

示例代码:

[conference rejectCandidate:@"confNumber"];

# 成员音量变化

/**
 * @brief 成员音量变化回调
 * @param memberList 音量变化的成员
 * @see JCConferenceParticipant 会议成员对象
 */
- (void)onConferenceParticipantVolumeChanged:(NSArray <JCConferenceParticipant *> *)memberList;

会议中成员音量变化时会收到 onConferenceParticipantVolumeChanged (opens new window) 回调,memberList 为音量变化的成员。

# 成员网络变化

/**
 * @brief 成员网络变化回调
 * @param memberList 网络变化的成员
 * @see JCConferenceParticipant 会议成员对象
 */
- (void)onConferenceParticipantNetChanged:(NSArray <JCConferenceParticipant *> *)memberList;

会议中成员网络变化时会收到 onConferenceParticipantNetChanged (opens new window) 回调,memberList 为网络变化的成员。

# 会议属性

# 设置会议自定义属性

/**
 * 设置会议自定义属性,会议中的成员会收到回调 onCommandReceivedResult(type为JCConferenceCommandInfoTypeCustomPropertyChanged)
 *
 * @param name  自定义 key 值
 * @param value 自定义 value 值
 * @return      接口调用成功失败
 */
- (bool)setCustomProperty:(NSString *)value forKey:(NSString *)key;

示例代码:

[conference setCustomProperty:@"" forKey:@"DOODLE_OWNER"];
...

# 获取会议自定义属性

/**
 * 获取会议自定义属性
 * @param key 自定义 key 值
 * @return 自定义 value 值
 */
- (nullable NSString *)getCustomProperty:(NSString *)key;

示例代码:

[conference getCustomProperty:@"DOODLE_OWNER"];
...

# 判断是否为语音会议

判断当前会议是否为语音会议。

/**
 * @brief 是否音频会议
 * @return true表示音频会议,false表示视频会议
 */
- (bool)isAudioConf;

示例代码:

[conference isAudioConf];

# 获取当前会议字幕

/**
 *  @brief              获取当前会议字幕
 *  @return
 */
 - (JCConferenceSubTitleInfo *)getSubTitleInfo;

示例代码:

[conference.getConferenceInfo getSubTitleInfo];

# 设置会议本地宽高比

/**
 * @brief               设置本地宽高比
 * @param               ratio 宽高比
 * @return              接口调用成功失败
 */
- (bool)setLocalRatio:(float)ratio;

示例代码;

[conference.setLocalRatio:ratio]

相关参数;

///会议svc配置(各个层级的分辨率、码率)
@property (nonatomic, copy) NSString *svcResolution;

///会议最大帧率
@property (nonatomic) int maxFrameRate; 

///会议最大码率
@property (nonatomic) int maxBitrate; 

///会议全局长宽比
@property (nonatomic) float wholeRatio; 

///会议默认码率
@property (nonatomic) int defaultBitrate; 

# 会议预约

集成会议预约功能前,请确保您已经进行了模块的初始化。

// 初始化各模块,因为这些模块实例将被频繁使用,建议声明在单例中
JCClient *client = [JCClient create:@"your AppKey" callback:self extraParams:nil];
JCMediaDevice *mediaDevice = [JCMediaDevice create:client callback:self];
JCConference *conference = [JCConference create:client mediaDevice:mediaDevice callback:self];

会议预约包括以下功能:

# 预约会议

/**
 *  @brief                预约会议
 *  @param reserveInfo    预约信息参数
 *  @return               返回操作id
 */
- (int)reserve:(JCConferenceReserveInfo *)reserveInfo;

其中,预约会议必须设置以下信息:

/// 预约会议的创建者。预约时,必须设置
@property (nonatomic, copy) NSString *creator;

/// 预约成员列表。预约时,必须设置,并且列表中必须包含一个主持人
@property (nonatomic, strong) NSArray<JCConferenceReserveMember *> *members;

/// 会议最大人数。预约时,必须设置。不能为0,不能小于预约成员列表members的总数
@property (nonatomic) int memberMaxCount;

/// 会议开始时间,时间戳,单位毫秒。预约时,必须设置
@property (nonatomic) long long startTime;

/// 会议时长,单位分钟。预约时,必须设置
@property (nonatomic) int duration;

/// 预约会议的类型。预约时,必须设置
@property (nonatomic) JCConferenceReserveInfoMediaType mediaType;

示例代码:

JCConference *conference = [JCConference create:client mediaDevice:mediaDevice callback:self];
JCConferenceReserveInfo *info = [[JCConferenceReserveInfo alloc] init];
[conference reserve:info];

预约会议接口调用后会收到 onReserveResult (opens new window) 回调。

/**
 * @brief                   预约会议结果回调
 *
 * @param operationId       操作id
 * @param succ              true 表示成功,false 表示失败
 * @param reason            当 result 为 false 时该值有效,目前失败原因 JCConferenceResasonConfNumberExist
 * @param reserveInfo       预约会议信息,暂时只有Uuid和ConfNumber
 */
- (void)onReserveResult:(int)operationId succ:(bool)succ reason:(int)reason reserveInfo:(JCConferenceReserveInfo *)reserveInfo;

# 获取预约会议持续时间

/**
 * 预约会议的持续时间,单位分
 */
@property (nonatomic, assign) int keepDuration;

示例代码:

[conference.getConferenceInfo keepDuration];

# 取消预约会议

/**
 *  @brief                 取消预约会议
 *  @param  uuid           预约会议的uuid
 *  @return                返回操作id
 */
- (int)cancelReserve:(NSString *)uuid;

示例代码:

JCConference *conference = [JCConference create:client mediaDevice:mediaDevice callback:self];
[conference cancelReserve:@"uuid"];

取消预约会议接口调用后会收到 onCancelReserveResult (opens new window) 回调。

/**
 * @brief                   取消预约会议的结果回调
 *
 * @param operationId       操作id
 * @param succ              true 表示成功,false 表示失败
 * @param reason            原因,当 result 为 false 时该值有效 目前只返回 JCConferenceReasonNone
 */
- (void)onCancelReserveResult:(int)operationId succ:(bool)succ reason:(int)reason;

# 更新预约会议信息

/**
 *  @brief                  更新预约会议信息,只有创建者才能更新
 *  @param reserveInfo      预约信息参数
 *  @return                 返回操作id
 */
- (int)editReserve:(JCConferenceReserveInfo *)reserveInfo;

只有创建者才能更新。

示例代码:

JCConference *conference = [JCConference create:client mediaDevice:mediaDevice callback:self];
JCConferenceReserveInfo *info = [[JCConferenceReserveInfo alloc] init];
[conference editReserve:info];

更新预约会议信息接口调用后会收到 onEditReserveResult (opens new window) 回调。

/**
 * @brief                   编辑预约会议的结果回调
 *
 * @param operationId       操作id
 * @param succ              true 表示成功,false 表示失败
 * @param reason            原因,当 result 为 false 时该值有效 目前只返回 JCConferenceReasonNone
 */
- (void)onEditReserveResult:(int)operationId succ:(bool)succ reason:(int)reason;

# 获取预约会议列表

/**
 *  @brief                  获取预约会议列表,结果回调 onRefreshConfListResult。
 *                          lastUpdateTime 传0,获取所有预约会议列表,界面要保存 onRefreshConfListResult
 *                          回调返回的 lastUpdateTime 值。
 *                          下一次调用该接口刷新时,lastUpdateTime 传界面保存的值,获取该时间点到当前时间点这段时间内
 *                          变更(新增、更新、删除)的会议列表。该接口适用于数据库存储数据。
 *  @param lastUpdateTime   最近获取会议列表的时间
 *  @return                 返回操作id
 */
- (int)refreshReservedConf:(long long)lastUpdateTime;

示例代码:

JCConference *conference = [JCConference create:client mediaDevice:mediaDevice callback:self];
long long lastUpdateTime;
[conference refreshReservedConf:lastUpdateTime];

获取预约会议列表接口调用后,会收到 onRefreshReservedConfResult (opens new window) 回调。

/**
 * @brief                   获取预约会议列表回调
 *
 * @param operationId       操作id
 * @param succ              true 表示成功,false 表示失败
 * @param reason            原因,当 result 为 false 时该值有效
 * @param lastUpdateTime    最后更新时间
 * @param add               增加的会议列表
 * @param update            更新的会议列表
 * @param remove            删除的会议列表(每一个元素为会议的 uuid)
 */
- (void)onRefreshReservedConfResult:(int)operationId succ:(bool)succ reason:(int)reason lastUpdateTime:(long long)lastUpdateTime add:(NSArray<JCConferenceReserveInfo *> *)add update:(NSArray<JCConferenceReserveInfo *> *)update remove:(NSArray<NSString *> *)remove;

# 查询预约会议列表

/**
 *  @brief                  查询预约会议列表,结果回调 onQueryConfResult。不使用数据库存储数据的可用该接口。
 *                          1.state参数传 JCConferenceReserveInfoStateAll,先查询所有预约会议的总数(查询所有时,参数page和count传0)
 *                          2.根据查询总数,再次查询对应状态下的预约会议列表详情(如果总数过大,可分页查询,比如总数100个,查询10次,每次10个)
 *  @param state            需要查询的会议目前的状态
 *  @param page             分页查询,从1开始递增
 *  @param count            每一页的总数
 *  @return                 返回操作id
 */
- (int)queryReservedConf:(JCConferenceReserveInfoState)state page:(NSUInteger)page count:(NSUInteger)count;

示例代码:

JCConference *conference = [JCConference create:client mediaDevice:mediaDevice callback:self];
NSUInteger page;
NSUInteger count;
[conference queryReservedConf:JCConferenceReserveInfoStateAll page:page count:count];

查询预约会议列表接口调用后会收到 onQueryReservedConfResult (opens new window) 回调。

/**
 * @brief                   查询预约会议结果
 *
 * @param operationId       操作id
 * @param succ              true 表示成功,false 表示失败
 * @param reason            原因
 * @param queryResult       JCConferenceQueryConfResult 对象
 */
- (void)onQueryReservedConfResult:(int)operationId succ:(bool)succ reason:(int)reason queryResult:(JCConferenceQueryConfResult *)queryResult;

# 查询单个预约会议

/**
 * @brief                 查询单个预约会议,结果回调onQuerySingConfResult
 *
 * @param uuid            需要查询的预约会议uuid
 * @return                返回操作id
 */
- (int)querySingleConf:(NSString *)uuid;

示例代码:

JCConference *conference = [JCConference create:client mediaDevice:mediaDevice callback:self];
[conference querySingleConf:@"uuid"];

查询单个预约会议接口调用后,会收到 onQuerySingleConfResult (opens new window) 回调。

/**
 * @brief                   查询单个预约会议结果
 *
 * @param operationId       操作id
 * @param result            true表示成功,false表示失败
 * @param reason            原因
 * @param reserveInfo       预约会议信息对象
 */
- (void)onQuerySingleConfResult:(int)operationId result:(bool)result reason:(int)reason reserveInfo:(JCConferenceReserveInfo *)reserveInfo;