主叫方
设置呼叫、挂断推送信息
主叫端在呼叫前调用
/**
* 设置呼叫、挂断推送数据
* @param callPushConfig 呼叫推送配置
* @param callPushConfig.pushTitle 呼叫推送标题
* @param callPushConfig.pushContent 呼叫推送内容
* @param hungupPushConfig 挂断推送配置
* @param hungupPushConfig.pushTitle 挂断推送标题
* @param hungupPushConfig.pushContent 挂断推送内容
*/
caller.setPushConfig(callPushConfig, hungupPushConfig);
发起呼叫
发起单人通话
完成初始化后,调用 caller.call
方法发起单人音视频通话。
API 参考:call
-
参数说明:
参数 类型 必填 说明 targetId string 是 对方的userId mediaType enum RCCallMediaType { number }
是 发起的通话媒体类型。1 为音频呼叫;2 为 音视频呼叫 listener ISessionListener
是 在 session
对象上注册的事件监听constraints { video?: ICameraVideoProfile, audio?: IMicphoneAudioProfile }
否 音频或音视频资源的约束 video 为可选参数详见设置视频参数, audio为可选参数详见设置音频参数 extra string 否 消息的扩展信息 pushTitle string 否 通知的标题 pushContent string 否 通知的内容 -
返回值:
返回值 返回类型 说明 code RCCallErrorCode
10000表示成功,其余的表示失败,详见状态码 session RCCallSession
session
对象 -
示例代码:
const { code, session } = await caller.call({
targetId: this.targetId,
mediaType,
listener: {
/**
* 当远端用户已开始响铃,表示对方已收到呼叫请求 (必填)
* @param sender 已响铃的用户
* @param session 当前的 session 对象
*/
onRinging: (sender: ISenderInfo, session: RCCallSession) => {
const { userId } = sender;
},
/**
* 当远端用户同意接听 (必填)
* @param sender 远端用户
* @param session 当前的 session 对象
*/
onAccept: (sender: ISenderInfo, session: RCCallSession) => {
const { userId } = sender;
},
/**
* 当有远端用户挂断 (必填)
* @param sender 远端用户
* @param reason 挂断的原因
* @param session 当前的 session 对象
*/
onHungup: (sender: ISenderInfo, reason: RCCallEndReason, session: RCCallSession) => {
const { userId } = sender;
},
/**
* 本端资源或远端资源已获取, (必填)
* @param track 本端资源或远端资源, track不可设置成 Vue 组件的响应式数据
* @param session 当前的 session 对象
*/
onTrackReady: (track: RCTrack, session?: RCCallSession) => {
// track.isLocalTrack() 是否为本地资源
// track.isAudioTrack() 是否为音频
// track.isVideoTrack() 是否为视频
// track.getUserId() 产生该 track 的用户id
// 播放音频。如果为远端音频,建议直接播放。如为本端音频,建议不播放,以减少回音。
if (track.isAudioTrack() && !track.isLocalTrack()) {
track.play();
}
// 视频在对应的容器里播放
if (track.isVideoTrack()) {
const video = document.getElementById(
"video" + user.userId
) as HTMLVideoElement;
track.play(video);
}
},
/**
* 群组通话中有其他人被邀请加入 (必填)
* @param sender 发送者
* @param invitedUsers 被邀请的用户列表
* @param session 当前的 session 对象
*/
onMemberModify: (sender: ISenderInfo, invitedUsers: IInvitedUsers[], session: RCCallSession) => {
},
/**
* 通话类型改变时触发,例如: 从视频变成音频通话 (必填)
* @param sender 发送者
* @param mediaType 1为音频通话 2为视频通话
* @param session 当前的 session 对象
*/
onMediaModify: (sender: ISenderInfo, mediaType: RCCallMediaType, session: RCCallSession) => {
},
/**
* 对方静音后触发 (必填)
* @param muteUser 已静音的用户
* @param session 当前的 session 对象
*/
onAudioMuteChange: (muteUser: IMuteUser, session: RCCallSession) => {
},
/**
* 对方禁用视频后触发 (必填)
* @param muteUser 已禁用视频的用户
* @param session 当前的 session 对象
*/
onVideoMuteChange: (muteUser: IMuteUser, session: RCCallSession) => {
},
},
});
if (code === RCCallErrorCode.SUCCESS) {
// do something
}
发起多人通话
完成初始化后,调用 caller.callInGroup
方法发起多人音视频通话。多人通话场景所有通话者必须在一个群组内。
API 参考:callInGroup
-
参数说明:
参数 类型 必填 说明 targetId string 是 群组 Id userIds Array<string>
是 被呼叫的群内成员 Id mediaType enum RCCallMediaType { number }
是 发起的通话媒体类型 1->音频呼叫 or 2->音视频呼叫 listener ISessionListener
是 在 session 对象上注册的事件监听 constraints { video?: ICameraVideoProfile, audio?: IMicphoneAudioProfile }
否 音频或音视频资源的约束 video 为可选参数详见设置视频参数, audio为可选参数详见设置音频参数 extra string 否 消息的扩展信息 pushTitle string 否 通知的标题 pushContent string 否 通知的内容 -
返回值:
返回值 返回类型 说明 code RCCallErrorCode
10000表示成功,其余的表示失败,详见状态码 session RCCallSession
session对象 -
示例代码:
const { code, session } = await caller.callInGroup({
targetId: this.targetId,
userIds,
mediaType,
listener: {
/**
* 当远端用户已开始响铃,表示对方已收到呼叫请求 (必填)
* @param sender 已响铃的用户
* @param session 当前的 session 对象
*/
onRinging: (sender: ISenderInfo, session: RCCallSession) => {
const { userId } = sender;
},
/**
* 当远端用户同意接听 (必填)
* @param sender 远端用户
* @param session 当前的 session 对象
*/
onAccept: (sender: ISenderInfo, session: RCCallSession) => {
const { userId } = sender;
},
/**
* 当有远端用户挂断 (必填)
* @param sender 远端用户
* @param reason 挂断的原因
* @param session 当前的 session 对象
*/
onHungup: (sender: ISenderInfo, reason: RCCallEndReason, session: RCCallSession) => {
const { userId } = sender;
},
/**
* 本端资源或远端资源已获取 (必填)
* @param track 本端资源或远端资源, track不可设置成 Vue 组件的响应式数据
* @param session 当前的 session 对象
*/
onTrackReady: (track: RCTrack, session?: RCCallSession) => {
// track.isLocalTrack() 是否为本地资源
// track.isAudioTrack() 是否为音频
// track.isVideoTrack() 是否为视频
// track.getUserId() 产生该 track 的用户id
// 播放音频。如果为远端音频,建议直接播放。如为本端音频,建议不播放,以减少回音。
if (track.isAudioTrack() && !track.isLocalTrack()) {
track.play();
}
// 视频在对应的容器里播放
if (track.isVideoTrack()) {
const video = document.getElementById(
"video" + user.userId
) as HTMLVideoElement;
track.play(video);
}
},
/**
* 群组通话中有其他人被邀请加入(必填)
* @param sender 发送者
* @param invitedUsers 被邀请的用户列表
* @param session 当前的 session 对象
*/
onMemberModify: (sender: ISenderInfo, invitedUsers: IInvitedUsers[], session: RCCallSession) => {
},
/**
* 通话类型改变时触发,例如: 从视频变成音频通话 (必填)
* @param sender 发送者
* @param mediaType 1为音频通话 2为视频通话
* @param session 当前的 session 对 象
*/
onMediaModify: (sender: ISenderInfo, mediaType: RCCallMediaType, session: RCCallSession) => {
},
/**
* 对方静音后触发 (必填)
* @param muteUser 已静音的用户
* @param session 当前的 session 对象
*/
onAudioMuteChange: (muteUser: IMuteUser, session: RCCallSession) => {
},
/**
* 对方禁用视频后触发 (必填)
* @param muteUser 已禁用视频的用户
* @param session 当前的 session 对象
*/
onVideoMuteChange: (muteUser: IMuteUser, session: RCCallSession) => {
},
},
});
if (code === RCCallErrorCode.SUCCESS) {
// do something
}
挂断通话
调用 session.hungup
方法挂断通话,SDK 内部会自动告知对方挂断、拒绝原因。
API 参考:hungup
-
返回值:
返回值 返回类型 说明 code number 10000表示成功,其余的表示失败,详见状态码 -
示例代码:
const { code } = await session.hungup();
// do something
邀请通话
调用 session.invite(userIds)
方法邀请用户加入当前通话(仅限群组)。
API 参考:invite
-
参数说明:
参数 类型 必填 说明 userIds Array<string>
是 邀请的用户 ID 列表 options object
否 扩展字段 options 说明:
参数 类型 必填 说明 extra string 否 消息的扩展信息 pushTitle string 否 通知的标题 pushContent string 否 通知的内容 -
返回值 :
返回值 返回类型 说明 code number 10000表示成功,其余的表示失败,详见状态码 -
示例代码:
const { code } = await session.invite(userIds);
if (code === RCCallErrorCode.SUCCESS) {
// do something
}