通话监听
融云鸿蒙版 CallLib 库提供了 RCCallClientListener 监听, 用于处理呼叫相关的业务逻辑上报。
来电监听
需要设置 CallLib 的全局通话监听 RCCallClientListener,来监听通话呼入。
- 收到新通话,返回当前通话的详细信息。
- 漏接的通话,返回当前通话的详细信息。
TypeScript
this._callClient.callClientListener = {
/**
* 收到通话呼入的回调
*
* @param callSession 通话实例
*
* @remarks 代理
*/
didReceiveCall(callSession: RCCallSession): void {
},
/**
* 收到通话漏接的回调
*
* @param callSession 通话实例
*
* @remarks 代理
*/
didMissCall(callSession: RCCallSession): void {
}
}
通话建立、结束等状态相关的回调
- 收到新通话,返回当前通话的详细信息。
- 已建立通话,返回当前通话的详细信息。
- 通话结束。对方挂断,己方挂断,或者通话过程网络异常造成的通话中断,都会通过同一个回调返回原因RCCallDisconnectReason 。
- 被叫端正在振铃,返回振铃用户的用户 ID。
- 被叫端加入通话,返回加入者的用户信息和摄像头信息。
- 通话中的某一个参与者,邀请好友加入通话。返回被邀请者的信息和媒体类型。
- 通话中的远端参与者离开,返回离开者的信息和离开原因 RCCallDisconnectReason 。在多人通话与 1v1 通话中,对端挂断均会先回调 didRemoteUserLeft ,再触发其他回调。
- 当通话中的某一个参与者切换通话类型,例如由视频切换至音频。返回切换操作者的信息、切换后的媒体类型等。
- 通话过程中,发生异常。返回错误码 RCCallErrorCode。
TypeScript
this._callClient.callClientListener = {
/**
* 收到通话呼入的回调
*
* @param callSession 通话实例
*
* @remarks 代理
*/
didReceiveCall(callSession: RCCallSession): void {
},
/**
* 接通通话的回调
*
* @param callSession 通话实例
*
* @remarks 代理
*/
didCallConnected(callSession: RCCallSession): void {
},
/**
* 挂断通话的回调
*
* @param callSession 通话实例
* @param callDisconnectReason 通话挂断原因
*
* @remarks 代理
*/
didCallDisconnected(callSession: RCCallSession, callDisconnectReason: RCCallDisconnectReason): void {
},
/**
* 远端用户正在响铃的回调
*
* @param callSession 通话实例
* @param userId 用户 ID
*
* @remarks 代理
*/
didRemoteUserRinging(callSession: RCCallSession, userId: string): void {
},
/**
* 远端用户被邀请加入 通话的回调
*
* @param callSession 通话实例
* @param userId 用户 ID
*
* @remarks 代理
*/
didRemoteUserInvited(callSession: RCCallSession, userId: string): void {
},
/**
* 远端用户加入通话的回调
*
* @param callSession 通话实例
* @param userId 用户 ID
* @param mediaType 媒体类型
*
* @remarks 代理
*/
didRemoteUserJoined(callSession: RCCallSession, userId: string, mediaType: RCCallMediaType): void {
},
/**
* 远端用户挂断通话的回调
*
* @param callSession 通话实例
* @param userId 用户 ID
* @param callDisconnectReason 通话挂断原因
*
* @remarks 代理
*/
didRemoteUserLeft(callSession: RCCallSession, userId: string, callDisconnectReason: RCCallDisconnectReason): void {
},
/**
* 远端用户切换了媒体类型的回调
*
* @param callSession 通话实例
* @param userId 用户 ID
* @param mediaType 媒体类型
*
* @remarks 代理
*/
didRemoteUserChangeMediaType(callSession: RCCallSession, userId: string, mediaType: RCCallMediaType): void {
},
/**
* 错误回调
*
* @param callSession 通话实例
* @param code 错误码
*
* @remarks 代理
*/
didOccurError(callSession: RCCallSession, code: RCCallErrorCode): void {
}
}
设备相关回调
- 远端参与者摄像头状态发生变化时,回调 didRemoteUserDisableCamera 通知状态变化。
- 远端参与者麦克风状态发生变化时,回调 didRemoteUserDisableMic 通知状态变化。
TypeScript
this._callClient.callClientListener = {
/**
* 远端用户开关麦克风的状态变化回调
*
* @param callSession 通话实例
* @param userId 用户 ID
* @param disable 是否关闭
*
* @remarks 代理
*/
didRemoteUserDisableMic(callSession: RCCallSession, userId: string, disable: boolean): void {
},
/**
* 远端用户开关摄像头的状态变化回调
*
* @param callSession 通话实例
* @param userId 用户 ID
* @param disable 是否关闭
*
* @remarks 代理
*/
didRemoteUserDisableCamera(callSession: RCCallSession, userId: string, disable: boolean): void {
}
}
网络质量相关回调
- 音频声音大小的回调,返回用户 ID 及音量大小
- 发送丢包率信息回调,返回丢包率及发送端的网络延迟。
- 接收丢包率信息回调,返回远端用户 ID 及丢包率。
- 收到某个用户的第一帧视频数据,返回用户信息及宽高数据。
TypeScript
this._callClient.callClientListener = {
/**
* 音频声音大小的回调
*
* @param callSession 通话实例
* @param userId 用户 ID
* @param audioLevel 声音级别:0~9,0 为无声,依次变大
*
* @remarks 代理
*/
didAudioLevelChanged(callSession: RCCallSession, userId: string, audioLevel: number): void {
},
/**
* 上行丢包率及延迟信息的回调
*
* @param callSession 通话实例
* @param packetLostRate 丢包率,0-100
* @param delay 发送端的网络延迟,单位毫秒
*
* @discussion 每秒回调一次
* @remarks 代理
*/
didSendPacketLost(callSession: RCCallSession, packetLostRate: number, delay: number): void {
},
/**
* 下行丢包率及延迟信息的回调
*
* @param callSession 通话实例
* @param userId 用户 ID
* @param packetLostRate 丢包率,0-100
*
* @discussion 每秒回调一次
* @remarks 代理
*/
didReceivePacketLost(callSession: RCCallSession, usedId: string, packetLostRate: number): void {
}
/**
* 收到远端用户视频首帧的回调
*
* @param callSession 通话实例
* @param userId 用户 ID
*
* @remarks 代理
*/
didReceiveFirstRemoteVideo(callSession: RCCallSession, userId: string): void {
}
}