Q1:云信令(原实时消息)SDK 的调用频率限制是针对单个 RTM 客户端实例吗?
云信令(Real-time Messaging,RTM)SDK 的调用频率限制针对单个 RTM 客户端实例。
在 Native 平台,你可以通过创建多实例提高 API 的调用频率;在 Web 平台,我们暂不建议通过创建多实例提高 API 的调用频率。
Q2:如何实现忙线拒接功能?
问题描述当主叫向指定用户发送呼叫邀请时,如果被叫用户已有一个呼叫进入或被叫用户正在接听另一个电话,主叫如何通过 Agora RTM SDK 的呼叫邀请功能得知对方正在忙线中?
功能说明:Agora RTM SDK 的呼叫邀请功能仅提供了呼叫邀请的控制逻辑实现,即该功能只负责控制通话的开始。如需完整实现一个通话场景,必须将 Agora RTM SDK 与其他音视频 SDK(比如 Agora RTC SDK)结合使用。
实现方法:Agora 建议在 app 层面为每个用户设立邀请状态标志 inviteState 和通话状态标志 callState 监听用户的接听状态。所有标志位默认初始状态为 false,只要用户的任一状态标志变为 true 时不能接受新的呼叫。
inviteState | callState | 忙线状态 |
---|---|---|
false | false | 用户空闲 |
true | false | 用户忙 |
false | true | 用户忙 |
确保你的项目已集成了 Agora RTM SDK 和音视频 SDK (比如 Agora RTC SDK)。
当用户收到 Agora RTM SDK 返回的 onRemoteInvitationReceived 时,将状态标志 inviteState 设为 true:
收到以下回调时,将状态标志 inviteState 设回 false 表示本次呼叫邀请结束而通话并未开始,不必进行后面的步骤。
onRemoteInvitationRefused:呼叫邀请已被被叫拒绝;
onRemoteInvitationCanceled:呼叫邀请已被主叫取消;
onRemoteInvitationFailure:呼叫邀请过程因其他原因失败。
收到 onRemoteInvitationAccepted 回调(被叫已接受呼叫邀请)时,将状态标志 inviteState 设回 false,并将 callState 设为 true 表示本次呼叫邀请结束而通话即将开始。
通过 Agora RTC SDK 提供的 onConnectionStateChanged 回调监听 connectionState 的状态:
如果 connectionState 处于以下状态时保持状态标志 callState 为 true,表示用户正在建立通话或正在通话中:CONNECTING: 建立网络连接中;
CONNECTED: 网络连接已建立;
RECONNECTING: 网络重连中。
如果 connectionState 处于以下状态时将通话状态标志设回 false, 表示用户不在通话中:
DISCONNECTED: 网络连接断开;
FAILED: 网络连接失败。
根据上表提供的判断依据判定用户是否忙线,如果用户忙线中,可以调用 Agora RTM SDK 提供的 refuseRemoteInvitation 方法拒绝呼叫邀请并在收到的 RemoteInvitation 内设置 response 属性为 "busy"。
Q3:如何对远端用户进行上下麦/禁言/禁摄像头操作?
在实时音视频互动中,经常会有本地对远端用户操作的需求。
例如,语聊房场景中的主播可以邀请观众上麦互动,也可以将上麦观众变回为普通观众;
视频会议的主持人则可以对与会人进行禁言、禁摄像头操作。
在实际应用场景中,你可以结合 Agora RTM SDK 的消息发送与频道属性功能,和 Agora RTC SDK 的切换用户角色和停止/恢复发布本地音频或视频流的功能,实现本地对远端用户的操作。
官网参考: https://docs.agora.io/cn/Real-time-Messaging/faq/host_set_role
Q4:如何在通话应用中实现呼叫邀请通知功能?
为了在通话应用中实现呼叫邀请通知功能,你需要集成 Agora RTC SDK、Agora RTM SDK 和应用对应平台的原生呼叫 API,例如 Android 平台的 ConnectionService、iOS 平台的 CallKit、Flutter 和 React Native 平台的 CallKeep。
由于 RTM SDK 只能在应用正常运行时实现呼叫邀请通知功能,集成原生呼叫 API 可以保证当应用进程处于后台或者被关闭时,用户仍可以收到呼叫邀请通知。
实现方法步骤一:集成 RTC SDK 和 RTM SDKRTC SDK 和 RTM SDK
具体的集成文档请参考:
RTC SDK 快速开始 :https://docs.agora.io/cn/Interactive%20Broadcast/start_live_android?platform=Android
RTM SDK 快速开始: https://docs.agora.io/cn/Real-time-Messaging/messaging_android?platform=Android
步骤二:使用 RTM SDK 实现呼叫邀请的基本控制逻辑关于如何使用 RTM SDK
实现呼叫邀请功能,请参考呼叫邀请: https://docs.agora.io/cn/Real-time-Messaging/rtm_invite_android?platform=Android
步骤三:集成对应平台的原生呼叫 API 并实现呼叫邀请通知
对于 Android 平台,你可以参考 ConnectionService 的官方文档: https://developer.android.com/reference/android/telecom/ConnectionService
对于 iOS 平台,你可以参考 CallKit 的官方文档: https://developer.apple.com/documentation/callkit
对于 Flutter 和 React Native 平台,你可以参考 Flutter 和 React Native 的官方文档。
官网链接: https://docs.agora.io/cn/All/faq/call_invite_notification
Q5:如何使用云信令(原实时消息)SDK 实现直播间礼物发送/点赞功能?
为增添实时音视频互动的趣味性,你可以结合云信令(RTM)SDK 实现虚拟礼物发送/点赞/弹幕功能。观众可以向主播发送虚拟礼物/点赞/弹幕,且直播间中所有用户都可以看到礼物/点赞/弹幕。
官网链接: https://docs.agora.io/cn/Real-time-Messaging/faq/rtm_gift_sending
Q6:云信令(原实时消息)如何计费?
官网链接: https://docs.agora.io/cn/Real-time-Messaging/billing_rtm?platform=All%20Platforms
Q7:如何使用云信令(原实时消息)发送和接收图片或文件消息?
官网参考: https://docs.agora.io/cn/Real-time-Messaging/upload_download_media_java
⚠️注意:自 RTM SDK 全平台 v1.5.0 开始,该功能正式下线。旧版本 SDK 会继续支持该功能,已集成该功能的用户不受影响。
Q8:使用云信令(原实时消息)如何查询用户事件和频道事件和历史消息?
官网参考: https://docs.agora.io/cn/Real-time-Messaging/rtm_get_event
⚠️注意:自 RTM SDK 全平台 v1.5.0 开始,历史消息功能正式下线。旧版本 SDK 会继续支持该功能,已集成该功能的用户不受影响。
Q9:如何使用云信令(原实时消息)消息发送 RESTful API?
参考: https://docs.agora.io/cn/Real-time-Messaging/messaging_restful#%E8%AE%A4%E8%AF%81
⚠️注意:自 RTM SDK 全平台 v1.5.0 开始,离线消息功能于该版本正式下线。旧版本 SDK 会继续支持,已集成这些功能的用户不受影响。
Q10:云信令(原实时消息)SDK 对同时在线人数和频道消息发送频率有限制吗?
云信令(RTM)SDK 对同时在线人数没有限制。但是 Agora 对于单个频道每秒发送的频道消息数量有以下建议:
单个频道同时在线人数 | 每秒频道消息数量 |
---|---|
< 1,000 | < 200 |
≥ 1,000 且 < 10,000 | < 100 |
≥ 10,000 | < 30 |
•如果每秒消息数量超过建议值,延迟会大幅增加,甚至可能导致以下结果:用户无法收发消息。
用户长期处于 RECONNECTING 状态或在 RECONNECTING 与 CONNECTED 状态间不断切换。
在其他用户看来,该用户可能显示为离线状态。
Agora 可以提供定制化服务,在不影响延迟和稳定性的前提下大幅提高每秒消息数量。请提交工单联系技术支持。
官网链接: https://docs.agora.io/cn/All/faq/rtm_concurrency
Q11:如何在控制台监测 RTM 每日活跃用户情况?
作为 RTM 用户,你可以参考以下步骤查看 RTM 每日活跃用户情况。登录控制台。点击左侧导航栏进入产品用量页面。选择你需要查看的项目(注意不要选择聚合用量),右侧面板显示 RTM 每日活跃用户情况。你可以查看指定时间段内的 RTM 每日活跃用户情况。
官网链接: https://docs.agora.io/cn/All/faq/RTM%20daily%20active%20users
Q12:云信令(原实时消息)SDK 的调用频率限制是针对单个 RTM 客户端实例吗?
云信令(Real-time Messaging,RTM)SDK 的调用频率限制针对单个 RTM 客户端实例。在 Native 平台,你可以通过创建多实例提高 API 的调用频率;在 Web 平台,我们暂不建议通过创建多实例提高 API 的调用频率。
官网链接: https://docs.agora.io/cn/All/faq/qps_client
Q13:为什么我在编译 Agora RTM Linux Java SDK 时出现错误?
问题描述在 Linux 平台上编译 Agora RTM Linux Java SDK 时出现以下错误:Exception in thread “main” java.lang.UnsatisfiedLinkError:no agora_rtm_sdk in java.library.path
问题原因agora_rtm_sdk 库没有加入环境变量。
解决方案
可以使用下面任意一种方案解决这个问题。对于每种方案,你都必须将 <path> 修改为 RTM Linux Java SDK 所在的路径。
修改环境变量在设置 Linux 环境变量的文件(例如 ~/.bashrc、~/bash_profile、或者 /etc/profile)中,添加如下代码: export LD_LIBRARY_PATH=<path>/agora/rtm/sdk:$LD_LIBRARY_PATH
修改 Java 运行参数你可以在运行 Java 时使用 Djava.library.path 参数,把 RTM Linux Java SDK 所在的路径添加到库文件路径: java -Djava.library.path=<path>/agora/rtm/sdk
官网链接: https://docs.agora.io/cn/All/faq/rtm_compilation_error
Q14:云信令 (原实时消息,Real-time Messaging)支持哪些平台和版本?
Agora 云信令 SDK 支持 iOS、Android、macOS、Linux、Windows C++、Web、小程序 等平台。
详情请参考 RTM 快速开始: https://docs.agora.io/cn/Real-time-Messaging/messaging_android?platform=Android
Q15:云信令(原实时消息)SDK 支持从频道外向频道内发送消息吗?
Agora RTM SDK 暂不支持从频道外向频道内发送消息。你必须加入频道才能向该频道成员发送频道消息。不过,你也可以通过设置频道属性并在每次 API 调用时开启 enableNotificationToChannelMembers 通知该频道所有成员本次更新。
官网链接: https://docs.agora.io/cn/All/faq/rtm_channel_message_from_outside
Q16:Agora RTM 在各平台的使用有哪些限制条件?
Agora RTM Java SDK for Android : https://docs.agora.io/cn/Real-time-Messaging/limitations_android?platform=Android
Agora RTM Objective-C SDK for iOS 或 Agora RTM Objective-C SDK for macOS: https://docs.agora.io/cn/Real-time-Messaging/limitations_oc?platform=iOS
Agora RTM Web SDK : https://docs.agora.io/cn/Real-time-Messaging/limitations_web?platform=Web
Agora RTM C++ SDK for Windows: https://docs.agora.io/cn/Real-time-Messaging/limitations_cpp?platform=Windows
如果用户离开频道,状态怎么判断