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