uni-app技术分享|开源demo视频呼叫arcall uni-app端技术实现
Posted anyRTC
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了uni-app技术分享|开源demo视频呼叫arcall uni-app端技术实现相关的知识,希望对你有一定的参考价值。
介绍
基本
uniapp_arcall 是通过 uniapp 实现的语音通话、视频通话以及相关配套的呼叫邀请。
解决向指定用户发起呼叫通知,对方接受后进行通话的场景需求。
呼叫邀请基本流程
通话基本流程
arcall 具体实现
呼叫邀请相关逻辑
引入呼叫邀请所需插件
// rtm 实时消息引入
const rtmModule = uni.requireNativePlugin('AR-RtmModule');
呼叫邀请初始化
uniapp_arcall的是项目启动就登陆 RTM,因此写在 onLaunch
中,调试时会发生以下错误
Error: [JS Framework] Failed to receiveTasks, instance (1) is not available.
原因是多次将 RTM 实例初始化,会影响到 RTM 相关的使用请将程序杀死后在进行调试
// 初始化回调
await rtmModule.setCallBack(res => {
switch (res.rtmEvent) {
// SDK 与 RTM 系统的连接状态发生改变回调。
case 'onConnectionStateChanged':
break;
// 收到点对点消息回调
case 'onPeerMessageReceived':
break;
// 被订阅用户在线状态改变
case 'onPeersOnlineStatusChanged':
break;
// 返回给主叫:被叫已接受呼叫邀请
case 'onLocalInvitationAccepted':
break;
// 返回给主叫:呼叫邀请已被取消
case 'onLocalInvitationCanceled':
break;
// 返回给主叫:呼叫邀请进程失败
case 'onLocalInvitationFailure':
break;
// 返回给主叫:被叫已收到呼叫邀请
case 'onLocalInvitationReceivedByPeer':
break;
// 返回给主叫:被叫已拒绝呼叫邀请
case 'onLocalInvitationRefused':
break;
// 返回给被叫:接受呼叫邀请成功
case 'onRemoteInvitationAccepted':
break;
// 返回给被叫:主叫已取消呼叫邀请
case 'onRemoteInvitationCanceled':
break;
// 返回给被叫:来自主叫的呼叫邀请进程失败
case 'onRemoteInvitationFailure':
break;
// 返回给被叫:收到一个呼叫邀请
case 'onRemoteInvitationReceived':
break;
// 返回给被叫:拒绝呼叫邀请成功
case 'onRemoteInvitationRefused':
break;
default:
break;
}
})
// 初始化实例
await rtmModule.createInstance({
"appId": "你的 appid"
}, res => {
console.log(res);
})
// 登录 RTM 系统
await rtmModule.login({
"token": "",
"userId": "本地用户标识"
}, (res) => {
console.log("登录 RTM 系统", res);
})
// // 使用 RTM 呼叫邀请(设置邀请呼叫实例的监听器)
await rtmModule.setCallEventListener();
主叫
-
查询呼叫用户是否在线
rtmModule.queryPeersOnlineStatus({ "peerIds": ["呼叫用户"] }, (res) => { console.log(res); })
-
呼叫用户在线时发起呼叫并订阅
- 发起呼叫
把本地创建的频道房间发送过去
rtmModule.sendLocalInvitation({ "calleeId": calleeId, // 被呼叫者的 user ID "content": JSON.stringify(info) // 邀请内容 }, (res) => { resolve(res.code); })
- 订阅(获取对方在线状态)
当结束通话或结束邀请时记得取消订阅
rtmModule.subscribePeersOnlineStatus({ "peerIds": ["对方 uid"] }, (res) => { //smething console.log("订阅指定单个或多个用户的在线状态", res); })
- 发起呼叫
-
主叫取消呼叫
rtmModule.cancelLocalInvitation({
"calleeId": calleeId, // 被呼叫者的 user ID
"content": JSON.stringify(info) // 邀请内容
}, (res) => {
console.log("取消给对方的呼叫邀请", res);
});
被叫
通过回调 onRemoteInvitationReceived
收到主叫
- 拒绝呼叫
rtmModule.refuseRemoteInvitation({
"calleeId": userId,
"response": JSON.stringify(info) /邀请内容
}, (res) => {
});
- 接受呼叫
rtmModule.acceptRemoteInvitation({
"calleeId": calleeId, // 供被叫获取主叫的用户 ID
"response": info ? JSON.stringify(info) : "" // 邀请响应
}, (res) => {
});
// 订阅对方在线状态
...
相关提示
相关的提示、逻辑都可通过回调来进行操作
通话相关逻辑
视频组件必须实在 nvue 页面
<AR-CanvasView ref="location" style="flex: 1;" />
不管是主叫还是被叫,收到接听的回调后就可以进入 RTC 的相关逻辑
- 引入插件
const rtcModule = uni.requireNativePlugin('AR-RtcModule');
以上是关于uni-app技术分享|开源demo视频呼叫arcall uni-app端技术实现的主要内容,如果未能解决你的问题,请参考以下文章