当前页

跑通示例源码

2026-09-18

说明

本文介绍如何快速跑通示例源码,体验基础的音视频流录制功能。

前提条件

  • 已在 ZEGO 控制台 创建项目,并申请有效的 AppID,详情请参考 控制台 - 项目管理 中的“项目信息”。

  • 开发和运行环境需满足以下要求:

    • 操作系统与架构:x86_64 架构的 Linux 操作系统
    • C 运行库:glibc 2.18 或以上
    • C++ 编译器:GCC / G++ 4.8.5 或以上,启用 C++11
    • 构建工具:CMake 3.21.2 或以上、Make
    • 命令行工具:Bash、curl、unzip
    • 底层依赖库:libasound(ALSA)、libv4l2(v4l utils)
    说明
    • SDK 依赖 libasound (ALSA) 和 libv4l2 (v4l utils)。
    • CentOS (RHEL/Fedora) 可以通过执行 yum install alsa-lib-devel libv4l-devel 命令安装。
    • Ubuntu (Debian/Deepin) 可以通过执行 apt install libasound2-dev libv4l-dev 命令安装。
    • 其他平台和系统请自行安装。
    • 若需要交叉编译,请参考 如何交叉编译 Linux alsa-lib 依赖库? 和 如何交叉编译 Linux v4l-utils 依赖库? 两篇文档,同时目标机器需安装好 libasound 和 libv4l2 依赖库。

    可通过以下命令检查服务器的运行环境是否符合要求:

    uname -m                         # 应输出 x86_64
    getconf GNU_LIBC_VERSION          # 应为 glibc 2.18 或以上
    g++ --version
    cmake --version
    make --version

下载示例源码

示例源码目录结构

.
├──docs
└──cpp
    ├── CMakeLists.txt
    ├── README.md
    ├── build.sh
    ├── demo_config.yaml
    ├── run.sh
    ├── sdk
    │   ├── Document
    │   ├── Library
    │   └── VERSION.txt
    └── src
        ├── CommandLine.h
        ├── LiveRoomRecorder.cpp
        ├── LiveRoomRecorder.h
        ├── RecorderConfig.h
        ├── Yaml.cpp
        ├── Yaml.hpp
        └── main.cpp

运行示例源码

1

解压并进入示例源码目录。

2

构建项目。

bash build.sh

构建产物为 build/playrecorderdemo。

3

修改项目配置文件。

# 复制配置文件模版
cp demo_config.yaml local_config.yaml

首次运行可保留模板中的 mode: 1、room_mode: 0、muxer_out_type: 1、suffix: "mp4" 和 single.fragment: 0。然后填写以下的主要配置:

  • appid:替换为 ZEGO 控制台 获取的 AppID。
  • use_token: 是否使用 token 鉴权,1 使用,0 不使用。不使用 Token 鉴权时(0)填写 app_sign 字段;使用 Token 鉴权时(1),填写 token_list 字段且保持 app_sign: "none"。
  • room_list:替换为正在推流的房间 ID,保留字符串引号。
  • user_id、user_name:设置录制用户身份。
  • log_path:设置可写的绝对目录,例如 /home/your-user/recorder-output,实际路径须存在或允许创建。
注意

包含 AppSign 或 Token 的本地配置请妥善保存,不要提交到代码仓库。

字段配置要求
appid应用 ID,正整数;推流端与录制端使用同一应用
use_token1 使用 Token,0 使用 AppSign
app_signAppSign 鉴权时填写 64 个十六进制字符;Token 鉴权时保留 none
token_listToken 鉴权时与 room_list 顺序和数量一致;使用服务端为录制用户签发的 Token
room_list房间 ID 字符串列表,数字型 ID 也加引号,避免丢失前导零
user_id / user_name录制用户身份,不能与房间中其他用户重复;Token 中的身份需匹配 user_id
room_mode0 单房间,仅使用 room_list 第一个元素;1 多房间
mode1 单流;2 混流;3 同时录制单流和混流
log_path日志及示例录制文件的根目录,建议绝对路径;启动时打印本次会话目录
persistence_pathSDK 持久化配置路径;示例仍显式将录制和截图输出到本次会话目录
suffix初次验证使用 mp4;音频录制可用 mp3
muxer_out_type验证文件录制使用 1;2 仅回调数据,本 demo 未实现回调数据持久化
single.fragment单流分片间隔,初次 MP4 验证设 0,停止后检查完整文件
mix.fragment混流分片间隔,初次 MP4 验证设 0
mix.output_width / mix.output_height混流画布宽高,例如 1280 × 720
mix.output_fps / mix.output_bitrate混流视频帧率及码率,单位分别为 fps、bps
4

运行示例 Demo 。

bash run.sh start --config ./local_config.yaml
注意
  • run.sh 会保留调用者的当前工作目录,因此配置文件及配置中的相对路径均以执行命令时所在目录为基准。建议服务部署时统一使用绝对路径。
  • Demo 初始化成功后会自动登录房间并录制发现的流,无需手动输入 record start 启动录制。

启动录制后,可根据终端输出检查录制进度:

  1. 初始化回调错误码为 0。
  2. 登录回调错误码为 0,房间 ID 与配置一致。
  3. 流更新回调出现预期的 stream ID。
  4. 录制开始回调给出文件路径。单流可用 record status 辅助观察时长和大小;混流请检查录制回调和停止后的输出文件。
  5. 录制一段时间后输入 stop,检查录制结束回调和 log_path 输出的文件;再执行 exit。

如已安装 FFmpeg,可检查输出文件:

ffprobe -v error -show_entries format=duration,size \
  -show_entries stream=codec_type,codec_name,width,height \
  -of json /absolute/path/to/recording.mp4

单流录制成功后,先执行 stop,将配置中的 mode 改为 2、mix.fragment 改为 0,再重新启动。检查混流文件的布局和声音,并尝试 mix pause、mix resume。使用 mode: 3 时会同时生成单流和混流文件,两类文件都需要检查。

命令用途
start --config ./demo_config.yaml加载配置、初始化、登录配置中的房间,并自动录制新增流。路径含空格时请使用单引号或双引号。
stop停止录制、退出房间并释放 SDK;之后可以重新 start
room login --room-id room1登录指定房间;多房间操作需在初始化前配置 room_mode
room logout --room-id room1退出指定房间
room set-token --room-id room1 --token-file ./room1.token为房间设置或更新 Token;文件为 UTF-8 单行文本,可带末尾换行
record start --room-id room1 --stream-id stream1手动启动指定单流录制
record stop --room-id room1 --stream-id stream1手动停止指定单流录制
record status查询录制时长、大小和路径
mix pause / mix resume暂停或恢复正在进行的混流录制
stream sei查询已发现流的最近 SEI 时间
snapshot --stream-id stream1对单流截图
snapshot --mix对混流截图
help / start --help查看命令帮助
exit停止录制并退出程序
说明
  • stream-id 应从流更新回调中取得,不能用房间 ID 代替。自动录制已启动的流不需要再执行 record start。
  • 输入结束(EOF)会自动停止运行,因此不要使用 echo 'start ...' | ... 启动持续录制。
  • 通过启动参数执行 start 后,保持终端输入打开,录制完成后输入 exit 停止录制并退出程序。

常见问题

检查应用 ID、鉴权配置和 SDK 日志;API 返回 true 仅说明请求被接受

核对应用、房间、用户 ID;Token 是否过期,是否签发给该录制用户

确认推流端使用同一应用和房间并已开始推流;房间 ID 与流 ID 是不同概念

看录制开始/结束回调、资源模式、输出目录权限和磁盘空间;muxer_out_type 应为 1

先正常 stop,等待文件封装完成后检查;强制结束进程可能留下未完成文件

检查画布宽高、输入流数量与矩形坐标;横坐标不超过宽,纵坐标不超过高

等待初始化结果后操作;初始化失败后修正配置再 start

上一篇

下载 SDK

下一篇

集成 SDK

当前页

返回到顶部