集成录制 SDK

更新时间不可用

了解本地服务端录制中集成录制 SDK 相关内容的适用场景、配置步骤、实现要点和注意事项。

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

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

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

信息

声网本地服务端录制 SDK 需要集成在你的 Linux 服务器,而不是你的 App 上。如果你不想自行部署 Linux 服务器,可尝试声网云端录制。

前提条件

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

硬件和网络要求
服务器

物理或虚拟:

  • Ubuntu 14.04+ x64
  • CentOS 6.5+(推荐 7.0)x64
网络这台 Linux 服务器要接入公网,有公网 IP。
带宽根据需要同时录制的频道数量和频道内情况确定所需带宽。以下数据可供参考:录制一个分辨率为 640 × 480 的画面需要的带宽约为 500 Kbps;录制一个有两个人的频道则需 1 Mbps;同时录制 100 个这样的频道,需要带宽为 100 Mbps。关于分辨率和带宽的关系,详见录制 API。
域名解析服务器允许访问 qos.agoralab.co,否则 SDK 无法上报必要的统计数据。
表格内容超出当前宽度,可横向滚动查看更多列。

参考配置

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

  • 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。

不同频道模式和录制模式下,录制并发性能如下:

频道模式录制模式测试结果
直播模式视频单流录制215 个频道并发时,CPU 占用为 75% 左右;建议并发 200 个频道
视频合流录制70 个频道并发时,CPU 占用 75% 左右;建议并发 60 个频道
纯音频合流录制300 个频道并发时,CPU 占用为 75% 左右
通信模式视频单流录制210 个频道并发时,CPU 占用为 75% 左右;建议并发 200 个频道
视频合流录制60 个频道并发时,CPU 占用为 75% 左右
表格内容超出当前宽度,可横向滚动查看更多列。

你可参考上述云主机配置和对应的录制性能,根据自己的录制需要选择和配置云主机,详见使用云容器部署录制 SDK。

下载 SDK

前往资源中心获取最新的声网本地服务端录制 SDK 软件包。软件包内容如下:

文件夹描述
binAgoraCoreService 所在的目录
include
  • base:libs 所依赖的一些基础的头文件
  • IAgoraLinuxSdkCommon.h:公共的基础结构体和枚举值
  • IAgoraRecordingEngine.h:录制引擎的接口类和配置信息
libs录制的依赖库
samples

代码示例:

  • 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:录制接口类
tools转码工具
表格内容超出当前宽度,可横向滚动查看更多列。

准备开发环境

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

  1. 为你的项目准备所需库:

    • 将 include 文件夹添加到你的项目里。
    • 将包含 lib 库的目录链接到 libs 文件夹下的 librecorder.a 库文件。
  2. 安装编译器:gcc 4.4+。

  3. 如果你的网络环境设置了防火墙限制外网访问,请使用云代理服务。

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

  5. 安装编译器:gcc 4.4+。

  6. 配置好 JDK 环境,并确保包含 jni.h。

  7. 配置好 Java 的 CLASSPATH 和 Linux 的 LD_LIBRARY_PATH 环境变量。

  8. 如果你的网络环境设置了防火墙限制外网访问,请使用云代理服务。

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

信息

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

编译代码示例

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

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

Shell
make

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

  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 文件,如图所示。

下一步

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