AgoraRTC 拓展:App Inventor 2 实时语音与视频通话

« 返回首页

logo AgoraRTC 拓展:App Inventor 2 实时语音与视频通话

AgoraRTC 是一个面向 App Inventor 2 的实时音视频组件,适合一对一语音/视频通话,也可以作为多人通话的媒体层。底层使用 Agora RTC Android SDK 4.6.3,支持 Android 5.0(API 21)及以上设备。

本拓展负责“媒体通话”,不负责“呼叫邀请”。也就是说,双方需要通过你自己的业务服务器、数据库、推送或聊天系统约定频道名,并取得对应 Token;双方随后调用 JoinChannel 才会进入同一个实时音视频频道。

  • .aix 拓展下载:

cn.fun123.AgoraRTC.aix

使用前准备

  1. 在 Agora Console 创建项目并取得 App ID。
  2. 开发测试可以使用控制台生成的临时 Token;生产环境必须由服务端使用 App Certificate 签发 Token,不能把 App Certificate 放进 App Inventor 应用。
  3. 设计器中放入两个「垂直布局」作为本地视频区和远端视频区,并把它们分别设置给 LocalVideoView 与 RemoteVideoView。
  4. 首次运行需要允许麦克风;视频通话还需要允许摄像头。

最小视频通话示例

两台手机使用相同的 channelName 和有效 Token;uid 可以都传 0,由 Agora 自动分配。

when Screen1.Initialize() {
  AgoraRTC1.Initialize()
}

when 按钮_加入.Click() {
  AgoraRTC1.JoinChannel("room-1001", 文本输入框1.Text, 0)
}

when AgoraRTC1.JoinedChannel(channel, uid, elapsed) {
  标签_状态.Text = join("已加入:", channel, " / UID=", uid)
}

when AgoraRTC1.RemoteUserJoined(uid) {
  标签_状态.Text = join("对方已加入,UID=", uid)
}

when AgoraRTC1.ErrorOccurred(code, message) {
  标签_状态.Text = join("错误 ", code, ":", message)
}

when 按钮_离开.Click() {
  AgoraRTC1.LeaveChannel()
}

如果只做语音通话,把 VideoEnabled 设为 false,不需要设置两个视频布局,也不会申请摄像头权限。

呼叫邀请的推荐结构

用户 A ──业务服务器/数据库/推送──▶ 用户 B
  │                                  │
  └────── channelName + Token ───────┘
                 │
          AgoraRTC.JoinChannel

业务服务器至少应完成:创建通话记录、生成不重复的频道名、为参与者生成短期 Token、处理拒接/超时/挂断。App 端只保存 App ID,不保存 App Certificate。

属性

AppId
Agora 项目的 App ID。
VideoEnabled
是否发布本地摄像头视频。默认 True;设置为 False 即为纯语音通话。
LocalVideoView
本地视频容器。应选择「垂直布局」「水平布局」等可容纳子视图的可见布局组件。
RemoteVideoView
远端视频容器。第一个远端用户加入后会自动显示;多人场景可调用 ShowRemoteVideo(uid) 切换显示对象。

方法

Initialize()
初始化 Agora 引擎。可以不调用,JoinChannel 会自动初始化。
JoinChannel(channelName, token, uid)
加入实时音视频频道。两台设备必须使用相同频道名;uid=0 表示由 Agora 自动分配 UID。生产环境使用服务端 Token。
LeaveChannel()
离开当前频道,停止预览并移除本地/远端视频渲染视图。
MuteLocalAudio(muted)
静音或取消静音本地麦克风。
MuteLocalVideo(muted)
关闭或打开本地视频发布。
SwitchCamera()
在前置和后置摄像头之间切换。
Speakerphone(enabled)
打开或关闭扬声器通道。
ShowRemoteVideo(uid)
在远端视频容器中显示指定 UID 的远端用户视频,适合多人频道切换画面。
RenewToken(token)
提交服务端返回的新 Token。收到 TokenWillExpire 后应尽快调用。
ClearVideoViews()
移除视频渲染视图,但不主动离开频道。

事件

EngineInitialized()
Agora 引擎初始化成功。
JoinedChannel(channel, uid, elapsed)
成功加入频道;uid 是实际的本地 UID。
CallStateChanged(state)
通话状态变化:initializing、joining、joined、left 或 error。
RemoteUserJoined(uid)
远端用户加入频道。
RemoteUserLeft(uid, reason)
远端用户离开频道;reason 为 Agora 原因码。
RemoteAudioMuted(uid, muted)
远端用户静音状态变化。
RemoteVideoMuted(uid, muted)
远端用户视频状态变化。
ConnectionStateChanged(state, reason)
网络连接状态变化;参数是 Agora 数字状态码。
TokenWillExpire(token)
当前 Token 即将过期。重新从服务端取得 Token 后调用 RenewToken。
ErrorOccurred(code, message)
组件或 Agora SDK 报错。

限制与排错

  • 这是通信模式通话组件,不是直播推流组件;所有加入者默认可以发布和订阅音视频。
  • 使用带原生库的扩展时,AI Companion 必须是支持该扩展的较新版本;如果 Companion 无法加载 Agora,优先直接构建 APK 验证,或更新 Companion。
  • 视频区必须是能容纳子 View 的布局组件。若把标签、按钮等非容器组件设置为视频区,会触发 ErrorOccurred。
  • 两台设备必须使用同一个 App ID、同一个频道名,并且 Token 的频道名和 UID 要匹配;Token 过期会导致无法加入或被断开。
  • 本版本不提供后台通话前台服务、系统来电界面、通讯录、呼叫邀请和通话记录;这些属于业务层,应由 App 自己实现。

Agora RTC Android 快速入门

文档反馈