输入在线媒体流。
该方法适用于 Native SDK v2.4.1 及之后的版本。
该方法通过在服务端拉取一路视频流并发送到频道中,将正在播出的视频输入到正在进行的直播中。 可主要应用于赛事直播、多人看视频互动等直播场景。
调用该方法后,SDK 会在本地触发 streamInjectStatus
回调,报告导入在线媒体流的状态。
成功导入媒体流后,该音视频流会出现在频道中,频道内所有用户都会收到 userJoined
回调,其中 uid
为 666。
添加到直播中的媒体流 URL 地址,支持 RTMP, HLS, HTTP-FLV 协议。
外部导入的媒体流的配置。
2
: 输入的 URL 为空。请重新调用该方法,并确认输入的媒体流的 URL 是有效的。7
: 引擎没有初始化。请确认调用该方法前已创建 AgoraRtcChannel
对象并完成初始化。4
: 频道非直播场景。请调用 setChannelProfile 并将频道设置为直播场景再调用该方法。3
: 用户没有加入频道。增加旁路推流地址。
调用该方法后,SDK 会在本地触发 streamPublished 回调,报告增加旁路推流地址的状态。
CDN 推流地址,格式为 RTMP。该字符长度不能超过 1024 字节,且不支持中文等特殊字符。
设置是否转码:
true
,需先调用 setLiveTranscoding 方法。ERR_INVALID_ARGUMENT (2)
: RTMP 流地址为空或者字符长度为 0。ERR_NOT_INITIALIZED (7)
: 使用该功能之前没有初始化 AgoraRtcChannel
。远端用户 ID。
播放音量,取值范围为 [0,100]:
获取当前频道的频道名。
AgoraRtcChannel
创建数据流。
该方法用于创建数据流。AgoraRtcChannel
生命周期内,每个用户最多只能创建 5 个数据流。
true
:接收方 5 秒内会收到发送方所发送的数据,否则会收到 streamMessageError
回调并获得相应报错信息false
:接收方不保证收到,就算数据丢失也不会报错true
:接收方 5 秒内会按照发送方发送的顺序收到数据包false
:接收方不保证按照发送方发送的顺序收到数据包获取通话 ID。
客户端在每次 joinChannel 后会生成一个对应的 CallId
,标识该客户端的此次通话。
有些方法如 rate, complain 需要在通话结束后调用,向 SDK 提交反馈,这些方法必须指定 CallId
参数。
使用这些反馈方法,需要在通话过程中调用 getCallId
方法获取 CallId
,在通话结束后在反馈方法中作为参数传入。
通话 ID
获取当前网络连接状态。
connect 网络连接状态
通过 UID 加入频道。
AgoraRtcChannel.joinChannel 与 AgoraRtcEngine.joinChannel 方法有以下区别:
channel
参数。因为创建 AgoraRtcChannel
对象时已指定了 channel
。options
参数,可在加入频道前通过该参数设置是否订阅该频道的音视频流。AgoraRtcChannel
对象,并调用相应对象的 joinChannel
方法实现同
时加入多个频道。channelId
。options
参数。加入频道即默认订阅频道内的音视频流。在 App 服务器端生成的用于鉴权的 Token:
(非必选项)开发者需加入的任何附加信息。一般可设置为空字符串,或频道相关信息。该信息不会传递给频道内的其他用户。
用户 ID,32 位无符号整数。建议设置范围:1 到 232-1,并保证唯一性。如果不指定(即设为 0),SDK 会自动分配一个, 并在 joinChannelSuccess` 回调中返回,App 层必须记住该返回值并维护,SDK 不对该返回值进行维护。
频道媒体设置选项,详见 ChannelMediaOptions
2
,3
,5
使用 User Account 加入频道。
该方法允许本地用户使用 User Account 加入频道。成功加入频道后,会触发以下回调:
localUserRegistered
和 userInfoUpdated
userJoined
和 userInfoUpdated
回调在 App 服务器端生成的用于鉴权的 Token:
用户 User Account。该参数为必须,最大不超过 255 字节,不可为 NULL。请确保加入频道的 User Account 的唯一性。
频道媒体设置选项,详见 ChannelMediaOptions
2
,3
,5
离开频道。
离开频道,即机挂断或退出通话。
该方法会把回话相关的所有资源都释放掉。该方法是异步操作,调用返回时并没有真正退出频道。
真正退出频道后,本地会触发 leaveChannel
回调;通信场景下的用户和直播场景下的主播离开频道后,远端会触发 removeStream
回调。
接收/停止接收所有音频流。
停止/恢复接收所有视频流。
停止/恢复接收指定音频流。
如果之前有调用过 muteAllRemoteAudioStreams(true) 停止订阅所有远端
音频,在调用 muteRemoteAudioStreams
之前请确保你已调用 muteAllRemoteAudioStreams(false)。
muteAllRemoteAudioStreams
是全局控制,muteRemoteAudioStream
是精细控制。
指定的用户 ID
true
:停止接收指定用户的音频流false
:继续接收指定用户的音频流停止/恢复接收指定视频流。
如果之前有调用过 muteAllRemoteVideoStreams(true) 停止订阅所有远端
视频,在调用 muteRemoteVideoStreams
之前请确保你已调用 muteAllRemoteVideoStreams(false)。
muteAllRemoteVideoStreams
是全局控制,muteRemoteVideoStream
是精细控制。
指定用户的 ID
成功加入频道。
用户 ID
从调用 joinChannel 开始到发生此事件过去的时间(毫秒)
发生警告回调。
警告码
详细的警告信息
发生错误回调。
错误码
详细的错误信息
重新加入频道回调。
有时候由于网络原因,客户端可能会和服务器失去连接,SDK 会进行自动重连,自动重连成功后触发此回调方法。
用户 ID
从调用 joinChannel 开始到发生此事件过去的时间(毫秒)
用户离开频道。
调用 leaveChannel 离开频道后,SDK 触发该回调。
用户角色已切换回调。
回调由本地用户在加入频道后调用 setClientRole 改变用户角色触发的。
切换前的角色
切换后的角色
远端用户(通信场景)/主播(直播场景)加入当前频道回调。
该回调在如下情况下会被触发:
新加入频道的远端用户/主播 ID
从本地调用 joinChannel 到发生此事件过去的时间(毫秒)
远端用户离开当前频道回调。
用户离开频道有两个原因:
离线用户或主播的用户 ID。
离线原因
0
:用户主动离开。1
:因过长时间收不到对方数据包,超时掉线。注意:由于 SDK 使用的是不可靠通道,也有可能对方主动离开本方没收到对方离开消息而误判为超时掉线。2
:用户身份从主播切换为观众。网络连接中断,且 SDK 无法在 10 秒内连接服务器回调。
Token 已过期回调。
调用 joinChannel 时如果指定了 Token,由于 Token 具有一定的时效,在通话过程中 SDK 可能由于网络原因和服务器失去连接,重连时可能需要新的 Token。
该回调通知 App 需要生成新的 Token,并需调用 joinChannel 为 SDK 指定新的 Token。
Token 服务即将过期回调。
在调用 joinChannel 时如果指定了 Token,由于 Token 具有一定的时效,在通话过程中如果 Token 即将失效,SDK 会提前 30 秒触发该回调,提醒 App 更新 Token。当收到该回调时,用户需要重新在服务端生成新的 Token,然后调用 renewToken 将新生成的 Token 传给 SDK。
即将服务失效的 Token
通话相关统计信息。
通话信息详情
通话中每个用户的网络上下行 last mile 质量报告回调。
该回调描述每个用户在通话中的 last mile 网络状态,其中 last mile 是指设备到 Agora 边缘服务器的网络状态。
该回调每 2 秒触发一次。如果远端有多个用户,该回调每 2 秒会被触发多次。
用户 ID。表示该回调报告的是持有该 ID 的用户的网络质量。 当 uid 为 0 时,返回的是本地用户的网络质量
该用户的上行网络质量,基于上行发送码率、上行丢包率、平均往返时延和网络 抖动计算。
该用户的下行网络质量,基于下行网络的丢包率、平均往返延时和网络抖动计算。
通话中远端视频流的统计信息回调。
远端视频流统计信息
通话中远端音频流的统计信息回调。
远端音频流统计信息
远端音频流状态发生改变回调。
远端用户/主播音频状态发生改变时,SDK 会触发该回调向本地用户报告当前的远端音频流状态。
发生音频状态改变的远端用户 ID。
远端音频流状态码
远端音频流状态改变的原因码
从本地用户调用 joinChannel 方法到发生本事件经历的时间, 单位为 ms。
检测到活跃用户回调。
如果用户开启了 enableAudioVolumeIndication 功能,则当音量检测模块监测到频道内有新的活跃用户说话时,会通过本回调返回该用户的 uid
。
当前时间段内声音最大的用户的 uid
(本地用户 uid
为 0
)
用户 ID,指定是哪个用户的视频流
视频流宽(px)
视频流高(px)
从本地调用 joinChannel 到发生此事件过去的时间(毫秒)
用户 ID,指定是哪个用户的音频流
从本地用户调用 joinChannel 方法加入频道直至该回调触发的延迟,单位为毫秒
本地或远端视频大小和旋转信息发生改变回调。
图像尺寸和旋转信息发生变化的用户的用户 ID(本地用户的 uid
为 0
)
视频流的宽度(px)
视频流的高度(px)
旋转信息 [0, 360]
远端用户视频流状态发生改变回调。
发生视频流状态改变的远端用户的用户 ID。
远端视频流状态
远端视频流状态改变的具体原因
从本地用户调用 joinChannel 方法到发生本事件经历的时间,单位为 ms。
接收到对方数据流消息的回调。
该回调表示本地用户收到了远端用户调用 sendStreamMessage 方法发送的流消息。
用户 ID
数据流 ID
接收对方数据流小时发生错误回调。
该回调表示本地用户未收到远端用户调用 sendStreamMessage 方法发送的流消息。
用户 ID
数据流 ID
丢失的消息数量
数据流中断后,后面缓存的消息数量
跨频道媒体流转发状态发生改变回调。
当跨频道媒体流转发状态发生改变时,SDK 会触发该回调,并报告当前的转发状态以及相关的 错误信息。
跨频道媒体流转发状态码
跨频道媒体流转发出错的错误码
跨频道媒体流转发事件回调。
该回调报告跨频道媒体流转发过程中发生的事件。
跨频道媒体流转发事件码
发送音频帧的远端用户的 ID
从调用 joinChannel 方法直至该回调被触发的延迟(毫秒)
RTMP 推流状态发生改变回调。
该回调返回本地用户调用 addPublishStreamUrl 或 removePublishStreamUrl 方法的结果。
RTMP 推流状态发生改变时,SDK 会触发该回调,并在回调中明确状态发生改变的 URL 地址及 当前推流状态。该回调方便推流用户了解当前的推流状态;推流出错时,你可以通过返回的错误码 了解出错的原因,方便排查问题。
推流状态发生改变的 URL 地址
推流状态:
0
: 推流未开始或已结束。成功调用 removePublishStreamUrl 后会返回该状态。1
: 正在连接 Agora 推流服务器和 RTMP 服务器。调用 addPublishStreamUrl
后会返回该状态。2
: 推流正在进行。成功推流后,会返回该状态。3
: 正在恢复推流。当 CDN 出现异常,或推流短暂中断时,SDK 会自动尝试恢复推流,并返回该状态。2
。4
。如果觉得 60 秒太长,也可以主动调用
addPublishStreamUrl,再调用 removePublishStreamUrl 尝试重连。4
: 推流失败。失败后,你可以通过返回的错误码排查错误原因,也可以再次调用
addPublishStreamUrl 重新尝试推流。推流错误码:
0
: 推流成功。1
: 参数无效。请检查输入参数是否正确。2
: 推流已加密,不能推流。3
: 推流超时未成功。可调用 addPublishStreamUrl 重新推流。4
: 推流服务器出现错误。请调用 addPublishStreamUrl 重新推流。5
: RTMP 服务器出现错误。6
: 推流请求过于频繁。7
: 单个主播的推流地址数目达到上线 10。请删掉一些不用的推流地址再增加推流地址。8
: 主播操作不属于自己的流。例如更新其他主播的流参数、停止其他主播的流。请检查 App 逻辑。9
: 服务器未找到这个流。10
: 推流地址格式有错误。请检查推流地址格式是否正确。旁路推流设置被更新回调。该
回调用于通知主播 CDN 转码已成功更新。
setLiveTranscoding 方法中的转码合图参数(LiveTranscoding
)更新时,transcodingUpdated
回调会被触发并向主播报告更新信息。
输入在线媒体流状态回调。
addInjectStreamUrl 输入在线媒体流后,会触发该回调。
输入频道内的在线媒体流地址
输入流的主播 UID
输入流的状态:
0
: 输入频道成功。1
: 输入的该媒体流在频道内已存在。2
: 输入的该媒体流未经授权。3
: 输入媒体流超时。4
: 输入媒体流失败。5
: 停止输入媒体流成功。6
: 未找到要停止输入的媒体流。7
: 停止输入的该媒体流未经授权。8
: 停止输入媒体流超时。9
: 停止输入媒体流失败。10
: 输入媒体流被中断。远端订阅流已回退为音频流回调。
如果你调用了设置远端订阅流回退选项 setRemoteSubscribeFallbackOption 并将 option
设置为 2
时, 当下行网络环境不理想、仅接收远端音频流时,或当下行网络改善、恢复订阅音视频流时,会触发该回调。
远端订阅流因弱网环境不能同时满足音视频而回退为小流时,你可以使用 remoteVideoStats
回调来监控远端视频大小流的切换。
远端用户的 ID
远端订阅流已回退或恢复:
true
:由于网络环境不理想,远端订阅流已回退为音频流false
:由于网络环境改善,订阅的音频流已恢复为音视频流网络连接状态已改变回调。
该回调在网络连接状态发生改变的时候触发,并告知用户当前的网络连接状态,和引起网络状态改变的原因。
当前的网络连接状态
引起当前网络连接状态发生改变的原因
将本地音视频流发布到本频道。
该方法的调用需满足以下要求,否则 SDK 会返回错误码 ERR_REFUSED (5)
:
AgoraRtcChannel
类所对应的频道。AgoraRtcChannel
类下的
setClientRole 设置用户角色。ERR_REFUSED (5)
: 调用被拒绝释放 AgoraRtcChannel
所有资源。
调用该方法后,用户将无法再使用 AgoraRtcChannel 中的所有方法和回调。
删除输入的在线媒体流。
成功删除后,会触发 removeStream
回调,其中 uid
为 666
已导入、待删除的外部视频流 URL 地址
删除旁路推流地址。
调用该方法后,SDK 会在本地触发 streamUnpublished
回调,报告删除旁路推流地址的状态。
待删除的推流地址,格式为 RTMP。该字符长度不能超过 1024 字节。
更新 Token。
如果启用了 Token 机制,过一段时间后使用的 Token 会失效。当报告错误码 109
或 tokenPrivilegeWillExpire
回调时,
你应重新获取 Token,然后调用该 API 更新 Token,否则 SDK 无法和服务器建立连接。
新的 Token
发送数据流。
该方法发送数据流消息到频道内所有用户。
SDK 对该方法的实现进行了如下限制:频道内每秒最多能发送 30 个包,且每个包最大为 1 KB。 每个客户端每秒最多能发送 6 KB 数据。频道内每人最多能同时有 5 个数据通道。
成功调用该方法后,远端会触发 streamMessage
回调,远端用户可以在该回调中获取接收到的流消息;
若调用失败,远端会触发 streamMessageError
回调。
数据流 ID,createDataStream 的返回值
待发送的数据
设置直播场景下的用户角色。
加入频道前,用户需要通过本方法设置观众或主播模式。
加入频道后,用户可以通过本方法切换用户模式。直播场景下,如果你在加入频道后调用该方法切换用户角色,
调用成功后,本地会触发 clientRoleChanged
事件;远端会触发 userJoined
事件。
用户角色:
设置是否默认接收音频流。
该方法在加入频道前后都可调用。如果在加入频道后调用 setDefaultMuteAllRemoteAudioStreams (true)
,会接收不到后面加入频道的用户的音频流。
设置是否默认接收视频流。
该方法在加入频道前后都可调用。如果在加入频道后调用 setDefaultMuteAllRemoteVideoStreams (true)
,会接收不到设置后加入频道的用户的视频流。
设置内置的加密方案。
Agora Native SDK 支持内置加密功能,默认使用 AES-128-XTS 加密方式。如需使用其他加密方式,可以调用该 API 设置。
同一频道内的所有用户必须设置相同的加密方式和密码才能进行通话。关于这几种加密方式的区别,请参考 AES 加密算法的相关资料。
加密方式。目前支持以下几种:
启用内置加密,并设置数据加密密码。
如需启用加密,请在 joinChannel 前调用该方法,并设置加密的密码。 同一频道内的所有用户应设置相同的密码。当用户离开频道时,该频道的密码会自动清除。如果未指定密码或将密码设置为空,则无法激活加密功能。
加密密码
设置直播转码。
调用该方法更新 transcoding
参数时,SDK 会触发 transcodingUpdated
回调。
旁路推流转码合图相关设置
设置默认订阅的视频流类型。
在网络条件受限的情况下,如果发送端没有调用 enableDualStreamMode(false) 关闭双流模式, 接收端可以选择接收大流还是小流。其中,大流可以接为高分辨率高码率的视频流,小流则是低分辨率低码率的视频流。
正常情况下,用户接收大流。如需默认接收小流,可以调用本方法进行切换。SDK 会根据视频窗口的大小动态调整对应视频流的大小,以节约带宽和计算资源。
视频小流默认的宽高比和视频大流的宽高比一致。根据当前大流的宽高比,系统会自动分配小流的分辨率、帧率及码率。
设置视频流的类型:
设置订阅的视频流类型。
在网络条件受限的情况下,如果发送端没有调用 enableDualStreamMode(false) 关闭双流模式, 接收端可以选择接收大流还是小流。其中,大流可以接为高分辨率高码率的视频流,小流则是低分辨率低码率的视频流。
正常情况下,用户默认接收大流。如需接收小流,可以调用本方法进行切换。SDK 会根据视频窗口的大小动态调整对应视频流的大小,以节约带宽和计算资源。
视频小流默认的宽高比和视频大流的宽高比一致。根据当前大流的宽高比,系统会自动分配小流的分辨率、帧率及码率。
调用本方法的执行结果将在 apiCallExecuted
中返回。
用户 ID
视频流类型
设置远端用户声音的空间位置和音量,方便本地用户听声辨位。
用户通过调用该接口,设置远端用户声音出现的位置,左右声道的声音差异会让用户产生声音的方位感,从而判断出远端用户的实时位置。 在多人在线游戏场景,如吃鸡游戏中,该方法能有效增加游戏角色的方位感,模拟真实场景。
远端用户的 ID
设置远端用户声音出现的位置,取值范围为 [-1.0, 1.0]:
设置远端用户声音的音量,取值范围为 [0.0, 100.0],默认值为 100.0,表示该用户的原始音量。取值越小,则音量越低
开始跨频道媒体流转发。
该方法可用于实现跨频道连麦等场景。
成功调用该方法后,SDK 会触发 channelMediaRelayState
和 channelMediaRelayEvent
回调,并在回调中报告当前的跨频道媒体流转发状态和事件。
channelMediaRelayState
回调报告 ChannelMediaRelayState 中的
状态码 1
和 ChannelMediaRelayError 中错误码为 0
,且 channelMediaRelayEvent
回调报告
ChannelMediaRelayEvent 中的事件码 4
,则表示 SDK 开始在源频道和目标频道
之间转发媒体流。channelMediaRelayState
回调报告 ChannelMediaRelayState 中的
状态码 3
,则表示跨频道媒体流转发出现异常。跨频道媒体流转发参数配置
停止跨频道媒体流转发。
一旦停止,主播会退出所有目标频道。
成功调用该方法后,SDK 会触发 channelMediaRelayState
回调。
如果报告 ChannelMediaRelayState 中的状态码 0
和 ChannelMediaRelayError
中的错误码 0
,则表示已停止转发媒体流。
停止将本地音视频流发布到本频道。
请确保你想要 unpublish
音视频流的频道 channel
,与当前正在 publish 音
视频流的频道 channel
一致,否则 SDK 会返回 ERR_REFUSED (5)
。
ERR_REFUSED (5)
: 调用被拒绝更新媒体流转发的频道。
成功开始跨频道转发媒体流后,如果你希望将流转发到多个目标频道,或退出当前的转发频道,可以 调用该方法。
成功调用该方法后,SDK 会触发 channelMediaRelayState
回调,向你报告
ChannelMediaRelayEvent 中的 事件码 7
。
跨频道媒体流转发参数配置
v3.0.0
AgoraRtcChannel 类