iOS

# 第三方管理

本文将介绍通话过程中第三方管理的功能,访客无邀请和转接的接口,但是能收到第三方加入离开的事件。

# 1. 第三方成员离开或加入

新成员加入通话或成员离开通话,会通过 JRTCGuestCallback (opens new window) 中的 onMemberJoin (opens new window)onMemberLeave (opens new window) 接口上报。

/**
 * 通话中有新成员加入回调
 *
 * 当第三方成员加入时,已在通话中的所有成员会收到此回调,而新加入的成员不会收到此回调。
 * @param part 新加入的成员对象
 */
void onMemberJoin(JRTCRoomParticipant part);

/**
 * 通话中有成员离开回调
 *
 * 通话中有成员离开通话时,剩余的成员会收到此回调,而离开的成员不会收到此回调。
 * @param part 离开的成员对象
 */
void onMemberLeave(JRTCRoomParticipant part);

示例代码:

// 通话中有新成员加入
void onMemberJoin(JRTCRoomParticipant part) {
    // 请求成员视频流大小
	guest.requestVideo(part, videoSize);
    // 渲染成员视图画面
    mediaDevice.startVideo(part.streamId, JRTCMediaDevice.RENDER_FULL_SCREEN);
    // ...
}

//  通话中有成员离开
void onMemberLeave(JRTCRoomParticipant part) {
    // 停止成员画面渲染
    if (TextUtils.equals(part.getStreamId, canvas.getStreamId())) {
        mediaDevice.stopVideo(canvas);
    }
}

# 2. 邀请第三方访客

座席端调用接口邀请第三方访客,作为第三方加入可以收到 onCallStateChanged (opens new window) 来电通知并进行回应;

访客端收到该回调后,可以调用 JRTCGuest.term (opens new window) 拒接或调用 JRTCGuest.answer (opens new window) 接听。

示例代码:

public void onCallStateChanged(@GuestCallStateChangeType int type, @CallIncomingType int incomingType, JRTCInviter inviter, @CallTermReason int reason) {
    switch (type) {
        case GUEST_CHANGE_TYPE_CALLING:
            //发起成功
            break;
        case GUEST_CHANGE_TYPE_WAITING:
            //发起方等待接听
            break; 
        case GUEST_CHANGE_TYPE_TALKING:
            //通话建立
            break;        
        case GUEST_CHANGE_TYPE_TERMED:
            //通话挂断
            break;           
        case GUEST_CHANGE_TYPE_INCOMING:
            //来电
            switch (incomingType) {
                case CALL_INCOMING_TYPE_CALL:
                    //
                break;
                case CALL_INCOMING_TYPE_INVITE:
                    //拒绝邀请
                    guest.term(); 
                    //接受邀请
                    guest.answer();
                break;
                case CALL_INCOMING_TYPE_DIRECT_CALL:
                    //
                break;
                case CALL_INCOMING_TYPE_FORWARD:
                    //
                break;
            }
            break;          
    }
}