实现音视频通话
平台兼容性
| 平台 | 说明 |
|---|---|
| Android | 系统版本 5.0 及以上 |
| iOS | 系统版本 9.0 及以上 |
步骤 1:服务开通
您在融云创建的应用默认不会 启用音视频服务。在使用融云提供的任何音视频服务前,您需要前往控制台,为应用开通音视频服务。
注意
服务开通、关闭等设置完成后 15 分钟后生效。
步骤 2:SDK 导入
CallLib 相关业务依赖 IMLib 作为信令通道。因此,开发音视频通话必须安装融云即时通讯能力库 IMLib。
安装 IMLib 和 CallLib
方法
shell
npm install @rongcloud/react-native-im-wrapper --save
npm install @rongcloud/react-native-calllib --save
步骤 3:初始化
IM 初始化
方法
JavaScript
import { RCIMIWEngine } from '@rongcloud/react-native-im-wrapper';
let engine = RCIMIWEngine.create(appKey, options);
参数说明
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
| appKey | String | 是 | 您的应用 AppKey |
| options | RCIMIWEngineOptions | 否 | 引擎配置选项 |
示例代码
JavaScript
import { RCIMIWEngine } from '@rongcloud/react-native-im-wrapper';
let appKey = "您的 appKey";
let options = {};
let engine = RCIMIWEngine.create(appKey, options);
console.log('IM 引擎初始化成功');
CallLib 初始化
方法
JavaScript
import * as CallLib from '@rongcloud/react-native-calllib';
CallLib.init();
示例代码
JavaScript
import * as CallLib from '@rongcloud/react-native-calllib';
CallLib.init();
console.log('CallLib 初始 化成功');
步骤 4:添加监听
监听通话呼入
方法
JavaScript
CallLib.onCallReceived(callback);
回调参数
| 参数 | 类型 | 说明 |
|---|---|---|
| session | Object | 通话会话对象,包含通话相关信息 |
示例代码
JavaScript
CallLib.onCallReceived((session) => {
// 在此可设置来电时的视图
console.log('收到来电:', session);
});
监听通话已接通
方法
JavaScript
CallLib.onCallConnected(callback);
示例代码
JavaScript
CallLib.onCallConnected(() => {
console.log('通话已接通');
});
监听远端用户加入
方法
JavaScript
CallLib.onRemoteUserJoined(callback);
回调参数
| 参数 | 类型 | 说明 |
|---|---|---|
| user | Object | 远端用户信息 |
示例代码
JavaScript
CallLib.onRemoteUserJoined((user) => {
console.log('远端用户加入:', user);
});
如果在此处设置通话中的视图,需要在已接通的情况下。
监听远端用户离开
方法
JavaScript
CallLib.onRemoteUserLeft(callback);
回调参数
| 参数 | 类型 | 说明 |
|---|---|---|
| user | Object | 远端用户信息 |
示例代码
JavaScript
CallLib.onRemoteUserLeft((user) => {
console.log('远端用户离开:', user);
});
如果在此处设置通话中的视图,需要在已接通的情况下。
监听通话结束
方法
JavaScript
CallLib.onCallDisconnected(callback);
回调参数
| 参数 | 类型 | 说明 |
|---|---|---|
| reason | Number | 挂断原因,具体请参见挂断通话原因 |
示例代码
JavaScript
CallLib.onCallDisconnected((reason) => {
console.log('通话结束,原因:', reason);
});
步骤 5:连接 IM
方法
JavaScript
engine.connect(token, timeout, callback);
参数说明
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
| token | String | 是 | 用户身份令牌 |
| timeout | Number | 否 | 连接超时时间,默认 0 |
| callback | Object | 是 | 连接回调对象 |
回调参数
| 参数 | 类型 | 说明 |
|---|---|---|
| code | Number | 错误码,0 表示成功 |
| userId | String | 用户 ID |
示例代码
JavaScript
let token = '您的 token';
const callback = {
onConnected: (code, userId) => {
if (code == 0) {
console.log('IM连接成功 userId ->' + userId);
} else {
console.log('IM连接失败 code -> ' + code);
}
},
};
let code = await engine?.connect(token, 0, callback);
步骤 6:发起呼叫
主动呼叫分为发起单人通话和发起多人通话,可根据实际需求调用。多人通话的场景必须在一个群组内。
发起单人通话
方法
JavaScript
call.startSingleCall(userId, mediaType);
参数说明
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
| userId | String | 是 | 被叫端 userId |
| mediaType | Number | 是 | 发起的通话媒体类型 0表示音频通话 1表示视频通话 |
示例代码
JavaScript
/**
* 发起单人通话
* @param {string} userId 被叫端 userId
* @param {number} mediaType 发起的通话媒体类型 0表示音频通话 1表示视频通话
*/
call.startSingleCall(targetId, mediaType);
console.log('发起单人通话');
发起多人通话
方法
JavaScript
call.startGroupCall(groupId, userIds, observerUserIds, mediaType);
参数说明
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
| groupId | String | 是 | 群组Id |
| userIds | Array | 是 | 被叫端的用户ID列表, 数组中仅填写被叫端UserId, 请不要填写主叫端userId, 否则无法发起呼叫 |
| observerUserIds | Array | null | 否 |
| mediaType | Number | 是 | 发起的通话媒体类型 0表示音频通话 1表示视频通话 |
示例代码
JavaScript
/**
* 发起多人通话
* @param {string} groupId 群组Id
* @param {string[]} userIds 被叫端的用户ID列表, 数组中仅填写被叫端UserId, 请不要填写主叫端userId, 否则无法发起呼叫
* @param {null | Array<string>} observerUserIds 主叫端指定需要以观察者身份加入房间的用户ID列表, 无观察者时填null
* @param {number} mediaType 发起的通话媒体类型 0表示音频通话 1表示视频通话
*/
call.startGroupCall(groupId, userIds, observerUserIds, mediaType);
console.log('发起多人通话');
多人通话依赖群组,被呼叫的用户必须在同一个群组里。
步骤 7:接听
方法
JavaScript
call.accept();
示例代码
JavaScript
call.accept();
console.log('接听通话');
步骤 8:挂断
方法
JavaScript
call.hangup();
示例代 码
JavaScript
call.hangup();
console.log('挂断通话');