实现音视频通话
平台兼容性
平台 | 说明 |
---|---|
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:添加监听
-
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
代码示例
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()