一对一通话
本页介绍了一对一呼叫的主要功能,包括如何从您的应用程序拨打、接听、处理和结束呼叫。
关键类介绍
- RCCallPlusClient:
RCCallPlusClient
单例对象是 CallPlus for HarmonyOS SDK 的核心类,用于管理客户端呼叫行为,例如发起、接听、挂断通话,操作音视频设备,管理通话记录等。 - RCCallPlusSession:
RCCallPlusSession
对象代表一则通话的所有信息,提供getCallId
、getCallType
、getMediaType
、getUserList
等获取通话属性的方法。 - IRCCallPlusCallRecord:
IRCCallPlusCallRecord
代表一则通话记录,其中包含了与RCCallPlusSession
类似的通话信息,还提供了通话开始与结束的时间戳、通话时长、通话结束原因等信息。 - ICallPlusEventListener:监听器
ICallPlusEventListener
提供了来电事件(onReceivedCall)、通话建立成功(onCallConnected)、收到通话记录([onReceivedCallPlusSummaryMessage])等事件相关回调。 - IStatusReportListener:监听器
IStatusReportListener
提供通话中的通话质量 数据后调。
设置监听器
CallPlus for HarmonyOS SDK 提供了两个监听器:
- ICallPlusEventListener 监听器用于接收来自远端用户或服务端的事件。
- IStatusReportListener 监听器用于通话中音视频上下行丢包数据。
请在应用程序初始化或呼叫模块初始化时设置监听器:
-
调用
RCCallPlusClient.getInstance().setCallPlusEventListener
方法设置ICallPlusEventListener
监听器。TypeScriptRCCallPlusClient.getInstance().setCallPlusEventListener({
/**
* 呼入通知
* 收到呼入时,可选择接听或挂断通话
* @param session 通话实例
* @param extra 透传呼叫方发起呼叫时携带的附加信息
*/
onReceivedCall: (session: RCCallPlusSession, extra?: string | undefined): void => {
const callId = session.getCallId();
const syncData = session.getSyncData();
const isSecret = session.isSecret();
console.log('呼入通知', callId, extra, syncData, isSecret);
},
/**
* 通话已建立,sdk 内部会发布音视频资源
*/
onCallConnected: (session: RCCallPlusSession): void => {
const callId = session.getCallId();
console.log('本端加入通话', callId);
},
/**
* 通话结束(群组通话时,客户端挂断不代表通话结束)
* @param session 通话实例
* @param reason 通话结束原因
*/
onCallEnded: (session: RCCallPlusSession, reason: RCCallPlusReason): void => {
console.log('通话结束', session.getCallId(), reason);
},
/**
* 收到通话结束的消息记录,可用于在 IM 聊天界面插入通话结束消息
* 仅单聊可收到
* 触发时机:
* 1.单聊在线通话结束后
* 2.离线时收到单聊呼叫,通话结束后,重新连接 IM 在线时
* @param message 通话记录的消息体
*/
onReceivedCallPlusSummaryMessage(message: Message) {
console.log('收到 Call Plus summary message', JSON.stringify(message));
},
/**
* 收到远端人员被邀请加入通话通知
* @param inviteeUserList 被邀请人员列表
* @param inviterUserId 邀请人员 ID
* @param callId 通话 ID
*/
onRemoteUserInvited: (inviteeUserList: string[], inviterUserId: string, callId: string): void => {
console.log('收到远端人员被邀请加入通话通知', inviteeUserList, inviterUserId, callId);
},
/**
* 远端用户的音视频首帧渲染
* @param userId 远端用户 ID
* @param mediaType 媒体类型
*/
onFirstFrame: (userId: string, mediaType: RCCallPlusMediaType): void => {
console.log(`${userId}的 ${(mediaType === RCCallPlusMediaType.AUDIO) ? '音频' : '视频'}可渲染`);
}
})
连接融云服务器
要使用 CallPlus SDK 的通话能力,必须先通过 IMEngine
的 connect
方法连接融云服务器,传入用户身份令牌(Token),向融云服务器验证用户身份。连接成功后,使用 RCCallPlusClient.getInstance().init()
方法初始化和配置 CallPlus SDK。
注意
必须在连接成功之后调用
RCCallPlusClient.getInstance().init
方法初始化 CallPlus SDK。
TypeScript
let token = "用户Token";
IMEngine.getInstance().connect(token, 20).then(result => {
if (EngineError.Success === result.code) {
// 连接成功
let userId = result.userId;
} else {
// 连接失败
}
});