# 集成录制 SDK (/zh-CN/realtime-media/local-server-recording/build/legacy/integrate-sdk)

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

本页介绍如何设置环境以及集成声网本地服务端录制 SDK。

录制某频道内的音视频信息相当于将一个特殊的观众加入该频道。该观众获取频道内的音视频信息，将获取到的信息转码并储存在 Linux 服务器上。因此你必须：

- 将本地服务端录制 SDK 集成在你的 Linux 服务器上
- 在本地服务端录制 SDK 中使用和进行音视频通话的 RTC SDK 相同的 App ID

:::info[信息]
声网本地服务端录制 SDK 需要集成在你的 Linux 服务器，而不是你的 App 上。如果你不想自行部署 Linux 服务器，可尝试[声网云端录制](/zh-CN/realtime-media/cloud-recording)。
:::

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

下表列出了安装声网本地服务端录制 SDK 的基本要求：

| 硬件和网络 | 要求 |
| --- | --- |
| 服务器 | [integrate-sdk-html-0-1-1 details](#table-slot-integrate-sdk-html-0-1-1) |
| 网络 | 这台 Linux 服务器要接入公网，有公网 IP。 |
| 带宽 | 根据需要同时录制的频道数量和频道内情况确定所需带宽。以下数据可供参考：录制一个分辨率为 640 × 480 的画面需要的带宽约为 500 Kbps；录制一个有两个人的频道则需 1 Mbps；同时录制 100 个这样的频道，需要带宽为 100 Mbps。关于分辨率和带宽的关系，详见[录制 API](/zh-CN/api-reference/local-server-recording/cpp/legacy/overview)。 |
| 域名解析 | 服务器允许访问 `qos.agoralab.co`，否则 SDK 无法上报必要的统计数据。 |

<a id="table-slot-integrate-sdk-html-0-1-1"></a>

**integrate-sdk-html-0-1-1 details**

物理或虚拟：

- Ubuntu 14.04+ x64
- CentOS 6.5+（推荐 7.0）x64

## 参考配置 [#参考配置]

我们测试了以下云主机配置下的录制并发性能：

- AWS：Intel(R) Xeon(R) Platinum 8124M CPU @ 3.00 GHz
- 16 虚拟核 CPU，32 GB 内存
- 磁盘 I/O：412 MB/s

测试条件：

- 每个频道内有两个人，视频分辨率设为 320 × 240，帧率设为 15 fps。
- 对于合流录制文件，视频分辨率设为 640 × 480，视频帧率设为 15 fps，视频码率设为 500 Kbps；音频码率设为 48 Kbps。

不同频道模式和录制模式下，录制并发性能如下：

<DocsTable>
<thead>
<tr>
<th scope="col">频道模式</th>
<th scope="col">录制模式</th>
<th scope="col">测试结果</th>
</tr>
</thead>
<tbody>
<tr>
<td rowSpan={3}>直播模式</td>
<td>视频单流录制</td>
<td>215 个频道并发时，CPU 占用为 75% 左右；建议并发 200 个频道</td>
</tr>
<tr>
<td>视频合流录制</td>
<td>70 个频道并发时，CPU 占用 75% 左右；建议并发 60 个频道</td>
</tr>
<tr>
<td>纯音频合流录制</td>
<td>300 个频道并发时，CPU 占用为 75% 左右</td>
</tr>
<tr>
<td rowSpan={2}>通信模式</td>
<td>视频单流录制</td>
<td>210 个频道并发时，CPU 占用为 75% 左右；建议并发 200 个频道</td>
</tr>
<tr>
<td>视频合流录制</td>
<td>60 个频道并发时，CPU 占用为 75% 左右</td>
</tr>
</tbody>
</DocsTable>

你可参考上述云主机配置和对应的录制性能，根据自己的录制需要选择和配置云主机，详见[使用云容器部署录制 SDK](/zh-CN/realtime-media/local-server-recording/build/legacy/docker)。

## 下载 SDK [#下载-sdk]

前往[资源中心](/zh-CN/realtime-media/local-server-recording/reference/downloads)获取最新的声网本地服务端录制 SDK 软件包。软件包内容如下：

| 文件夹 | 描述 |
| --- | --- |
| `bin` | `AgoraCoreService` 所在的目录 |
| `include` | [integrate-sdk-html-2-2-1 details](#table-slot-integrate-sdk-html-2-2-1) |
| `libs` | 录制的依赖库 |
| `samples` | [integrate-sdk-html-2-4-1 details](#table-slot-integrate-sdk-html-2-4-1) |
| `tools` | 转码工具 |

<a id="table-slot-integrate-sdk-html-2-2-1"></a>

**integrate-sdk-html-2-2-1 details**

- `base`：`libs` 所依赖的一些基础的头文件
- `IAgoraLinuxSdkCommon.h`：公共的基础结构体和枚举值
- `IAgoraRecordingEngine.h`：录制引擎的接口类和配置信息

<a id="table-slot-integrate-sdk-html-2-4-1"></a>

**integrate-sdk-html-2-4-1 details**

代码示例：

- `agorasdk`：对录制 C++ 接口的实现以及回调的处理示例
- `base`：公共的示例代码
- `cpp`：C++ 示例代码
  - `release/bin/recorder`：可运行的父程序
- `java`：Java 示例代码
  - `native`：Native 代码
  - `jni`：JNI 代理
  - `src`：Java 层源代码
  - `src/io/agora/recording/RecordingEventHandler.java`：回调接口类
  - `src/io/agora/recording/RecordingSDK.java`：录制接口类

## 准备开发环境 [#准备开发环境]

本地服务端录制 SDK 中包含 C++ 和 Java 两个语言的代码。根据你使用的编程语言，参考如下步骤将 SDK 集成到你的项目中。

1. 为你的项目准备所需库：
   - 将 **include** 文件夹添加到你的项目里。
   - 将包含 lib 库的目录链接到 **libs** 文件夹下的 `librecorder.a` 库文件。

2. 安装编译器：gcc 4.4+。
3. 如果你的网络环境设置了防火墙限制外网访问，请使用[云代理服务](/zh-CN/realtime-media/local-server-recording/build/recording-preparation/cloud-proxy)。

4. 打开所有的录制进程所使用的 UDP 端口，端口为在 `RecordingConfig` 中指定的 `lowUdpPort` 和 `highUdpPort` 范围之间的端口。

1. 安装编译器：gcc 4.4+。
2. 配置好 JDK 环境，并确保包含 `jni.h`。
3. 配置好 Java 的 `CLASSPATH` 和 Linux 的 `LD_LIBRARY_PATH` 环境变量。
4. 如果你的网络环境设置了防火墙限制外网访问，请使用[云代理服务](/zh-CN/realtime-media/local-server-recording/build/recording-preparation/cloud-proxy)。
5. 打开所有的录制进程所使用的 UDP 端口，端口为在 `RecordingConfig` 中指定的 `lowUdpPort` 和 `highUdpPort` 范围之间的端口。

:::info[信息]
- 录制一个频道的内容需要开启一个对应的录制进程；单个录制进程需要使用 4 个 UDP 端口。进程（包括各个录制进程和系统进程）之间不得有端口冲突。
- 声网建议指定录制进程使用端口的范围。你可以为多个录制进程统一配置较大的端口范围（声网建议 40000 ~ 41000 或更大）。此时，录制 SDK 会在指定范围内为每个录制进程分配端口，并避免端口的冲突。要设置端口范围，你需要配置参数 `lowUdpPort` 和 `highUdpPort`。
- 如果不指定参数 `lowUdpPort` 和 `highUdpPort` ，录制进程所使用的端口为随机端口，会有端口冲突的风险。
- 使用 `iptables -L` 命令查看 UDP 端口。
- 为调试方便，声网建议你打开系统的 core dump 功能以记录可能产生的程序崩溃信息。
:::

## 编译代码示例 [#编译代码示例]

根据你选择的编程语言，参考如下步骤编译 SDK 包中的代码示例。

打开命令行工具，到 SDK 包的 **samples/cpp** 的目录下执行以下命令进行编译。

```shell
make
```

编译成功后，在该目录下会生成一个 `recorder_local` 可执行程序，如图所示。

<DocsImage alt="C++ 可编译文件" src="https://web-cdn.agora.io/docs-files/1544522109941" displayWidth="70%" />

1. 打开命令行工具，在 **samples/java** 路径下执行如下命令进行环境预设置。其中 `jni_path` 请填入 `jni.h` 文件绝对路径，例如 `/usr/java8u161/jdk1.8.0_161/include/`：

   ```shell
   source build.sh pre_set jni_path
   ```

2. 在 **samples/java** 下执行编译脚本：

   ```shell
   ./build.sh build
   ```

编译完成，在本目录下生成一个 **bin** 文件夹，其中的子目录 **io/agora/recording** 下会包含一个 `librecording.so` 文件，如图所示。

<DocsImage alt="Java 可编译文件" src="https://web-cdn.agora.io/docs-files/1544522310646" displayWidth="70%" />

## 下一步 [#下一步]

你已经集成了录制 SDK，可以选择以下任意一种方式开始录制：

- [使用命令行录制](/zh-CN/realtime-media/local-server-recording/build/legacy/record-by-cmd)
- [调用 API 录制](/zh-CN/realtime-media/local-server-recording/build/legacy/record-by-api)
