初始化
在使用 SDK 其它功能前,必须先进行初始化。本文中将详细说明 IM 客户端、RTC 客户端、 CallLib 客户端初始化的方法。
准备 App Key
您必须拥有正确的 App Key,才能进行初始化。
您可以控制台,查看您已创建的各个应用的 App Key。
如果您拥有多个 应用,请注意选择应用名称(下图中标号 1)。另外,融云的每个应用都提供用于隔离生产和开发环境的两套独立 App Key / Secret。在获取应用的 App Key 时,请注意区分环境(生产 / 开发,下图中标号 2)。
注意
- 如果您并非应用创建者,我们建议在获取 App Key 时确认页面上显示的数据中心是否符合预期。
- 如果您尚未向融云申请应用上线,仅可使用开发环境。
初始化之前
部分配置必须在初始化之前完成,否则 SDK 功能无法正常工作。
- 开通音视频服务:音视频服务需要手动开通。请根据应用的具体业务类型,开通对应的音视频服务。详细说明请参见开通音视频服务。
- 海外数据中心:因为音视频业务依赖即时通讯业务 IMLib 提供信令通道,如果您的应用使用海外数据中心,必须在初始化之前修改 IMLib SDK 默认连接的服务地址为海外数据中心地址。否则 SDK 默认连接中国国内数据中心服务地址。详细说明请参见配置海外数据中心服务地址。
初始化 IM、RTC、CallLib 客户端
CallLib 可与使用 IMLib 5.X、4.X、2.X 配合使用。IMLib 版本不同时,IM 客户端、RTC 客户端、CallLib 客户端初始化均不相同。请根据您安装的 IMLib 选择以下初始化方式。
CallLib 配合 IMLib 5.X
音视频通话依赖 IMLib 做作为信令通道,因此需要先调用 IMLib 的 init 方法,初始化 IM 客户端,随后调用 IMLib 的 installPlugin 方法初始化 RTC 客户端与 CallLib 客户端。
appkey
即您的融云应用的 App Key。
// IM 客户端初始化(IMLib 5.X)
RongIMLib.init({
appkey: '<your-app-key>',
});
// RTC 客户端初始化
// RTCLib 全局变量定义为 RCRTC,使用 CDN 文件方式集成时,示例如下:
// const rtcClient = RongIMLib.installPlugin(RCRTC.installer, { /* 配置项 */ })
const rtcClient: RCRTCClient = RongIMLib.installPlugin(rtcInstaller, { /* 配置项 */ })
// CallLib 客户端初始化
// CallLib 全局变量定义为 RCCall,使用 CDN 文件集成时,示例如下:
// const caller = RongIMLib.installPlugin(RCCall.installer)
const caller: RCCallClient = RongIMLib.installPlugin(callInstaller, {
// rtcClient 实例 (必填)
rtcClient,
/**
* 被动收到邀请 (收到一个远端发起的新会话), 会产生一个新的 session 对象 (必填)
*/
onSession(session: RCCallSession){
/**
* **收到新的 session 后需要立即注册事件监听**
*/
session.registerSessionListener({
/**
* 当远端用户已开始响铃,表示对方已收到呼叫请求
* @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);
}
},
});
},
/**
* 以下三条只要满足一条,就会触发onSessionClose
* 1、本端用户自己主动挂断
* 2、服务端把本端用户踢出 RTC 房间
* 3、房间里小于2个人
*
* @param {RCCallSession} session 被结束的 session 对象
* @param summaryInfo 结束一个 session 的后汇总信息
*/
onSessionClose(session: RCCallSession, summaryInfo?: IEndSummary){
},
/**
* 接收 IM 离线期间收到的呼叫记录(按需监听)
*/
onOfflineRecord(record: IOfflineRecord){
},
});
CallLib 配合 IMLib 2.X
音视频通话依赖 IMLib 做作为信令通道,因此需要先调用 IMLib 的 init 方法,初始化 IM 客户端,随后调用 IMClient
的 install 方法初始化 RTC 客户端与 CallLib 客户端。
appkey
即您的融云应用的 App Key。
// IM 客户端初始化(IMLib 2.X)
RongIMClient.init('<your-app-key>');
const imClient: IMClient = RongIMClient.getInstance();
// RTC 客户端初始化
// RTCLib 全局变量定义为 RCRTC,使用 CDN 文件方式集成时,示例如下:
// const rtcClient = imClient.install(RCRTC.installer)
const rtcClient: RCRTCClient = imClient.install(rtcInstaller)
// CallLib 客户端初始化
// CallLib 全局变量定义为 RCCall,使用 CDN 文件集成时,示例如下:
// const caller = imClient.install(RCCall.installer)
const caller: RCCallClient = imClient.install(callInstaller, {
// rtcClient 实例 (必填)
rtcClient,
/**
* 被动收到邀请 (收到一个远端发起的新会话), 会产生一个新的 session 对象 (必填)
*/
onSession(session: RCCallSession){
/**
* **收到新的 session 后需要立即注册事件监听**
*/
session.registerSessionListener({
/**
* 当远端用户已开始响铃,表示对方已收到呼叫请求
* @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);
}
},
});
},
/**
* 以下三条只要满足一条,就会触发onSessionClose
* 1、本端用户自己主动挂断
* 2、服务端把本端用户踢出 RTC 房间
* 3、房间里小于2个人
*
* @param {RCCallSession} session 被结束的 session 对象
* @param summaryInfo 结束一个 session 的后汇总信息
*/
onSessionClose(session: RCCallSession, summaryInfo?: IEndSummary){
},
/**
* 接收 IM 离线期间收到的呼叫记录(按需监听)
*/
onOfflineRecord(record: IOfflineRecord){
},
});