跳到主要内容

实现音视频通话

平台兼容性

平台说明
Android系统版本 4.4 及以上
iOS系统版本 9.0 及以上

步骤 1:服务开通

您在融云创建的应用默认不会启用音视频服务。在使用融云提供的任何音视频服务前,您需要前往控制台,为应用开通音视频服务。

具体步骤请参阅 开通音视频服务

注意

服务开通、关闭等设置完成后 30 分钟后生效。

步骤 2:SDK 导入

CallLib 相关业务依赖 IMLib 作为信令通道。因此,开发音视频通话必须安装融云即时通讯能力库 IMLib。

安装 IMLib 和 CallLib

代码示例

npm install @rongcloud/react-native-imlib --save
npm install @rongcloud/react-native-calllib --save

Android 配置

在 React Native 项目根目录下的 android/settings.gradle 文件里加入

include ':react-native-rongcloud-imlib'
include ':react-native-rongcloud-calllib'
project(':react-native-rongcloud-imlib').projectDir = new File(rootProject.projectDir, '../node_modules/@rongcloud/react-native-imlib/lib/android')
project(':react-native-rongcloud-calllib').projectDir = new File(rootProject.projectDir, '../node_modules/@rongcloud/react-native-calllib/lib/android')

在 React Native 项目根目录下的 android/app/build.gradle 文件里加入

dependencies {
implementation project(':react-native-rongcloud-imlib')
implementation project(':react-native-rongcloud-calllib')
}

iOS 配置

进入 React Native 项目根目录下的 ios目录

pod install

步骤 3:初始化

IM 初始化

代码示例

import * as IMLib from '@rongcloud/react-native-imlib'
IMLib.init('<your-app-key>')

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

代码示例

IMLib.connect('<your-token>', (userId) => {
console.log('IM连接成功 userId ->' + userId)
}, (code) => {
console.log('连接失败 code -> ' + code)
})

步骤 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()