跳到主要内容

实现音视频通话

平台兼容性

平台说明
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);

参数说明

参数类型必填说明
appKeyString您的应用 AppKey
optionsRCIMIWEngineOptions引擎配置选项

示例代码

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);

回调参数

参数类型说明
sessionObject通话会话对象,包含通话相关信息

示例代码

JavaScript
CallLib.onCallReceived((session) => {
// 在此可设置来电时的视图
console.log('收到来电:', session);
});

监听通话已接通

方法

JavaScript
CallLib.onCallConnected(callback);

示例代码

JavaScript
CallLib.onCallConnected(() => {
console.log('通话已接通');
});

监听远端用户加入

方法

JavaScript
CallLib.onRemoteUserJoined(callback);

回调参数

参数类型说明
userObject远端用户信息

示例代码

JavaScript
CallLib.onRemoteUserJoined((user) => {
console.log('远端用户加入:', user);
});

如果在此处设置通话中的视图,需要在已接通的情况下。

监听远端用户离开

方法

JavaScript
CallLib.onRemoteUserLeft(callback);

回调参数

参数类型说明
userObject远端用户信息

示例代码

JavaScript
CallLib.onRemoteUserLeft((user) => {
console.log('远端用户离开:', user);
});

如果在此处设置通话中的视图,需要在已接通的情况下。

监听通话结束

方法

JavaScript
CallLib.onCallDisconnected(callback);

回调参数

参数类型说明
reasonNumber挂断原因,具体请参见挂断通话原因

示例代码

JavaScript
CallLib.onCallDisconnected((reason) => {
console.log('通话结束,原因:', reason);
});

步骤 5:连接 IM

方法

JavaScript
engine.connect(token, timeout, callback);

参数说明

参数类型必填说明
tokenString用户身份令牌
timeoutNumber连接超时时间,默认 0
callbackObject连接回调对象

回调参数

参数类型说明
codeNumber错误码,0 表示成功
userIdString用户 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);

参数说明

参数类型必填说明
userIdString被叫端 userId
mediaTypeNumber发起的通话媒体类型 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);

参数说明

参数类型必填说明
groupIdString群组Id
userIdsArray被叫端的用户ID列表, 数组中仅填写被叫端UserId, 请不要填写主叫端userId, 否则无法发起呼叫
observerUserIdsArraynull
mediaTypeNumber发起的通话媒体类型 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('挂断通话');