常见 FAQ
更多 Agora 平台知识相关链接:
Agora 平台:你想要了解的都在这里
Agora GitHub 链接1: 可下载demo
Agora GitHub 链接2: 可下载demo
Agora GitHub 社区
论坛内常见FAQ相关链接:
RTC 常见FAQ:论坛链接
RTM 常见FAQ:论坛链接
Web 常见FAQ:论坛链接
云端录制 常见FAQ:论坛链接
本地录制 常见FAQ:论坛链接
小程序 常见FAQ:论坛链接
灵动课堂 常见FAQ:论坛链接
Vue 常见FAQ:论坛链接
点击问题展开答案
Q1. 如何监听频道内谁在说话?
以下各平台回调方法提示了频道内谁在说话,以及说话者的音量(该提醒默认为关闭状态。如需启用,请调用这些 enableAudioVolumeIndication
相关的方法进行配置。
):
- Android/Windows:
onAudioVolumeIndication
- iOS/macOS:
reportAudioVolumeIndicationOfSpeakers
- Web:
enableAudioVolumeIndicator
后调用volume-indicator
与其他端不同,Web端启用该方法后,无论频道中有没有人说话,SDK 都会每两秒触发 "volume-indicator"
回调返回音量提示。 并且在同一台设备上开多个通话页面可能会导致该功能不准或失效。
Web端示例代码:
client.enableAudioVolumeIndicator(); // 每两秒触发 “volume-indicator” 回调
client.on(“volume-indicator”, function(evt){
evt.attr.forEach(function(volume, index){
console.log( ${index} UID ${volume.uid} Level ${volume.level}
);
});
});
Q2. 如何检测频道内最活跃用户?
SDK也支持检测频道内 最 活跃的用户,即瞬时音量最高的用户,
- Android/Windows:onActiveSpeaker()
- iOS/MacOS:
activeSpeaker
- Web:自 3.0.2 起废弃,用
Client.on("volume-indicator")
替代。
Q3. 如何使用 String 型用户 ID?
参考文档:官网文档解释
Q4. 集成aPaaS,pod install时一直失败
导致pod install失败的原因主要是因为部分库的源访问起来比较慢,有些库需要梯子或者非企业网络去pod,解决方法也很简单,切换网络环境(代理等)持续进行pod直到显示complete为止
Q5. 运行 pod lib lint 命令报错”Unable to find matching .xcframework slice”
这个问题可能会随着cocoaPods的更新,适配了新版本的Xcode后而不再出现,大家结合下版本自行判断下
问题描述
在 Xcode 12 或之后版本的环境中,如果你使用 CocoaPods 集成 3.3.0 或之后版本 iOS SDK,运行 pod lib lint
命令时,你可能会收到如下报错:
[iOS] xcodebuild: warning: [CP] Unable to find matching .xcframework slice in ' true ios-armv7_arm64/AgoraRtcKit.framework ios-x86_64-simulator/AgoraRtcKit.framework' for the current build architectures (arm64 x86_64).
问题原因
CocoaPods 未兼容 Xcode 12 和之后版本,所以无法在项目中链接 .xcframework
库。
解决方案
你可以按照如下步骤解决该问题:
- 安装 Xcode 12 之前版本(以 Xcode 11 为例)。
- 在终端运行如下命令切换 Xcode 版本。
// 把 <xcode_path> 替换成 Xcode 11 所在路径。
sudo xcode-select -s <xcode_path>
- 运行
pod lib lint
命令检查是否成功链接.xcframework
库。
Q6. 各平台编解码器的默认使用情况
硬件编码器选择描述
如果没有进行对应设置,可以参考这里的默认情况
通信模式 :全平台使用软编软解
直播模式
- iOS平台:双流模式下 编码
大流:iOS9.0或以上时,使用硬件编码器,否则使用软件编码器
小流:使用软件编码器
解码:iOS9.0或以上时,使用硬件解码器,否则使用软件解码器
- Android平台
2.1. 编码:
2.1.1. YUV输入格式
2.1.1.1. 大流:安卓4.4平台及以上,2.0及以前高通芯片为硬编,2.1的时候开启了三星、海思以及MTK芯片的硬编,否则软编
2.1.1.2. 小流:软编
2.1.2. Texture输入模式
2.1.2.1. 大流:安卓4.4以上且芯片支持Texture输入时使用硬件编码器,否则绿屏
2.1.2.2. 小流:同大流
2.2. 解码:使用的软解 - Windows/Mac/Linux平台
3.1.编码:软编
3.2.解码:软解
Q7. 如何在 RESTful API 中进行 HTTP 基本认证和 Token 认证?
在使用 RESTful API 前,你需要通过 HTTP 基本认证或 Token 认证。 参考文档:官网文档解释
Q8. 如何获取用户通话时长?
介绍
在业务中可能需要统计用户在线时长作为计费等业务的计量标准之一。通过 Agora RTC SDK 或水晶球,你可以获取用户的通话时长。
实现方法
使用 Agora RTC SDK
正常情况下,用户成功加入 RTC 频道后会触发 onRtcStats
回调,用户离开频道前收到的最后一次 onRtcStats
回调中的 totalDuration
参数即为该用户的通话时长。如果用户在通话中多次进出频道,你需要累计多个 totalDuration
值算出用户的通话时长。
上述示例为 Java 语言,其他语言可通过如下参数获取用户单次在频道内的时间:* C++: onRtcStats 回调中的 duration 参数
- Objective-C: reportRtcStats 回调中的 duration 参数
- Javascript: Client.getSessionStats 方法中的 Duration 参数
如果遇到断线等异常情况,通过 Agora RTC SDK 获取的通话时长可能不准确。你需要通过 Agora RTM SDK 或自己的信令系统开启心跳检测机制,从而获取客户端和服务端断开连接的时长。在 Agora RTC SDK 获取的通话时长中减去客户端断开连接的时长,即为该用户准确的通话时长。
使用水晶球
你可以通过水晶球通话调查界面,查看用户 在频道内时间 ,即该用户的通话时长。详见通话调查。
Q9. 通话时,两个设备离得很近会有啸叫(噪音)
这个问题一般是近场啸叫,但是我们SDK无法识别到是否处于近场啸叫状态的。一般而言正常场景下,用户不会在那么近的地方进行通话。这个现象目前唯一的解决方法就是把几台互通的手机移远,因为一般情况确实用户不会很近的地方进行通话。
Q10. 生成Token的代码链接和Token常见错误码处理
Token 生成器代码
Agora 在 GitHub 上提供一个开源的 AgoraDynamicKey 仓库,支持使用 C++、Java、Go 等语言在你自己的服务器上生成 Token。
语言 | 算法 | 核心方法 | 示例代码 |
---|---|---|---|
C++ | HMAC-SHA256 | buildTokenWithUid | RtcTokenBuilderSample.cpp |
Go | HMAC-SHA256 | buildTokenWithUid | sample.go |
Java | HMAC-SHA256 | buildTokenWithUid | RtcTokenBuilderSample.java |
Node.js | HMAC-SHA256 | buildTokenWithUid | RtcTokenBuilderSample.js |
PHP | HMAC-SHA256 | buildTokenWithUid | RtcTokenBuilderSample.php |
Python | HMAC-SHA256 | buildTokenWithUid | RtcTokenBuilderSample.py |
Python3 | HMAC-SHA256 | buildTokenWithUid | RtcTokenBuilderSample.py |
以下是生成 Token 的一些注意事项,请参考:
1、joinChannel 时所传的 uid、channelName 参数,需要和生成 token 时传的 uid、channelName 参数保持一致(参数类型和值都需要相同)。
2、确保时间戳参数是有效的、没有过期的。
3、如果在生成 Token 时选择了校验 uid,那么需要分别为不同 uid 的用户生成与其对应的 Token。
如需了解更多有关 Token 的信息,请参考如下文档: