# 视频渲染 (/zh-CN/api-reference/rtc/ios/video/video-rendering)

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

<a id="toc_video_rendering"></a>

<a id="api_irtcengine_enableinstantmediarendering"></a>

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

## enableInstantMediaRendering [#enableinstantmediarendering]

启用音视频帧的极速渲染。

<a id="api_irtcengine_enableinstantmediarendering__prototype"></a>

```objc
- (int)enableInstantMediaRendering NS_SWIFT_NAME(enableInstantMediaRendering());
```

<a id="api_irtcengine_enableinstantmediarendering__detailed_desc"></a>

:::info[自从]
自 v4.1.1 版本新增。
:::

调用该方法后，SDK 会启用极速帧渲染模式，从而加快你加入频道后首帧的渲染速度。

:::note
注： 主播和观众都需调用该方法，才能体验音视频帧的极速渲染。若需取消极速渲染，需调用 [destroy](/zh-CN/api-reference/rtc/ios/initialize#api_irtcengine_release) 方法销毁 [AgoraRtcEngineKit](/zh-CN/api-reference/rtc/ios/rtc-interface-class#class_irtcengine) 对象。
:::

<a id="api_irtcengine_enableinstantmediarendering__scenario"></a>

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

声网建议在直播场景中为观众开启该模式。

<a id="api_irtcengine_enableinstantmediarendering__timing"></a>

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

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

<a id="api_irtcengine_enableinstantmediarendering__return_values"></a>

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

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

  - -7：在 [AgoraRtcEngineKit](/zh-CN/api-reference/rtc/ios/rtc-interface-class#class_irtcengine) 初始化前调用该方法。

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

- [AgoraRtcEngineKit](/zh-CN/api-reference/rtc/ios/rtc-interface-class#class_irtcengine)

<a id="api_irtcengine_setlocalrendermode1"></a>

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

## setLocalRenderMode\:mode: [#setlocalrendermodemode]

设置本地视频显示模式。

<a id="api_irtcengine_setlocalrendermode1__prototype"></a>

```objc
- (int)setLocalRenderMode:(NSUInteger)uid
                     mode:(AgoraVideoRenderMode)mode NS_SWIFT_NAME(setLocalRenderMode(_:mode:)) __deprecated;
```

<a id="api_irtcengine_setlocalrendermode1__detailed_desc"></a>

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

:::error[废弃]
该方法已废弃。
:::

你可以在通话过程中多次调用该方法以更改本地视频的显示模式。

<a id="api_irtcengine_setlocalrendermode1__parameters"></a>

### 参数 [#参数]

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

用户 ID。

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

本地视频显示模式，详见 [AgoraVideoRenderMode](/zh-CN/api-reference/rtc/ios/enum-rendermodetype)。

</Parameter>
</ParameterList>

<a id="api_irtcengine_setlocalrendermode1__return_values"></a>

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

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

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

- [AgoraRtcEngineKit](/zh-CN/api-reference/rtc/ios/rtc-interface-class#class_irtcengine)

<a id="api_irtcengine_setlocalrendermode2"></a>

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

## setLocalRenderMode\:mirror: [#setlocalrendermodemirror]

更新本地视频视图的显示模式。

<a id="api_irtcengine_setlocalrendermode2__prototype"></a>

```objc
- (int)setLocalRenderMode:(AgoraVideoRenderMode)mode
                   mirror:(AgoraVideoMirrorMode)mirror NS_SWIFT_NAME(setLocalRenderMode(_:mirror:));
```

<a id="api_irtcengine_setlocalrendermode2__detailed_desc"></a>

你可以在初始化本地视频视图后调用该方法，更新其渲染模式和镜像模式。该方法仅影响你本地看到的视频视图，不影响本地视频的发布。

:::note
注： 该方法仅对主摄像头（`AgoraMediaSourceTypePrimaryCamera`）生效。在使用自定义视频采集或其他视频源的场景中，应使用 [setupLocalVideo:](/zh-CN/api-reference/rtc/ios/video/video-rendering#api_irtcengine_setuplocalvideo) 方法替代。
:::

<a id="api_irtcengine_setlocalrendermode2__timing"></a>

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

调用时序：

- 请确保在调用该方法前已调用 [setupLocalVideo:](/zh-CN/api-reference/rtc/ios/video/video-rendering#api_irtcengine_setuplocalvideo) 方法初始化本地视频视图。
- 通话过程中，你可以多次调用该方法更新本地视频视图的显示模式。

<a id="api_irtcengine_setlocalrendermode2__parameters"></a>

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

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

本地视频的显示模式，详见 [AgoraVideoRenderMode](/zh-CN/api-reference/rtc/ios/enum-rendermodetype)。

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

本地视频视图的镜像模式，详见 [AgoraVideoMirrorMode](/zh-CN/api-reference/rtc/ios/enum-videomirrormodetype)。如果使用前置摄像头，SDK 默认启用镜像模式；如果使用后置摄像头，SDK 默认关闭镜像模式。

</Parameter>
</ParameterList>

<a id="api_irtcengine_setlocalrendermode2__return_values"></a>

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

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

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

- [AgoraRtcEngineKit](/zh-CN/api-reference/rtc/ios/rtc-interface-class#class_irtcengine)

<a id="api_irtcengine_setlocalrendertargetfps"></a>

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

## setLocalRenderTargetFps\:targetFps: [#setlocalrendertargetfpstargetfps]

设置本地视频渲染的最大帧率。

<a id="api_irtcengine_setlocalrendertargetfps__prototype"></a>

```objc
- (int)setLocalRenderTargetFps:(AgoraVideoSourceType)sourceType
                               targetFps:(int)targetFps;
```

<a id="api_irtcengine_setlocalrendertargetfps__detailed_desc"></a>

在对视频渲染帧率要求不高的场景（如屏幕共享或在线教育）中，可以调用该方法设置本地视频渲染的最大帧率。SDK 会尝试将本地渲染的实际帧率保持在该值附近，从而降低 CPU 消耗并提升系统性能。

<a id="api_irtcengine_setlocalrendertargetfps__scenario"></a>

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

在对视频渲染帧率要求不高的场景（如屏幕共享或在线教育）中，你可以调用该方法设置本地视频渲染的最大帧率。SDK 会尝试将本地渲染的实际帧率保持在该值附近，以降低 CPU 消耗并提升系统性能。

<a id="api_irtcengine_setlocalrendertargetfps__timing"></a>

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

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

<a id="api_irtcengine_setlocalrendertargetfps__parameters"></a>

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

<ParameterList>
<a id="sourcetype"></a>
<Parameter name="sourceType">

视频源的类型，详见 [AgoraVideoSourceType](/zh-CN/api-reference/rtc/ios/enum-videosourcetype)。

</Parameter>
<a id="targetfps"></a>
<Parameter name="targetFps">

本地视频的采集帧率（fps）。支持的取值包括：1、7、10、15、24、30、60。将该参数设置为低于实际视频帧率的值，否则设置不生效。

</Parameter>
</ParameterList>

<a id="api_irtcengine_setlocalrendertargetfps__return_values"></a>

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

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

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

- [AgoraRtcEngineKit](/zh-CN/api-reference/rtc/ios/rtc-interface-class#class_irtcengine)

<a id="api_irtcengine_setlocalvideomirrormode"></a>

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

## setLocalVideoMirrorMode: [#setlocalvideomirrormode]

设置本地视频镜像模式。

<a id="api_irtcengine_setlocalvideomirrormode__prototype"></a>

```objc
- (int)setLocalVideoMirrorMode:(AgoraVideoMirrorMode)mode NS_SWIFT_NAME(setLocalVideoMirrorMode(_:)) __deprecated;
```

<a id="api_irtcengine_setlocalvideomirrormode__detailed_desc"></a>

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

:::error[废弃]
该方法已废弃。
:::

<a id="api_irtcengine_setlocalvideomirrormode__parameters"></a>

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

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

本地视频镜像模式。详见 [AgoraVideoMirrorMode](/zh-CN/api-reference/rtc/ios/enum-videomirrormodetype)。

</Parameter>
</ParameterList>

<a id="api_irtcengine_setlocalvideomirrormode__return_values"></a>

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

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

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

- [AgoraRtcEngineKit](/zh-CN/api-reference/rtc/ios/rtc-interface-class#class_irtcengine)

<a id="api_irtcengine_setremoterendermode2"></a>

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

## setRemoteRenderMode\:mode\:mirror: [#setremoterendermodemodemirror]

更新远端用户视频视图的显示模式。

<a id="api_irtcengine_setremoterendermode2__prototype"></a>

```objc
- (int)setRemoteRenderMode:(NSUInteger)uid
                      mode:(AgoraVideoRenderMode)mode
                    mirror:(AgoraVideoMirrorMode)mirror NS_SWIFT_NAME(setRemoteRenderMode(_:mode:mirror:));
```

<a id="api_irtcengine_setremoterendermode2__detailed_desc"></a>

初始化远端用户的视频视图后，你可以调用该方法更新其渲染模式和镜像模式。该方法仅影响本地用户看到的视频视图。

:::note
注：

- 调用该方法前需先通过 [setupRemoteVideo:](/zh-CN/api-reference/rtc/ios/video/video-rendering#api_irtcengine_setupremotevideo) 方法初始化远端视图。
- 通话过程中，你可以多次调用该方法以更新远端用户视频视图的显示模式。
:::

<a id="api_irtcengine_setremoterendermode2__parameters"></a>

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

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

远端用户的用户 ID。

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

远端用户视图的渲染模式，详见 [AgoraVideoRenderMode](/zh-CN/api-reference/rtc/ios/enum-rendermodetype)。

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

远端用户视图的镜像模式，详见 [AgoraVideoMirrorMode](/zh-CN/api-reference/rtc/ios/enum-videomirrormodetype)。

</Parameter>
</ParameterList>

<a id="api_irtcengine_setremoterendermode2__return_values"></a>

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

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

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

- [AgoraRtcEngineKit](/zh-CN/api-reference/rtc/ios/rtc-interface-class#class_irtcengine)

<a id="api_irtcengineex_setremoterendermodeex"></a>

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

## setRemoteRenderModeEx\:mode\:mirror\:connection: [#setremoterendermodeexmodemirrorconnection]

设置指定远端用户的视频显示模式。

<a id="api_irtcengineex_setremoterendermodeex__prototype"></a>

```objc
- (int)setRemoteRenderModeEx:(NSUInteger)uid
                        mode:(AgoraVideoRenderMode)mode
                      mirror:(AgoraVideoMirrorMode)mirror
                  connection:(AgoraRtcConnection * _Nonnull)connection NS_SWIFT_NAME(setRemoteRenderModeEx(_:mode:mirror:connection:));
```

<a id="api_irtcengineex_setremoterendermodeex__detailed_desc"></a>

你可以调用该方法更新远端用户的视频渲染模式和镜像模式。该方法仅影响你本地看到的远端用户视频视图。

:::note
注：

- 请在调用 [setupRemoteVideo:](/zh-CN/api-reference/rtc/ios/video/video-rendering#api_irtcengine_setupremotevideo) 方法初始化远端视图后调用该方法。
- 通话过程中，你可以根据需要多次调用该方法更新远端用户视频视图的显示模式。
:::

<a id="api_irtcengineex_setremoterendermodeex__scenario"></a>

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

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

<a id="api_irtcengineex_setremoterendermodeex__parameters"></a>

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

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

远端用户的用户 ID。

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

远端用户的视频显示模式，详见 [AgoraVideoRenderMode](/zh-CN/api-reference/rtc/ios/enum-rendermodetype)。

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

远端用户视图的镜像模式，详见 [AgoraVideoMirrorMode](/zh-CN/api-reference/rtc/ios/enum-videomirrormodetype)。

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

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

</Parameter>
</ParameterList>

<a id="api_irtcengineex_setremoterendermodeex__return_values"></a>

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

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

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

- [AgoraRtcEngineKit(Ex)](/zh-CN/api-reference/rtc/ios/rtc-interface-class#class_irtcengineex)

<a id="api_irtcengine_setremoterendertargetfps"></a>

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

## setRemoteRenderTargetFps: [#setremoterendertargetfps]

设置远端视频渲染的最大帧率。

<a id="api_irtcengine_setremoterendertargetfps__prototype"></a>

```objc
- (int)setRemoteRenderTargetFps:(int)targetFps;
```

<a id="api_irtcengine_setremoterendertargetfps__detailed_desc"></a>

在视频渲染帧率要求不高的场景（例如屏幕共享、在线教育）或远端用户使用中低端设备的情况下，你可以调用该方法设置远端客户端的视频渲染最大帧率。SDK 会尽可能将实际渲染帧率控制在该值附近，从而降低 CPU 消耗并提升系统性能。

<a id="api_irtcengine_setremoterendertargetfps__scenario"></a>

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

在视频渲染帧率要求不高的场景（例如屏幕共享、在线教育）或远端用户使用中低端设备的情况下，你可以调用该方法设置远端客户端的视频渲染最大帧率。SDK 会尽可能将实际渲染帧率控制在该值附近，从而降低 CPU 消耗并提升系统性能。

<a id="api_irtcengine_setremoterendertargetfps__timing"></a>

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

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

<a id="api_irtcengine_setremoterendertargetfps__parameters"></a>

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

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

本地视频的采集帧率（fps）。支持的取值包括：1、7、10、15、24、30、60。将该参数设置为低于实际视频帧率的值，否则设置不生效。

</Parameter>
</ParameterList>

<a id="api_irtcengine_setremoterendertargetfps__return_values"></a>

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

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

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

- [AgoraRtcEngineKit](/zh-CN/api-reference/rtc/ios/rtc-interface-class#class_irtcengine)

<a id="api_imediaplayer_setrendermode"></a>

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

## setRenderMode: [#setrendermode]

设置媒体播放器的渲染模式。

<a id="api_imediaplayer_setrendermode__prototype"></a>

```objc
- (int)setRenderMode:(AgoraMediaPlayerRenderMode)mode NS_SWIFT_NAME(setRenderMode(_:));
```

<a id="api_imediaplayer_setrendermode__detailed_desc"></a>

<a id="api_imediaplayer_setrendermode__parameters"></a>

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

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

视图的渲染模式，详见 [AgoraMediaPlayerRenderMode](/zh-CN/api-reference/rtc/ios/enum-agoramediaplayerrendermode)。

</Parameter>
</ParameterList>

<a id="api_imediaplayer_setrendermode__return_values"></a>

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

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

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

- [AgoraRtcMediaPlayerProtocol](/zh-CN/api-reference/rtc/ios/rtc-interface-class#class_imediaplayer)

<a id="api_irtcengine_setuplocalvideo"></a>

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

## setupLocalVideo: [#setuplocalvideo]

初始化本地视频画面。

<a id="api_irtcengine_setuplocalvideo__prototype"></a>

```objc
- (int)setupLocalVideo:(AgoraRtcVideoCanvas * _Nullable)local NS_SWIFT_NAME(setupLocalVideo(_:));
```

<a id="api_irtcengine_setuplocalvideo__detailed_desc"></a>

该方法在本地设备上初始化本地视频流的画面，仅影响你本地看到的视频内容，不影响本地视频的发布。你可以调用该方法将本地视频流绑定到指定的视频画面（`view`），并设置画面的渲染模式和镜像模式。绑定关系在离开频道后仍然有效。如需停止渲染或解绑本地视频与画面，将 `view` 设为 nil 即可。

在实时互动场景中，如果你需要在本地视频预览中同时查看多个处于视频链路不同观察位置的预览画面，可以多次调用该方法，设置不同的 `view`，并为每个 `view` 设置不同的观察位置。例如，将视频源设置为摄像头后，配置两个 `view`，分别设置 `position` 为 `AgoraVideoModulePositionPostCaptureOrigin` 和 `AgoraVideoModulePositionPostCapture`，即可在本地视频预览中同时查看原始未处理的视频帧和经过美颜特效、虚拟背景、水印等预处理后的视频帧。

:::note
注： 若仅需在通话中更新本地视频画面的渲染模式或镜像模式，请调用 [setLocalRenderMode\:mirror:](/zh-CN/api-reference/rtc/ios/video/video-rendering#api_irtcengine_setlocalrendermode2) 方法。
:::

<a id="api_irtcengine_setuplocalvideo__scenario"></a>

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

初始化后调用该方法设置本地视频，然后加入频道。在实时互动场景中，如需在本地预览中同时查看多个不同观察位置的画面，可多次调用该方法设置不同的 `view` 和观察位置。

<a id="api_irtcengine_setuplocalvideo__timing"></a>

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

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

<a id="api_irtcengine_setuplocalvideo__parameters"></a>

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

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

本地视频画面及相关设置，详见 [AgoraRtcVideoCanvas](/zh-CN/api-reference/rtc/ios/class-videocanvas)。

</Parameter>
</ParameterList>

<a id="api_irtcengine_setuplocalvideo__return_values"></a>

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

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

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

- [AgoraRtcEngineKit](/zh-CN/api-reference/rtc/ios/rtc-interface-class#class_irtcengine)

<a id="api_irtcengine_setupremotevideo"></a>

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

## setupRemoteVideo: [#setupremotevideo]

初始化远端用户的视频视图。

<a id="api_irtcengine_setupremotevideo__prototype"></a>

```objc
- (int)setupRemoteVideo:(AgoraRtcVideoCanvas * _Nonnull)remote NS_SWIFT_NAME(setupRemoteVideo(_:));
```

<a id="api_irtcengine_setupremotevideo__detailed_desc"></a>

该方法在本地设备上初始化远端视频流的视频视图，仅影响你本地看到的视频画面。调用该方法可以将远端视频流绑定到指定视图，并设置该视图的渲染模式和镜像模式。你需要在该方法中指定远端用户 ID。如果你尚未获取远端用户 ID，请在收到 [rtcEngine\:didJoinedOfUid\:elapsed:](/zh-CN/api-reference/rtc/ios/channel#callback_irtcengineeventhandler_onuserjoined) 回调后再设置。

若要解绑远端用户与视图的绑定关系，请将 `view` 参数设置为 nil。一旦远端用户离开频道，SDK 会自动解绑该用户。

在移动端进行合流视频自定义布局的场景中，你可以调用该方法，并为合流视频流中的每个子视频流设置独立的 `view` 进行渲染。

:::note
注：

- 若需在通话过程中更新远端视频视图的渲染模式或镜像模式，请使用 `setRemoteRenderMode` 方法。
- 使用录制服务时，应用无需绑定视图，因为录制服务不会发送视频流。如果你的应用无法识别录制服务，请在 SDK 触发 [rtcEngine\:firstRemoteVideoDecodedOfUid\:size\:elapsed:](/zh-CN/api-reference/rtc/ios/video/video-basic#callback_irtcengineeventhandler_onfirstremotevideodecoded) 回调时将远端用户绑定到视图。
:::

<a id="api_irtcengine_setupremotevideo__parameters"></a>

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

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

远端视频视图及其相关设置，详见 [AgoraRtcVideoCanvas](/zh-CN/api-reference/rtc/ios/class-videocanvas)。

</Parameter>
</ParameterList>

<a id="api_irtcengine_setupremotevideo__return_values"></a>

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

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

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

- [AgoraRtcEngineKit](/zh-CN/api-reference/rtc/ios/rtc-interface-class#class_irtcengine)

<a id="api_irtcengineex_setupremotevideoex"></a>

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

## setupRemoteVideoEx\:connection: [#setupremotevideoexconnection]

初始化远端用户的视频视图。

<a id="api_irtcengineex_setupremotevideoex__prototype"></a>

```objc
- (int)setupRemoteVideoEx:(AgoraRtcVideoCanvas* _Nonnull)remote
               connection:(AgoraRtcConnection * _Nonnull)connection NS_SWIFT_NAME(setupRemoteVideoEx(_:connection:));
```

<a id="api_irtcengineex_setupremotevideoex__detailed_desc"></a>

该方法在本地设备上初始化远端视频流的视频视图，仅影响你所看到的远端视频画面。你可以调用该方法将远端视频流绑定到指定的视频视图，并设置渲染模式和镜像模式。

你需要在远端用户加入频道前，通过 [AgoraRtcVideoCanvas](/zh-CN/api-reference/rtc/ios/class-videocanvas) 设置远端用户的 UID。如果你尚未获取远端用户的 UID，可在收到 `didJoinedOfUid` 回调后再设置。

如果启用了视频录制功能，录制服务会以虚拟客户端身份加入频道，其他客户端也会因此收到 `onUserJoined` 回调。请勿将该虚拟客户端绑定到应用视图，因为它不会发送任何视频流。

如需解绑远端用户与视图的绑定关系，请将 `view` 参数设为 nil。一旦远端用户离开频道，SDK 会自动解绑该用户。

:::note
注： 若需在通话过程中更新远端视频视图的渲染模式或镜像模式，请使用 `setRemoteRenderModeEx` 方法。
:::

<a id="api_irtcengineex_setupremotevideoex__scenario"></a>

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

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

<a id="api_irtcengineex_setupremotevideoex__parameters"></a>

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

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

远端视频视图的设置。详见 [AgoraRtcVideoCanvas](/zh-CN/api-reference/rtc/ios/class-videocanvas)。

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

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

</Parameter>
</ParameterList>

<a id="api_irtcengineex_setupremotevideoex__return_values"></a>

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

0：方法调用成功。
&lt; 0：方法调用失败。

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

- [AgoraRtcEngineKit(Ex)](/zh-CN/api-reference/rtc/ios/rtc-interface-class#class_irtcengineex)

<a id="api_irtcengine_startmediarenderingtracing"></a>

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

## startMediaRenderingTracing [#startmediarenderingtracing]

启用视频帧渲染过程的追踪功能。

<a id="api_irtcengine_startmediarenderingtracing__prototype"></a>

```objc
- (int)startMediaRenderingTracing NS_SWIFT_NAME(startMediaRenderingTracing());
```

<a id="api_irtcengine_startmediarenderingtracing__detailed_desc"></a>

:::info[自从]
自 v4.1.1 版本新增。
:::

从成功调用该方法开始，SDK 会追踪频道中视频帧的渲染状态，并通过 [rtcEngine\:videoRenderingTracingResultOfUid\:currentEvent\:tracingInfo:](/zh-CN/api-reference/rtc/ios/video/video-rendering#callback_irtcengineeventhandler_onvideorenderingtracingresult) 回调报告相关事件信息。

:::note
注：

- 如果你未调用该方法，SDK 会从调用 [joinChannelByToken\:channelId\:uid\:mediaOptions\:joinSuccess:](/zh-CN/api-reference/rtc/ios/channel#api_irtcengine_joinchannel2) 加入频道开始追踪视频帧的渲染事件。你可以根据实际应用场景在合适的时机调用该方法，以设置追踪视频渲染事件的起始位置。
- 本地用户离开当前频道后，SDK 会自动从你加入频道的时刻开始追踪视频渲染事件。
:::

<a id="api_irtcengine_startmediarenderingtracing__scenario"></a>

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

你可以结合应用中的 UI 设置（如按钮、滑块）调用该方法，以提升用户体验。例如，在用户点击“加入频道”按钮时调用该方法，然后通过 [rtcEngine\:videoRenderingTracingResultOfUid\:currentEvent\:tracingInfo:](/zh-CN/api-reference/rtc/ios/video/video-rendering#callback_irtcengineeventhandler_onvideorenderingtracingresult) 回调获取视频帧渲染过程所耗费的时间，从而优化相关指标。

<a id="api_irtcengine_startmediarenderingtracing__return_values"></a>

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

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

  - -7：在初始化 [AgoraRtcEngineKit](/zh-CN/api-reference/rtc/ios/rtc-interface-class#class_irtcengine) 之前调用该方法。

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

- [AgoraRtcEngineKit](/zh-CN/api-reference/rtc/ios/rtc-interface-class#class_irtcengine)

<a id="api_irtcengineex_startmediarenderingtracingex"></a>

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

## startMediaRenderingTracingEx: [#startmediarenderingtracingex]

启用视频帧渲染过程的追踪。

<a id="api_irtcengineex_startmediarenderingtracingex__prototype"></a>

```objc
- (int)startMediaRenderingTracingEx:(AgoraRtcConnection * _Nonnull)connection NS_SWIFT_NAME(startMediaRenderingTracingEx(_:));
```

<a id="api_irtcengineex_startmediarenderingtracingex__detailed_desc"></a>

:::info[自从]
自 v4.1.1 版本新增。
:::

从成功调用该方法开始，SDK 会追踪频道中视频帧的渲染状态，并通过 [rtcEngine\:videoRenderingTracingResultOfUid\:currentEvent\:tracingInfo:](/zh-CN/api-reference/rtc/ios/video/video-rendering#callback_irtcengineeventhandler_onvideorenderingtracingresult) 回调报告相关信息。

:::note
注：

- 如果你未调用该方法，SDK 会从调用 `joinChannelByToken` 加入频道时开始追踪视频帧的渲染事件。你可以根据实际应用场景在合适的时机调用该方法，以设置追踪视频渲染事件的起始位置。
- 本地用户离开当前频道后，SDK 会自动从你加入频道的时刻开始追踪视频渲染事件。
:::

<a id="api_irtcengineex_startmediarenderingtracingex__scenario"></a>

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

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

<a id="api_irtcengineex_startmediarenderingtracingex__parameters"></a>

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

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

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

</Parameter>
</ParameterList>

<a id="api_irtcengineex_startmediarenderingtracingex__return_values"></a>

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

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

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

- [AgoraRtcEngineKit(Ex)](/zh-CN/api-reference/rtc/ios/rtc-interface-class#class_irtcengineex)

<a id="callback_irtcengineeventhandler_ontranscodedstreamlayoutinfo"></a>

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

## rtcEngine\:didTranscodedStreamLayoutInfoUpdatedWithUserId\:videoLayoutInfo: [#rtcenginedidtranscodedstreamlayoutinfoupdatedwithuseridvideolayoutinfo]

当本地用户接收到携带视频合流布局信息的合图视频时触发。

<a id="callback_irtcengineeventhandler_ontranscodedstreamlayoutinfo__prototype"></a>

```objc
- (void)rtcEngine:(AgoraRtcEngineKit * _Nonnull)engine didTranscodedStreamLayoutInfoUpdatedWithUserId:(NSUInteger)uid videoLayoutInfo:(AgoraVideoLayoutInfo* _Nonnull)videoLayoutInfo NS_SWIFT_NAME(rtcEngine(_:didTranscodedStreamLayoutInfoUpdatedWithUserId:videoLayoutInfo:));
```

<a id="callback_irtcengineeventhandler_ontranscodedstreamlayoutinfo__detailed_desc"></a>

该回调在你首次接收到由视频合流服务器发送的合图视频，或混合流的布局信息发生变化时被触发。

<a id="callback_irtcengineeventhandler_ontranscodedstreamlayoutinfo__timing"></a>

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

该回调在你首次接收到由视频合流服务器发送的合图视频，或混合流的布局信息发生变化时被触发。

<a id="callback_irtcengineeventhandler_ontranscodedstreamlayoutinfo__parameters"></a>

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

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

[AgoraRtcEngineKit](/zh-CN/api-reference/rtc/ios/rtc-interface-class#class_irtcengine) 对象，详见 [AgoraRtcEngineKit](/zh-CN/api-reference/rtc/ios/rtc-interface-class#class_irtcengine)。

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

发布该合图视频的用户 ID。

</Parameter>
<a id="videolayoutinfo"></a>
<Parameter name="videoLayoutInfo">

混合流中某个子视频流的布局信息，详见 [AgoraVideoLayoutInfo](/zh-CN/api-reference/rtc/ios/class-videolayoutinfo)。

</Parameter>
</ParameterList>

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

- [AgoraRtcEngineDelegate](/zh-CN/api-reference/rtc/ios/rtc-interface-class#class_irtcengineeventhandler)

<a id="callback_irtcengineeventhandler_onvideorenderingtracingresult"></a>

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

## rtcEngine\:videoRenderingTracingResultOfUid\:currentEvent\:tracingInfo: [#rtcenginevideorenderingtracingresultofuidcurrenteventtracinginfo]

视频帧渲染事件的回调。

<a id="callback_irtcengineeventhandler_onvideorenderingtracingresult__prototype"></a>

```objc
- (void)rtcEngine:(AgoraRtcEngineKit * _Nonnull)engine videoRenderingTracingResultOfUid:(NSUInteger)uid currentEvent:(AgoraMediaTraceEvent)currentEvent tracingInfo:(AgoraVideoRenderingTracingInfo * _Nonnull)tracingInfo NS_SWIFT_NAME(rtcEngine(_:videoRenderingTracingResultOfUid:currentEvent:tracingInfo:));
```

<a id="callback_irtcengineeventhandler_onvideorenderingtracingresult__detailed_desc"></a>

调用 [startMediaRenderingTracing](/zh-CN/api-reference/rtc/ios/video/video-rendering#api_irtcengine_startmediarenderingtracing) 方法或加入频道后，SDK 会触发该回调，用于上报视频帧渲染的事件及渲染过程中的指标。你可以通过优化这些指标，提高首帧视频渲染的效率。

<a id="callback_irtcengineeventhandler_onvideorenderingtracingresult__timing"></a>

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

该回调在调用 [startMediaRenderingTracing](/zh-CN/api-reference/rtc/ios/video/video-rendering#api_irtcengine_startmediarenderingtracing) 方法或加入频道后被触发。

<a id="callback_irtcengineeventhandler_onvideorenderingtracingresult__parameters"></a>

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

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

[AgoraRtcEngineKit](/zh-CN/api-reference/rtc/ios/rtc-interface-class#class_irtcengine) 实例。详见 [AgoraRtcEngineKit](/zh-CN/api-reference/rtc/ios/rtc-interface-class#class_irtcengine)。

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

用户 ID。

</Parameter>
<a id="currentevent"></a>
<Parameter name="currentEvent">

当前的视频帧渲染事件。详见 [AgoraMediaTraceEvent](/zh-CN/api-reference/rtc/ios/enum-mediatraceevent)。

</Parameter>
<a id="tracinginfo"></a>
<Parameter name="tracingInfo">

视频帧渲染过程中的指标信息。你需要尽可能降低这些指标的数值，以提高首帧视频渲染的效率。详见 [AgoraVideoRenderingTracingInfo](/zh-CN/api-reference/rtc/ios/class-videorenderingtracinginfo)。

</Parameter>
</ParameterList>

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

- [AgoraRtcEngineDelegate](/zh-CN/api-reference/rtc/ios/rtc-interface-class#class_irtcengineeventhandler)
