# 鱼眼镜头畸变矫正与分离显示 (/zh-CN/solutions/online-music-class/build/extend-karaoke/fish-eye)

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

<_PlatformTabsGroup>
<_PlatformProcessedMarker groupMode="structured" canonicalPlatform="android" platform="android" />
在乐器陪练场景中，学生端可能会配置鱼眼镜头，用于让教师看到学生的弹奏动作，但是鱼眼镜头拍摄的画面存在失真。本文介绍如何使用声网提供的 API 对鱼眼镜头的画面进行畸变矫正和分离显示处理，以帮助教师在教学过程中更好地演示和纠正学生的弹奏动作。

![鱼眼镜头畸变矫正](https://web-cdn.agora.io/docs-files/1645161002687)

## 前提条件 [#前提条件]

开始前请确保你的项目满足如下条件：
你已经集成了声网 RTC 教育特殊版 SDK 并实现了基本的音视频功能。详见[快速开始](/zh-CN/realtime-media/rtc/get-started/quick-start)。

## 实现方法 [#实现方法]

### 鱼眼镜头画面畸变矫正 [#鱼眼镜头画面畸变矫正]

你可以通过以下步骤进行鱼眼镜头画面畸变校正。声网建议在学生端进行鱼眼镜头画面矫正操作。

:::warning[注意]
由于鱼眼镜头画面畸变矫正参数较为复杂且与具体镜头型号有关，声网建议你[提交工单](https://ticket.shengwang.cn)联系技术支持协助调参。
:::

1. 根据镜头的实际情况，设置鱼眼镜头画面矫正参数。

    ```java
    // 鱼眼镜头画面矫正参数。
    FishCorrectionParams config = new FishCorrectionParams();

    // xCenter 和 yCenter 代表鱼眼图像处理的中心位置。取值范围 [0.4, 0.6]。
    config.xCenter = 0.5;
    config.yCenter = 0.5;

    // 鱼眼镜头成像的区域大小。取值范围 [1, 5]。
    config.scaleFactor = 2;
    // 镜头焦距。取值范围 [20, 40]。
    config.focalLength = 28;
    // 标定鱼眼镜头的参数，通过镜头焦距计算。取值范围 [20, 40]。
    config.polFocalLength = 31;
    // 鱼眼矫正效果切分高度。取值范围 [0, 1]。在切分线以上的画面有鱼眼矫正效果，在切分线以下的画面无鱼眼矫正效果。
    config.splitHeight = 0.469;
    // 镜头的一组参数，通过多项式拟合得到。不同类型的鱼眼镜头会有不同的值。
    config.ss[0] = 0.8327;
    config.ss[1] = 0.0;
    config.ss[2] = -0.5536;
    config.ss[3] = 0.4999;
    config.ss[4] = -0.5590;
    ```

2. 调用 `enableFishCorrection` 开启鱼眼镜头画面矫正。

    ```java
    mRtcEngine.enableFishCorrection(true, config);
    ```

### 画面分离显示 [#画面分离显示]

你可以通过以下步骤进行画面分离。声网建议在教师端进行画面分离操作，分离后的画面再传回学生端。

1. 在调用 `setupRemoteVideo`、`setupLocalVideo`、`setLocalVideoMirrorMode`、`setRemoteRenderMode`、`setLocalRenderMode` 之前，调用 `enableVideoMultiRenderer` 启用多重渲染。

    ```java
    mRtcEngine.enableVideoMultiRenderer(true);
    ```

2. 调用 `setupLocalVideo` 和 `setupRemoteVideo` 分别增加本地和远端的渲染视图。

    ```java
    VideoCanvas canvas = new VideoCanvas();
    // 设置渲染的视频源
    canvas.sourceType = VIDEO_SOURCE_CAMERA_PRIMARY;
    canvas.crop = new VideoCanvas.Crop();
    // 设置裁剪后出现在渲染区域的图像
    canvas.crop.xPoint = 100;
    canvas.crop.yPoint = 100;
    canvas.crop.width = 400;
    canvas.crop.height = 400;
    // 增加本地渲染视图
    mRtcEngine.setupLocalVideo(canvas, VIDEO_VIEW_SETUP_ADD);
    // 增加远端渲染视图
    mRtcEngine.setupRemoteVideo(canvas, VIDEO_VIEW_SETUP_ADD);
    ```

## API 参考 [#api-参考]

你可以参考[在线音乐教学 API 参考](/zh-CN/api-reference/online-music-teaching)了解更多 API 使用信息。
<_PlatformProcessedMarker close="true" />

<_PlatformProcessedMarker groupMode="structured" canonicalPlatform="android" platform="ios" />
在乐器陪练场景中，学生端可能会配置鱼眼镜头，用于让教师看到学生的弹奏动作，但是鱼眼镜头拍摄的画面存在失真。本文介绍如何使用声网提供的 API 对鱼眼镜头的画面进行畸变矫正和分离显示处理，以帮助教师在教学过程中更好地演示和纠正学生的弹奏动作。

![鱼眼镜头畸变矫正](https://web-cdn.agora.io/docs-files/1645161002687)

## 前提条件 [#前提条件-1]

开始前请确保你的项目满足如下条件：
你已经集成了声网 RTC 教育特殊版 SDK 并实现了基本的音视频功能。详见[快速开始](/zh-CN/realtime-media/rtc/get-started/quick-start)。

## 实现方法 [#实现方法-1]

### 鱼眼镜头画面畸变矫正 [#鱼眼镜头画面畸变矫正-1]

你可以通过以下步骤进行鱼眼镜头画面畸变矫正。声网建议在学生端进行鱼眼镜头画面矫正操作。

:::warning[注意]
由于鱼眼镜头画面畸变矫正参数较为复杂且与具体镜头型号有关，声网建议你[提交工单](https://ticket.shengwang.cn)联系技术支持协助调参。
:::

1. 根据镜头的实际情况，设置鱼眼镜头画面矫正参数。

    ```swift
    // 鱼眼镜头画面矫正参数。
    let config = AgoraFishCorrectionParams()
    // x_center 和 y_center 代表鱼眼图像处理的中心位置。取值范围 [0.4, 0.6]。
    config.x_center = 0.5
    config.y_center = 0.5
    // 鱼眼镜头成像的区域大小。取值范围 [1, 5]。
    config.scale_factor = 2
    // 镜头焦距。取值范围 [20, 40]。
    config.focal_length = 28
    // 标定鱼眼镜头的参数，通过镜头焦距计算。取值范围 [20, 40]。
    config.pol_focal_length = 31
    // 鱼眼矫正效果切分高度。取值范围 [0, 1]。在切分线以上的画面有鱼眼矫正效果，在切分线以下的画面无鱼眼矫正效果。
    config.split_height = 0.469
    // 镜头的一组参数，通过多项式拟合得到。不同类型的鱼眼镜头会有不同的值。
    config.ss[0] = 0.8327 
    config.ss[1] = 0.0 
    config.ss[2] = -0.5536
    config.ss[3] = 0.4999 
    config.ss[4] = -0.5590 
    ```

2. 调用 `enableFishCorrection` 开启鱼眼镜头画面矫正。

    ```swift
    agoraKit.enableFishCorrection(true, config)
    ```

### 画面分离显示 [#画面分离显示-1]

你可以通过以下步骤进行画面分离。声网建议在教师端进行画面分离操作，分离后的画面再传回学生端。

1. 在调用 `setupRemoteVideo`、`setupLocalVideo`、`setLocalVideoMirrorMode`、`setRemoteRenderMode`、`setLocalRenderMode` 之前，调用 `enableVideoMultiRenderer` 启用多重渲染。

    ```swift
    agoraKit.enableVideoMultiRenderer(true)
    ```

2. 调用 `setupLocalVideo` 和 `setupRemoteVideo` 分别增加本地和远端的渲染视图。

    ```swift
    let canvas = AgoraRtcVideoCanvas()
    // 设置渲染的视频源
    canvas.sourceType = AgoraVideoSourceType.camera
    // 设置裁剪后出现在渲染区域的图像
    canvas.cropArea.xPoint = 100
    canvas.cropArea.yPoint = 100
    canvas.cropArea.width = 400
    canvas.cropArea.height = 400
    // 增加本地渲染视图
    agoraKit.setupLocalVideo(canvas, AgoraVideoViewSetupMode.AgoraVideoViewSetupAdd)
    // 增加远端渲染视图
    agoraKit.setupRemoteVideo(canvas, AgoraVideoViewSetupMode.AgoraVideoViewSetupAdd)
    ```

## API 参考 [#api-参考-1]

你可以参考[在线音乐教学 API 参考](/zh-CN/api-reference/online-music-teaching)了解更多 API 使用信息。
<_PlatformProcessedMarker close="true" />

<_PlatformProcessedMarker groupMode="structured" canonicalPlatform="android" platform="macos" />
在乐器陪练场景中，学生端可能会配置鱼眼镜头，用于让教师看到学生的弹奏动作，但是鱼眼镜头拍摄的画面存在失真。本文介绍如何使用声网提供的 API 对鱼眼镜头的画面进行畸变矫正和分离显示处理，以帮助教师在教学过程中更好地演示和纠正学生的弹奏动作。

![鱼眼镜头畸变矫正](https://web-cdn.agora.io/docs-files/1645161002687)

## 前提条件 [#前提条件-2]

开始前请确保你的项目满足如下条件：
你已经集成了声网 RTC 教育特殊版 SDK 并实现了基本的音视频功能。详见[快速开始](/zh-CN/realtime-media/rtc/get-started/quick-start)。

## 实现方法 [#实现方法-2]

### 鱼眼镜头画面畸变矫正 [#鱼眼镜头画面畸变矫正-2]

你可以通过以下步骤进行鱼眼镜头画面畸变矫正。声网建议在学生端进行鱼眼镜头画面矫正操作。

:::warning[注意]
由于鱼眼镜头画面畸变矫正参数较为复杂且与具体镜头型号有关，声网建议你[提交工单](https://ticket.shengwang.cn)联系技术支持协助调参。
:::

1. 根据镜头的实际情况，设置鱼眼镜头画面矫正参数。

    ```swift
    // 鱼眼镜头画面矫正参数。
    let config = AgoraFishCorrectionParams()
    // x_center 和 y_center 代表鱼眼图像处理的中心位置。取值范围 [0.4, 0.6]。
    config.x_center = 0.5
    config.y_center = 0.5
    // 鱼眼镜头成像的区域大小。取值范围 [1, 5]。
    config.scale_factor = 2
    // 镜头焦距。取值范围 [20, 40]。
    config.focal_length = 28
    // 标定鱼眼镜头的参数，通过镜头焦距计算。取值范围 [20, 40]。
    config.pol_focal_length = 31
    // 鱼眼矫正效果切分高度。取值范围 [0, 1]。在切分线以上的画面有鱼眼矫正效果，在切分线以下的画面无鱼眼矫正效果。
    config.split_height = 0.469
    // 镜头的一组参数，通过多项式拟合得到。不同类型的鱼眼镜头会有不同的值。
    config.ss[0] = 0.8327 
    config.ss[1] = 0.0 
    config.ss[2] = -0.5536
    config.ss[3] = 0.4999 
    config.ss[4] = -0.5590 
    ```

2. 调用 `enableFishCorrection` 开启鱼眼镜头画面矫正。

    ```swift
    agoraKit.enableFishCorrection(true, config)
    ```

### 画面分离显示 [#画面分离显示-2]

你可以通过以下步骤进行画面分离。声网建议在教师端进行画面分离操作，分离后的画面再传回学生端。

1. 在调用 `setupRemoteVideo`、`setupLocalVideo`、`setLocalVideoMirrorMode`、`setRemoteRenderMode`、`setLocalRenderMode` 之前，调用 `enableVideoMultiRenderer` 启用多重渲染。

    ```swift
    agoraKit.enableVideoMultiRenderer(true)
    ```

2. 调用 `setupLocalVideo` 和 `setupRemoteVideo` 分别增加本地和远端的渲染视图。

    ```swift
    let canvas = AgoraRtcVideoCanvas()
    // 设置渲染的视频源
    canvas.sourceType = AgoraVideoSourceType.camera
    // 设置裁剪后出现在渲染区域的图像
    canvas.cropArea.xPoint = 100
    canvas.cropArea.yPoint = 100
    canvas.cropArea.width = 400
    canvas.cropArea.height = 400
    // 增加本地渲染视图
    agoraKit.setupLocalVideo(canvas, AgoraVideoViewSetupMode.AgoraVideoViewSetupAdd)
    // 增加远端渲染视图
    agoraKit.setupRemoteVideo(canvas, AgoraVideoViewSetupMode.AgoraVideoViewSetupAdd)
    ```

## API 参考 [#api-参考-2]

你可以参考[在线音乐教学 API 参考](/zh-CN/api-reference/online-music-teaching)了解更多 API 使用信息。
<_PlatformProcessedMarker close="true" />

<_PlatformProcessedMarker groupMode="structured" canonicalPlatform="android" platform="windows" />
在乐器陪练场景中，学生端可能会配置鱼眼镜头，用于让教师看到学生的弹奏动作，但是鱼眼镜头拍摄的画面存在失真。本文介绍如何使用声网提供的 API 对鱼眼镜头的画面进行畸变矫正和分离显示处理，以帮助教师在教学过程中更好地演示和纠正学生的弹奏动作。

![鱼眼镜头畸变矫正](https://web-cdn.agora.io/docs-files/1645161002687)

## 前提条件 [#前提条件-3]

开始前请确保你的项目满足如下条件：
你已经集成了声网 RTC 教育特殊版 SDK 并实现了基本的音视频功能。详见[快速开始](/zh-CN/realtime-media/rtc/get-started/quick-start)。

## 实现方法 [#实现方法-3]

### 鱼眼镜头画面畸变矫正 [#鱼眼镜头画面畸变矫正-3]

你可以通过以下步骤进行鱼眼镜头画面畸变校正。声网建议在学生端进行鱼眼镜头画面矫正操作。

:::warning[注意]
由于鱼眼镜头画面畸变矫正参数较为复杂且与具体镜头型号有关，声网建议你[提交工单](https://ticket.shengwang.cn)联系技术支持协助调参。
:::

1. 根据镜头的实际情况，设置鱼眼镜头画面矫正参数。

    ```cpp
    // 鱼眼镜头画面矫正参数。
    FishCorrectionParams params;

    // _x_center 和 _y_center 代表鱼眼图像处理的中心位置。取值范围 [0.4, 0.6]。
    params._x_center = 0.5;
    params._y_center = 0.5;

    // 鱼眼镜头成像的区域大小。取值范围 [1, 5]。
    params._scale_factor = 2;
    // 镜头焦距。取值范围 [20, 40]。
    params._focal_length = 28;
    // 标定鱼眼镜头的参数，通过镜头焦距计算。取值范围 [20, 40]。
    params._pol_focal_length = 31;
    // 鱼眼矫正效果切分高度。取值范围 [0, 1]。在切分线以上的画面有鱼眼矫正效果，在切分线以下的画面无鱼眼矫正效果。
    params._split_height = 0.469;
    // 镜头的一组参数，通过多项式拟合得到。不同类型的鱼眼镜头会有不同的值。
    params._ss[0] = 0.8327;
    params._ss[1] = 0.0;
    params._ss[2] = -0.5536;
    params._ss[3] = 0.4999;
    params._ss[4] = -0.5590;
    ```

2. 调用 `enableFishCorrection` 开启鱼眼镜头画面矫正。

    ```cpp
    m_lpAgoraEngine->enableFishCorrection(true, params);
    ```

### 画面分离显示 [#画面分离显示-3]

你可以通过以下步骤进行画面分离。声网建议在教师端进行画面分离操作，分离后的画面再传回学生端。

1. 在调用 `setupRemoteVideo`、`setupLocalVideo`、`setLocalVideoMirrorMode`、`setRemoteRenderMode`、`setLocalRenderMode` 之前，调用 `enableVideoMultiRenderer` 启用多重渲染。

    ```cpp
    m_lpAgoraEngine->enableVideoMultiRenderer(true);
    ```

2. 调用 `setupLocalVideo` 和 `setupRemoteVideo` 分别增加本地和远端的渲染视图。

    ```cpp
    VideoCanvas canvas;
    // 设置渲染的视频源
    canvas.sourceType = VIDEO_SOURCE_CAMERA_PRIMARY;

    // 设置裁剪后出现在渲染区域的图像
    canvas.area.xPoint = 100;
    canvas.area.yPoint = 100;
    canvas.area.width = 400;
    canvas.area.height = 400;

    // 增加本地渲染视图
    m_lpAgoraEngine->setupLocalVideo(canvas, VIDEO_VIEW_SETUP_ADD);
    // 增加远端渲染视图
    m_lpAgoraEngine->setupRemoteVideo(canvas, VIDEO_VIEW_SETUP_ADD);
    ```

## API 参考 [#api-参考-3]

你可以参考[在线音乐教学 API 参考](/zh-CN/api-reference/online-music-teaching)了解更多 API 使用信息。
<_PlatformProcessedMarker close="true" />
</_PlatformTabsGroup>
