# 实现视频客服

本文档为您展示通过 SDK 实现视频客服(含排队机)的相关步骤,帮助您在远程银行和视频客服的场景下实现智能排队、屏幕共享、全景录像、访客管理的相关能力。

# 发起呼叫

在登录成功之后,访客就可以通过发起呼叫的接口来呼叫自己要做的业务。

[_guest call:@"10086" callParams:[[JCGuestCallParam alloc] init]];

其中 JCGuestCallParam (opens new window) 包含了很多呼叫的扩展参数,比如随路参数、视频分辨率信息等,这个将在进阶的接口说明里做介绍。

# 通话状态改变通知

当访客接听通话,或者通话结束,都会通过 JCGuestCallback (opens new window) 里的 onCallStateChanged (opens new window) 事件进行上报。

- (void)onCallStateChanged:(JCGuestCallStateChangeType)type termReason:(JCGuestCallTermReason)reason {
    switch (type) {
        case JCGuestCallStateChangeTypeCalling:
            // 发起方呼叫成功
            break;
        case JCGuestCallStateChangeTypeWaiting:
            // 发起方等待接听
            break;
        case JCGuestCallStateChangeTypeTalking:
            // 通话建立
            break;
        case JCGuestCallStateChangeTypeTermed:
            // 通话挂断
            break;
    }
}

# 创建本地视频画面

创建本地视频画面的时机没有具体要求,在通话前通话中皆可。

JCMediaDeviceVideoCanvas *canvas = [_mediaDevice startCameraVideo:JCMediaDeviceRenderFullContent view:self.view];

# 创建远端视频画面

当通话建立后,如果坐席有视频流的上传,访客端可以获取到坐席的视频流并进行渲染。

JCMediaDeviceVideoCanvas *canvas = [_mediaDevice startVideo:_agent.guestParticipant.renderId renderType: JCMediaDeviceRenderFullContent view:self.view]];

# 挂断

访客可以在呼叫等待或者通话中主动取消或者结束通话。

[_guest term];

主动和被动的挂断事件与来电、接通一样,都通过 onCallStateChanged (opens new window) 接口上报,其中 JCGuestTermReason 可以用来判断挂断原因,如:主动挂断、对端挂断等,详细可参考接口文档或者 SDK 注释。

# 销毁本地和远端画面

当不再需要查看视频画面,或者通话结束,需要调用接口来释放渲染的资源。

[_mediaDevice stopVideo:_localCanvas];
[_mediaDevice stopVideo:_remoteCanvas];

必须进行这步操作,不然会造成渲染内存不释放。