多方通话
创建多方通话
- (void)setupConferenceWithPhoneArray:(NSArray *)phoneArray { ZULONG dwConfId = Mtc_ConfCreate(); ZULONG dwPartpLstId = Mtc_PartpLstCreate(EN_MTC_PARTP_LST_URI_LST); for (NSString* phone in phoneArray) { NSString* phoneNumber = FMUtilContactsGetDialablePhone(phone); Mtc_PartpLstAddPartp(dwPartpLstId, ZNULL, [MtcDBUtils formatPhone:phoneNumber]); } Mtc_ConfIvtUserLst(dwConfId, ZNULL, dwPartpLstId); //若创建成功返回ZOK,若失败返回ZFAILED }
发起多方通话后会触发以下回调:
static ZVOID MtcConfCbOutgoing(ZULONG dwConfId) { //通话记录插入数据库,设置扬声器方式 } static ZVOID MtcConfCbConned(ZULONG dwConfId) { //发起方会立即接收到该回调,显示多方通话创建成功 } static ZVOID MtcConfCbPtptUpdt(ZULONG dwConfId, ZCHAR *pcUri, ZULONG dwState) { //发起方会立即收到其他成员的状态回调,初始状态为pengding,在用户接听起电话和挂断电话后都会收到该回调,更新数据库状态,并更新界面显示 }
多方通话来电时,会触发以下回调:
static ZVOID MtcConfCbIncoming(ZULONG dwConfId) { int size = Mtc_ConfGetPartpSize(dwConfId); for (int index=0 ; index<size; index++) { ZCHAR* ppcUri; ZCHAR* ppcDispName; Mtc_ConfGetPartpUri(dwConfId, index, &ppcDispName, &ppcUri); NSString *phone = [NSString stringWithUTF8String:Mtc_UriGetUserPart(ppcUri)]; [phoneArray addObject:phone]; } //获取各成员及主席信息,插入数据库,界面显示多方通话来电 }
同意加入多方通话
用户点击接听按钮,调用:
NSInteger dwConfId = [self getConfIdWithCallId:callId]; Mtc_ConfAcpt(dwConfId, ZNULL);
成功后会收到回调:
static ZVOID MtcConfCbConned(ZULONG dwConfId) { //该回调为被叫方开始计时点 }
拒绝加入多方通话
用户点击拒绝按钮,调用:
Mtc_ConfTerm(dwConfId, EN_MTC_CALL_TERM_REASON_DECLINE)
主动及被动终止多方通话,主席取消多方通话
多方通话成员可以退出,只有主席可以终止,主席调用:
Mtc_ConfTerm(dwConfId, EN_MTC_CALL_TERM_REASON_NORMAL)
主席以及成员会收到回调:
static ZVOID MtcConfCbDisced(ZULONG dwConfId) { //更新数据库,界面取消通话界面显示 }
多方通话中加人
在多方通话中,只有主席可以添加成员,调用该接口:
NSInteger dwConfId = [self getConfIdWithCallId:callId]; for (NSString *phone in phoneArray) { Mtc_ConfIvtUser(dwConfId, [MtcDBUtils formatPhone:phone]); }
主席会收到以下回调:
static ZVOID MtcConfCbIvtAcpt(ZULONG dwConfId, ZCHAR *pcUri) { NSString *phone = [NSString stringWithUTF8String:Mtc_UriGetUserPart(pcUri)]; //获取成员号码,插入数据库,界面添加成员 }
多方通话订阅与通知
static ZVOID MtcConfCbPtptUpdt(ZULONG dwConfId, ZCHAR *pcUri, ZULONG dwState) { NSString *ptpNumber = [NSString stringWithUTF8String:Mtc_UriGetUserPart(pcUri)]; switch (dwState) { case EN_MTC_CONF_PARTP_STATE_PENDING: break; case EN_MTC_CONF_PARTP_STATE_CONNED: { //更新群成员状态,此为计时开始点 break; } case EN_MTC_CONF_PARTP_STATE_DISCED: { //更新群成员状态,该成员已退出多方通话或多方通话已结束 break; } default: break; } //更新数据库 }