agora_rtc_api.h 文件参考
- C
更新时间不可用
宏定义说明
agora_api
#define agora_apiAGORA_CERTIFICATE_MAX_LEN
#define AGORA_CERTIFICATE_MAX_LEN(1024)AGORA_CREDENTIAL_MAX_LEN
#define AGORA_CREDENTIAL_MAX_LEN(256)AGORA_LICENSE_VALUE_LEN
#define AGORA_LICENSE_VALUE_LEN(32)AGORA_RTC_CHANNEL_NAME_MAX_LEN
#define AGORA_RTC_CHANNEL_NAME_MAX_LEN(64)AGORA_RTC_DATA_STREAM_MAX_LEN
#define AGORA_RTC_DATA_STREAM_MAX_LEN(1024)AGORA_RTC_PRODUCT_ID_MAX_LEN
#define AGORA_RTC_PRODUCT_ID_MAX_LEN(63)AGORA_RTC_USER_ACCOUNT_MAX_LEN
#define AGORA_RTC_USER_ACCOUNT_MAX_LEN(256)AGORA_RTM_DATA_MAX_LEN
#define AGORA_RTM_DATA_MAX_LEN(31 * 1024)AGORA_RTM_UID_MAX_LEN
#define AGORA_RTM_UID_MAX_LEN(64)CONNECTION_ID_ALL
#define CONNECTION_ID_ALL((connection_id_t)0)当前创建的全部 Connection。
CONNECTION_ID_INVALID
#define CONNECTION_ID_INVALID((connection_id_t)-1)无效的 Connection ID。
类型定义说明
connection_id_t
typedef uint32_t connection_id_tConnection ID。
rdt_state_e
typedef enum rdt_state rdt_state_eRDT 通道的连接状态。
rdt_status_info_t
typedef struct rdt_status_info rdt_status_info_tRDT 通道的信息。
rdt_stream_type_e
typedef enum rdt_stream_type rdt_stream_type_eRDT 消息类型。
user_info_t
typedef struct user_info_s user_info_t自从
v1.9.5
用户信息。适用于使用 String 型用户 ID 的场景。
video_frame_rate_e
typedef uint16_t video_frame_rate_e(废弃)视频帧率。
agora_err_code_e
enum agora_err_code_e错误码。
| 枚举值 | |
|---|---|
| 0: 没有错误。 | |
| 1: 通用错误。你可以根据日志文件排查问题。 | |
| 2: 方法中设置无效的参数,例如指定的频道命中含有非法字符。请重新设置参数 | |
| 3: 当前状态下调用 API 无效,例如关闭本地采集后就无法发布音视频。 | |
| 4: 当前状态下不支持该操作。 | |
| 6: 当前连接状态是未成功加入频道。 | |
| 7: 服务未完成初始化。请先调用 agora_rtc_init 方法。 | |
| 8: 连接不存在。 | |
| 10: API 调用超时。有些方法调用需要 SDK 返回结果,如果处理时间过长(超过 10 秒),SDK 会返回该错误。 | |
| 11: 内存不足。 | |
| 12: API 调用失败。 | |
| 14: 当前网络不可用。你需要检查系统网络连接状态。 | |
| 17: 加入频道请求被拒绝,可能是因为本地用户已在频道内。你需要调整代码逻辑,避免用户加入同一频道。 | |
| 18: 离开频道被拒。如果本地用户已经不在频道内,试图调用 API 离开频道时会返回该错误。 | |
| 23: License 未通过验证导致的 SDK 初始化失败。该错误码仅在老版本的 License 下会反馈。 | |
| 30: 加密错误。 | |
| 31: 解密错误。 | |
| 101: 不是有效的 App ID。请更换有效的 App ID 重新加入频道。 | |
| 102: 不是有效的频道名。可能的原因是设置的参数数据类型不正确。请更换有效的频道名重新加入频道。 | |
| 103: 无法获取指定区域的服务器资源。 | |
| 105: 声网服务器拒绝了查询频道的请求。你需要检查 RTC Token 是否有效。 | |
| 107: 声网服务器拒绝了创建频道的请求。你需要检查 RTC Token 是否有效。 | |
109: 当前使用的 RTC Token 已过期。你需要重新在服务端申请生成 RTC Token 并调用 agora_rtc_join_channel 使用新生成的 RTC Token 重新加入频道。 Token 过期可能的原因有:
| |
110: RTC Token 无效。可能的原因是:
| |
| 115: 在控制台中启用了 Token 鉴权,但调用 join 加入频道时传入的是 App ID。 | |
| 119: 切换用户角色失败,请尝试重新加入频道。 | |
| 120:解密失败。可能的原因是用户尝试使用不同的密码加入频道。请检查你的设置或尝试重新加入频道。 | |
| 121: 打开频道的信令错误。请尝试重新加入频道。 | |
| 122: 系统在尝试切换服务器。通常不需要额外处理,系统会自动尝试切换服务器以打开频道。 | |
| 123: 该客户端被服务器禁用。你需要检查 License 是否正确。 | |
| 200: SDK 不支持当前使用的音频编解码器。 | |
| 201: PCM 音频数据长度无效。 | |
| 202: 音频编解码器参数无效。 | |
| 300: 视频数据发送太快,且超出了宽带限制。当前发送速度下很可能发生丢包。 | |
| 301: 视频包打包失败。 | |
| 600: 用户不存在。 | |
| 601: 用户状态未准备好。 | |
| 602: 数据被拦截。 | |
| 603: 指令超出限制。 | |
| 604: 数据消息大小超出限制。 | |
| 621: 创建了太多的数据流。 | |
| 622: 创建的数据流大小超过了 1 KB。 | |
| 623: 指定的数据流 ID 不存在。 | |
| 624: 数据流的发送码率超过了 6 Kbps 的限制。 | |
| 625: 数据流发送太频繁,超过了每秒 60 个数据包的限制。 | |
| 626: 接收数据流的远端用户连接超时。 | |
| 1001: 未登录 RTM 系统。 | |
| 1002: 已登录 RTM 系统。 | |
| 1003: 在 rtmUid 参数中误填了自己的用户 ID。 | |
| 1004: RTM 消息长度超出限制。消息长度至多为 31 KB。 | |
| 1005: RTM 消息发送频率超出限制。每秒至多发送 60 条消息。 | |
| 1006: 消息通道已满。等待一秒后重新发送。 | |
| 1007: 自定义消息类型长度超出限制。 | |
| 1008: RTM 频道订阅数量超过限制。 | |
| 1009: 已订阅该 RTM 频道。 | |
| 1010: 未订阅该 RTM 频道。 | |
| 1011: RTM 频道订阅超时。 | |
area_code_e
enum area_code_e访问区域。
| 枚举值 | |
|---|---|
| 同 AREA_CODE_GLOB 全球。 | |
| 中国大陆。 | |
| 北美。 | |
| 欧洲。 | |
| 亚洲(除中国大陆)。 | |
| 日本。 | |
| 印度。 | |
| 全球 (默认)。 | |
audio_codec_type_e
enum audio_codec_type_eSDK 内置的音频编解码器。
| 枚举值 | |
|---|---|
| 0: 关闭 SDK 内置音频编解码器。 | |
| 1: 使用 SDK 内置的 Opus 编解码器进行音频编、解码。在 Opus 编码下, SDK 对单个声道支持 16 KHz 或 48 KHz 采样率。 | |
| 2: 使用 SDK 内置的 G722 编解码器进行音频编、解码。在 G722 编码下, 目前 SDK 对单个声道支持 16 KHz 采样率。 | |
| 3: 使用 SDK 内置的 G711A(PCMU)编解码器进行音频编、解码。在 G711 编码下, 目前 SDK 对单个声道支持 8 KHz 采样率。 | |
| 4: 使用 SDK 内置的 G711U(PCMU)编解码器进行音频编、解码。在 G711 编码下, 目前 SDK 对单个声道支持 8 KHz 采样率。 | |
audio_data_type_e
enum audio_data_type_e音频编码格式。
| 枚举值 | |
|---|---|
| 1: Opus。 | |
| 2: OPUSFB。 | |
| 3: PCMA。 | |
| 4: PCMU。 | |
| 5: G722。 | |
| 6: AAC-LC,采样率为 8000 Hz。 | |
| 7: AAC-LC,采样率为 16000 Hz。 | |
| 8: AAC-LC,采样率为 48000 Hz。 | |
| 9: HE-AAC。 | |
| 10: HEAAC2,采样率为 48000 Hz。 | |
| 11: AACLC3,采样率为 8000 Hz,双声道。 | |
| 12: AACLC2,采样率为 16000 Hz,双声道。 | |
| 13: AACLC,采样率为 48000 Hz,双声道。 | |
| 14: HEAAC,采样率为 48000 Hz,双声道。 | |
| 15: HEAAC2,采样率为 48000 Hz,双声道。 | |
| 16: AACLC1,采样率为 44100 Hz。 | |
| 17: AACLC1_2CH,采样率为 48000 Hz,双声道。 | |
| 18: HWAAC,采样率为 32000 Hz。 | |
| 20: OPUSSWB,采样率为 32000 Hz。 | |
| 21: OPUSFB,采样率为 48000 Hz,双声道。 | |
| 100: 用于传输的 PCM 数据。 | |
| 253: Generic。 | |
| 254: 音频数据类型未知。 | |
crypto_mode_e
enum crypto_mode_e加密模式。
建议使用 AES_128_GCM2 或 AES_256_GCM2 加密模式。这两种模式支持使用盐,安全性更高。
| 枚举值 | |
|---|---|
| 1: 128 位 AES 加密,XTS 模式。 | |
| 2: 128 位 AES 加密,ECB 模式。 | |
| 3: 256 位 AES 加密,XTS 模式。 | |
| 4: 128 位 SM4 加密,ECB 模式。 | |
| 5: 128 位 AES 加密,GCM 模式。 | |
| 6: 256 位 AES 加密,GCM 模式。 | |
| 7: 128 位 AES 加密,GCM 模式。该加密模式需要设置盐(salt)。 | |
| 8: 256 位 AES 加密,GCM 模式。该加密模式需要设置盐(salt)。 | |
| 枚举值边界。 | |
license_err_reason_e
enum license_err_reason_e设备 License 验证失败的错误码。
| 枚举值 | |
|---|---|
| 1: 无效 License。你需要重新调用 agora_rtc_init 并在 rtc_service_option_t 的 license_value 参数中填入正确的 License。 | |
| 2: License 过期。你需要联系 sales@shengwang.cn 进行续费。 | |
| 3: License 包含的通话时长已用完。你需要联系 sales@shengwang.cn 购买通话时长更长的 License。 | |
| 4: 当前时间段受 License 限制,不能进行通话。你需要换一个 License 允许的时间段进行通话,或联系 sales@shengwang.cn 购买通话时间段更长的 License。 | |
| 5: License 已在其他设备中使用。一个 License 只允许在一台设备中使用,你需要重新调用 agora_rtc_init 并在 rtc_service_option_t 的 license_value 参数中填入一个新的 License。 | |
| 99: 内部原因。 | |
rdt_state
enum rdt_stateRDT 通道的连接状态。
| 枚举值 | |
|---|---|
| 初始状态,未连接 RDT 通道。该状态下用户不可以收发 RDT 消息。 | |
| 已连接 RDT 通道。该状态下用户可以收发 RDT 消息。 | |
| RDT 通道中的发送缓冲区已满。该状态下用户不可以发送数据消息 (RDT_STREAM_DATA),但可以发送控制消息 (RDT_STREAM_CMD)。 | |
正在重新连接 RDT 通道。
| |
| 与 RDT 通道的连接已损坏,SDK 会尝试重新连接。SDK 不论能否成功连接,都会清空 RDT 通道中发送和接收缓冲区中的历史数据。 | |
rdt_stream_type
enum rdt_stream_typeRDT 消息类型。
| 枚举值 | |
|---|---|
| 控制消息。发送优先级高,不受拥塞控制策略影响,不会阻塞发送。每秒至多发送 100 个消息包,每个消息包的长度至多为 256 B。 | |
| 数据消息。发送优先级低,受拥塞控制策略影响,如果缓冲区满了,则消息会发送失败。不限制发送的消息包数量,每个消息包的长度至多为 128 KB。 | |
| 枚举值边界。 | |
rtc_log_level_e
enum rtc_log_level_e日志输出级别。
| 枚举值 | |
|---|---|
| 0:(默认)输出 EMERG、ALERT、CRIT、ERROR、WARNING、NOTICE 级别的日志。 | |
| 1:输出 EMERG 级别的日志。 | |
| 2:输出 EMERG、ALERT 级别的日志。 | |
| 3:输出 EMERG、ALERT、CRIT 级别的日志。 | |
| 4:输出 EMERG、ALERT、CRIT、ERROR 级别的日志。 | |
| 5:输出 EMERG、ALERT、CRIT、ERROR、WARNING 级别的日志。 | |
| 6:(默认)输出 EMERG、ALERT、CRIT、ERROR、WARNING、NOTICE 级别的日志。 | |
| 7:输出 EMERG、ALERT、CRIT、ERROR、WARNING、NOTICE、INFO 级别的日志。 | |
| 8:输出所有 API 日志信息。如果你想获取最完整的日志,可以将日志级别设为该等级。 | |
rtm_err_code_e
enum rtm_err_code_eRTM 错误码。
| 枚举值 | |
|---|---|
| 0: 方法调用成功或登录成功。 | |
| 1: 通用错误。你可以根据日志文件排查问题。 | |
| 2: 声网服务器拒绝了登录 RTM 的请求。你需要检查 RTM Token、App ID、User ID 是否符合要求。 | |
| 3: RTM 用户 ID 无效。你需要检查 User ID 是否符合要求。 | |
| 5: RTM Token 无效。你需要检查 Token 是否符合要求。 | |
| 7: 未经授权的登录。你需要先进行登录,再进行其他操作。 | |
| 8: 检测到网卡出现故障 | |
| 9: 本地用户网络中断。你需要检查网络是否正常。 | |
| 10: 本地用户没有收到服务端响应的心跳包。 | |
| 11: 服务器没有收到本地用户发动的心跳包。 | |
| 101: RTM App ID 无效。你需要检查 App ID 是否符合要求。 | |
| 105: 声网服务器拒绝了查询 RTM 频道的请求。你需要检查 RTM Token 是否符合要求。 | |
| 109: RTM Token 已过期。你需要重新生成 RTM Token。 | |
| 110: RTM Token 无效。你需要检查 Token 是否符合要求。 | |
rtm_event_type_e
enum rtm_event_type_eRTM RTM 事件类型。
| 枚举值 | |
|---|---|
| 0: 用户成功登录 RTM 服务。 | |
| 1: 用户被踢出。可能的原因是 UID 重复。 | |
2: 用户退出 RTM 服务。可能得原因是:
在该状态下,SDK 会自动尝试重连,如果重连成功,则可以恢复登录。 | |
rtm_message_type_e
enum rtm_message_type_eRTM 消息类型。
rtm_msg_state_e
enum rtm_msg_state_eRTM 消息的发送状态。
| 枚举值 | |
|---|---|
| 0: 初始状态。 | |
| 1: 消息已接收。 | |
| 2: 消息到达了服务端,但是不确定是否到达了远端用户。 | |
| 服务端 10 秒内没有响应,SDK 会删除这条未知状态的消息。 | |
user_offline_reason_e
远端用户下线的原因。
| 枚举值 | |
|---|---|
| 0: 远端用户主动离开频道。 | |
| 1: 因过长时间收不到远端用户的数据包,SDK 判定该远端用户超时掉线。注意:在网络连接不稳定时,该判定可能会有误。建议使用云信令 SDK 来做可靠的掉线检测。 | |
| 2: 远端用户的角色从主播切换为观众。 | |
video_data_type_e
enum video_data_type_e视频编码格式。
| 枚举值 | |
|---|---|
| 0: YUV420 (暂不支持)。 | |
| 2: H264。 | |
| 3: H265。 | |
| 6: Generic。 | |
| 20: Generic JPEG。 | |
video_frame_type_e
enum video_frame_type_e视频帧类型。
| 枚举值 | |
|---|---|
| 0: 未知。SDK 会自行判断帧类型。 | |
| 3: 关键帧。 | |
| 4: Delta 帧,例如 P-Frame。 | |
video_orientation_e
enum video_orientation_e已编码视频帧的旋转角度。
| 枚举值 | |
|---|---|
| 0: (默认)顺时针旋转 0 度。 | |
| 1: 顺时针旋转 90 度。 | |
| 2: 顺时针旋转 180 度。 | |
| 3: 顺时针旋转 270 度。 | |
video_stream_type_e
enum video_stream_type_e视频流类型。
函数说明
agora_rtc_config_log()
agora_api int agora_rtc_config_log(int size_per_file, int max_file_count)配置 SDK 的日志文件。
| 参数名 | 描述 |
|---|---|
size_per_file | 每份日志文件的大小(字节)。取值范围为 [0,10 × 1024 × 1024]。默认值为 1 × 1024 × 1024,即 1 MB。如果你将此参数设为 0,则代表关闭日志功能。 |
max_file_count | 日志文件数。取值范围为 [0,100]。默认值为 10。如果你将此参数设为 0,则代表关闭日志功能。 |
返回值
- 0: 方法调用成功。
- < 0: 方法调用失败。
agora_rtc_create_connection()
agora_api int agora_rtc_create_connection(connection_id_t * conn_id)创建 Connection。
你需要在加入频道前调用该方法创建 Connection。如需使用同一个用户 ID 加入不同频道,或者使用不同用户 ID 加入同一个频道,则你需要多次调用该方法创建多个 Connection,然后再使用对应的 Connection ID 加入频道。
| 参数名 | 描述 |
|---|---|
conn_id | Connection ID。 |
返回值
- 0: 方法调用成功。
- < 0: 方法调用失败。
agora_rtc_create_data_stream()
agora_api int agora_rtc_create_data_stream(connection_id_t conn_id, int * stream_id, bool reliable, bool ordered)创建数据流。
自从
v1.9.5
在 Connection 生命周期内,每个用户最多可以创建五条数据流。
注解
- 该方法需要在加入频道后调用。
- SDK 不支持 reliable 设为 true,且 ordered 设为 false 的参数组合。
| 参数名 | 描述 |
|---|---|
conn_id | Connection ID。 |
stream_id | 数据流 ID 指针。 |
reliable | 是否保证数据可靠性,即接收方是否需要在数据发送后的 5 秒内接收:
|
ordered | 是否保证接收方需要收到有序的数据流:
|
返回值
- 0: 方法调用成功。
- < 0: 方法调用失败。
agora_rtc_destroy_connection()
agora_api int agora_rtc_destroy_connection(connection_id_t conn_id)销毁 Connection。
| 参数名 | 描述 |
|---|---|
conn_id | Connection ID。设为 CONNECTION_ID_ALL 表示针对当前创建的所有 Connection。你可以通过 agora_rtc_create_connection 创建 Connection。 |
返回值
- 0: 方法调用成功。
- < 0: 方法调用失败。
agora_rtc_err_2_str()
agora_api const char * agora_rtc_err_2_str(int err)将错误码转为静态字符串,以便查看错误描述。
注解
使用后不必释放。
| 参数名 | 描述 |
|---|---|
err | 错误码。 |
返回值
静态字符串。
agora_rtc_fini()
agora_api int agora_rtc_fini(void)释放所有由 agora_rtc_init 方法分配给 RTSA 服务的资源。
返回值
- 0: 方法调用成功。
- < 0: 方法调用失败。
agora_rtc_get_connection_info()
agora_api int agora_rtc_get_connection_info(connection_id_t conn_id, connection_info_t * conn_info)获取 Connection 信息。
| 参数名 | 描述 |
|---|---|
conn_id | Connection ID。设为 CONNECTION_ID_ALL 表示针对当前创建的所有 Connection。你可以通过 agora_rtc_create_connection 创建 Connection。 |
conn_info | Connection 信息。详见 connection_info_t 。 |
返回值
- 0: 方法调用成功。
- < 0: 方法调用失败。
agora_rtc_get_rdt_status_info()
agora_api int agora_rtc_get_rdt_status_info(connection_id_t conn_id, uint32_t remote_uid, rdt_status_info_t * info)获取 RDT 通道的信息。
自从
v1.9.2
该方法可以获取当前 RDT 通道的连接状态和缓冲区长度,从而判断远端用户是否成功接收 RDT 消息、本地用户是否可以继续发送 RDT 消息。例如,发送缓冲区长度 (send_queue_size) 为 0 表示远端用户已接收完 RDT 消息。
| 参数名 | 描述 |
|---|---|
conn_id | Connection ID。 |
remote_uid | 远端用户的用户 ID。 |
info | RDT 通道的信息。详见 rdt_status_info 。 |
返回值
- 0: 方法调用成功。
- < 0: 方法调用失败。
agora_rtc_get_user_info_by_uid()
agora_api int agora_rtc_get_user_info_by_uid(connection_id_t conn_id, uint32_t uid, user_info_t * user)通过用户 ID 获取用户信息。
自从
v1.9.5
| 参数名 | 描述 |
|---|---|
conn_id | Connection ID。 |
uid | 用户 ID。 |
user | 用户信息,详见 user_info_t 。 |
返回值
- 0: 方法调用成功。
- < 0: 方法调用失败。
agora_rtc_get_user_info_by_user_account()
agora_api int agora_rtc_get_user_info_by_user_account(connection_id_t conn_id, const char * user_account, user_info_t * user)通过用户 User account 获取用户信息。
自从
v1.9.5
| 参数名 | 描述 |
|---|---|
conn_id | Connection ID。 |
user_account | 用户 User account。 |
user | 用户信息,详见 user_info_t 。 |
返回值
- 0: 方法调用成功。
- < 0: 方法调用失败。
agora_rtc_get_version()
const char * agora_rtc_get_version(void)获取 SDK 版本。
返回值
包含 SDK 版本信息的静态字符串。
agora_rtc_init()
agora_api int agora_rtc_init(const char * app_id, const agora_rtc_event_handler_t * event_handler, rtc_service_option_t * option)初始化 RTSA 服务。
注解
- 每条进程只能初始化一次。
- SDK 每次初始化时会在指定的目录下自动创建一个新文件夹(随机命名),用于存放此次运行的日志。 SDK 不负责回收上一次初始化时创建的文件夹。为了避免日志占用过多空间,建议每次初始化之前先清空日志文件夹。
| 参数名 | 描述 |
|---|---|
app_id | 声网为 App 开发者签发的 APP ID。 |
event_handler | 用于处理 SDK 事件的一系列回调。详见 agora_rtc_event_handler_t 。 |
option | 服务配置选项,如果不需要设置则请置空。详见 rtc_service_option_t 。 |
返回值
- 0: 方法调用成功。
- < 0: 方法调用失败。
agora_rtc_join_channel()
agora_api int agora_rtc_join_channel(connection_id_t conn_id, const char * channel_name, uint32_t uid, const char * token, rtc_channel_options_t * options)加入指定 Connection 所关联的 RTC 频道。
该方法让本地用户加入指定频道。同一个频道内使用相同 App ID 的用户可以互相传输数据。
注解
- 你可以同时加入多个频道,所有你加入的频道都能接收到你发送的音视频数据。
- 如需使用同一个用户 ID 加入不同频道,或者使用不同用户 ID 加入同一个频道,则你需要创建不同的 Connection 并在调用 agora_rtc_join_channel 方法时填入对应的 Connection ID。
| 参数名 | 描述 |
|---|---|
conn_id | Connection ID。设为 CONNECTION_ID_ALL 表示针对当前创建的所有 Connection 。你可以通过 agora_rtc_create_connection 创建 Connection。 |
channel_name | 频道名,长度在 64 字节以内的字符串。以下为支持的字符集范围(共 89 个字符):
|
uid | 用户 ID。 |
token | 用于鉴权的 RTC Token。
|
options | 频道设置选项。详见 rtc_channel_options_t 。 |
返回值
- 0: 方法调用成功。
- < 0: 方法调用失败。
agora_rtc_join_channel_with_user_account()
agora_api int agora_rtc_join_channel_with_user_account(connection_id_t conn_id, const char * channel_name, const char * user_account, const char * token, rtc_channel_options_t * options)使用用户 User account 加入指定 Connection 所关联的 RTC 频道。
自从
v1.9.5
该方法让本地用户加入指定频道。同一个频道内使用相同 App ID 的用户可以互相传输数据。
注解
- 你可以同时加入多个频道,所有你加入的频道都能接收到你发送的音视频数据。
- 如需使用同一个用户 User account 加入不同频道,或者使用不同用户 User account 加入同一个频道,则你需要创建不同的 Connection 并在调用 agora_rtc_join_channel_with_user_account 方法时填入对应的 Connection ID。
| 参数名 | 描述 |
|---|---|
conn_id | Connection ID。 |
channel_name | 频道名,长度在 64 字节以内的字符串。以下为支持的字符集范围(共 89 个字符):
|
user_account | 用户 User account。 |
token | 用于鉴权的 RTC Token。
|
options | 频道设置选项。详见 rtc_channel_options_t 。 |
返回值
- 0: 方法调用成功。
- < 0: 方法调用失败。
agora_rtc_leave_channel()
agora_api int agora_rtc_leave_channel(connection_id_t conn_id)离开指定 Connection 所关联的 RTC 频道。
停止在某频道传输数据后需要离开该频道。
| 参数名 | 描述 |
|---|---|
conn_id | Connection ID。设为 CONNECTION_ID_ALL 表示针对当前创建的所有 Connection 。你可以通过 agora_rtc_create_connection 创建 Connection。 |
返回值
- 0: 方法调用成功。
- < 0: 方法调用失败。
agora_rtc_license_gen_credential()
agora_api int agora_rtc_license_gen_credential(char * credential, unsigned int * credential_len)弃用
自 v1.9.0 废弃。
生成设备唯一标识 Credential。
注解
该方法仅用于声网 License 机制。如不使用 License,可忽略该方法。
| 参数名 | 描述 |
|---|---|
credential | 用于存放 Credential 的缓冲区。 |
credential_len | 缓冲区大小(字节)。
|
返回值
- 0: 方法调用成功。
- < 0: 方法调用失败。
agora_rtc_license_strerror()
agora_api const char * agora_rtc_license_strerror(int err)获取 Licence 错误描述。
| 参数名 | 描述 |
|---|---|
err | 错误码。 |
返回值
表示错误描述的字符串。
agora_rtc_license_verify()
agora_api int agora_rtc_license_verify(const char * certificate, int certificate_len, const char * credential, int credential_len)弃用
自 v1.9.0 废弃。改用 on_license_validation_failure 回调获取 License 校验失败的错误码。
认证 SDK。
启用了声网 License 机制后,安装了 SDK 的设备只有通过 Certificate 验证 才能加入声网频道、使用数据传输功能。
注解
- 该方法仅用于声网 License 机制。如不使用 License,可忽略该方法。
- 该方法必须在 agora_rtc_init 前调用。认证通过后,你才能有效调用 RTSA SDK 的其他 API。
| 参数名 | 描述 |
|---|---|
certificate | 许可证 Certificate。 |
certificate_len | 许可证长度。 |
credential | 凭证 Credential。 |
credential_len | 凭证长度。 |
返回值
- 0: 方法调用成功。
- < 0: 方法调用失败。
agora_rtm_login()
agora_api int agora_rtm_login(const char * rtm_uid, const char * rtm_token, const agora_rtm_handler_t * handler)登录 RTM。
| 参数名 | 描述 |
|---|---|
rtm_uid | RTM 用户 ID。该字符串不可超过 64 字节。不可设为空、NULL 或 "NULL"。以下为支持的字符集范围:
|
rtm_token | 用于登录 RTM 系统的动态密钥。详见《校验用户权限》。如果你没有开启 Token 鉴权,此参数可设为 NULL。 |
handler | RTM 回调。详见 agora_rtm_handler_t 。 |
返回值
- 0: 方法调用成功。
- < 0: 方法调用失败。
agora_rtm_logout()
agora_api int agora_rtm_logout(void)登出 RTM。
返回值
- 0: 方法调用成功。
- < 0: 方法调用失败。
agora_rtc_mute_local_audio()
agora_api int agora_rtc_mute_local_audio(connection_id_t conn_id, bool mute)对指定 Connection 所关联的 RTC 频道暂停/恢复发送本地音频流。
| 参数名 | 描述 |
|---|---|
conn_id | Connection ID。设为 CONNECTION_ID_ALL 表示针对当前创建的所有 Connection 。你可以通过 agora_rtc_create_connection 创建 Connection。 |
mute | 暂停/恢复发送本地音频流:
|
返回值
- 0: 方法调用成功。
- < 0: 方法调用失败。
agora_rtc_mute_local_video()
agora_api int agora_rtc_mute_local_video(connection_id_t conn_id, bool mute)指定 Connection 所关联的 RTC 频道暂停/恢复发送本地视频流。
| 参数名 | 描述 |
|---|---|
conn_id | Connection ID。设为 CONNECTION_ID_ALL 表示针对当前创建的所有 Connection 。你可以通过 agora_rtc_create_connection 创建 Connection。 |
mute | 暂停/恢复发送本地视频流:
|
返回值
- 0: 方法调用成功。
- < 0: 方法调用失败。
agora_rtc_mute_remote_audio()
agora_api int agora_rtc_mute_remote_audio(connection_id_t conn_id, uint32_t remote_uid, bool mute)暂停/恢复接收指定 Connection 所关联的 RTC 频道内的指定远端用户的音频流。
| 参数名 | 描述 |
|---|---|
conn_id | Connection ID。设为 CONNECTION_ID_ALL 表示针对当前创建的所有 Connection 。你可以通过 agora_rtc_create_connection 创建 Connection。 |
remote_uid | 远端用户 ID。设为 0 则停止接收频道内所有用户的音频流。 |
mute | 暂停/恢复接收远端音频流:
|
返回值
- 0: 方法调用成功。
- < 0: 方法调用失败。
agora_rtc_mute_remote_video()
agora_api int agora_rtc_mute_remote_video(connection_id_t conn_id, uint32_t remote_uid, bool mute)暂停/恢复接收指定 Connection 所关联的 RTC 频道内的指定远端用户的视频流。
可以先暂停接收所有频道的视频流,然后恢复接收指定频道的视频流。
| 参数名 | 描述 |
|---|---|
conn_id | Connection ID。设为 CONNECTION_ID_ALL 表示针对当前创建的所有 Connection 。你可以通过 agora_rtc_create_connection 创建 Connection。 |
remote_uid | 远端用户 ID。设为 0 则停止接收频道内所有用户的视频流。 |
mute | 暂停/恢复接收远端视频流:
|
返回值
- 0: 方法调用成功。
- < 0: 方法调用失败。
agora_rtc_renew_token()
agora_api int agora_rtc_renew_token(connection_id_t conn_id, const char * token)更新指定 Connection 所关联的 RTC 频道的 RTC Token。
| 参数名 | 描述 |
|---|---|
conn_id | Connection ID。设为 CONNECTION_ID_ALL 表示针对当前创建的所有 Connection 。你可以通过 agora_rtc_create_connection 创建 Connection。 |
token | 声网 RTC Token。 |
返回值
- 0: 方法调用成功。
- < 0: 方法调用失败。
agora_rtc_request_video_key_frame()
agora_api int agora_rtc_request_video_key_frame(connection_id_t conn_id, uint32_t remote_uid, video_stream_type_e stream_type)请求指定 Connection 所关联的 RTC 频道内的指定远端用户为指定远端视频流生成关键帧。
| 参数名 | 描述 |
|---|---|
conn_id | Connection ID。设为 CONNECTION_ID_ALL 表示针对当前创建的所有 Connection 。你可以通过 agora_rtc_create_connection 创建 Connection。 |
remote_uid | 远端用户 ID。如果为频道内的所有用户,则设为 0。 |
stream_type | 视频流类型。详见 video_stream_type_e 。 |
返回值
- 0: 方法调用成功。
- < 0: 方法调用失败。
agora_rtc_send_audio_data()
agora_api int agora_rtc_send_audio_data(connection_id_t conn_id, const void * data_ptr, size_t data_len, audio_frame_info_t * info_ptr)向指定 Connection 所关联的 RTC 频道发送音频帧。
| 参数名 | 描述 |
|---|---|
conn_id | Connection ID。设为 CONNECTION_ID_ALL 表示针对当前创建的所有 Connection 。你可以通过 agora_rtc_create_connection 创建 Connection。 |
data_ptr | 音频包数据。 |
data_len | 音频包数据大小(字节)。 |
info_ptr | 音频帧配置,详见 audio_frame_info_t 。 |
返回值
- 0: 方法调用成功。
- < 0: 方法调用失败。
agora_rtc_send_media_ctrl_msg()
agora_api int agora_rtc_send_media_ctrl_msg(connection_id_t conn_id, uint32_t remote_uid, const void * payload, size_t length)向所有频道或指定频道发送消息。
自从
1.9.5
成功调用该方法后,远端会触发 on_media_ctrl_msg 回调,远端用户可以在该回调中获取接收到的消息。
注解
调用该方法时,你需要明确指定发送的频道;否则 SDK 会将消息发送到所有你加入的频道。
| 参数名 | 描述 |
|---|---|
conn_id | Connection ID。 |
remote_uid | 远端用户 ID;如果 remote_uid 设为 0,表示所有远端用户。 |
payload | 消息的 Payload。 |
length | 消息的 Payload 长度。最大不能超过 1 KB。 |
返回值
- 0: 方法调用成功
- < 0: 方法调用失败
agora_rtc_send_rdt_msg()
agora_api int agora_rtc_send_rdt_msg(connection_id_t conn_id, uint32_t remote_uid, rdt_stream_type_e type, const void * msg, size_t length)发送 RDT(Reliable Data Transmission,可靠数据传输)消息。
自从
v1.9.2
在文件传输、文件下载等需要可靠传输的场景中,你可以参考如下步骤发送 RDT 消息:
- 在 RDT 通道中建立连接:在加入频道时,将 rtc_channel_options_t 中的 enable_rdt 参数设置为 true,主动与频道内其他用户建立连接。
- 获取 RDT 通道的连接状态:监听 on_rdt_state 回调。当在 RDT 通道中成功建立连接时,连接状态会变为 RDT_STATE_OPENED,此时才可进行下一步。
- 调用 agora_rtc_send_rdt_msg 方法发送 RDT 消息:你可以根据需要发送控制消息 (RDT_STREAM_CMD) 或数据消息 (RDT_STREAM_DATA),二者区别如下:
- 控制消息。发送优先级高,不受拥塞控制策略影响,不会阻塞发送。每秒至多发送 100 个消息包,每个消息包的长度至多为 256 B。
- 数据消息。发送优先级低,受拥塞控制策略影响,如果缓冲区满了,则消息会发送失败。每个消息包的长度至多为 128 KB。
成功发送 RDT 消息后,远端用户会收到 on_rdt_msg 回调。你可以调用 agora_rtc_get_rdt_status_info 方法获取远端用户是否接收完消息等信息。
注解
每条连接限制传输 4 Mbps。如果超出,会返回如下错误码:
- ERR_RDT_CMD_EXCEED_LIMIT(603),控制消息的数量超过限制。
- ERR_RDT_DATA_EXCEED_LIMIT(604): 数据数据大小超出限制。
| 参数名 | 描述 |
|---|---|
conn_id | Connection ID。 |
remote_uid | 远端用户的用户 ID。 |
type | RDT 消息类型。详见 rdt_stream_type 。 |
msg | RDT 消息负载。 |
length | RDT 消息长度。 |
返回值
-
0: 方法调用成功。
-
< 0: 方法调用失败。
- RTC_ERR_RDT_USER_NOT_EXIST(600): 频道内不存在该远端用户。
- RTC_ERR_RDT_USER_NOT_READY(601): 未成功与远端用户建立连接。你需要等 RDT 通道的连接状态变为 RDT_STATE_OPENED 后重新调用该方法。
- RTC_ERR_RDT_DATA_BLOCKED(602): 发送缓冲区已满。你需要等 RDT 通道的连接状态变为 RDT_STATE_OPENED 后重新调用该方法。
- RTC_ERR_RDT_CMD_EXCEED_LIMIT(603): 控制消息的数量超过限制。每秒发送的控制消息包不能超过 4 Mbps。. - ERR_RDT_DATA_EXCEED_LIMIT(604): 数据数据大小超出限制。
agora_rtm_send_data()
agora_api int agora_rtm_send_data(const char * rtm_uid, const void * msg, size_t msg_len, uint32_t msg_id, rtm_message_type_e msg_type, const char * custom_type)通过 RTM 服务发送消息。
RTM 默认开启基于 TLS 加密的传输层安全保护且不可关闭。
注解
成功登录 RTM 服务并收到 agora_rtm_handler_t::on_rtm_event 回调时才可以发送消息。调用频率不能超过 3 秒 180 次。
| 参数名 | 描述 |
|---|---|
rtm_uid | RTM 用户 ID。 |
msg | 消息内容。 |
msg_len | 消息长度,单位是字节,取值至多为 31 KB。 |
msg_id | 消息 ID。 |
msg_type | 消息类型,必须为 RTM_MESSAGE_TYPE_BINARY 或 RTM_MESSAGE_TYPE_STRING 。 |
custom_type | 自定义消息类型,仅当 msg_type 为 RTM_MESSAGE_TYPE_STRING 时支持,最长 32 字节;未设置时为 NULL。 |
返回值
- 0: 方法调用成功。
- < 0: 方法调用失败。
agora_rtc_send_stream_message()
agora_api int agora_rtc_send_stream_message(connection_id_t conn_id, int stream_id, const char * data, size_t length)向频道内的所有用户发送数据流。
自从
v1.9.5
调用 agora_rtc_create_data_stream 后,你可以调用该方法向频道内所有用户发送数据流消息。
注解
-
该方法需要在加入频道后、且调用了 agora_rtc_create_data_stream 创建数据通道后调用。
-
SDK 对该方法的实现进行了如下限制:
- 单个频道里,每秒最多发送 60 个数据包,每个数据包的大小不能超过 1 KB。
- 频道内每个客户端最多可以同时拥有 5 个数据通道,每个数据通道每秒最多发送 6 KB 的数据流。所有数据通道共用的总发包码率限制为 30 Kbps。
成功调用该方法后,远端会触发 on_stream_message 回调,远端用户可以在该回调中获取接收到的流消息。
| 参数名 | 描述 |
|---|---|
stream_id | 发送的数据流 ID,在 agora_rtc_create_data_stream 方法的输出参数中返回。 |
data | 待发送的数据的指针。 |
length | 发送数据的大小。 |
返回值
- 0: 方法调用成功。
- < 0: 方法调用失败。
agora_rtc_send_video_data()
agora_api int agora_rtc_send_video_data(connection_id_t conn_id, const void * data_ptr, size_t data_len, video_frame_info_t * info_ptr)向指定 Connection 所关联的 RTC 频道发送视频帧。
| 参数名 | 描述 |
|---|---|
conn_id | Connection ID。设为 CONNECTION_ID_ALL 表示针对当前创建的所有 Connection 。你可以通过 agora_rtc_create_connection 创建 Connection。 |
data_ptr | 视频包数据。 |
data_len | 视频包数据大小(字节)。 |
info_ptr | 视频帧配置,详见 video_frame_info_t 。 |
返回值
- 0: 方法调用成功。
- < 0: 方法调用失败。
agora_rtc_set_bwe_param()
agora_api int agora_rtc_set_bwe_param(connection_id_t conn_id, uint32_t min_bps, uint32_t max_bps, uint32_t start_bps)设置 bandwidth estimation (BWE) 参数。
| 参数名 | 描述 |
|---|---|
conn_id | Connection ID。设为 CONNECTION_ID_ALL 表示针对当前创建的所有 Connection 。你可以通过 agora_rtc_create_connection 创建 Connection。 |
min_bps | 最小码率,单位为 bps。 |
max_bps | 最大码率,单位为 bps。 |
start_bps | 起始码率,单位为 bps。 |
返回值
- 0: 方法调用成功。
- < 0: 方法调用失败。
agora_rtc_set_log_level()
agora_api int agora_rtc_set_log_level(rtc_log_level_e level)设置 SDK 的日志输出等级。
设置一个级别后,你可以看到该级别及之前所有级别的日志信息。
| 参数名 | 描述 |
|---|---|
level | 日志输出等级。详见 rtc_log_level_e 。 |
返回值
- 0: 方法调用成功。
- < 0: 方法调用失败。
agora_rtc_set_params()
agora_api int agora_rtc_set_params(connection_id_t conn_id, const char * params)通过 JSON 配置 SDK 提供技术预览或特别定制功能。
JSON 选项默认不公开。声网工程师正在努力寻求以标准化方式公开 JSON 选项。
| 参数名 | 描述 |
|---|---|
connid | Connection ID。如果设为 CONNECTION_ID_ALL(0) 则表示所有 Connection。 |
params | JSON 字符串形式的参数。 |
返回值
- 0: 方法调用成功。
- < 0: 方法调用失败。
agora_rtm_publish()
agora_api int agora_rtm_publish(const char * channel_name, const void * message, size_t length, uint32_t msg_id, rtm_message_type_e msg_type, const char * custom_type)向 RTM 频道发布消息。
无需订阅该频道即可发布消息。最终发送结果通过 agora_rtm_handler_t::on_rtm_publish_result 回调报告。
| 参数名 | 描述 |
|---|---|
channel_name | 目标频道名称。 |
message | 消息数据。 |
length | 消息长度,单位为字节,取值至多为 31 KB。 |
msg_id | 由应用定义的消息 ID。 |
msg_type | 消息类型,必须为 RTM_MESSAGE_TYPE_BINARY 或 RTM_MESSAGE_TYPE_STRING 。 |
custom_type | 自定义消息类型,最长 31 字节;未设置时为 NULL。 |
返回值
- 0: 已接受发布请求。
- < 0: 方法调用失败。
agora_rtm_subscribe()
agora_api int agora_rtm_subscribe(const char * channel_name)异步订阅 RTM 频道。
订阅结果通过 agora_rtm_handler_t::on_rtm_subscribe_result 回调报告。
| 参数名 | 描述 |
|---|---|
channel_name | 要订阅的频道名称。 |
返回值
- 0: 已接受订阅请求。
- < 0: 方法调用失败。
agora_rtm_unsubscribe()
agora_api int agora_rtm_unsubscribe(const char * channel_name)同步取消订阅 RTM 频道。
| 参数名 | 描述 |
|---|---|
channel_name | 要取消订阅的频道名称。 |
返回值
- 0: 方法调用成功。
- < 0: 方法调用失败。