# 发布和订阅 (/zh-CN/api-reference/rtc/android/publishnsubscribe)

> For AI agents: see the complete documentation index at [llms.txt](/llms.txt).

<a id="toc_publishnsubscribe"></a>

<a id="api_irtcengine_enabledualstreammode"></a>

<a id="ariaid-title2"></a>

## enableDualStreamMode [1/2] [#enabledualstreammode-12]

在发送端启用或禁用双流模式。

<a id="api_irtcengine_enabledualstreammode__prototype"></a>

```java
public abstract int enableDualStreamMode(boolean enabled)
```

<a id="api_irtcengine_enabledualstreammode__detailed_desc"></a>

<a id="废弃"></a>

:::error[废弃]
自 v4.2.0 版本废弃，请改用 `setDualStreamMode`。
:::

启用双流模式后，你可以调用 `setRemoteVideoStreamType` 方法，在订阅端选择接收视频大流或视频小流。
双流由以下两种视频流组成：

- 视频大流：高码率、高分辨率。
- 视频小流：低码率、低分辨率。

:::note
注：

- 该方法适用于发送端的所有类型视频流，包括但不限于摄像头采集的视频流、屏幕共享流和自定义采集的视频流。
- 如果你需要在多频道场景中启用双流模式，可以调用 [enableDualStreamModeEx](/zh-CN/api-reference/rtc/android/publishnsubscribe#api_irtcengineex_enabledualstreammodeex) 方法。
- 你可以在加入频道前或加入频道后调用该方法。
:::

<a id="api_irtcengine_enabledualstreammode__parameters"></a>

### 参数 [#参数]

<ParameterList>
<a id="enabled"></a>
<Parameter name="enabled">

是否启用双流模式：

- true：启用双流模式。
- false：（默认）禁用双流模式。

</Parameter>
</ParameterList>

<a id="api_irtcengine_enabledualstreammode__return_values"></a>

### 返回值 [#返回值]

- 0：方法调用成功。
- &lt; 0：方法调用失败。详见[错误码](/zh-CN/api-reference/rtc/error-code)了解详情和解决建议。

### 所属接口类 [#所属接口类]

- [RtcEngine](/zh-CN/api-reference/rtc/android/rtc-interface-class#class_irtcengine)

<a id="api_irtcengine_enabledualstreammode3"></a>

<a id="ariaid-title3"></a>

## enableDualStreamMode [2/2] [#enabledualstreammode-22]

设置发送端的双流模式和视频小流。

<a id="api_irtcengine_enabledualstreammode3__prototype"></a>

```java
public abstract int enableDualStreamMode(boolean enabled, SimulcastStreamConfig streamConfig)
```

<a id="api_irtcengine_enabledualstreammode3__detailed_desc"></a>

<a id="废弃-1"></a>

:::error[废弃]
自 v4.2.0 版本废弃，请改用 `setDualStreamMode`。
:::

你可以调用此方法在发送端启用或关闭双流模式。双流由一路视频大流和一路视频小流组成：

- 视频大流：高码率、高分辨率。
- 视频小流：低码率、低分辨率。

启用双流模式后，你可以调用 `setRemoteVideoStreamType` 方法，在接收端选择接收视频大流或视频小流。

:::note
注：

- 该方法适用于发送端的所有类型视频流，包括但不限于摄像头采集的视频流、屏幕共享流和自定义采集的视频流。
- 如果你需要在多频道场景中启用双流模式，可以调用 [enableDualStreamModeEx](/zh-CN/api-reference/rtc/android/publishnsubscribe#api_irtcengineex_enabledualstreammodeex) 方法。
- 你可以在加入频道前或加入频道后调用此方法。
:::

<a id="api_irtcengine_enabledualstreammode3__parameters"></a>

### 参数 [#参数-1]

<ParameterList>
<a id="enabled-1"></a>
<Parameter name="enabled">

是否启用双流模式：

- true：启用双流模式。
- false：（默认）关闭双流模式。

</Parameter>
<a id="streamconfig"></a>
<Parameter name="streamConfig">

视频小流的配置，详见 [SimulcastStreamConfig](/zh-CN/api-reference/rtc/android/class-simulcaststreamconfig)。

:::note
注： 当 `mode` 设置为 `DISABLE_SIMULCAST_STREAM` 时，设置 `streamConfig` 不生效。
:::

</Parameter>
</ParameterList>

<a id="api_irtcengine_enabledualstreammode3__return_values"></a>

### 返回值 [#返回值-1]

- 0：方法调用成功。
- &lt; 0：方法调用失败。详见[错误码](/zh-CN/api-reference/rtc/error-code)了解详情和解决建议。

### 所属接口类 [#所属接口类-1]

- [RtcEngine](/zh-CN/api-reference/rtc/android/rtc-interface-class#class_irtcengine)

<a id="api_irtcengineex_enabledualstreammodeex"></a>

<a id="ariaid-title4"></a>

## enableDualStreamModeEx [#enabledualstreammodeex]

在发送端启用或关闭双流模式。

<a id="api_irtcengineex_enabledualstreammodeex__prototype"></a>

```java
public abstract int enableDualStreamModeEx(boolean enabled, SimulcastStreamConfig streamConfig, RtcConnection connection);
```

<a id="api_irtcengineex_enabledualstreammodeex__detailed_desc"></a>

<a id="废弃-2"></a>

:::error[废弃]
自 v4.2.0 版本废弃。请使用 [setDualStreamModeEx](/zh-CN/api-reference/rtc/android/publishnsubscribe#api_irtcengineex_setdualstreammodeex) 代替。
:::

你可以调用此方法在发送端启用或关闭双流模式。双流由一对视频大流和视频小流组成：

- 视频大流：高码率，高分辨率。
- 视频小流：低码率，低分辨率。

启用双流模式后，你可以调用 `setRemoteVideoStreamType` 方法，在订阅端选择接收视频大流或视频小流。

:::note
注： 该方法适用于发送端的所有类型视频流，包括但不限于摄像头采集的视频流、屏幕共享流和自定义采集的视频流。
:::

<a id="api_irtcengineex_enabledualstreammodeex__scenario"></a>

### 适用场景 [#适用场景]

该方法适用于多频道场景。

<a id="api_irtcengineex_enabledualstreammodeex__parameters"></a>

### 参数 [#参数-2]

<ParameterList>
<a id="enabled-2"></a>
<Parameter name="enabled">

是否启用双流模式：

- true：启用双流模式。
- false：（默认）关闭双流模式。

</Parameter>
<a id="streamconfig-1"></a>
<Parameter name="streamConfig">

视频小流的配置，详见 [SimulcastStreamConfig](/zh-CN/api-reference/rtc/android/class-simulcaststreamconfig)。

:::note
注： 当 `mode` 设置为 `DISABLE_SIMULCAST_STREAM` 时，设置 `streamConfig` 不生效。
:::

</Parameter>
<a id="connection"></a>
<Parameter name="connection">

连接信息，详见 [RtcConnection](/zh-CN/api-reference/rtc/android/class-rtcconnection)。

</Parameter>
</ParameterList>

<a id="api_irtcengineex_enabledualstreammodeex__return_values"></a>

### 返回值 [#返回值-2]

- 0：方法调用成功。
- &lt; 0：方法调用失败。详见[错误码](/zh-CN/api-reference/rtc/error-code)了解详情和解决建议。

### 所属接口类 [#所属接口类-2]

- [RtcEngineEx](/zh-CN/api-reference/rtc/android/rtc-interface-class#class_irtcengineex)

<a id="api_irtcengine_muteallremoteaudiostreams"></a>

<a id="ariaid-title5"></a>

## muteAllRemoteAudioStreams [#muteallremoteaudiostreams]

停止或恢复订阅所有远端用户的音频流。

<a id="api_irtcengine_muteallremoteaudiostreams__prototype"></a>

```java
public abstract int muteAllRemoteAudioStreams(boolean muted);
```

<a id="api_irtcengine_muteallremoteaudiostreams__detailed_desc"></a>

请在加入频道后调用该方法。本地用户将停止或恢复订阅所有远端用户的音频流，包括之后加入频道的用户。

:::note
注： 如果你调用该方法后又调用了 [enableAudio](/zh-CN/api-reference/rtc/android/audio/audio-basic#api_irtcengine_enableaudio) 或 [disableAudio](/zh-CN/api-reference/rtc/android/audio/audio-basic#api_irtcengine_disableaudio)，以最后一次调用为准。默认情况下，加入频道时 SDK 会自动订阅所有远端用户的音频流。你可以在调用 `joinChannel` 加入频道时将 [ChannelMediaOptions](/zh-CN/api-reference/rtc/android/class-channelmediaoptions) 中的 `autoSubscribeAudio` 设置为 false，以取消加入频道时对所有用户音频流的订阅。
:::

<a id="api_irtcengine_muteallremoteaudiostreams__timing"></a>

### 调用时机 [#调用时机]

请在加入频道后调用该方法。

<a id="api_irtcengine_muteallremoteaudiostreams__parameters"></a>

### 参数 [#参数-3]

<ParameterList>
<a id="muted"></a>
<Parameter name="muted">

是否停止订阅所有远端用户的音频流：

- true：停止订阅所有远端用户的音频流。
- false：（默认）订阅所有远端用户的音频流。

</Parameter>
</ParameterList>

<a id="api_irtcengine_muteallremoteaudiostreams__return_values"></a>

### 返回值 [#返回值-3]

- 0：方法调用成功。
- &lt; 0：方法调用失败。详见[错误码](/zh-CN/api-reference/rtc/error-code)了解详情和解决建议。

### 所属接口类 [#所属接口类-3]

- [RtcEngine](/zh-CN/api-reference/rtc/android/rtc-interface-class#class_irtcengine)

<a id="api_irtcengineex_muteallremoteaudiostreamsex"></a>

<a id="ariaid-title6"></a>

## muteAllRemoteAudioStreamsEx [#muteallremoteaudiostreamsex]

停止或恢复订阅所有远端用户的音频流。

<a id="api_irtcengineex_muteallremoteaudiostreamsex__prototype"></a>

```java
public abstract int muteAllRemoteAudioStreamsEx(boolean muted, RtcConnection connection);
```

<a id="api_irtcengineex_muteallremoteaudiostreamsex__detailed_desc"></a>

<a id="api_irtcengineex_muteallremoteaudiostreamsex__scenario"></a>

### 适用场景 [#适用场景-1]

该方法适用于多频道场景。

<a id="api_irtcengineex_muteallremoteaudiostreamsex__timing"></a>

### 调用时机 [#调用时机-1]

- 请在加入频道后调用该方法。
- 如果你希望在加入频道前不订阅远端用户的音频流，可以在调用 `joinChannel` 时将 [ChannelMediaOptions](/zh-CN/api-reference/rtc/android/class-channelmediaoptions) 中的 `autoSubscribeAudio` 设置为 false。

<a id="api_irtcengineex_muteallremoteaudiostreamsex__parameters"></a>

### 参数 [#参数-4]

<ParameterList>
<a id="muted-1"></a>
<Parameter name="muted">

是否停止订阅所有远端用户的音频流：

- true：停止订阅所有远端用户的音频流。
- false：（默认）订阅所有远端用户的音频流。

</Parameter>
<a id="connection-1"></a>
<Parameter name="connection">

连接信息。详见 [RtcConnection](/zh-CN/api-reference/rtc/android/class-rtcconnection)。

</Parameter>
</ParameterList>

<a id="api_irtcengineex_muteallremoteaudiostreamsex__return_values"></a>

### 返回值 [#返回值-4]

- 0：方法调用成功。
- &lt; 0：方法调用失败。详见[错误码](/zh-CN/api-reference/rtc/error-code)了解详情和解决建议。

### 所属接口类 [#所属接口类-4]

- [RtcEngineEx](/zh-CN/api-reference/rtc/android/rtc-interface-class#class_irtcengineex)

<a id="api_irtcengine_muteallremotevideostreams"></a>

<a id="ariaid-title7"></a>

## muteAllRemoteVideoStreams [#muteallremotevideostreams]

停止或恢复订阅所有远端用户的视频流。

<a id="api_irtcengine_muteallremotevideostreams__prototype"></a>

```java
public abstract int muteAllRemoteVideoStreams(boolean muted);
```

<a id="api_irtcengine_muteallremotevideostreams__detailed_desc"></a>

请在加入频道后调用该方法。调用该方法后，本地用户将停止或恢复订阅所有远端用户的视频流，包括之后加入频道的用户。

:::note
注： 如果你调用该方法后又调用了 [enableVideo](/zh-CN/api-reference/rtc/android/video/video-basic#api_irtcengine_enablevideo) 或 [disableVideo](/zh-CN/api-reference/rtc/android/video/video-basic#api_irtcengine_disablevideo)，以最后一次调用为准。默认情况下，加入频道时 SDK 会自动订阅所有远端用户的视频流。你可以在调用 `joinChannel` 加入频道时将 [ChannelMediaOptions](/zh-CN/api-reference/rtc/android/class-channelmediaoptions) 中的 `autoSubscribeVideo` 设置为 false，以取消加入频道时对所有用户的视频流订阅。
:::

<a id="api_irtcengine_muteallremotevideostreams__timing"></a>

### 调用时机 [#调用时机-2]

请在加入频道后调用该方法。

<a id="api_irtcengine_muteallremotevideostreams__parameters"></a>

### 参数 [#参数-5]

<ParameterList>
<a id="muted-2"></a>
<Parameter name="muted">

是否停止订阅所有远端用户的视频流。

:::note
注：

- true：停止订阅所有远端用户的视频流。
- false：（默认）订阅所有远端用户的视频流。
:::

</Parameter>
</ParameterList>

<a id="api_irtcengine_muteallremotevideostreams__return_values"></a>

### 返回值 [#返回值-5]

- 0：方法调用成功。
- &lt; 0：方法调用失败。详见[错误码](/zh-CN/api-reference/rtc/error-code)了解详情和解决建议。

### 所属接口类 [#所属接口类-5]

- [RtcEngine](/zh-CN/api-reference/rtc/android/rtc-interface-class#class_irtcengine)

<a id="api_irtcengineex_muteallremotevideostreamsex"></a>

<a id="ariaid-title8"></a>

## muteAllRemoteVideoStreamsEx [#muteallremotevideostreamsex]

停止或恢复订阅所有远端用户的视频流。

<a id="api_irtcengineex_muteallremotevideostreamsex__prototype"></a>

```java
public abstract int muteAllRemoteVideoStreamsEx(boolean muted, RtcConnection connection);
```

<a id="api_irtcengineex_muteallremotevideostreamsex__detailed_desc"></a>

调用该方法后，你将停止或恢复订阅所有远端用户的视频流，包括之后加入频道的用户。

<a id="api_irtcengineex_muteallremotevideostreamsex__scenario"></a>

### 适用场景 [#适用场景-2]

该方法适用于多频道场景。

<a id="api_irtcengineex_muteallremotevideostreamsex__parameters"></a>

### 参数 [#参数-6]

<ParameterList>
<a id="muted-3"></a>
<Parameter name="muted">

是否停止订阅所有远端用户的视频流：

- true：停止订阅所有远端用户的视频流。
- false：默认订阅所有远端用户的视频流。

</Parameter>
<a id="connection-2"></a>
<Parameter name="connection">

连接信息。详见 [RtcConnection](/zh-CN/api-reference/rtc/android/class-rtcconnection)。

</Parameter>
</ParameterList>

<a id="api_irtcengineex_muteallremotevideostreamsex__return_values"></a>

### 返回值 [#返回值-6]

- 0：方法调用成功。
- &lt; 0：方法调用失败。详见[错误码](/zh-CN/api-reference/rtc/error-code)了解详情和解决建议。

### 所属接口类 [#所属接口类-6]

- [RtcEngineEx](/zh-CN/api-reference/rtc/android/rtc-interface-class#class_irtcengineex)

<a id="api_irtcengine_mutelocalaudiostream"></a>

<a id="ariaid-title9"></a>

## muteLocalAudioStream [#mutelocalaudiostream]

停止或恢复发布本地采集音频流。

<a id="api_irtcengine_mutelocalaudiostream__prototype"></a>

```java
public abstract int muteLocalAudioStream(boolean muted);
```

<a id="api_irtcengine_mutelocalaudiostream__detailed_desc"></a>

调用该方法停止发布本地音频流时，音频采集设备仍会正常工作，不受影响。

<a id="api_irtcengine_mutelocalaudiostream__timing"></a>

### 调用时机 [#调用时机-3]

该方法可以在加入频道前或加入频道后调用。

<a id="api_irtcengine_mutelocalaudiostream__related"></a>

### 相关回调 [#相关回调]

调用该方法成功后，本地会触发回调 [onAudioPublishStateChanged](/zh-CN/api-reference/rtc/android/publishnsubscribe#callback_irtcengineeventhandler_onaudiopublishstatechanged)；远端会触发回调 [onUserMuteAudio](/zh-CN/api-reference/rtc/android/audio/audio-basic#callback_irtcengineeventhandler_onusermuteaudio) 和 [onRemoteAudioStateChanged](/zh-CN/api-reference/rtc/android/audio/audio-basic#callback_irtcengineeventhandler_onremoteaudiostatechanged)。

<a id="api_irtcengine_mutelocalaudiostream__parameters"></a>

### 参数 [#参数-7]

<ParameterList>
<a id="muted-4"></a>
<Parameter name="muted">

是否停止发布本地音频流：

- true：停止发布本地音频流。
- false：（默认）恢复发布本地音频流。

</Parameter>
</ParameterList>

<a id="api_irtcengine_mutelocalaudiostream__return_values"></a>

### 返回值 [#返回值-7]

- 0：方法调用成功。
- &lt; 0：方法调用失败。详见[错误码](/zh-CN/api-reference/rtc/error-code)了解详情和解决建议。

### 所属接口类 [#所属接口类-7]

- [RtcEngine](/zh-CN/api-reference/rtc/android/rtc-interface-class#class_irtcengine)

<a id="api_irtcengineex_mutelocalaudiostreamex"></a>

<a id="ariaid-title10"></a>

## muteLocalAudioStreamEx [#mutelocalaudiostreamex]

停止或恢复发布本地音频流。

<a id="api_irtcengineex_mutelocalaudiostreamex__prototype"></a>

```java
public abstract int muteLocalAudioStreamEx(boolean muted, RtcConnection connection);
```

<a id="api_irtcengineex_mutelocalaudiostreamex__detailed_desc"></a>

成功调用该方法后，远端客户端会收到 [onUserMuteAudio](/zh-CN/api-reference/rtc/android/audio/audio-basic#callback_irtcengineeventhandler_onusermuteaudio) 和 [onRemoteAudioStateChanged](/zh-CN/api-reference/rtc/android/audio/audio-basic#callback_irtcengineeventhandler_onremoteaudiostatechanged) 回调。

:::note
注： 该方法不会影响任何正在进行的音频录制，因为它不会禁用音频采集设备。
:::

<a id="api_irtcengineex_mutelocalaudiostreamex__scenario"></a>

### 适用场景 [#适用场景-3]

该方法适用于多频道场景。

<a id="api_irtcengineex_mutelocalaudiostreamex__parameters"></a>

### 参数 [#参数-8]

<ParameterList>
<a id="muted-5"></a>
<Parameter name="muted">

是否停止发布本地音频流：

- true：停止发布本地音频流。
- false：（默认）恢复发布本地音频流。

</Parameter>
<a id="connection-3"></a>
<Parameter name="connection">

连接信息。详见 [RtcConnection](/zh-CN/api-reference/rtc/android/class-rtcconnection)。

</Parameter>
</ParameterList>

<a id="api_irtcengineex_mutelocalaudiostreamex__return_values"></a>

### 返回值 [#返回值-8]

- 0：方法调用成功。
- &lt; 0：方法调用失败。详见[错误码](/zh-CN/api-reference/rtc/error-code)了解详情和解决建议。

### 所属接口类 [#所属接口类-8]

- [RtcEngineEx](/zh-CN/api-reference/rtc/android/rtc-interface-class#class_irtcengineex)

<a id="api_irtcengine_mutelocalvideostream"></a>

<a id="ariaid-title11"></a>

## muteLocalVideoStream [#mutelocalvideostream]

停止或恢复发布本地视频流。

<a id="api_irtcengine_mutelocalvideostream__prototype"></a>

```java
public abstract int muteLocalVideoStream(boolean muted);
```

<a id="api_irtcengine_mutelocalvideostream__detailed_desc"></a>

该方法用于控制是否发布本地采集的视频流。调用该方法停止发布本地视频流时，视频采集设备仍会继续工作，不受影响。相比通过将 [enableLocalVideo](/zh-CN/api-reference/rtc/android/video/video-basic#api_irtcengine_enablelocalvideo) 设为 false 来关闭本地视频采集从而取消发布视频流，该方法响应更快。

<a id="api_irtcengine_mutelocalvideostream__timing"></a>

### 调用时机 [#调用时机-4]

该方法可以在加入频道前或加入频道后调用。

<a id="api_irtcengine_mutelocalvideostream__related"></a>

### 相关回调 [#相关回调-1]

调用该方法成功后，本地会触发回调 [onVideoPublishStateChanged](/zh-CN/api-reference/rtc/android/video/video-basic#callback_irtcengineeventhandler_onvideopublishstatechanged)；远端会触发回调 [onUserMuteVideo](/zh-CN/api-reference/rtc/android/video/video-basic#callback_irtcengineeventhandler_onusermutevideo) 和 [onRemoteVideoStateChanged](/zh-CN/api-reference/rtc/android/video/video-basic#callback_irtcengineeventhandler_onremotevideostatechanged)。

<a id="api_irtcengine_mutelocalvideostream__parameters"></a>

### 参数 [#参数-9]

<ParameterList>
<a id="muted-6"></a>
<Parameter name="muted">

是否停止发布本地视频流。

- true：停止发布本地视频流。
- false：（默认）发布本地视频流。

</Parameter>
</ParameterList>

<a id="api_irtcengine_mutelocalvideostream__return_values"></a>

### 返回值 [#返回值-9]

- 0：方法调用成功。
- &lt; 0：方法调用失败。详见[错误码](/zh-CN/api-reference/rtc/error-code)了解详情和解决建议。

### 所属接口类 [#所属接口类-9]

- [RtcEngine](/zh-CN/api-reference/rtc/android/rtc-interface-class#class_irtcengine)

<a id="api_irtcengineex_mutelocalvideostreamex"></a>

<a id="ariaid-title12"></a>

## muteLocalVideoStreamEx [#mutelocalvideostreamex]

停止或恢复发布本地视频流。

<a id="api_irtcengineex_mutelocalvideostreamex__prototype"></a>

```java
public abstract int muteLocalVideoStreamEx(boolean muted, RtcConnection connection);
```

<a id="api_irtcengineex_mutelocalvideostreamex__detailed_desc"></a>

成功调用该方法后，远端客户端会触发 [onUserMuteVideo](/zh-CN/api-reference/rtc/android/video/video-basic#callback_irtcengineeventhandler_onusermutevideo) 回调。

:::note
注： 该方法不会影响正在进行的视频录制，因为它不会关闭摄像头。
:::

<a id="api_irtcengineex_mutelocalvideostreamex__scenario"></a>

### 适用场景 [#适用场景-4]

该方法适用于多频道场景。

<a id="api_irtcengineex_mutelocalvideostreamex__parameters"></a>

### 参数 [#参数-10]

<ParameterList>
<a id="muted-7"></a>
<Parameter name="muted">

是否停止发布本地视频流。

- true：停止发布本地视频流。
- false：（默认）发布本地视频流。

</Parameter>
<a id="connection-4"></a>
<Parameter name="connection">

连接信息。详见 [RtcConnection](/zh-CN/api-reference/rtc/android/class-rtcconnection)。

</Parameter>
</ParameterList>

<a id="api_irtcengineex_mutelocalvideostreamex__return_values"></a>

### 返回值 [#返回值-10]

- 0：方法调用成功。
- &lt; 0：方法调用失败。详见[错误码](/zh-CN/api-reference/rtc/error-code)了解详情和解决建议。

### 所属接口类 [#所属接口类-10]

- [RtcEngineEx](/zh-CN/api-reference/rtc/android/rtc-interface-class#class_irtcengineex)

<a id="api_irtcengine_muteremoteaudiostream"></a>

<a id="ariaid-title13"></a>

## muteRemoteAudioStream [#muteremoteaudiostream]

停止或恢复订阅指定远端用户的音频流。

<a id="api_irtcengine_muteremoteaudiostream__prototype"></a>

```java
public abstract int muteRemoteAudioStream(int uid, boolean muted);
```

<a id="api_irtcengine_muteremoteaudiostream__detailed_desc"></a>

<a id="api_irtcengine_muteremoteaudiostream__timing"></a>

### 调用时机 [#调用时机-5]

在加入频道后调用该方法。

<a id="api_irtcengine_muteremoteaudiostream__related"></a>

### 相关回调 [#相关回调-2]

调用该方法成功后，SDK 会触发 [onAudioSubscribeStateChanged](/zh-CN/api-reference/rtc/android/publishnsubscribe#callback_irtcengineeventhandler_onaudiosubscribestatechanged) 回调。

<a id="api_irtcengine_muteremoteaudiostream__parameters"></a>

### 参数 [#参数-11]

<ParameterList>
<a id="uid"></a>
<Parameter name="uid">

指定远端用户的用户 ID。

</Parameter>
<a id="muted-8"></a>
<Parameter name="muted">

是否订阅指定远端用户的音频流：

- true：停止订阅该用户的音频流。
- false：订阅该用户的音频流。

</Parameter>
</ParameterList>

<a id="api_irtcengine_muteremoteaudiostream__return_values"></a>

### 返回值 [#返回值-11]

- 0：方法调用成功。
- &lt; 0：方法调用失败。详见[错误码](/zh-CN/api-reference/rtc/error-code)了解详情和解决建议。

### 所属接口类 [#所属接口类-11]

- [RtcEngine](/zh-CN/api-reference/rtc/android/rtc-interface-class#class_irtcengine)

<a id="api_irtcengineex_muteremoteaudiostreamex"></a>

<a id="ariaid-title14"></a>

## muteRemoteAudioStreamEx [#muteremoteaudiostreamex]

停止或恢复接收指定用户的音频流。

<a id="api_irtcengineex_muteremoteaudiostreamex__prototype"></a>

```java
public abstract int muteRemoteAudioStreamEx(int uid, boolean muted, RtcConnection connection);
```

<a id="api_irtcengineex_muteremoteaudiostreamex__detailed_desc"></a>

你可以在加入频道前或加入频道后调用该方法。如果用户离开频道，方法的设置将失效。

<a id="api_irtcengineex_muteremoteaudiostreamex__scenario"></a>

### 适用场景 [#适用场景-5]

该方法适用于多频道场景。

<a id="api_irtcengineex_muteremoteaudiostreamex__parameters"></a>

### 参数 [#参数-12]

<ParameterList>
<a id="uid-1"></a>
<Parameter name="uid">

指定用户的 ID。

</Parameter>
<a id="muted-9"></a>
<Parameter name="muted">

是否停止接收指定用户的音频流：

- true：停止接收指定用户的音频流。
- false：（默认）恢复接收指定用户的音频流。

</Parameter>
<a id="connection-5"></a>
<Parameter name="connection">

连接信息。详见 [RtcConnection](/zh-CN/api-reference/rtc/android/class-rtcconnection)。

</Parameter>
</ParameterList>

<a id="api_irtcengineex_muteremoteaudiostreamex__return_values"></a>

### 返回值 [#返回值-12]

- 0：方法调用成功。
- &lt; 0：方法调用失败。详见[错误码](/zh-CN/api-reference/rtc/error-code)了解详情和解决建议。

### 所属接口类 [#所属接口类-12]

- [RtcEngineEx](/zh-CN/api-reference/rtc/android/rtc-interface-class#class_irtcengineex)

<a id="api_irtcengine_muteremotevideostream"></a>

<a id="ariaid-title15"></a>

## muteRemoteVideoStream [#muteremotevideostream]

停止或恢复订阅指定远端用户的视频流。

<a id="api_irtcengine_muteremotevideostream__prototype"></a>

```java
public abstract int muteRemoteVideoStream(int uid, boolean muted);
```

<a id="api_irtcengine_muteremotevideostream__detailed_desc"></a>

<a id="api_irtcengine_muteremotevideostream__timing"></a>

### 调用时机 [#调用时机-6]

请在加入频道后调用该方法。

<a id="api_irtcengine_muteremotevideostream__related"></a>

### 相关回调 [#相关回调-3]

调用该方法成功后，SDK 会触发 [onVideoSubscribeStateChanged](/zh-CN/api-reference/rtc/android/publishnsubscribe#callback_irtcengineeventhandler_onvideosubscribestatechanged) 回调。

<a id="api_irtcengine_muteremotevideostream__parameters"></a>

### 参数 [#参数-13]

<ParameterList>
<a id="uid-2"></a>
<Parameter name="uid">

指定远端用户的用户 ID。

</Parameter>
<a id="muted-10"></a>
<Parameter name="muted">

是否订阅指定远端用户的视频流：

- true：停止订阅该用户的视频流。
- false：订阅该用户的视频流（默认）。

</Parameter>
</ParameterList>

<a id="api_irtcengine_muteremotevideostream__return_values"></a>

### 返回值 [#返回值-13]

- 0：方法调用成功。
- &lt; 0：方法调用失败。详见[错误码](/zh-CN/api-reference/rtc/error-code)了解详情和解决建议。

### 所属接口类 [#所属接口类-13]

- [RtcEngine](/zh-CN/api-reference/rtc/android/rtc-interface-class#class_irtcengine)

<a id="api_irtcengineex_muteremotevideostreamex"></a>

<a id="ariaid-title16"></a>

## muteRemoteVideoStreamEx [#muteremotevideostreamex]

停止或恢复接收指定用户的视频流。

<a id="api_irtcengineex_muteremotevideostreamex__prototype"></a>

```java
public abstract int muteRemoteVideoStreamEx(int uid, boolean muted, RtcConnection connection);
```

<a id="api_irtcengineex_muteremotevideostreamex__detailed_desc"></a>

你可以在加入频道前或加入频道后调用该方法。如果该用户离开频道，设置将失效。

<a id="api_irtcengineex_muteremotevideostreamex__scenario"></a>

### 适用场景 [#适用场景-6]

该方法适用于多频道场景。

<a id="api_irtcengineex_muteremotevideostreamex__parameters"></a>

### 参数 [#参数-14]

<ParameterList>
<a id="uid-3"></a>
<Parameter name="uid">

远端用户 ID。

</Parameter>
<a id="muted-11"></a>
<Parameter name="muted">

是否停止接收指定用户的视频流：

- true：停止接收指定用户的视频流。
- false：（默认）恢复接收指定用户的视频流。

</Parameter>
<a id="connection-6"></a>
<Parameter name="connection">

连接信息。详见 [RtcConnection](/zh-CN/api-reference/rtc/android/class-rtcconnection)。

</Parameter>
</ParameterList>

<a id="api_irtcengineex_muteremotevideostreamex__return_values"></a>

### 返回值 [#返回值-14]

- 0：方法调用成功。
- &lt; 0：方法调用失败。详见[错误码](/zh-CN/api-reference/rtc/error-code)了解详情和解决建议。

### 所属接口类 [#所属接口类-14]

- [RtcEngineEx](/zh-CN/api-reference/rtc/android/rtc-interface-class#class_irtcengineex)

<a id="api_irtcengine_setdualstreammode"></a>

<a id="ariaid-title17"></a>

## setDualStreamMode [1/2] [#setdualstreammode-12]

设置发送端的视频流模式，用于控制是否发送视频小流。

<a id="api_irtcengine_setdualstreammode__prototype"></a>

```java
public abstract int setDualStreamMode(Constants.SimulcastStreamMode mode);
```

<a id="api_irtcengine_setdualstreammode__detailed_desc"></a>

你可以调用该方法设置发送端的视频流模式。
SDK 默认在发送端启用视频小流自适应模式（`AUTO_SIMULCAST_STREAM`），即发送端不会主动发送视频小流。角色为主播的接收端可以通过调用 `setRemoteVideoStreamType` 发起视频小流请求，发送端在收到请求后会自动开始发送视频小流。

- 如果你希望修改此行为，可以调用该方法并将 `mode` 设置为 `DISABLE_SIMULCAST_STREAM`（从不发送视频小流）或 `ENABLE_SIMULCAST_STREAM`（始终发送视频小流）。
- 如果你希望恢复默认行为，可以再次调用该方法并将 `mode` 设置为 `AUTO_SIMULCAST_STREAM`。

:::note
注： 该方法与 `enableDualStreamMode` 的区别如下：

- 当调用该方法并将 `mode` 设置为 `DISABLE_SIMULCAST_STREAM` 时，效果等同于调用 `enableDualStreamMode(false)`。
- 当调用该方法并将 `mode` 设置为 `ENABLE_SIMULCAST_STREAM` 时，效果等同于调用 `enableDualStreamMode(true)`。
- 两个方法都可以在加入频道前或后调用。如果两个方法都被调用，则以后调用的方法设置优先生效。
:::

<a id="api_irtcengine_setdualstreammode__parameters"></a>

### 参数 [#参数-15]

<ParameterList>
<a id="mode"></a>
<Parameter name="mode">

发送视频流的模式。详见 [SimulcastStreamMode](/zh-CN/api-reference/rtc/android/enum-simulcaststreammode)。

</Parameter>
</ParameterList>

<a id="api_irtcengine_setdualstreammode__return_values"></a>

### 返回值 [#返回值-15]

- 0：方法调用成功。
- &lt; 0：方法调用失败。详见[错误码](/zh-CN/api-reference/rtc/error-code)了解详情和解决建议。

### 所属接口类 [#所属接口类-15]

- [RtcEngine](/zh-CN/api-reference/rtc/android/rtc-interface-class#class_irtcengine)

<a id="api_irtcengine_setdualstreammode2"></a>

<a id="ariaid-title18"></a>

## setDualStreamMode [2/2] [#setdualstreammode-22]

设置发送端的不同质量层级的视频流模式配置。

<a id="api_irtcengine_setdualstreammode2__prototype"></a>

```java
public abstract int setDualStreamMode(Constants.SimulcastStreamMode mode, SimulcastStreamConfig streamConfig);
```

<a id="api_irtcengine_setdualstreammode2__detailed_desc"></a>

SDK 默认在发送端开启视频小流自适应模式（`AUTO_SIMULCAST_STREAM`），即发送端不会主动发送视频小流。角色为主播的接收端可以通过调用 `setRemoteVideoStreamType` 发起视频小流请求，发送端在收到请求后会自动开始发送视频小流。

- 如果你希望修改该行为，可以调用该方法，并将 `mode` 设置为 `DISABLE_SIMULCAST_STREAM`（从不发送视频小流）或 `ENABLE_SIMULCAST_STREAM`（始终发送视频小流）。
- 如果你希望恢复默认行为，可以再次调用该方法，并将 `mode` 设置为 `AUTO_SIMULCAST_STREAM`。

:::note
注： 该方法与 `enableDualStreamMode` 的区别如下：

- 当调用该方法并将 `mode` 设置为 `DISABLE_SIMULCAST_STREAM` 时，效果等同于调用 `enableDualStreamMode` 并将 `enabled` 设置为 false。
- 当调用该方法并将 `mode` 设置为 `ENABLE_SIMULCAST_STREAM` 时，效果等同于调用 `enableDualStreamMode` 并将 `enabled` 设置为 true。
- 两个方法都可以在加入频道前或后调用。如果两个方法都被调用，则以后调用的方法设置优先生效。
:::

<a id="api_irtcengine_setdualstreammode2__parameters"></a>

### 参数 [#参数-16]

<ParameterList>
<a id="mode-1"></a>
<Parameter name="mode">

发送视频流的模式，详见 [SimulcastStreamMode](/zh-CN/api-reference/rtc/android/enum-simulcaststreammode)。

</Parameter>
<a id="streamconfig-2"></a>
<Parameter name="streamConfig">

视频小流的配置，详见 [SimulcastStreamConfig](/zh-CN/api-reference/rtc/android/class-simulcaststreamconfig)。

:::note
注： 当 `mode` 设置为 `DISABLE_SIMULCAST_STREAM` 时，设置该参数无效。
:::

</Parameter>
</ParameterList>

<a id="api_irtcengine_setdualstreammode2__return_values"></a>

### 返回值 [#返回值-16]

- 0：方法调用成功。
- &lt; 0：方法调用失败。详见[错误码](/zh-CN/api-reference/rtc/error-code)了解详情和解决建议。

### 所属接口类 [#所属接口类-16]

- [RtcEngine](/zh-CN/api-reference/rtc/android/rtc-interface-class#class_irtcengine)

<a id="api_irtcengineex_setdualstreammodeex"></a>

<a id="ariaid-title19"></a>

## setDualStreamModeEx [#setdualstreammodeex]

设置发送端的视频流模式，用于控制是否发送视频小流。

<a id="api_irtcengineex_setdualstreammodeex__prototype"></a>

```java
public abstract int setDualStreamModeEx(Constants.SimulcastStreamMode mode, SimulcastStreamConfig streamConfig, RtcConnection connection);
```

<a id="api_irtcengineex_setdualstreammodeex__detailed_desc"></a>

SDK 默认在发送端开启视频小流自适应模式（`AUTO_SIMULCAST_STREAM`）。角色为主播的接收端可以通过调用 `setRemoteVideoStreamTypeEx` 发起视频小流请求，发送端在收到请求后会自动开始发送视频小流。

- 如果你希望修改此行为，可以调用该方法并将 `mode` 设置为 `DISABLE_SIMULCAST_STREAM`（从不发送视频小流）或 `ENABLE_SIMULCAST_STREAM`（始终发送视频小流）。
- 如果你希望恢复默认行为，可以再次调用该方法并将 `mode` 设置为 `AUTO_SIMULCAST_STREAM`。

:::note
注： 该方法与 [enableDualStreamModeEx](/zh-CN/api-reference/rtc/android/publishnsubscribe#api_irtcengineex_enabledualstreammodeex) 的区别如下：

- 将 `mode` 设置为 `DISABLE_SIMULCAST_STREAM` 时，效果等同于调用 `enableDualStreamModeEx(false)`。
- 将 `mode` 设置为 `ENABLE_SIMULCAST_STREAM` 时，效果等同于调用 `enableDualStreamModeEx(true)`。
- 两个方法均可在加入频道前或后调用。如果两个方法都被调用，则以后调用的方法设置优先生效。
:::

<a id="api_irtcengineex_setdualstreammodeex__scenario"></a>

### 适用场景 [#适用场景-7]

该方法适用于多频道场景。

<a id="api_irtcengineex_setdualstreammodeex__parameters"></a>

### 参数 [#参数-17]

<ParameterList>
<a id="mode-2"></a>
<Parameter name="mode">

视频流发送模式。详见 [SimulcastStreamMode](/zh-CN/api-reference/rtc/android/enum-simulcaststreammode)。

</Parameter>
<a id="streamconfig-3"></a>
<Parameter name="streamConfig">

视频小流的配置。详见 [SimulcastStreamConfig](/zh-CN/api-reference/rtc/android/class-simulcaststreamconfig)。

:::note
注： 当 `mode` 设置为 `DISABLE_SIMULCAST_STREAM` 时，该参数不生效。
:::

</Parameter>
<a id="connection-7"></a>
<Parameter name="connection">

连接信息。详见 [RtcConnection](/zh-CN/api-reference/rtc/android/class-rtcconnection)。

</Parameter>
</ParameterList>

<a id="api_irtcengineex_setdualstreammodeex__return_values"></a>

### 返回值 [#返回值-17]

- 0：方法调用成功。
- &lt; 0：方法调用失败。详见[错误码](/zh-CN/api-reference/rtc/error-code)了解详情和解决建议。

### 所属接口类 [#所属接口类-17]

- [RtcEngineEx](/zh-CN/api-reference/rtc/android/rtc-interface-class#class_irtcengineex)

<a id="api_irtcengine_setremotedefaultvideostreamtype"></a>

<a id="ariaid-title20"></a>

## setRemoteDefaultVideoStreamType [1/2] [#setremotedefaultvideostreamtype-12]

设置默认订阅的视频流类型。

<a id="api_irtcengine_setremotedefaultvideostreamtype__prototype"></a>

```java
public abstract int setRemoteDefaultVideoStreamType(Constants.VideoStreamType streamType);
```

<a id="api_irtcengine_setremotedefaultvideostreamtype__detailed_desc"></a>

根据发送端的默认行为以及调用 `setDualStreamMode` 时的具体设置，接收端调用该方法的场景如下：

- SDK 默认在发送端开启视频小流自适应模式（`AUTO_SIMULCAST_STREAM`），即仅发送视频大流。只有角色为主播的接收端可以调用该方法发起视频小流请求。一旦发送端收到请求后，会自动开始发送视频小流。此时，频道内所有用户都可以调用该方法切换为订阅视频小流模式。
- 如果发送端调用 `setDualStreamMode` 并将 `mode` 设置为 `DISABLE_SIMULCAST_STREAM`（从不发送视频小流），则调用该方法无效。
- 如果发送端调用 `setDualStreamMode` 并将 `mode` 设置为 `ENABLE_SIMULCAST_STREAM`（始终发送视频小流），则主播和观众角色的接收端都可以调用该方法切换为订阅视频小流模式。

SDK 会根据视频窗口的大小动态调整对应视频流的尺寸，以节省带宽和计算资源。视频小流的默认宽高比与视频大流一致。系统会根据当前视频大流的宽高比，自动分配视频小流的分辨率、帧率和码率。

:::note
注： 如果同时调用该方法和 `setRemoteVideoStreamType`，则以 `setRemoteVideoStreamType` 的设置为准。
:::

<a id="api_irtcengine_setremotedefaultvideostreamtype__timing"></a>

### 调用时机 [#调用时机-7]

请在加入频道前调用该方法。SDK 不支持在加入频道后更改默认订阅的视频流类型。

<a id="api_irtcengine_setremotedefaultvideostreamtype__parameters"></a>

### 参数 [#参数-18]

<ParameterList>
<a id="streamtype"></a>
<Parameter name="streamType">

视频流类型。详见 [VideoStreamType](/zh-CN/api-reference/rtc/android/enum-videostreamtype)。

</Parameter>
</ParameterList>

<a id="api_irtcengine_setremotedefaultvideostreamtype__return_values"></a>

### 返回值 [#返回值-18]

- 0：方法调用成功。
- &lt; 0：方法调用失败。详见[错误码](/zh-CN/api-reference/rtc/error-code)了解详情和解决建议。

### 所属接口类 [#所属接口类-18]

- [RtcEngine](/zh-CN/api-reference/rtc/android/rtc-interface-class#class_irtcengine)

<a id="api_irtcengine_setremotedefaultvideostreamtype2"></a>

<a id="ariaid-title21"></a>

## setRemoteDefaultVideoStreamType [2/2] [#setremotedefaultvideostreamtype-22]

设置默认订阅的视频流类型。

<a id="api_irtcengine_setremotedefaultvideostreamtype2__prototype"></a>

```java
public abstract int setRemoteDefaultVideoStreamType(int streamType)
```

<a id="api_irtcengine_setremotedefaultvideostreamtype2__detailed_desc"></a>

<a id="废弃-3"></a>

:::error[废弃]
该方法已废弃，请改用 [setRemoteDefaultVideoStreamType [1/2]](/zh-CN/api-reference/rtc/android/publishnsubscribe#api_irtcengine_setremotedefaultvideostreamtype)。
:::

根据发送端的默认行为以及调用 `setDualStreamMode` 时的具体设置，接收端调用该方法的场景如下：

- SDK 默认在发送端启用视频小流自适应模式（`AUTO_SIMULCAST_STREAM`），即仅发送视频大流。只有角色为主播的接收端可以调用该方法发起视频小流请求。一旦发送端收到请求后，会自动开始发送视频小流。此时，频道内所有用户都可以调用该方法切换为订阅视频小流模式。
- 如果发送端调用 `setDualStreamMode` 并将 `mode` 设置为 `DISABLE_SIMULCAST_STREAM`（从不发送视频小流），则调用该方法无效。
- 如果发送端调用 `setDualStreamMode` 并将 `mode` 设置为 `ENABLE_SIMULCAST_STREAM`（始终发送视频小流），则主播和观众角色的接收端都可以调用该方法切换为订阅视频小流模式。

SDK 会根据视频窗口的大小动态调整对应视频流的尺寸，以节省带宽和计算资源。视频小流的默认宽高比与视频大流一致。系统会根据当前视频大流的宽高比，自动分配视频小流的分辨率、帧率和码率。

:::note
注： 如果同时调用该方法和 `setRemoteVideoStreamType`，则以 `setRemoteVideoStreamType` 的设置为准。
:::

<a id="api_irtcengine_setremotedefaultvideostreamtype2__timing"></a>

### 调用时机 [#调用时机-8]

请在加入频道前调用该方法。SDK 不支持在加入频道后更改默认订阅的视频流类型。

<a id="api_irtcengine_setremotedefaultvideostreamtype2__parameters"></a>

### 参数 [#参数-19]

<ParameterList>
<a id="streamtype-1"></a>
<Parameter name="streamType">

默认订阅的视频流类型：

- `VIDEO_STREAM_HIGH`（0）：视频大流，即高分辨率和高码率的视频流。
- `VIDEO_STREAM_LOW`（1）：视频小流，即低分辨率和低码率的视频流。

</Parameter>
</ParameterList>

<a id="api_irtcengine_setremotedefaultvideostreamtype2__return_values"></a>

### 返回值 [#返回值-19]

- 0：方法调用成功。
- &lt; 0：方法调用失败。详见[错误码](/zh-CN/api-reference/rtc/error-code)了解详情和解决建议。

### 所属接口类 [#所属接口类-19]

- [RtcEngine](/zh-CN/api-reference/rtc/android/rtc-interface-class#class_irtcengine)

<a id="api_irtcengine_setremotevideostreamtype"></a>

<a id="ariaid-title22"></a>

## setRemoteVideoStreamType [1/2] [#setremotevideostreamtype-12]

设置要订阅的视频流类型。

<a id="api_irtcengine_setremotevideostreamtype__prototype"></a>

```java
public abstract int setRemoteVideoStreamType(int uid, Constants.VideoStreamType streamType);
```

<a id="api_irtcengine_setremotevideostreamtype__detailed_desc"></a>

根据发送端的默认行为以及调用 `setDualStreamMode` 时的具体设置，接收端调用该方法的场景如下：

- SDK 默认在发送端开启视频小流自适应模式（`AUTO_SIMULCAST_STREAM`），即仅发送视频大流。只有角色为主播的接收端可以调用该方法发起视频小流请求。发送端收到请求后，会自动开始发送视频小流。此时，频道内所有用户都可以调用该方法切换为订阅视频小流模式。
- 如果发送端调用 `setDualStreamMode` 并将 `mode` 设置为 `DISABLE_SIMULCAST_STREAM`（从不发送视频小流），则调用该方法无效。
- 如果发送端调用 `setDualStreamMode` 并将 `mode` 设置为 `ENABLE_SIMULCAST_STREAM`（始终发送视频小流），则主播和观众角色的接收端都可以调用该方法切换为订阅视频小流模式。

SDK 会根据视频窗口的大小动态调整对应视频流的尺寸，以节省带宽和计算资源。视频小流的默认宽高比与视频大流一致。系统会根据当前视频大流的宽高比，自动分配视频小流的分辨率、帧率和码率。

:::note
注：

- 可以在加入频道前或加入频道后调用该方法。
- 如果同时调用该方法和 `setRemoteDefaultVideoStreamType`，则以该方法的设置为准。
:::

<a id="api_irtcengine_setremotevideostreamtype__parameters"></a>

### 参数 [#参数-20]

<ParameterList>
<a id="uid-4"></a>
<Parameter name="uid">

远端用户 ID。

</Parameter>
<a id="streamtype-2"></a>
<Parameter name="streamType">

视频流类型。详见 [VideoStreamType](/zh-CN/api-reference/rtc/android/enum-videostreamtype)。

</Parameter>
</ParameterList>

<a id="api_irtcengine_setremotevideostreamtype__return_values"></a>

### 返回值 [#返回值-20]

- 0：方法调用成功。
- &lt; 0：方法调用失败。详见[错误码](/zh-CN/api-reference/rtc/error-code)了解详情和解决建议。

### 所属接口类 [#所属接口类-20]

- [RtcEngine](/zh-CN/api-reference/rtc/android/rtc-interface-class#class_irtcengine)

<a id="api_irtcengine_setremotevideostreamtype2"></a>

<a id="ariaid-title23"></a>

## setRemoteVideoStreamType [2/2] [#setremotevideostreamtype-22]

设置要订阅的视频流类型。

<a id="api_irtcengine_setremotevideostreamtype2__prototype"></a>

```java
public abstract int setRemoteVideoStreamType(int uid, int streamType)
```

<a id="api_irtcengine_setremotevideostreamtype2__detailed_desc"></a>

<a id="废弃-4"></a>

:::error[废弃]
该方法已废弃，请改用 `setRemoteVideoStreamType(int uid, Constants.VideoStreamType streamType)`。
:::

根据发送端的默认行为以及调用 `setDualStreamMode` 时的具体设置，接收端调用此方法的场景如下：

- SDK 默认在发送端启用视频小流自适应模式（`AUTO_SIMULCAST_STREAM`），即仅发送视频大流。只有角色为主播的接收端可以调用此方法发起视频小流请求。一旦发送端收到请求后，会自动开始发送视频小流。此时，频道内所有用户都可以调用此方法切换为订阅视频小流模式。
- 如果发送端调用 `setDualStreamMode` 并将 `mode` 设置为 `DISABLE_SIMULCAST_STREAM`（从不发送视频小流），则调用此方法无效。
- 如果发送端调用 `setDualStreamMode` 并将 `mode` 设置为 `ENABLE_SIMULCAST_STREAM`（始终发送视频小流），则主播和观众角色的接收端都可以调用此方法切换为订阅视频小流模式。

SDK 会根据视频窗口的大小动态调整对应视频流的尺寸，以节省带宽和计算资源。视频小流的默认宽高比与视频大流相同。系统会根据当前视频大流的宽高比，自动分配视频小流的分辨率、帧率和码率。

:::note
注：

- 可以在加入频道前或后调用此方法。
- 如果同时调用此方法和 `setRemoteDefaultVideoStreamType`，则以此方法的设置为准。
:::

<a id="api_irtcengine_setremotevideostreamtype2__parameters"></a>

### 参数 [#参数-21]

<ParameterList>
<a id="uid-5"></a>
<Parameter name="uid">

远端用户 ID。

</Parameter>
<a id="streamtype-3"></a>
<Parameter name="streamType">

视频流类型：

- 0：视频大流。
- 1：视频小流。

</Parameter>
</ParameterList>

<a id="api_irtcengine_setremotevideostreamtype2__return_values"></a>

### 返回值 [#返回值-21]

- 0：方法调用成功。
- &lt; 0：方法调用失败。详见[错误码](/zh-CN/api-reference/rtc/error-code)了解详情和解决建议。

### 所属接口类 [#所属接口类-21]

- [RtcEngine](/zh-CN/api-reference/rtc/android/rtc-interface-class#class_irtcengine)

<a id="api_irtcengineex_setremotevideostreamtypeex"></a>

<a id="ariaid-title24"></a>

## setRemoteVideoStreamTypeEx [1/2] [#setremotevideostreamtypeex-12]

设置要订阅的视频流类型。

<a id="api_irtcengineex_setremotevideostreamtypeex__prototype"></a>

```java
public abstract int setRemoteVideoStreamTypeEx(int uid, Constants.VideoStreamType streamType, RtcConnection connection);
```

<a id="api_irtcengineex_setremotevideostreamtypeex__detailed_desc"></a>

根据发送端的默认行为以及调用 [setDualStreamModeEx](/zh-CN/api-reference/rtc/android/publishnsubscribe#api_irtcengineex_setdualstreammodeex) 时的具体设置，接收端调用该方法的场景如下：

- SDK 默认在发送端开启视频小流自适应模式（`AUTO_SIMULCAST_STREAM`），即仅发送视频大流。此时，仅角色为 Host 的接收端可以调用该方法发起视频小流请求。一旦发送端收到请求后，会自动开始发送视频小流。此时，频道内所有用户均可调用该方法切换为视频小流订阅模式。
- 如果发送端调用 `setDualStreamMode` 并将 `mode` 设置为 `DISABLE_SIMULCAST_STREAM`（从不发送视频小流），则调用该方法无效。
- 如果发送端调用 `setDualStreamMode` 并将 `mode` 设置为 `ENABLE_SIMULCAST_STREAM`（始终发送视频小流），则 Host 和 Audience 角色的接收端均可调用该方法切换为视频小流订阅模式。

SDK 会根据视频窗口的大小动态调整对应视频流的尺寸，以节省带宽和计算资源。视频小流的默认宽高比与视频大流一致。系统会根据当前视频大流的宽高比，自动分配视频小流的分辨率、帧率和码率。

:::note
注： 如果发送端已调用 [setDualStreamModeEx](/zh-CN/api-reference/rtc/android/publishnsubscribe#api_irtcengineex_setdualstreammodeex) 并将 `mode` 设置为 `DISABLE_SIMULCAST_STREAM`，则调用该方法无效。你需要在发送端再次调用 [setDualStreamModeEx](/zh-CN/api-reference/rtc/android/publishnsubscribe#api_irtcengineex_setdualstreammodeex) 并调整设置。
:::

<a id="api_irtcengineex_setremotevideostreamtypeex__scenario"></a>

### 适用场景 [#适用场景-8]

该方法适用于多频道场景。

<a id="api_irtcengineex_setremotevideostreamtypeex__parameters"></a>

### 参数 [#参数-22]

<ParameterList>
<a id="uid-6"></a>
<Parameter name="uid">

远端用户 ID。

</Parameter>
<a id="streamtype-4"></a>
<Parameter name="streamType">

视频流类型，详见 [VideoStreamType](/zh-CN/api-reference/rtc/android/enum-videostreamtype)。

</Parameter>
<a id="connection-8"></a>
<Parameter name="connection">

连接信息，详见 [RtcConnection](/zh-CN/api-reference/rtc/android/class-rtcconnection)。

</Parameter>
</ParameterList>

<a id="api_irtcengineex_setremotevideostreamtypeex__return_values"></a>

### 返回值 [#返回值-22]

- 0：方法调用成功。
- &lt; 0：方法调用失败。详见[错误码](/zh-CN/api-reference/rtc/error-code)了解详情和解决建议。

### 所属接口类 [#所属接口类-22]

- [RtcEngineEx](/zh-CN/api-reference/rtc/android/rtc-interface-class#class_irtcengineex)

<a id="api_irtcengineex_setremotevideostreamtypeex2"></a>

<a id="ariaid-title25"></a>

## setRemoteVideoStreamTypeEx [2/2] [#setremotevideostreamtypeex-22]

设置要订阅的视频流类型。

<a id="api_irtcengineex_setremotevideostreamtypeex2__prototype"></a>

```java
public abstract int setRemoteVideoStreamTypeEx(int uid, int streamType, RtcConnection connection);
```

<a id="api_irtcengineex_setremotevideostreamtypeex2__detailed_desc"></a>

<a id="废弃-5"></a>

:::error[废弃]
该方法已废弃，请改用 [setRemoteVideoStreamTypeEx [1/2]](/zh-CN/api-reference/rtc/android/publishnsubscribe#api_irtcengineex_setremotevideostreamtypeex)。
:::

根据发送端的默认行为以及调用 [setDualStreamModeEx](/zh-CN/api-reference/rtc/android/publishnsubscribe#api_irtcengineex_setdualstreammodeex) 时的具体设置，接收端调用该方法的场景如下：

- SDK 默认在发送端启用视频小流自适应模式（`AUTO_SIMULCAST_STREAM`），即仅发送视频大流。只有角色为主播的接收端可以调用该方法发起视频小流请求。一旦发送端收到请求，会自动开始发送视频小流。此时，频道内所有用户都可以调用该方法切换为视频小流订阅模式。
- 如果发送端调用 `setDualStreamMode` 并将 `mode` 设置为 `DISABLE_SIMULCAST_STREAM`（从不发送视频小流），则调用该方法无效。
- 如果发送端调用 `setDualStreamMode` 并将 `mode` 设置为 `ENABLE_SIMULCAST_STREAM`（始终发送视频小流），则主播和观众角色的接收端都可以调用该方法切换为视频小流订阅模式。

SDK 会根据视频窗口的大小动态调整对应视频流的尺寸，以节省带宽和计算资源。视频小流的默认宽高比与视频大流一致。系统会根据当前视频大流的宽高比，自动分配视频小流的分辨率、帧率和码率。

:::note
注： 如果发送端已调用 [setDualStreamModeEx](/zh-CN/api-reference/rtc/android/publishnsubscribe#api_irtcengineex_setdualstreammodeex) 并将 `mode` 设置为 `DISABLE_SIMULCAST_STREAM`（从不发送视频小流），则调用该方法无效。你应在发送端重新调用 [setDualStreamModeEx](/zh-CN/api-reference/rtc/android/publishnsubscribe#api_irtcengineex_setdualstreammodeex) 并调整设置。
:::

<a id="api_irtcengineex_setremotevideostreamtypeex2__scenario"></a>

### 适用场景 [#适用场景-9]

该方法适用于多频道场景。

<a id="api_irtcengineex_setremotevideostreamtypeex2__parameters"></a>

### 参数 [#参数-23]

<ParameterList>
<a id="uid-7"></a>
<Parameter name="uid">

远端用户 ID。

</Parameter>
<a id="streamtype-5"></a>
<Parameter name="streamType">

视频流类型：

- 0：视频大流。
- 1：视频小流。

</Parameter>
<a id="connection-9"></a>
<Parameter name="connection">

连接信息。详见 [RtcConnection](/zh-CN/api-reference/rtc/android/class-rtcconnection)。

</Parameter>
</ParameterList>

<a id="api_irtcengineex_setremotevideostreamtypeex2__return_values"></a>

### 返回值 [#返回值-23]

- 0：方法调用成功。
- &lt; 0：方法调用失败。详见[错误码](/zh-CN/api-reference/rtc/error-code)了解详情和解决建议。

### 所属接口类 [#所属接口类-23]

- [RtcEngineEx](/zh-CN/api-reference/rtc/android/rtc-interface-class#class_irtcengineex)

<a id="api_irtcengine_setremotevideosubscriptionoptions"></a>

<a id="ariaid-title26"></a>

## setRemoteVideoSubscriptionOptions [#setremotevideosubscriptionoptions]

设置订阅远端视频流的选项。

<a id="api_irtcengine_setremotevideosubscriptionoptions__prototype"></a>

```java
public abstract int setRemoteVideoSubscriptionOptions(int uid, VideoSubscriptionOptions options);
```

<a id="api_irtcengine_setremotevideosubscriptionoptions__detailed_desc"></a>

你可以调用该方法设置订阅远端用户发送的视频流的选项，适用于远端用户开启双流模式的场景。SDK 默认的远端视频流订阅行为取决于注册的视频观察器类型：

- 如果注册了 [IVideoFrameObserver](/zh-CN/api-reference/rtc/android/rtc-interface-class#class_ivideoframeobserver) 观察器，默认订阅原始数据和编码数据；
- 如果注册了 [IVideoEncodedFrameObserver](/zh-CN/api-reference/rtc/android/rtc-interface-class#class_ivideoencodedframeobserver) 观察器，默认仅订阅编码数据；
- 如果同时注册了两种观察器，默认行为遵循最后注册的视频观察器。例如，如果最后注册的是 [IVideoFrameObserver](/zh-CN/api-reference/rtc/android/rtc-interface-class#class_ivideoframeobserver)，则默认订阅原始数据和编码数据。

如果你希望修改默认行为，或为不同的用户 ID 设置不同的订阅选项，可以调用该方法进行设置。

<a id="api_irtcengine_setremotevideosubscriptionoptions__parameters"></a>

### 参数 [#参数-24]

<ParameterList>
<a id="uid-8"></a>
<Parameter name="uid">

远端用户的用户 ID。

</Parameter>
<a id="options"></a>
<Parameter name="options">

视频订阅选项，详见 [VideoSubscriptionOptions](/zh-CN/api-reference/rtc/android/class-videosubscriptionoptions)。

</Parameter>
</ParameterList>

<a id="api_irtcengine_setremotevideosubscriptionoptions__return_values"></a>

### 返回值 [#返回值-24]

- 0：方法调用成功。
- &lt; 0：方法调用失败。详见[错误码](/zh-CN/api-reference/rtc/error-code)了解详情和解决建议。

### 所属接口类 [#所属接口类-24]

- [RtcEngine](/zh-CN/api-reference/rtc/android/rtc-interface-class#class_irtcengine)

<a id="api_irtcengineex_setremotevideosubscriptionoptionsex"></a>

<a id="ariaid-title27"></a>

## setRemoteVideoSubscriptionOptionsEx [#setremotevideosubscriptionoptionsex]

设置订阅远端视频流的选项。

<a id="api_irtcengineex_setremotevideosubscriptionoptionsex__prototype"></a>

```java
public abstract int setRemoteVideoSubscriptionOptionsEx(int uid, VideoSubscriptionOptions options, RtcConnection rtcConnection);
```

<a id="api_irtcengineex_setremotevideosubscriptionoptionsex__detailed_desc"></a>

该方法适用于多频道场景。当远端用户开启双流模式时，你可以调用该方法设置订阅该远端用户发送的视频流的选项。

<a id="api_irtcengineex_setremotevideosubscriptionoptionsex__scenario"></a>

### 适用场景 [#适用场景-10]

该方法适用于多频道场景。

<a id="api_irtcengineex_setremotevideosubscriptionoptionsex__parameters"></a>

### 参数 [#参数-25]

<ParameterList>
<a id="uid-9"></a>
<Parameter name="uid">

远端用户 ID。

</Parameter>
<a id="options-1"></a>
<Parameter name="options">

视频订阅选项，详见 [VideoSubscriptionOptions](/zh-CN/api-reference/rtc/android/class-videosubscriptionoptions)。

</Parameter>
<a id="rtcconnection"></a>
<Parameter name="rtcConnection">

连接信息，详见 [RtcConnection](/zh-CN/api-reference/rtc/android/class-rtcconnection)。

</Parameter>
</ParameterList>

<a id="api_irtcengineex_setremotevideosubscriptionoptionsex__return_values"></a>

### 返回值 [#返回值-25]

- 0：方法调用成功。
- &lt; 0：方法调用失败。详见[错误码](/zh-CN/api-reference/rtc/error-code)了解详情和解决建议。

### 所属接口类 [#所属接口类-25]

- [RtcEngineEx](/zh-CN/api-reference/rtc/android/rtc-interface-class#class_irtcengineex)

<a id="api_irtcengine_setsubscribeaudioallowlist"></a>

<a id="ariaid-title28"></a>

## setSubscribeAudioAllowlist [#setsubscribeaudioallowlist]

设置音频流订阅的白名单。

<a id="api_irtcengine_setsubscribeaudioallowlist__prototype"></a>

```java
public abstract int setSubscribeAudioAllowlist(int[] uidList);
```

<a id="api_irtcengine_setsubscribeaudioallowlist__detailed_desc"></a>

:::note
注：

- 你可以在加入频道前或加入频道后调用此方法。
- 白名单不受 [muteRemoteAudioStream](/zh-CN/api-reference/rtc/android/publishnsubscribe#api_irtcengine_muteremoteaudiostream)、[muteAllRemoteAudioStreams](/zh-CN/api-reference/rtc/android/publishnsubscribe#api_irtcengine_muteallremoteaudiostreams) 和 [ChannelMediaOptions](/zh-CN/api-reference/rtc/android/class-channelmediaoptions) 中 `autoSubscribeAudio` 设置的影响。
- 一旦设置了订阅白名单，即使你离开当前频道并重新加入频道，该设置仍然有效。
- 如果某个用户同时被添加到白名单和黑名单中，则仅黑名单生效。
:::

<a id="api_irtcengine_setsubscribeaudioallowlist__parameters"></a>

### 参数 [#参数-26]

<ParameterList>
<a id="uidlist"></a>
<Parameter name="uidList">

你希望订阅的用户 ID 列表。调用该方法时，仅订阅该列表中用户的音频流。如果你希望将某个用户从白名单中移除，需要重新调用 [setSubscribeAudioAllowlist](/zh-CN/api-reference/rtc/android/publishnsubscribe#api_irtcengine_setsubscribeaudioallowlist) 方法，并在新的列表中仅包含你希望订阅的用户 ID。

</Parameter>
</ParameterList>

<a id="api_irtcengine_setsubscribeaudioallowlist__return_values"></a>

### 返回值 [#返回值-26]

- 0：方法调用成功。
- &lt; 0：方法调用失败。详见[错误码](/zh-CN/api-reference/rtc/error-code)了解详情和解决建议。

### 所属接口类 [#所属接口类-26]

- [RtcEngine](/zh-CN/api-reference/rtc/android/rtc-interface-class#class_irtcengine)

<a id="api_irtcengineex_setsubscribeaudioallowlistex"></a>

<a id="ariaid-title29"></a>

## setSubscribeAudioAllowlistEx [#setsubscribeaudioallowlistex]

设置音频流订阅的白名单。

<a id="api_irtcengineex_setsubscribeaudioallowlistex__prototype"></a>

```java
public abstract int setSubscribeAudioAllowlistEx(int[] uidList, RtcConnection connection);
```

<a id="api_irtcengineex_setsubscribeaudioallowlistex__detailed_desc"></a>

:::note
注：

- 你可以在加入频道前或加入频道后调用此方法。
- 白名单不受 [muteRemoteAudioStream](/zh-CN/api-reference/rtc/android/publishnsubscribe#api_irtcengine_muteremoteaudiostream)、[muteAllRemoteAudioStreams](/zh-CN/api-reference/rtc/android/publishnsubscribe#api_irtcengine_muteallremoteaudiostreams) 和 [ChannelMediaOptions](/zh-CN/api-reference/rtc/android/class-channelmediaoptions) 中 `autoSubscribeAudio` 设置的影响。
- 一旦设置了订阅白名单，即使你离开当前频道并重新加入，该设置仍然有效。
- 如果某个用户同时被添加到白名单和黑名单中，则以黑名单为准。
:::

<a id="api_irtcengineex_setsubscribeaudioallowlistex__scenario"></a>

### 适用场景 [#适用场景-11]

该方法适用于多频道场景。

<a id="api_irtcengineex_setsubscribeaudioallowlistex__parameters"></a>

### 参数 [#参数-27]

<ParameterList>
<a id="uidlist-1"></a>
<Parameter name="uidList">

你想要订阅的用户 ID 列表。如果你希望将某个用户从白名单中移除，需要调用 [setSubscribeAudioAllowlist](/zh-CN/api-reference/rtc/android/publishnsubscribe#api_irtcengine_setsubscribeaudioallowlist) 方法更新用户 ID 列表；也就是说，你只需在新的用户 ID 列表中添加你希望订阅的用户的用户 ID。

</Parameter>
<a id="connection-10"></a>
<Parameter name="connection">

连接信息，详见 [RtcConnection](/zh-CN/api-reference/rtc/android/class-rtcconnection)。

</Parameter>
</ParameterList>

<a id="api_irtcengineex_setsubscribeaudioallowlistex__return_values"></a>

### 返回值 [#返回值-27]

- 0：方法调用成功。
- &lt; 0：方法调用失败。详见[错误码](/zh-CN/api-reference/rtc/error-code)了解详情和解决建议。

### 所属接口类 [#所属接口类-27]

- [RtcEngineEx](/zh-CN/api-reference/rtc/android/rtc-interface-class#class_irtcengineex)

<a id="api_irtcengine_setsubscribeaudioblocklist"></a>

<a id="ariaid-title30"></a>

## setSubscribeAudioBlocklist [#setsubscribeaudioblocklist]

设置音频流订阅的黑名单。

<a id="api_irtcengine_setsubscribeaudioblocklist__prototype"></a>

```java
public abstract int setSubscribeAudioBlocklist(int[] uidList);
```

<a id="api_irtcengine_setsubscribeaudioblocklist__detailed_desc"></a>

:::note
注：

- 你可以在加入频道前或加入频道后调用此方法。
- 黑名单设置实时生效。将已订阅用户加入黑名单后，该用户的音频流也会停止订阅。
- 黑名单不受 [muteRemoteAudioStream](/zh-CN/api-reference/rtc/android/publishnsubscribe#api_irtcengine_muteremoteaudiostream)、[muteAllRemoteAudioStreams](/zh-CN/api-reference/rtc/android/publishnsubscribe#api_irtcengine_muteallremoteaudiostreams) 和 [ChannelMediaOptions](/zh-CN/api-reference/rtc/android/class-channelmediaoptions) 中 `autoSubscribeAudio` 设置的影响。
- 一旦设置了订阅黑名单，即使你离开当前频道并重新加入频道，该设置仍然有效。
- 如果某个用户同时被加入白名单和黑名单，则仅黑名单生效。
:::

<a id="api_irtcengine_setsubscribeaudioblocklist__parameters"></a>

### 参数 [#参数-28]

<ParameterList>
<a id="uidlist-2"></a>
<Parameter name="uidList">

不希望订阅其音频流的用户 ID 列表。

- 如果你希望将某个用户从黑名单中移除，需要调用 [setSubscribeAudioBlocklist](/zh-CN/api-reference/rtc/android/publishnsubscribe#api_irtcengine_setsubscribeaudioblocklist) 方法更新用户 ID 列表，即在新的列表中仅保留不希望订阅的用户 ID。

</Parameter>
</ParameterList>

<a id="api_irtcengine_setsubscribeaudioblocklist__return_values"></a>

### 返回值 [#返回值-28]

- 0：方法调用成功。
- &lt; 0：方法调用失败。详见[错误码](/zh-CN/api-reference/rtc/error-code)了解详情和解决建议。

### 所属接口类 [#所属接口类-28]

- [RtcEngine](/zh-CN/api-reference/rtc/android/rtc-interface-class#class_irtcengine)

<a id="api_irtcengineex_setsubscribeaudioblocklistex"></a>

<a id="ariaid-title31"></a>

## setSubscribeAudioBlocklistEx [#setsubscribeaudioblocklistex]

设置音频流订阅的黑名单。

<a id="api_irtcengineex_setsubscribeaudioblocklistex__prototype"></a>

```java
public abstract int setSubscribeAudioBlocklistEx(int[] uidList, RtcConnection connection);
```

<a id="api_irtcengineex_setsubscribeaudioblocklistex__detailed_desc"></a>

你可以调用该方法指定不希望订阅的用户的音频流。

:::note
注：

- 你可以在加入频道前或加入频道后调用此方法。
- 黑名单设置实时生效。将已订阅用户加入黑名单后，该用户的音频流也会停止订阅。
- 黑名单设置不受 [muteRemoteAudioStream](/zh-CN/api-reference/rtc/android/publishnsubscribe#api_irtcengine_muteremoteaudiostream)、[muteAllRemoteAudioStreams](/zh-CN/api-reference/rtc/android/publishnsubscribe#api_irtcengine_muteallremoteaudiostreams) 和 [ChannelMediaOptions](/zh-CN/api-reference/rtc/android/class-channelmediaoptions) 中的 `autoSubscribeAudio` 的影响。
- 一旦设置了订阅黑名单，即使离开当前频道并重新加入频道，该设置仍然有效。
- 如果某个用户同时被加入白名单和黑名单，则仅黑名单生效。
:::

<a id="api_irtcengineex_setsubscribeaudioblocklistex__scenario"></a>

### 适用场景 [#适用场景-12]

该方法适用于多频道场景。

<a id="api_irtcengineex_setsubscribeaudioblocklistex__parameters"></a>

### 参数 [#参数-29]

<ParameterList>
<a id="uidlist-3"></a>
<Parameter name="uidList">

不希望订阅其音频流的用户 ID 列表。

:::note
注：

- 如果你希望不订阅某个用户的音频流，请将该用户的 ID 添加到该列表中。
- 如果你希望将某个用户从黑名单中移除，需要调用 [setSubscribeAudioBlocklist](/zh-CN/api-reference/rtc/android/publishnsubscribe#api_irtcengine_setsubscribeaudioblocklist) 方法更新用户 ID 列表；即你只需在新的用户 ID 列表中添加不希望订阅的用户 ID。
:::

</Parameter>
<a id="connection-11"></a>
<Parameter name="connection">

连接信息，详见 [RtcConnection](/zh-CN/api-reference/rtc/android/class-rtcconnection)。

</Parameter>
</ParameterList>

<a id="api_irtcengineex_setsubscribeaudioblocklistex__return_values"></a>

### 返回值 [#返回值-29]

- 0：方法调用成功。
- &lt; 0：方法调用失败。详见[错误码](/zh-CN/api-reference/rtc/error-code)了解详情和解决建议。

### 所属接口类 [#所属接口类-29]

- [RtcEngineEx](/zh-CN/api-reference/rtc/android/rtc-interface-class#class_irtcengineex)

<a id="api_irtcengine_setsubscribevideoallowlist"></a>

<a id="ariaid-title32"></a>

## setSubscribeVideoAllowlist [#setsubscribevideoallowlist]

设置视频流订阅的白名单。

<a id="api_irtcengine_setsubscribevideoallowlist__prototype"></a>

```java
public abstract int setSubscribeVideoAllowlist(int[] uidList);
```

<a id="api_irtcengine_setsubscribevideoallowlist__detailed_desc"></a>

:::note
注：

- 你可以在加入频道前或加入频道后调用此方法。
- 白名单不受 [muteRemoteVideoStream](/zh-CN/api-reference/rtc/android/publishnsubscribe#api_irtcengine_muteremotevideostream)、[muteAllRemoteVideoStreams](/zh-CN/api-reference/rtc/android/publishnsubscribe#api_irtcengine_muteallremotevideostreams) 和 [ChannelMediaOptions](/zh-CN/api-reference/rtc/android/class-channelmediaoptions) 中的 `autoSubscribeVideo` 设置的影响。
- 一旦设置了订阅白名单，即使你离开当前频道并重新加入，该设置仍然有效。
- 如果某个用户同时被添加到白名单和黑名单中，则仅黑名单生效。
:::

<a id="api_irtcengine_setsubscribevideoallowlist__parameters"></a>

### 参数 [#参数-30]

<ParameterList>
<a id="uidlist-4"></a>
<Parameter name="uidList">

希望订阅的视频流所属用户的用户 ID 列表。

- 如果你希望订阅某个用户的视频流，请将该用户的用户 ID 添加到该列表中。
- 如果你希望将某个用户从白名单中移除，需要调用 [setSubscribeVideoAllowlist](/zh-CN/api-reference/rtc/android/publishnsubscribe#api_irtcengine_setsubscribevideoallowlist) 方法更新用户 ID 列表，即在新的用户 ID 列表中仅包含你希望订阅的用户的用户 ID。

</Parameter>
</ParameterList>

<a id="api_irtcengine_setsubscribevideoallowlist__return_values"></a>

### 返回值 [#返回值-30]

- 0：方法调用成功。
- &lt; 0：方法调用失败。详见[错误码](/zh-CN/api-reference/rtc/error-code)了解详情和解决建议。

### 所属接口类 [#所属接口类-30]

- [RtcEngine](/zh-CN/api-reference/rtc/android/rtc-interface-class#class_irtcengine)

<a id="api_irtcengineex_setsubscribevideoallowlistex"></a>

<a id="ariaid-title33"></a>

## setSubscribeVideoAllowlistEx [#setsubscribevideoallowlistex]

设置视频流订阅的白名单。

<a id="api_irtcengineex_setsubscribevideoallowlistex__prototype"></a>

```java
public abstract int setSubscribeVideoAllowlistEx(int[] uidList, RtcConnection connection);
```

<a id="api_irtcengineex_setsubscribevideoallowlistex__detailed_desc"></a>

:::note
注：

- 你可以在加入频道前或加入频道后调用此方法。
- 白名单不受 [muteRemoteVideoStream](/zh-CN/api-reference/rtc/android/publishnsubscribe#api_irtcengine_muteremotevideostream)、[muteAllRemoteVideoStreams](/zh-CN/api-reference/rtc/android/publishnsubscribe#api_irtcengine_muteallremotevideostreams) 和 [ChannelMediaOptions](/zh-CN/api-reference/rtc/android/class-channelmediaoptions) 中的 `autoSubscribeVideo` 设置的影响。
- 一旦设置了订阅白名单，即使离开当前频道并重新加入频道，白名单依然有效。
- 如果某个用户同时被加入白名单和黑名单，则仅黑名单生效。
:::

<a id="api_irtcengineex_setsubscribevideoallowlistex__scenario"></a>

### 适用场景 [#适用场景-13]

该方法适用于多频道场景。

<a id="api_irtcengineex_setsubscribevideoallowlistex__parameters"></a>

### 参数 [#参数-31]

<ParameterList>
<a id="uidlist-5"></a>
<Parameter name="uidList">

希望订阅的视频流所属用户的用户 ID 列表。

- 如果你希望订阅某个用户的视频流，请将该用户的用户 ID 添加到该列表中。
- 如果你希望将某个用户从白名单中移除，需要调用 [setSubscribeVideoAllowlist](/zh-CN/api-reference/rtc/android/publishnsubscribe#api_irtcengine_setsubscribevideoallowlist) 方法更新用户 ID 列表；这意味着你只需在新的用户 ID 列表中添加希望订阅的用户的用户 ID。

</Parameter>
<a id="connection-12"></a>
<Parameter name="connection">

连接信息。详见 [RtcConnection](/zh-CN/api-reference/rtc/android/class-rtcconnection)。

</Parameter>
</ParameterList>

<a id="api_irtcengineex_setsubscribevideoallowlistex__return_values"></a>

### 返回值 [#返回值-31]

- 0：方法调用成功。
- &lt; 0：方法调用失败。详见[错误码](/zh-CN/api-reference/rtc/error-code)了解详情和解决建议。

### 所属接口类 [#所属接口类-31]

- [RtcEngineEx](/zh-CN/api-reference/rtc/android/rtc-interface-class#class_irtcengineex)

<a id="api_irtcengine_setsubscribevideoblocklist"></a>

<a id="ariaid-title34"></a>

## setSubscribeVideoBlocklist [#setsubscribevideoblocklist]

设置视频流订阅的阻止名单。

<a id="api_irtcengine_setsubscribevideoblocklist__prototype"></a>

```java
public abstract int setSubscribeVideoBlocklist(int[] uidList);
```

<a id="api_irtcengine_setsubscribevideoblocklist__detailed_desc"></a>

:::note
注：

- 你可以在加入频道前或加入频道后调用此方法。
- 黑名单设置实时生效。将已订阅用户加入黑名单后，该用户的视频流也会停止订阅。
- 阻止名单不受 [muteRemoteVideoStream](/zh-CN/api-reference/rtc/android/publishnsubscribe#api_irtcengine_muteremotevideostream)、[muteAllRemoteVideoStreams](/zh-CN/api-reference/rtc/android/publishnsubscribe#api_irtcengine_muteallremotevideostreams) 和 [ChannelMediaOptions](/zh-CN/api-reference/rtc/android/class-channelmediaoptions) 中的 `autoSubscribeVideo` 的设置影响。
- 一旦设置了订阅的阻止名单，即使你离开当前频道并重新加入频道，该设置仍然有效。
- 如果某个用户同时被添加到允许名单和阻止名单中，则仅阻止名单生效。
:::

<a id="api_irtcengine_setsubscribevideoblocklist__parameters"></a>

### 参数 [#参数-32]

<ParameterList>
<a id="uidlist-6"></a>
<Parameter name="uidList">

不希望订阅其视频流的用户 ID 列表。

- 如果你希望屏蔽某个用户的视频流，请将该用户的用户 ID 添加到该列表中。
- 如果你希望将某个用户从阻止名单中移除，需要调用 [setSubscribeVideoBlocklist](/zh-CN/api-reference/rtc/android/publishnsubscribe#api_irtcengine_setsubscribevideoblocklist) 方法更新该列表，即仅在新的列表中保留你仍希望屏蔽的用户 ID。

</Parameter>
</ParameterList>

<a id="api_irtcengine_setsubscribevideoblocklist__return_values"></a>

### 返回值 [#返回值-32]

- 0：方法调用成功。
- &lt; 0：方法调用失败。详见[错误码](/zh-CN/api-reference/rtc/error-code)了解详情和解决建议。

### 所属接口类 [#所属接口类-32]

- [RtcEngine](/zh-CN/api-reference/rtc/android/rtc-interface-class#class_irtcengine)

<a id="api_irtcengineex_setsubscribevideoblocklistex"></a>

<a id="ariaid-title35"></a>

## setSubscribeVideoBlocklistEx [#setsubscribevideoblocklistex]

设置视频流订阅的黑名单。

<a id="api_irtcengineex_setsubscribevideoblocklistex__prototype"></a>

```java
public abstract int setSubscribeVideoBlocklistEx(int[] uidList, RtcConnection connection);
```

<a id="api_irtcengineex_setsubscribevideoblocklistex__detailed_desc"></a>

:::note
注：

- 你可以在加入频道前或加入频道后调用此方法。
- 黑名单设置实时生效。将已订阅用户加入黑名单后，该用户的视频流也会停止订阅。
- 黑名单设置不受 [muteRemoteVideoStream](/zh-CN/api-reference/rtc/android/publishnsubscribe#api_irtcengine_muteremotevideostream)、[muteAllRemoteVideoStreams](/zh-CN/api-reference/rtc/android/publishnsubscribe#api_irtcengine_muteallremotevideostreams) 和 [ChannelMediaOptions](/zh-CN/api-reference/rtc/android/class-channelmediaoptions) 中的 `autoSubscribeVideo` 的影响。
- 一旦设置了订阅黑名单，即使你离开当前频道并重新加入，该设置仍然有效。
- 如果某个用户同时被加入白名单和黑名单，则仅黑名单生效。
:::

<a id="api_irtcengineex_setsubscribevideoblocklistex__scenario"></a>

### 适用场景 [#适用场景-14]

该方法适用于多频道场景。

<a id="api_irtcengineex_setsubscribevideoblocklistex__parameters"></a>

### 参数 [#参数-33]

<ParameterList>
<a id="uidlist-7"></a>
<Parameter name="uidList">

不希望订阅其视频流的远端用户 ID 列表。如果你希望取消订阅某个用户的视频流，请将该用户的用户 ID 添加到该列表中。如果你希望将某个用户从黑名单中移除，需要调用 [setSubscribeVideoBlocklist](/zh-CN/api-reference/rtc/android/publishnsubscribe#api_irtcengine_setsubscribevideoblocklist) 方法更新用户 ID 列表，即仅在新的列表中添加你不希望订阅的用户的用户 ID。

</Parameter>
<a id="connection-13"></a>
<Parameter name="connection">

连接信息。详见 [RtcConnection](/zh-CN/api-reference/rtc/android/class-rtcconnection)。

</Parameter>
</ParameterList>

<a id="api_irtcengineex_setsubscribevideoblocklistex__return_values"></a>

### 返回值 [#返回值-33]

- 0：方法调用成功。
- &lt; 0：方法调用失败。详见[错误码](/zh-CN/api-reference/rtc/error-code)了解详情和解决建议。

### 所属接口类 [#所属接口类-33]

- [RtcEngineEx](/zh-CN/api-reference/rtc/android/rtc-interface-class#class_irtcengineex)

<a id="callback_irtcengineeventhandler_onaudiopublishstatechanged"></a>

<a id="ariaid-title36"></a>

## onAudioPublishStateChanged [#onaudiopublishstatechanged]

音频发布状态发生变化回调。

<a id="callback_irtcengineeventhandler_onaudiopublishstatechanged__prototype"></a>

```java
public void onAudioPublishStateChanged(String channel, int oldState, int newState, int elapseSinceLastState)
```

<a id="callback_irtcengineeventhandler_onaudiopublishstatechanged__detailed_desc"></a>

<a id="callback_irtcengineeventhandler_onaudiopublishstatechanged__timing"></a>

### 触发时机 [#触发时机]

该回调在音频发布状态发生变化时被触发。

<a id="callback_irtcengineeventhandler_onaudiopublishstatechanged__parameters"></a>

### 参数 [#参数-34]

<ParameterList>
<a id="channel"></a>
<Parameter name="channel">

频道名。

</Parameter>
<a id="oldstate"></a>
<Parameter name="oldState">

之前的音频发布状态：

- `PUB_STATE_IDLE`（0）：加入频道后的初始发布状态。
- `PUB_STATE_NO_PUBLISHED`（1）：发布本地流失败。
- `PUB_STATE_PUBLISHING`（2）：正在发布本地流。
- `PUB_STATE_PUBLISHED`（3）：成功发布本地流。

</Parameter>
<a id="newstate"></a>
<Parameter name="newState">

当前的音频发布状态：

- `PUB_STATE_IDLE`（0）：加入频道后的初始发布状态。
- `PUB_STATE_NO_PUBLISHED`（1）：发布本地流失败。
- `PUB_STATE_PUBLISHING`（2）：正在发布本地流。
- `PUB_STATE_PUBLISHED`（3）：成功发布本地流。

</Parameter>
<a id="elapsesincelaststate"></a>
<Parameter name="elapseSinceLastState">

从上一个状态到当前状态所经过的时间，单位为毫秒。

</Parameter>
</ParameterList>

### 所属接口类 [#所属接口类-34]

- [IRtcEngineEventHandler](/zh-CN/api-reference/rtc/android/rtc-interface-class#class_irtcengineeventhandler)

<a id="callback_irtcengineeventhandler_onaudiosubscribestatechanged"></a>

<a id="ariaid-title37"></a>

## onAudioSubscribeStateChanged [#onaudiosubscribestatechanged]

音频订阅状态发生变化回调。

<a id="callback_irtcengineeventhandler_onaudiosubscribestatechanged__prototype"></a>

```java
public void onAudioSubscribeStateChanged(String channel, int uid, int oldState, int newState, int elapseSinceLastState)
```

<a id="callback_irtcengineeventhandler_onaudiosubscribestatechanged__detailed_desc"></a>

该回调在本地用户订阅远端音频流的状态发生变化时触发。

<a id="callback_irtcengineeventhandler_onaudiosubscribestatechanged__timing"></a>

### 触发时机 [#触发时机-1]

该回调在本地用户订阅远端音频流的状态发生变化时被触发。

<a id="callback_irtcengineeventhandler_onaudiosubscribestatechanged__parameters"></a>

### 参数 [#参数-35]

<ParameterList>
<a id="channel-1"></a>
<Parameter name="channel">

频道名。

</Parameter>
<a id="uid-10"></a>
<Parameter name="uid">

远端用户 ID。

</Parameter>
<a id="oldstate-1"></a>
<Parameter name="oldState">

之前的订阅状态：

- `SUB_STATE_IDLE` (0)：加入频道后的初始订阅状态。
- `SUB_STATE_NO_SUBSCRIBED` (1)：订阅远端音频流失败。可能原因包括：

  - 远端用户：

    - 调用 `muteLocalAudioStream(true)` 停止发送本地音频流。
    - 调用 [disableAudio](/zh-CN/api-reference/rtc/android/audio/audio-basic#api_irtcengine_disableaudio) 禁用本地音频模块。
    - 调用 `enableLocalAudio(false)` 禁用本地音频采集。
    - 角色为观众。
  - 本地用户：

    - 调用 `joinChannel` 或 [updateChannelMediaOptions](/zh-CN/api-reference/rtc/android/channel#api_irtcengine_updatechannelmediaoptions) 时将 [ChannelMediaOptions](/zh-CN/api-reference/rtc/android/class-channelmediaoptions) 中的 `autoSubscribeAudio` 设为 false，表示不自动订阅任何音频流。
    - 调用 [muteRemoteAudioStream](/zh-CN/api-reference/rtc/android/publishnsubscribe#api_irtcengine_muteremoteaudiostream) 或 [muteAllRemoteAudioStreams](/zh-CN/api-reference/rtc/android/publishnsubscribe#api_irtcengine_muteallremoteaudiostreams) 时将 `muted` 设为 true，表示停止接收远端音频流。
- `SUB_STATE_SUBSCRIBING` (2)：正在订阅中。
- `SUB_STATE_SUBSCRIBED` (3)：已成功接收远端音频流。

</Parameter>
<a id="newstate-1"></a>
<Parameter name="newState">

当前的订阅状态：

- `SUB_STATE_IDLE` (0)：加入频道后的初始订阅状态。
- `SUB_STATE_NO_SUBSCRIBED` (1)：订阅远端音频流失败。可能原因包括：

  - 远端用户：

    - 调用 `muteLocalAudioStream(true)` 停止发送本地音频流。
    - 调用 [disableAudio](/zh-CN/api-reference/rtc/android/audio/audio-basic#api_irtcengine_disableaudio) 禁用本地音频模块。
    - 调用 `enableLocalAudio(false)` 禁用本地音频采集。
    - 角色为观众。
  - 本地用户：

    - 调用 `joinChannel` 或 [updateChannelMediaOptions](/zh-CN/api-reference/rtc/android/channel#api_irtcengine_updatechannelmediaoptions) 时将 [ChannelMediaOptions](/zh-CN/api-reference/rtc/android/class-channelmediaoptions) 中的 `autoSubscribeAudio` 设为 false，表示不自动订阅任何音频流。
    - 调用 [muteRemoteAudioStream](/zh-CN/api-reference/rtc/android/publishnsubscribe#api_irtcengine_muteremoteaudiostream) 或 [muteAllRemoteAudioStreams](/zh-CN/api-reference/rtc/android/publishnsubscribe#api_irtcengine_muteallremoteaudiostreams) 时将 `muted` 设为 true，表示停止接收远端音频流。
- `SUB_STATE_SUBSCRIBING` (2)：正在订阅中。
- `SUB_STATE_SUBSCRIBED` (3)：已成功接收远端音频流。

</Parameter>
<a id="elapsesincelaststate-1"></a>
<Parameter name="elapseSinceLastState">

从上一个状态到当前状态所经过的时间，单位为毫秒。

</Parameter>
</ParameterList>

### 所属接口类 [#所属接口类-35]

- [IRtcEngineEventHandler](/zh-CN/api-reference/rtc/android/rtc-interface-class#class_irtcengineeventhandler)

<a id="callback_irtcengineeventhandler_onvideosubscribestatechanged"></a>

<a id="ariaid-title38"></a>

## onVideoSubscribeStateChanged [#onvideosubscribestatechanged]

视频订阅状态发生变化回调。

<a id="callback_irtcengineeventhandler_onvideosubscribestatechanged__prototype"></a>

```java
public void onVideoSubscribeStateChanged(String channel, int uid, int oldState, int newState, int elapseSinceLastState)
```

<a id="callback_irtcengineeventhandler_onvideosubscribestatechanged__detailed_desc"></a>

<a id="callback_irtcengineeventhandler_onvideosubscribestatechanged__timing"></a>

### 触发时机 [#触发时机-2]

该回调在本地用户订阅远端视频流的状态发生变化时被触发。

<a id="callback_irtcengineeventhandler_onvideosubscribestatechanged__parameters"></a>

### 参数 [#参数-36]

<ParameterList>
<a id="channel-2"></a>
<Parameter name="channel">

频道名。

</Parameter>
<a id="uid-11"></a>
<Parameter name="uid">

远端用户 ID。

</Parameter>
<a id="oldstate-2"></a>
<Parameter name="oldState">

之前的订阅状态：

- `SUB_STATE_IDLE` (0)：加入频道后的初始订阅状态。
- `SUB_STATE_NO_SUBSCRIBED` (1)：订阅远端流失败。可能原因包括：

  - 远端用户：

    - 调用 `muteLocalVideoStream(true)` 停止发送本地视频流。
    - 调用 [disableVideo](/zh-CN/api-reference/rtc/android/video/video-basic#api_irtcengine_disablevideo) 禁用本地视频模块。
    - 调用 `enableLocalVideo(false)` 禁用本地视频采集。
    - 远端用户的角色为观众。
  - 本地用户：

    - 在调用 `joinChannel` 或 [updateChannelMediaOptions](/zh-CN/api-reference/rtc/android/channel#api_irtcengine_updatechannelmediaoptions) 时将 [ChannelMediaOptions](/zh-CN/api-reference/rtc/android/class-channelmediaoptions) 中的 `autoSubscribeVideo` 设置为 false，表示不自动订阅任何视频流。
    - 调用 [muteRemoteVideoStream](/zh-CN/api-reference/rtc/android/publishnsubscribe#api_irtcengine_muteremotevideostream) 或 [muteAllRemoteVideoStreams](/zh-CN/api-reference/rtc/android/publishnsubscribe#api_irtcengine_muteallremotevideostreams) 并将 `muted` 设置为 true，表示停止接收远端视频流。
- `SUB_STATE_SUBSCRIBING` (2)：正在订阅中。
- `SUB_STATE_SUBSCRIBED` (3)：已成功接收远端流。

</Parameter>
<a id="newstate-2"></a>
<Parameter name="newState">

当前的订阅状态：

- `SUB_STATE_IDLE` (0)：加入频道后的初始订阅状态。
- `SUB_STATE_NO_SUBSCRIBED` (1)：订阅远端流失败。可能原因包括：

  - 远端用户：

    - 调用 `muteLocalVideoStream(true)` 停止发送本地视频流。
    - 调用 [disableVideo](/zh-CN/api-reference/rtc/android/video/video-basic#api_irtcengine_disablevideo) 禁用本地视频模块。
    - 调用 `enableLocalVideo(false)` 禁用本地视频采集。
    - 远端用户的角色为观众。
  - 本地用户：

    - 在调用 `joinChannel` 或 [updateChannelMediaOptions](/zh-CN/api-reference/rtc/android/channel#api_irtcengine_updatechannelmediaoptions) 时将 [ChannelMediaOptions](/zh-CN/api-reference/rtc/android/class-channelmediaoptions) 中的 `autoSubscribeVideo` 设置为 false，表示不自动订阅任何视频流。
    - 调用 [muteRemoteVideoStream](/zh-CN/api-reference/rtc/android/publishnsubscribe#api_irtcengine_muteremotevideostream) 或 [muteAllRemoteVideoStreams](/zh-CN/api-reference/rtc/android/publishnsubscribe#api_irtcengine_muteallremotevideostreams) 并将 `muted` 设置为 true，表示停止接收远端视频流。
- `SUB_STATE_SUBSCRIBING` (2)：正在订阅中。
- `SUB_STATE_SUBSCRIBED` (3)：已成功接收远端流。

</Parameter>
<a id="elapsesincelaststate-2"></a>
<Parameter name="elapseSinceLastState">

从上一个状态到当前状态所经过的时间，单位为毫秒。

</Parameter>
</ParameterList>

### 所属接口类 [#所属接口类-36]

- [IRtcEngineEventHandler](/zh-CN/api-reference/rtc/android/rtc-interface-class#class_irtcengineeventhandler)
