音视频流管理
介绍音视频数据流的管理方法和回调。
enableDualStreamMode [1/2]
在发送端开启或关闭双流模式。
public abstract int enableDualStreamMode(boolean enabled);
详情
- 弃用:
- 从 v4.2.0 起废弃,请改用 setDualStreamMode [1/2]。
- 视频大流:高分辨率、高帧率的视频流。
- 视频小流:低分辨率、低帧率的视频流。
开启双流模式后,你可以在收流端调用 setRemoteVideoStreamType 选择接收视频大流或视频小流。
- 该方法适用于发送端发送的所有类型的流,包括且不限于来自摄像头采集的视频流、屏幕共享流、自定义采集的视频流。
- 如果需要在多频道场景下开启视频双流,可以调用 enableDualStreamModeEx 方法。
- 该方法可以在加入频道前后调用。
参数
- enabled
-
是否开启双流模式。
true
: 开启双流模式。false
: (默认) 关闭双流模式。
返回值
- 0:方法调用成功。
- < 0:方法调用失败。
enableDualStreamMode [2/2]
在发送端开启或关闭双流模式并设置视频小流。
public abstract int enableDualStreamMode(boolean enabled, SimulcastStreamConfig streamConfig);
详情
- 弃用:
- 从 v4.2.0 起废弃,请改用 setDualStreamMode [2/2]。
- 视频大流:高分辨率、高帧率的视频流。
- 视频小流:低分辨率、低帧率的视频流。
开启双流模式后,你可以在收流端调用 setRemoteVideoStreamType 选择接收视频大流或视频小流。
- 该方法适用于发送端发送的所有类型的流,包括且不限于来自摄像头采集的视频流、屏幕共享流、自定义采集的视频流。
- 如果需要在多频道场景下开启视频双流,可以调用 enableDualStreamModeEx 方法。
- 该方法可以在加入频道前后调用。
参数
- enabled
-
是否开启双流模式:
true
: 开启双流模式。false
: (默认) 关闭双流模式。
- streamConfig
-
视频小流的配置。详见 SimulcastStreamConfig。
返回值
- 0: 方法调用成功
- < 0: 方法调用失败
muteAllRemoteAudioStreams
取消或恢复订阅所有远端用户的音频流。
public abstract int muteAllRemoteAudioStreams(boolean muted);
详情
成功调用该方法后,本地用户会取消或恢复订阅所有远端用户的音频流,包括在调用该方法后加入频道的用户的音频流。
- 该方法需要在加入频道后调用。
- 如果需要在加入频道前设置默认不订阅远端用户音频流,可以在调用 joinChannel [2/2] 加入频道时设置 autoSubscribeAudio 为
false
。 - 该方法的推荐设置详见设置订阅状态。
参数
- muted
-
是否取消订阅所有远端用户的音频流:
true
: 取消订阅所有远端用户的音频流。false
:(默认)订阅所有远端用户的音频流。
返回值
- 0: 方法调用成功
- < 0: 方法调用失败
muteAllRemoteVideoStreams
取消或恢复订阅所有远端用户的视频流。
public abstract int muteAllRemoteVideoStreams(boolean muted);
详情
成功调用该方法后,本地用户会取消或恢复订阅所有远端用户的视频流,包括在调用该方法后加入频道的用户的视频流。
- 该方法需要在加入频道后调用。
- 如果需要在加入频道前设置默认不订阅远端用户视频流,可以在调用 joinChannel [2/2] 加入频道时设置 autoSubscribeVideo 为
false
。
参数
- muted
-
是否取消订阅所有远端用户的视频流。
true
: 取消订阅所有用户的视频流。false
:(默认)订阅所有用户的视频流。
返回值
- 0: 方法调用成功。
- < 0: 方法调用失败。
muteLocalAudioStream
取消或恢复发布本地音频流。
public abstract int muteLocalAudioStream(boolean muted);
详情
成功调用该方法后,远端会触发 onUserMuteAudio 回调和 onRemoteAudioStateChanged 回调。
参数
- muted
-
是否取消发布本地音频流。
true
: 取消发布。false
:(默认)发布。
返回值
- 0: 方法调用成功
- < 0: 方法调用失败
muteLocalVideoStream
取消或恢复发布本地视频流。
public abstract int muteLocalVideoStream(boolean muted);
详情
成功调用该方法后,远端会触发 onUserMuteVideo 回调。
- 相比于 enableLocalVideo(
false
) 用于控制本地视频流发送的方法,该方法响应速度更快。 - 该方法不影响视频采集状态,没有禁用摄像头。
参数
- muted
-
是否取消发送本地视频流。
true
: 取消发送本地视频流。false
: (默认)发送本地视频流。
返回值
- 0: 方法调用成功
- < 0: 方法调用失败
muteRemoteAudioStream
取消或恢复订阅指定远端用户的音频流。
public abstract int muteRemoteAudioStream(int uid, boolean muted);
详情
- 该方法需要在加入频道后调用。
参数
- uid
- 指定用户的用户 ID。
- muted
-
是否取消订阅指定远端用户的音频流。
true
: 取消订阅指定用户的音频流。false
:(默认)订阅指定用户的音频流。
返回值
- 0: 方法调用成功
- < 0: 方法调用失败
muteRemoteVideoStream
取消或恢复订阅指定远端用户的视频流。
public abstract int muteRemoteVideoStream(int userId, boolean muted);
详情
- 该方法需要在加入频道后调用。
参数
- userId
- 指定用户的用户 ID。
- muted
-
是否取消订阅指定远端用户的视频流。
true
: 取消订阅指定用户的视频流。false
: (默认)订阅指定用户的视频流。
返回值
- 0:方法调用成功。
- < 0:方法调用失败。
pauseAllChannelMediaRelay
暂停向所有目标频道转发媒体流。
public abstract int pauseAllChannelMediaRelay();
详情
开始跨频道转发媒体流后,如果你需要暂停向所有频道转发媒体流,可以调用该方法;暂停后,如果要恢复跨频道媒体流转发,可以调用 resumeAllChannelMediaRelay 方法。
返回值
- 0: 方法调用成功。
- < 0: 方法调用失败。
resumeAllChannelMediaRelay
恢复向所有目标频道转发媒体流。
public abstract int resumeAllChannelMediaRelay();
详情
调用 pauseAllChannelMediaRelay 方法后,如果你需要恢复向所有目标频道转发媒体流,可以调用该方法。
返回值
- 0:方法调用成功。
- < 0:方法调用失败。
sendStreamMessage
发送数据流。
public abstract int sendStreamMessage(int streamId, byte[] message);
详情
- 频道内每秒最多能发送 30 个包,且每个包最大为 1 KB。
- 每个客户端每秒最多能发送 6 KB 数据。
- 频道内每人最多能同时有 5 个数据通道。
成功调用该方法后,远端会触发 onStreamMessage 回调,远端用户可以在该回调中获取接收到的流消息; 若调用失败,远端会触发 onStreamMessageError 回调。
- 请确保在调用该方法前,已调用 createDataStream [2/2] 创建了数据通道。
- 直播场景下,该方法仅适用于主播用户。
参数
- streamId
- 数据流 ID。可以通过 createDataStream [2/2] 获取。
- message
- 待发送的数据。
返回值
- 0: 方法调用成功。
- < 0: 方法调用失败。
setDualStreamMode [1/2]
在发送端设置双流模式。
public abstract int setDualStreamMode(Constants.SimulcastStreamMode mode);
详情
- 自从
- v4.0.1
- 如果你想修改此行为,可以调用该方法并修改 mode 为 DISABLE_SIMULCAST_STREAM(始终不发送小流)或 ENABLE_SIMULCAST_STREAM(始终发送小流)。
- 如果你在进行修改后又想恢复该默认行为,可重新调用该方法,并将 mode 设置为 AUTO_SIMULCAST_STREAM。
- 调用该方法并设置 mode 为 DISABLE_SIMULCAST_STREAM 时,跟
enableDualStreamMode [1/2](false)
的效果相同。 - 调用该方法并设置 mode 为 ENABLE_SIMULCAST_STREAM 时,跟
enableDualStreamMode [1/2](true)
的效果相同。 - 两种方法均可在加入频道前后调用,若同时使用,则以后调用的方法中的设置为准。
参数
- mode
- 发送视频流的模式。详见 SIMULCAST_STREAM_MODE。
返回值
- 0:方法调用成功。
- < 0:方法调用失败。
setDualStreamMode [2/2]
在发送端设置双流模式并设置视频小流。
public abstract int setDualStreamMode( Constants.SimulcastStreamMode mode, SimulcastStreamConfig streamConfig);
详情
- 自从
- v4.0.1
- 如果你想修改此行为,可以调用该方法并修改 mode 为 DISABLE_SIMULCAST_STREAM(始终不发送小流)或 ENABLE_SIMULCAST_STREAM(始终发送小流)。
- 如果你在进行修改后又想恢复该默认行为,可重新调用该方法,并将 mode 设置为 AUTO_SIMULCAST_STREAM。
该方法跟 setDualStreamMode [1/2] 的区别在于,该方法还可以进行视频小流的配置,SDK 会根据 streamConfig 中的配置发送小流。
- 调用该方法并设置 mode 为 DISABLE_SIMULCAST_STREAM 时,跟调用 并设置 enabled 为
false
的效果相同。 - 调用该方法并设置 mode 为 ENABLE_SIMULCAST_STREAM 时,跟调用 并设置 enabled 为
true
的效果相同。 - 两种方法均可在加入频道前后调用,若同时使用,则以后调用的方法中的设置为准。
参数
- mode
- 发送视频流的模式。详见 SIMULCAST_STREAM_MODE。
- streamConfig
-
视频小流的配置。详见 SimulcastStreamConfig。
注: 当设置 mode 为 DISABLE_SIMULCAST_STREAM 时,再设置 streamConfig 不会生效。
返回值
- 0: 方法调用成功
- < 0: 方法调用失败
setRemoteDefaultVideoStreamType
设置默认订阅的视频流类型。
public abstract int setRemoteDefaultVideoStreamType(int streamType);
详情
在网络条件受限的情况下,如果发送端没有调用 enableDualStreamMode [2/2] (false)
关闭双流模式,接收端可以选择接收大流还是小流。其中,大流为高分辨率高码率的视频流,小流则是低分辨率低码率的视频流。
正常情况下,用户默认接收大流。如需默认接收所有用户的视频小流,可以调用本方法进行切换。SDK 会根据视频窗口的大小动态调整对应视频流的大小,以节约带宽和计算资源。视频小流默认的宽高比和视频大流的宽高比一致。根据当前大流的宽高比,系统会自动分配小流的分辨率、帧率及码率。
SDK 默认在发送端开启小流 auto 模式(不主动发送小流),主播身份的接收端可以调用本方法在接收端发起小流申请(观众角色的接收端调用该方法不生效),发送端收到申请后自动切换为小流模式。
- 该方法只能在加入频道前调用。SDK 不支持你在加入频道后修改默认订阅的视频流类型。
- 如果你既调用了该方法,也调用了 setRemoteVideoStreamType,则 SDK 以 setRemoteVideoStreamType 中的设置为准。
参数
- streamType
-
默认订阅的视频流类型:
- VIDEO_STREAM_HIGH (0):视频大流,即高分辨率、高码率视频流。
- VIDEO_STREAM_LOW (1):视频小流,即低分辨率、低码率视频流。
返回值
- 0: 方法调用成功
- < 0: 方法调用失败
setRemoteVideoStreamType
设置订阅的视频流类型。
public abstract int setRemoteVideoStreamType(int uid, int streamType);
详情
在网络条件受限的情况下,如果发送端没有调用 enableDualStreamMode [2/2](false)
关闭双流模式,接收端可以调用该方法选择接收大流还是小流。其中,大流为高分辨率高码率的视频流,小流则是低分辨率低码率的视频流。
正常情况下,用户默认接收大流。如需接收小流,可以调用本方法进行切换。SDK 会根据视频窗口的大小动态调整对应视频流的大小,以节约带宽和计算资源。视频小流默认的宽高比和视频大流的宽高比一致。根据当前大流的宽高比,系统会自动分配小流的分辨率、帧率及码率。
SDK 默认在发送端开启小流 auto 模式(不主动发送小流),主播身份的接收端可以调用本方法在接收端发起小流申请(观众角色的接收端调用该方法不生效),发送端收到申请后自动切换为小流模式。
参数
- uid
- 用户 ID。
- streamType
-
视频流类型:
- 0:视频大流。
- 1:视频小流。
返回值
- 0: 方法调用成功
- < 0: 方法调用失败
setSubscribeAudioBlocklist
设置音频订阅黑名单。
public abstract int setSubscribeAudioBlocklist(int[] uidList);
详情
你可以调用该方法指定不订阅的音频流。
- 该方法在加入频道前后均可调用。
- 音频订阅黑名单不受 muteRemoteAudioStream、muteAllRemoteAudioStreams 以及 ChannelMediaOptions 中的 autoSubscribeAudio 影响。
- 设置订阅黑名单后,如果离开当前频道后再重新加入频道,黑名单依然生效。
- 如果某个用户同时在音频订阅黑名单和白名单中,仅订阅黑名单生效。
参数
- uidList
-
订阅黑名单的用户 ID 列表。
如果你想指定不订阅某一发流用户的音频流,将该用户的 ID 加入此列表中。如果你想要将某一用户从订阅黑名单中移除,需要重新调用 setSubscribeAudioBlocklist 方法更新订阅黑名单的用户 ID 列表,使其不包含你想移除的用户的 uid。
返回值
- 0: 方法调用成功。
- < 0: 方法调用失败。
setSubscribeAudioAllowlist
设置音频订阅白名单。
public abstract int setSubscribeAudioAllowlist(int[] uidList);
详情
你可以调用该方法指定想要订阅的音频流。
- 该方法在加入频道前后均可调用。
- 音频订阅白名单不受 muteRemoteAudioStream、muteAllRemoteAudioStreams 以及 ChannelMediaOptions 中的 autoSubscribeAudio 的影响。
- 设置订阅白名单后,如果离开当前频道后再重新加入频道,白名单依然生效。
- 如果某个用户同时在音频订阅黑名单和白名单中,仅订阅黑名单生效。
参数
- uidList
-
音频订阅白名单的用户 ID 列表。
如果你想指定订阅某一发流用户的音频流,将该用户的 ID 加入此列表中。如果你想要将某一用户从订阅白名单中移除,需要重新调用 setSubscribeAudioAllowlist 方法更新音频订阅白名单的用户 ID 列表,使其不包含你想移除的用户的 uid。
返回值
- 0: 方法调用成功。
- < 0: 方法调用失败。
setSubscribeVideoBlocklist
设置视频订阅黑名单。
public abstract int setSubscribeVideoBlocklist(int[] uidList);
详情
你可以调用该方法指定不订阅的视频流。
- 该方法在加入频道前后均可调用。
- 视频订阅黑名单不受 muteRemoteVideoStream、muteAllRemoteVideoStreams 以及 ChannelMediaOptions 中的 autoSubscribeVideo 的影响。
- 设置订阅黑名单后,如果离开当前频道后再重新加入频道,黑名单依然生效。
- 如果某个用户同时在音频订阅黑名单和白名单中,仅订阅黑名单生效。
参数
- uidList
-
视频订阅黑名单的用户 ID 列表。
如果你想指定不订阅某一发流用户的视频流,将该用户的 ID 加入此列表中。如果你想要将某一用户从订阅黑名单中移除,需要重新调用 setSubscribeVideoBlocklist 方法更新订阅黑名单的用户 ID 列表,使其不包含你想移除的用户的 uid。
返回值
- 0: 方法调用成功。
- < 0: 方法调用失败。
setSubscribeVideoAllowlist
设置视频订阅白名单。
public abstract int setSubscribeVideoAllowlist(int[] uidList);
详情
你可以调用该方法指定想要订阅的视频流。
- 该方法在加入频道前后均可调用。
- 视频订阅白名单不受 muteRemoteVideoStream、muteAllRemoteVideoStreams 以及 ChannelMediaOptions 中的 autoSubscribeVideo 的影响。
- 设置订阅白名单后,如果离开当前频道后再重新加入频道,白名单依然生效。
- 如果某个用户同时在音频订阅黑名单和白名单中,仅订阅黑名单生效。
参数
- uidList
-
视频订阅白名单的用户 ID 列表。
如果你想指定仅订阅某一发流用户的视频流,将该用户的 ID 加入此列表中。如果你想要将某一用户从订阅白名单中移除,需要重新调用 setSubscribeVideoAllowlist 方法更新音频订阅白名单的用户 ID 列表,使其不包含你想移除的用户的 uid。
返回值
- 0: 方法调用成功。
- < 0: 方法调用失败。
startChannelMediaRelay
开始跨频道媒体流转发。该方法可用于实现跨频道连麦等场景。
public abstract int startChannelMediaRelay( ChannelMediaRelayConfiguration channelMediaRelayConfiguration);
详情
- 弃用:
- 该方法已废弃。请改用 startOrUpdateChannelMediaRelay 。
- 如果 onChannelMediaRelayStateChanged 回调报告 RELAY_STATE_RUNNING (2) 和 RELAY_OK (0),且 onChannelMediaRelayEvent 回调报告 RELAY_EVENT_PACKET_SENT_TO_DEST_CHANNEL (4), 则表示 SDK 开始在源频道和目标频道之间转发媒体流。
- 如果 onChannelMediaRelayStateChanged 回调报告 RELAY_STATE_FAILURE (3), 则表示跨频道媒体流转发出现异常。
- 请在成功加入频道后调用该方法。
- 在直播场景中,只有角色为主播的用户才能调用该方法。
- 成功调用该方法后,若你想再次调用该方法,必须先调用 stopChannelMediaRelay 方法退出当前的转发状态。
- 跨频道媒体流转发功能需要联系技术支持开通。
- 该功能不支持 String 型 UID。
参数
- channelMediaRelayConfiguration
- 跨频道媒体流转发参数配置。详见 ChannelMediaRelayConfiguration。
返回值
- 0:方法调用成功
- < 0:方法调用失败。
- -1: 一般性的错误(未明确归类)。
- -2: 参数无效。
- -7: 方法调用被拒绝。可能因为 SDK 未初始化成功,或用户角色不是主播。
- -8:内部状态错误。可能因为用户角色不是主播。
startOrUpdateChannelMediaRelay
开始或更新跨频道媒体流转发。
public abstract int startOrUpdateChannelMediaRelay( ChannelMediaRelayConfiguration channelMediaRelayConfiguration);
详情
- 自从
- v4.2.0
首次成功调用该方法将开始跨频道转发媒体流。如需将流转发到多个目标频道,或退出当前的转发频道,可以再次调用该方法添加或移除转发的目标频道。该功能最多支持将媒体流转发至 6 个目标频道。
- 如果 onChannelMediaRelayStateChanged 回调报告 RELAY_STATE_RUNNING (2) 和 RELAY_OK (0), 则表示 SDK 开始在源频道和目标频道之间转发媒体流。
- 如果 onChannelMediaRelayStateChanged 回调报告 RELAY_STATE_FAILURE (3), 则表示跨频道媒体流转发出现异常。
- 请在成功加入频道后调用该方法。
- 在直播场景中,只有角色为主播的用户才能调用该方法。
- 跨频道媒体流转发功能需要联系技术支持开通。
- 该功能不支持 String 型 UID。
参数
- channelMediaRelayConfiguration
- 跨频道媒体流转发参数配置。详见 ChannelMediaRelayConfiguration。
返回值
- 0:方法调用成功
- < 0:方法调用失败。
- -1: 一般性的错误(未明确归类)。
- -2: 参数无效。
- -7: 方法调用被拒绝。可能因为 SDK 未初始化成功,或用户角色不是主播。
- -8:内部状态错误。可能因为用户角色不是主播。
updateChannelMediaRelay
更新媒体流转发的频道。
public abstract int updateChannelMediaRelay( ChannelMediaRelayConfiguration channelMediaRelayConfiguration);
详情
- 弃用:
- 该方法已废弃。请改用 startOrUpdateChannelMediaRelay 。
成功开始跨频道转发媒体流后,如果你希望将流转发到多个目标频道,或退出当前的转发频道,可以调用该方法。
成功调用该方法后,SDK 会触发 onChannelMediaRelayEvent 回调, 并在回调中报告状态码 RELAY_EVENT_PACKET_UPDATE_DEST_CHANNEL (7)。
onChannelMediaRelayStateChanged(RELAY_STATE_RUNNING, RELAY_OK)
后调用该方法;否则,方法调用会失败。参数
- channelMediaRelayConfiguration
- 跨频道媒体流转发参数配置。详见 ChannelMediaRelayConfiguration 。
返回值
- 0:方法调用成功
- < 0:方法调用失败
stopChannelMediaRelay
停止跨频道媒体流转发。一旦停止,主播会退出所有目标频道。
public abstract int stopChannelMediaRelay();
详情
成功调用该方法后,SDK 会触发 onChannelMediaRelayStateChanged 回调。如果报告 RELAY_STATE_IDLE (0) 和 RELAY_OK (0),则表示已停止转发媒体流。
返回值
- 0:方法调用成功。
- < 0:方法调用失败。
onChannelMediaRelayEvent
跨频道媒体流转发事件回调。
public void onChannelMediaRelayEvent(int code) {}
- 弃用:
- 该回调已废弃。
参数
- code
-
跨频道媒体流转发事件码:
- RELAY_EVENT_NETWORK_DISCONNECTED(0):网络中断导致用户与服务器连接断开。
- RELAY_EVENT_NETWORK_CONNECTED(1):用户与服务器建立连接。
- RELAY_EVENT_PACKET_JOINED_SRC_CHANNEL(2):用户已加入源频道。
- RELAY_EVENT_PACKET_JOINED_DEST_CHANNEL(3):用户已加入目标频道。
- RELAY_EVENT_PACKET_SENT_TO_DEST_CHANNEL(4):SDK 开始向目标频道发送数据包。
- RELAY_EVENT_PACKET_RECEIVED_VIDEO_FROM_SRC(5):服务器收到了目标频道发送的视频流。
- RELAY_EVENT_PACKET_RECEIVED_AUDIO_FROM_SRC(6):服务器收到了目标频道发送的音频流
- RELAY_EVENT_PACKET_UPDATE_DEST_CHANNEL(7):目标频道已更新。
- RELAY_EVENT_PACKET_UPDATE_DEST_CHANNEL_NOT_CHANGE(9):目标频道未发生改变,即目标频道更新失败。
- RELAY_EVENT_PACKET_UPDATE_DEST_CHANNEL_IS_NULL(10):目标频道名为
NULL
。 - RELAY_EVENT_VIDEO_PROFILE_UPDATE(11):视频属性已发送至服务器。
- RELAY_EVENT_PAUSE_SEND_PACKET_TO_DEST_CHANNEL_SUCCESS(12):暂停向目标频道转发媒体流成功。
- RELAY_EVENT_PAUSE_SEND_PACKET_TO_DEST_CHANNEL_FAILED(13):暂停向目标频道转发媒体流失败。
- RELAY_EVENT_RESUME_SEND_PACKET_TO_DEST_CHANNEL_SUCCESS(14):恢复向目标频道转发媒体流成功。
- RELAY_EVENT_RESUME_SEND_PACKET_TO_DEST_CHANNEL_FAILED(15):恢复向目标频道转发媒体流失败。
onChannelMediaRelayStateChanged
跨频道媒体流转发状态发生改变回调。
public void onChannelMediaRelayStateChanged(int state, int code) {}
当跨频道媒体流转发状态发生改变时,SDK 会触发该回调,并报告当前的转发状态以及相关的错误信息。
参数
- state
-
跨频道媒体流转发状态:
- RELAY_STATE_IDLE (0):SDK 正在初始化。
- RELAY_STATE_CONNECTING (1):SDK 尝试跨频道。
- RELAY_STATE_RUNNING (2):源频道主播成功加入目标频道。
- RELAY_STATE_FAILURE (3):发生异常,详见 code 中提示的错误信息。
- code
-
跨频道媒体流转发出错的错误码:
- RELAY_OK (0):一切正常。
- RELAY_ERROR_SERVER_ERROR_RESPONSE (1):服务器回应出错。
- RELAY_ERROR_SERVER_NO_RESPONSE (2):服务器无回应。该错误可能是网络状况不佳导致的。如果在发起跨频道连麦时报告该错误,你可以稍后重试;如果在跨频道连麦过程中报告该错误,你可以调用 leaveChannel [2/2] 方法离开频道。该错误也可能是由于当前的 App ID 未开启跨频道连麦服务导致的。你可以联系技术支持申请开通跨频道连麦服务。
- RELAY_ERROR_NO_RESOURCE_AVAILABLE (3):SDK 无法获取服务,可能是因为服务器资源有限导致。
- RELAY_ERROR_FAILED_JOIN_SRC (4):发起跨频道转发媒体流请求失败。
- RELAY_ERROR_FAILED_JOIN_DEST (5):接受跨频道转发媒体流请求失败。
- RELAY_ERROR_FAILED_PACKET_RECEIVED_FROM_SRC (6):服务器接收跨频道转发媒体流失败。
- RELAY_ERROR_FAILED_PACKET_SENT_TO_DEST (7):服务器发送跨频道转发媒体流失败。
- RELAY_ERROR_SERVER_CONNECTION_LOST (8):SDK 因网络质量不佳与服务器断开。你可以调用 leaveChannel [2/2] 方法离开当前频道。
- RELAY_ERROR_INTERNAL_ERROR (9):服务器内部出错。
- RELAY_ERROR_SRC_TOKEN_EXPIRED (10):源频道的 Token 已过期。
- RELAY_ERROR_DEST_TOKEN_EXPIRED (11):目标频道的 Token 已过期。
onAudioSubscribeStateChanged
音频订阅状态发生改变回调。
public void onAudioSubscribeStateChanged( String channel, int uid, int oldState, int newState, int elapseSinceLastState) {}
参数
- channel
- 频道名。
- uid
- 远端用户的 ID。
- oldState
- 之前的订阅状态。
- SUB_STATE_IDLE (0): 加入频道后的初始订阅状态。
- SUB_STATE_NO_SUBSCRIBED (1): 订阅失败。可能是因为:
- 远端用户:
- 调用 muteLocalAudioStream(
true
) 或 muteLocalVideoStream(true
) 停止发送本地媒体流。 - 调用 disableAudio 或 disableVideo 关闭本地音频或视频模块。
- 调用 enableLocalAudio(false) 或 enableLocalVideo(false) 关闭本地音频或视频采集。
- 用户角色为观众。
- 调用 muteLocalAudioStream(
- 本地用户调用以下方法停止接收远端媒体流:
- 调用 muteRemoteAudioStream(true)、 muteAllRemoteAudioStreams(true) 停止接收远端音频流。
- 调用 muteRemoteVideoStream(true)、 muteAllRemoteVideoStreams(true) 停止接收远端视频流。
- 远端用户:
- SUB_STATE_SUBSCRIBING (2): 正在订阅。
- SUB_STATE_SUBSCRIBED (3): 收到了远端流,订阅成功。
- newState
- 当前的订阅状态。
- SUB_STATE_IDLE (0): 加入频道后的初始订阅状态。
- SUB_STATE_NO_SUBSCRIBED (1): 订阅失败。可能是因为:
- 远端用户:
- 调用 muteLocalAudioStream(
true
) 或 muteLocalVideoStream(true
) 停止发送本地媒体流。 - 调用 disableAudio 或 disableVideo 关闭本地音频或视频模块。
- 调用 enableLocalAudio(
false
) 或 enableLocalVideo(false
) 关闭本地音频或视频采集。 - 用户角色为观众。
- 调用 muteLocalAudioStream(
- 本地用户调用以下方法停止接收远端媒体流:
- 调用 muteRemoteAudioStream(
true
)、 muteAllRemoteAudioStreams(true
) 停止接收远端音频流。 - 调用 muteRemoteVideoStream(
true
)、 muteAllRemoteVideoStreams(true
) 停止接收远端视频流。
- 调用 muteRemoteAudioStream(
- 远端用户:
- SUB_STATE_SUBSCRIBING (2): 正在订阅。
- SUB_STATE_SUBSCRIBED (3): 收到了远端流,订阅成功。
- elapseSinceLastState
- 两次状态变化时间间隔(毫秒)。