初始化
在使用 SDK 其他功能前,必须先完成初始化。本文将详细介绍 IM 客户端、RTC 客户端及 CallLib 客户端的初始化方法。
准备 App Key
您必须拥有正确的 App Key,才能进行初始化。
您可前往融云控制台,查看已创建应用的 App Key。
如您拥有多个应用,请注意选择对应的应用名称(下图标注 1)。此外,融云每个应用均提供用于隔离生产和开发环境的两套独立 App Key / Secret。获取 App Key 时,请务必区分环境(生产 / 开发,下图标注 2)。
提示
- 若您非应用创建者,建议在获取 App Key 时确认页面显示的数据中心是否符合预期。
- 未申请应用上线前,仅可使用开发环境。
初始化前的准备
部分配置需在初始化前完成,否则 SDK 功能将无法正常使用。
- 开通音视频服务:音视频服务需手动开通。请根据实际业务类型,开通相应音视频服务。详见开通音视频服务。
- 海外数据中心:音视频业务依赖 IMLib 提供信令通道,若您的应用使用海外数据中心,必须在初始化前将 IMLib SDK 默认服务地址修改为海外数据中心地址,否则将默认连接中国大陆数据中心。详见配置海外数据中心服务地址。
初始化 IM、RTC、CallLib 客户端
CallLib 可与 IMLib 5.X、2.X 配合使用。不同 IMLib 版本下,IM 客户端、RTC 客户端及 CallLib 客户端的初始化方式有所不同。请根据实际安装的 IMLib 版本选择对应的初始化方法。
CallLib 配合 IMLib 5.X
音视频通话依赖 IMLib 作为信令通道,因此需先调用 IMLib 的 init 方法初始化 IM 客户端,再调用 IMLib 的 installPlugin 方法分别初始化 RTCLib 客户端和 CallLib 客户端。
appkey
即您的融云应用 App Key。
步骤 1:IMLib 初始化
详情请参阅:RongIMLib.init 接口
JavaScript
RongIMLib.init({
appkey: '<your-app-key>',
});
步骤 2:RTCLib 初始化
JavaScript
RongIMLib.installPlugin(rtcInstaller, options)
参数说明
参数 | 类型 | 必填 | 说明 |
---|---|---|---|
rtcInstaller | installer | 是 | RTC 插件生成器,从 RTCLib SDK 中获取 |
options | IRCRTCInitOptions | 是 | 配置项 |
示例代码
typescript
// 引入 RTCLib SDK 示例
import { installer as rtcInstaller, RCRTCClient, RCTrack } from "@rongcloud/plugin-rtc";
const rtcClient: RCRTCClient = RongIMLib.installPlugin(rtcInstaller, {
logLevel: 2, // 日志等级
timeout: 5000, // 与 MediaServer 的 http 请求超时时间
})
步骤 3:CallLib 初始化
接口
JavaScript
RongIMLib.installPlugin(callInstaller, options)
参数说明
参数 | 类型 | 必填 | 说明 |
---|---|---|---|
callInstaller | installer | 是 | CallLib 插件生成器,从 CallLib SDK 中获取 |
options | IRCCallInitOptions | 否 | 配置项 |
示例代码
typescript
// 引入 CallLib SDK 示例
import { installer as callInstaller, RCCallClient, RCCallSession, ISenderInfo, RCCallEndReason, IEndSummary, IEndSummary, IOfflineRecord } from "@rongcloud/plugin-call";
const callClient: RCCallClient = RongIMLib.installPlugin(callInstaller, {
// rtcClient 实例,RTCLib 初始化时生成的(必填)
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。
步骤 1:IMLib 初始化
详情请参阅:RongIMClient.init 接口
JavaScript
RongIMClient.init('<your-app-key>');
步骤 2:RTCLib 初始化
JavaScript
RongIMClient.getInstance().install(rtcInstaller, options)
参数说明
参数 | 类型 | 必填 | 说明 |
---|---|---|---|
rtcInstaller | installer | 是 | RTC 插件生成器,从 RTCLib SDK 中获取 |
options | IRCRTCInitOptions | 是 | 配置项 |
示例代码
typescript
// 引入 RTCLib SDK 示例
import { installer as rtcInstaller, RCRTCClient, RCTrack } from "@rongcloud/plugin-rtc";
const rtcClient: RCRTCClient = RongIMClient.getInstance().install(rtcInstaller, {
logLevel: 2, // 日志等级
timeout: 5000, // 与 MediaServer 的 http 请求超时时间
})
步骤 3:CallLib 初始化
接口
JavaScript
RongIMClient.getInstance().install(callInstaller, options)
参数说明
参数 | 类型 | 必填 | 说明 |
---|---|---|---|
callInstaller | installer | 是 | CallLib 插件生成器,从 CallLib SDK 中获取 |
options | IRCCallInitOptions | 否 | 配置项 |
示例代码
typescript
RongIMClient.getInstance().install(callInstaller, {
// rtcClient 实例 (必填)
rtcClient,
/**
* 被动收到邀请(收到远端发起的新会话),会产生新的 session 对象(必填)
*/
onSession(session: RCCallSession){},
// .... 具体示例可参考上面 5.x 节
})