跳到主要内容

实现音视频通话

平台兼容性

平台说明
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:添加监听

  1. CallLib.onCallReceived 监听通话呼入,回调方法参数里会有 session 对象。

    代码示例

    CallLib.onCallReceived((session) => {
    // 在此可设置来电时的视图
    })
  2. CallLib.onCallConnected 监听通话已接通。

    代码示例

    CallLib.onCallConnected(() => {
    })
  3. CallLib.onRemoteUserJoined 监听远端用户加入了通话。如果在此处设置通话中的视图,需要在已接通的情况下。

    代码示例

    CallLib.onRemoteUserJoined((user) => {
    })

  4. CallLib.onRemoteUserLeft 监听远端用户挂断。如果在此处设置通话中的视图,需要在已接通的情况下。

    代码示例

    CallLib.onRemoteUserLeft((user) => {
    })

  5. 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()