更新记录

1.0.1(2026-04-30) 下载此版本

1

Changelog

1.0.0(2026-04-30) 下载此版本

  • 初始市场包。
  • 添加了用于阿戈拉 RTC 音视频通话的 JS 适配器。
  • 添加了鸿蒙操作系统 UTS 驱动程序,并捆绑了 AgoraRtcSdk.har 文件。
  • android/ 目录下添加了 Android 原生源代码桥接。
  • ios/ 目录下添加了 iOS 原生源代码桥接。
  • 为保持与原生插件的兼容性,保留了 uni_modules 中的原始 Android/iOS 原生插件桥接名称。
  • uni_modules 的拆分发布流程以及原生二进制插件打包进行了文档说明。

平台兼容性

uni-app(5.0)

Vue2 Vue3 Chrome Safari app-vue app-nvue Android iOS 鸿蒙
× × × × ×
微信小程序 支付宝小程序 抖音小程序 百度小程序 快手小程序 京东小程序 鸿蒙元服务 QQ小程序 飞书小程序 小红书小程序 快应用-华为 快应用-联盟
× × × × × × × × × - × ×

Agora RTC JS Plus

agora-rtc-js-plus 是一个面向 uni-app 的声网 Agora RTC 音视频通话插件,支持 Android、iOS 和 HarmonyOS。插件提供 JS SDK 适配层、HarmonyOS UTS 驱动、Android/iOS 原生桥接支持,可用于语音通话、视频通话、频道加入/离开、音视频开关、摄像头切换、本地预览、远端用户事件监听等场景。

功能特性

  • 创建和销毁 RTC Engine
  • 加入和离开频道
  • 使用 userAccount 加入频道
  • 本地音频开启、关闭、静音、取消静音
  • 本地视频开启、关闭、静音、取消静音
  • 扬声器和听筒切换
  • 前后摄像头切换
  • 本地视频预览
  • 远端用户加入、离线事件监听
  • RtcSurfaceView 视频渲染组件
  • HarmonyOS 本地/远端视频视图绑定
  • Android/iOS 原生插件桥接源码和二进制打包模板

支持平台

平台 支持情况 说明
App Android 支持 需要集成 Android 原生插件包
App iOS 支持 需要集成 iOS 原生插件包
App HarmonyOS 支持 使用插件内置 UTS/Har 驱动
H5 不支持 RTC 原生能力仅面向 App
小程序 不支持 当前版本未提供小程序实现

安装方式

将插件放入 uni-app 项目的以下目录:

uni_modules/agora-rtc-js-plus

从插件市场导入时,HBuilderX 会自动放到 uni_modules/agora-rtc-js-plus

Android/iOS 运行时还需要在项目中配置对应的 App 原生插件包。HarmonyOS 运行时使用本插件内置的 utssdk/app-harmony/libs/AgoraRtcSdk.har

UTS 插件入口文件为:

utssdk/index.uts

HarmonyOS 平台实现位于:

utssdk/app-harmony/index.uts

导入路径

JS SDK

import RtcEngine, { getAgoraRuntimeInfo } from '@/uni_modules/agora-rtc-js-plus/js_sdk/agora-rtc-js-plus'
import RtcSurfaceView from '@/uni_modules/agora-rtc-js-plus/js_sdk/agora-rtc-js-plus/RtcSurfaceView.nvue'
import { ClientRole, ChannelProfile } from '@/uni_modules/agora-rtc-js-plus/js_sdk/agora-rtc-js-plus/common/Enums'
import { ChannelMediaOptions } from '@/uni_modules/agora-rtc-js-plus/js_sdk/agora-rtc-js-plus/common/Classes'

HarmonyOS UTS 辅助方法

import {
  requestHarmonyRtcPermissions,
  openHarmonyRtcPermissionSettings,
  getHarmonyRtcDriverInfo
} from '@/uni_modules/agora-rtc-js-plus'

基础语音通话示例

import RtcEngine from '@/uni_modules/agora-rtc-js-plus/js_sdk/agora-rtc-js-plus'
import { ChannelProfile, ClientRole } from '@/uni_modules/agora-rtc-js-plus/js_sdk/agora-rtc-js-plus/common/Enums'

const engine = await RtcEngine.create(APP_ID)

await engine.enableAudio()
await engine.enableLocalAudio(true)
await engine.setChannelProfile(ChannelProfile.LiveBroadcasting)
await engine.setClientRole(ClientRole.Broadcaster)
await engine.joinChannelWithUserAccount(TOKEN, CHANNEL_NAME, USER_ACCOUNT)

engine.addListener('JoinChannelSuccess', (channel, uid, elapsed) => {
  console.log('JoinChannelSuccess', channel, uid, elapsed)
})

engine.addListener('UserJoined', (uid, elapsed) => {
  console.log('UserJoined', uid, elapsed)
})

engine.addListener('UserOffline', (uid, reason) => {
  console.log('UserOffline', uid, reason)
})

参数说明:

  • APP_ID:声网控制台创建项目后获得的 App ID
  • TOKEN:频道 Token,测试模式可按声网项目配置留空,生产环境建议使用服务端生成 Token
  • CHANNEL_NAME:频道名
  • USER_ACCOUNT:用户账号,建议每个用户使用不同值

基础视频通话示例

<template>
  <view class="page">
    <RtcSurfaceView
      class="remote"
      :uid="remoteUid"
      :channelId="channelName"
      :zOrderOnTop="false"
      :zOrderMediaOverlay="false"
    />

    <RtcSurfaceView
      class="local"
      :uid="0"
      :channelId="channelName"
      :zOrderOnTop="true"
      :zOrderMediaOverlay="true"
    />
  </view>
</template>

<script setup lang="ts">
import RtcEngine from '@/uni_modules/agora-rtc-js-plus/js_sdk/agora-rtc-js-plus'
import RtcSurfaceView from '@/uni_modules/agora-rtc-js-plus/js_sdk/agora-rtc-js-plus/RtcSurfaceView.nvue'
import { ChannelProfile, ClientRole } from '@/uni_modules/agora-rtc-js-plus/js_sdk/agora-rtc-js-plus/common/Enums'

const appId = 'YOUR_AGORA_APP_ID'
const token = ''
const channelName = 'demo'
const userAccount = 'user_001'
const remoteUid = ref(0)

const engine = await RtcEngine.create(appId)
await engine.enableAudio()
await engine.enableVideo()
await engine.setChannelProfile(ChannelProfile.LiveBroadcasting)
await engine.setClientRole(ClientRole.Broadcaster)
await engine.startPreview()

engine.addListener('UserJoined', (uid) => {
  remoteUid.value = uid
})

engine.addListener('UserOffline', (uid) => {
  if (uid === remoteUid.value) {
    remoteUid.value = 0
  }
})

await engine.joinChannelWithUserAccount(token, channelName, userAccount)
</script>

<style scoped>
.page {
  flex: 1;
}

.remote {
  width: 750rpx;
  height: 900rpx;
}

.local {
  position: absolute;
  right: 24rpx;
  top: 24rpx;
  width: 220rpx;
  height: 300rpx;
}
</style>

常用控制方法

// 静音/取消静音本地麦克风
await engine.muteLocalAudioStream(true)
await engine.muteLocalAudioStream(false)

// 关闭/打开本地视频发送
await engine.muteLocalVideoStream(true)
await engine.muteLocalVideoStream(false)

// 切换前后摄像头
await engine.switchCamera()

// 切换扬声器
await engine.setEnableSpeakerphone(true)

// 离开频道
await engine.leaveChannel()

// 页面销毁时释放 Engine
await engine.destroy()

事件监听

当前版本已接入以下核心事件:

  • JoinChannelSuccess:本地用户成功加入频道
  • UserJoined:远端用户加入频道
  • UserOffline:远端用户离开或掉线
  • LeaveChannel:本地用户离开频道
  • Warning:SDK 警告
  • ConnectionStateChanged:连接状态变化
  • Error:SDK 错误

示例:

const subscriptions = [
  engine.addListener('JoinChannelSuccess', (channel, uid, elapsed) => {
    console.log('joined', channel, uid, elapsed)
  }),
  engine.addListener('Error', (err) => {
    console.log('rtc error', err)
  })
]

// 页面卸载时移除监听
subscriptions.forEach((item) => item.remove())

HarmonyOS 使用说明

HarmonyOS 使用插件内置的 UTS/Har 驱动。进入音视频页面前,请先申请麦克风和摄像头权限:

import { requestHarmonyRtcPermissions } from '@/uni_modules/agora-rtc-js-plus'

const granted = await requestHarmonyRtcPermissions([
  'ohos.permission.MICROPHONE',
  'ohos.permission.CAMERA'
])

if (!granted) {
  uni.showToast({
    title: '请授予麦克风和摄像头权限',
    icon: 'none'
  })
}

HarmonyOS 工程的 module.json5 仍需要声明权限,例如:

"requestPermissions": [
  {
    "name": "ohos.permission.MICROPHONE",
    "reason": "$string:agora_rtc_microphone_reason",
    "usedScene": {
      "abilities": ["EntryAbility"],
      "when": "inuse"
    }
  },
  {
    "name": "ohos.permission.CAMERA",
    "reason": "$string:agora_rtc_camera_reason",
    "usedScene": {
      "abilities": ["EntryAbility"],
      "when": "inuse"
    }
  }
]

Android/iOS 使用说明

Android 和 iOS 使用 uni-app App 原生插件桥接。插件桥接名称保持与旧版 uni-app Agora 插件一致:

  • Agora-RTC-EngineModule
  • Agora-RTC-ChannelModule
  • Agora-RTC-SurfaceView
  • Agora-RTC-TextureView
  • globalEvent

Android/iOS 原生插件包位于:

nativeplugin-package/agora-rtc-nativeplugin

该目录已经包含:

  • package.json
  • android/agora-rtc-nativeplugin-release.aar
  • ios/AgoraRtcUniPlugin.framework
  • iOS 依赖的多个 Agora .xcframework

在 DCloud 插件市场中,Agora-RTC 原生插件包需要作为 App 原生插件单独上传或配置。

Android/iOS 桥接范围

当前 Android/iOS 桥接覆盖本插件示例和常见音视频通话所需的核心能力:

  • create
  • destroy
  • getSdkVersion
  • getErrorDescription
  • setChannelProfile
  • setClientRole
  • joinChannel
  • joinChannelWithUserAccount
  • leaveChannel
  • enableAudio
  • disableAudio
  • enableLocalAudio
  • muteLocalAudioStream
  • enableVideo
  • disableVideo
  • enableLocalVideo
  • muteLocalVideoStream
  • setDefaultMuteAllRemoteVideoStreams
  • muteAllRemoteVideoStreams
  • startPreview
  • stopPreview
  • switchCamera
  • setDefaultAudioRoutetoSpeakerphone
  • setEnableSpeakerphone

RtcChannel 在当前版本中保留为兼容占位,暂未提供完整多频道实现。

原生依赖版本

当前原生桥接目标版本为 Agora Native SDK 3.7.3.4

  • Android:io.agora.rtc:agora-special-full:3.7.3.4
  • iOS:AgoraRtcEngine_Special_iOS 3.7.3.4

该版本用于保持与旧版 uni-app Agora 原生桥接风格兼容。

示例工程

本仓库提供了示例工程:

examples/agora-rtc-demo

打包发布后,也会生成可直接上传到插件市场的示例工程:

dist/agora-rtc-js-plus-1.0.0-demo-project.zip

示例工程包含:

  • App ID / Token / 频道名 / 用户账号输入
  • 加入频道、离开频道
  • 麦克风开关
  • 摄像头开关
  • 摄像头切换
  • 扬声器/听筒切换
  • 本地和远端视频渲染
  • SDK 事件日志

发布和打包

生成插件市场上传包:

powershell -ExecutionPolicy Bypass -File .\scripts\package-marketplace.ps1

生成文件位于:

dist/agora-rtc-js-plus-1.0.0-uni_modules.zip
dist/agora-rtc-js-plus-1.0.0-demo-project.zip
dist/Agora-RTC-3.7.3.4.zip
dist/hbuilderx-publish-project

注意:agora-rtc-js-plus-1.0.0-uni_modules.zip 的 zip 根目录会直接包含 package.jsonutssdkjs_sdk 等文件和目录,避免插件市场提示“插件根目录需要存在 utssdk 目录”。

上架前检查

  • 从干净 uni-app 项目导入插件后,导入路径可正常解析
  • HarmonyOS 构建可以识别内置 AgoraRtcSdk.har
  • Android 原生插件包包含 Agora-RTC-EngineModuleAgora-RTC-ChannelModuleAgora-RTC-SurfaceViewAgora-RTC-TextureView
  • iOS 原生插件包包含 Agora-RTC-EngineModuleAgora-RTC-ChannelModuleAgora-RTC-SurfaceViewAgora-RTC-TextureView
  • Android/iOS 项目已配置对应 App 原生插件
  • 两台真机加入同一频道后,可以完成语音通话
  • 两台真机加入同一频道后,可以看到本地和远端视频

常见问题

插件市场提示“插件根目录需要存在 utssdk 目录”

请确认上传的是 dist/agora-rtc-js-plus-1.0.0-uni_modules.zip,并且 zip 第一层直接包含:

package.json
utssdk/
js_sdk/

不要上传外面再套一层目录的 zip。

示例工程的 manifest.json 无法解析

请使用 dist/agora-rtc-js-plus-1.0.0-demo-project.zipdist/hbuilderx-publish-project。示例工程的 manifest.json 已按标准 JSON 格式生成。

Android/iOS 无法找到原生插件

请确认已经配置并上传/绑定 Agora-RTC App 原生插件包。Android/iOS 不是只依赖 JS 文件即可运行,仍需要原生插件桥接。

生产环境是否可以留空 Token

不建议。测试模式可以根据声网项目配置临时留空,生产环境建议由业务服务端签发 Token。

隐私、权限声明

1. 本插件需要申请的系统权限列表:

camera,microphone,network

2. 本插件采集的数据、发送的服务器地址、以及数据用途说明:

none

3. 本插件是否包含广告,如包含需详细说明广告表达方式、展示频率:

none

许可协议

MIT协议

暂无用户评论。