「Agora 本地录制 SDK」FAQ 大汇总

本地录制 常见FAQ


更多 Agora 本地录制 SDK 相关链接:

Agora 本地录制 官网FAQ
Agora GitHub 链接1: 可下载demo
Agora GitHub 链接2: 可下载demo
Agora GitHub 社区


论坛内常见FAQ相关链接:

RTC 常见FAQ:论坛链接
RTM 常见FAQ:论坛链接
Web 常见FAQ:论坛链接
小知识 常见FAQ:论坛链接
云端录制 常见FAQ:论坛链接
小程序 常见FAQ:论坛链接
灵动课堂 常见FAQ:论坛链接
Vue 常见FAQ:论坛链接

点击问题展开答案


Q1. Java SDK 集成时报错 java.land.UnsatisfiedLinkError: no recording in java.library.path

报错原因:系统环境找不到 librecording.so 库文件。

解决方法:确认 Java demo 是否成功编译并生成了库文件,查看并配置库文件的位置。

例如,若库文件位置为 /home/user/Desktop/tool/Agora_Recording/samples/java/bin/io/agora/recording/librecording.so ,则在 Linux 系统下,在 /etc/profile 或者 ~/.bash_profile~/.bashrc 下配置 LD_LIBRARY_PATH

LD_LIBRARY_PATH=/home/user/Desktop/tool/Agora_Recording/samples/java/bin/io/agora/recording/librecording.so

Q2. 如何知道录制程序是正常退出频道,还是异常退出频道?

如果是正常退出频道,首先 SDK 会触发 onLeaveChannel ,并会返回错误码 ERR_OK = 1 。 如果是异常退出频道,SDK 不会触发 onLeaveChannel ,而是触发 onError 并返回错误码 ERR_INTERNAL_FAILED = 3


Q3. 录制文件夹下没有生成录制文件
  • 检查 appId 设置的是否与客户端使用 Agora Native SDK 时设置的一样。
  • 检查 channelProfile 的模式是否与客户端使用 Agora Native SDK 设置的一样。例如,录制的设为直播模式,Agora Native SDK 设置通信模式,直播和通信模式的视频无法互通,因此不会有录制文件。
  • 确认录制进程是否成功加入到频道。检查录制的 appid 、频道号是否有效,如果开启了 app certificate,是否携带了 channelKey 或 Token,以及 channelKey 或 Token 是否有效。你可以通过检查录制日志 recording_sys.log 里的 -appID–channel–channelKey 参数进行判断。
  • 确认频道内至少有一个 Native/Web 用户。频道内需要至少有一个 Native/Web 用户才能进行录制。如果只有录制客户端,则无法录到文件。如果频道内确认有用户,则还需要确认用户是否有发流,如果没有发流录制也是不会生成文件的。

Q4. 录制出来的文件时长小于通话时长

通过水晶球检查客户端和录制端在频道内的时间段是否一致。如果一致,联系技术支持。


Q5. 录制结束后,为什么检查录制的视频没有声音?

录制的音视频文件为独立的,视频为 mp4 格式文件,语音为 aac 格式文件。视频文件本身不含语音,你需要手动转码将多个音视频文件合并成一个文件。若检查发现已是转码合成后的最终视频文件,联系技术支持。


Q6. 录制结束之后只有音频文件,没有视频文件
  • 检查客户端和录制端的频道模式是否一致。
  • 如果频道模式一致,检查录制的参数 isAudioOnly 是否设置为 true,设置为 true 只录制音频,不录制视频。

Q7. 录制结束后,为什么无法播放录制的 MP4 文件?

请参考播放器列表,查看是否使用了不支持的播放器。


Q8. 启用加密模式后,为什么无法播放录制的视频文件,声音也不正常?

启用加密模式后,如果密码输入不正确或者没有输入密码,录制的文件无法播放。

由于语音被加密了,导致声音不正常。


Q9. 录制出来的视频,打开播放黑屏,但是声音正常

可能是由于使用了不支持的播放器,请参考播放器列表


Q10. 为什么录制并转码完成后的视频,在播放的时候,视频前面会黑一小段?

可能的原因如下:

  • 网络不好;
  • 视频包 I 帧收到之后,才会创建视频录制,在此之前收到其他 B,P 帧会丢掉;
  • 视频包的每一帧都比音频的大,所以音频包通常都会比视频包先收到并开启录制。

Q11. 录制出来的视频倒置 OR 录制出来的文件,音画不同步怎么办

请升级至官网最新版本,如还有问题,联系技术支持。


Q12. 为什么录制状态出现异常?

录制退出报错

如出现 Error: 3, with stat_code:16 报错时,录制属于正常退出。通过 leave_path code 判断录制退出的原因。

  • LEAVE_CODE_INIT(0):初始化失败
  • LEAVE_CODE_SIG(0b10):AgoraCoreService 收到 SIGINT 信号而触发的退出。
  • LEAVE_CODE_NO_USERS(0b100):录制超时退出。
  • LEAVE_CODE_TIMER_CATCH(0b1000):可忽略。
  • LEAVE_CODE_CLIENT_LEAVE(0b10000):录制端调用 leaveChannel 方法退出频道。

你可以将日志中的 code 与各枚举值逐一进行按位与运算,计算结果非零的,即为退出原因。例如,code 为 6 (0b110)时,将其与各枚举值逐一进行按位与计算, LEAVE_CODE_SIG (0b10)与 LEAVE_CODE_NO_USERS (0b100)的结果非零,则退出原因包括收到 SIGINT 信号以及录制超时。

大多数情况为录制超时退出,详见 idleLimitSec 。检查 recording_sys.log ,是否有 “No users in channel” 的关键字即可确认。

如何判断录制是否崩溃

录制崩溃可能导致以下情况:

  • 视频文件无法播放。
  • uid_xxx.txt 文件最后没有 mp4 文件的 close 信息。

录制崩溃之后怎么办

请升级至官网最新版本,如果无法解决:

2.2.3 及之后的版本请检查在 AgoraCoreService 同一目录下有没有生成 crash.log

2.2.3 之前的版本请检查在 AgoraCoreService 同一目录下有没有生成 core 文件。

  1. 如果有生成 core 文件,那么按照下面流程:
    a. 把 bin/AgoraCoreService 放在和 core 文件一起,然后命令行执行 gdb -c core_xxxx AgoraCoreService。
    b. 将 core 文件、a 中的结果、 recording_sys.log 提供给技术支持。
  2. 如果没有找到 core 文件:
    a. 如果没有专门设置 core 文件的目录,那么 core 文件一般是在录制的 AgoraCoreService 文件所在的目录。
    b. 如果还是没有找到,Linux 上执行 ulimit -c, 输出如果为0,则说明 coredump 没有打开,需要通过执行 ulimit -c unlimited 打开。
    c. 打开后,之后再出现 crash 就可以生成 core 文件了。
    d. 针对这次没有 core 文件生成的场景,提供 recording_sys.log 给技术支持。

Native SDK 与 Web SDK 互通时,在 Native 端录制视频生成的文件是 webm 格式,如何解决?

Native SDK 与 Web SDK 互通时,在 Web 端调用 createClient 方法需要将 codec 属性设置为 h264,如果设为 vp8 则会导致 Native 端的视频录制文件为 webm 格式。


Q13. 当使用命令行进行录制时,如何控制录制进程?

开始和暂停录制

如果录制模式为自动(默认),录制实例加入频道后,监测到频道內有用户即开始录制,不支持暂停录制。

如果录制模式为手动( triggerMode 设为 1),可以用以下方法控制录制进程:

  • 控制所有录制进程:
    • 开始录制: killall -s 10 recorder_local
    • 暂停录制: killall -s 12 recorder_local
  • 控制单个录制进程:
    1. 获取对应频道号的进程号: ps aux | grep 'channelName'
    2. 控制单个录制进程(PID 为获取的进程号)
    • 开始录制: kill -s 10 PID
    • 暂停录制: kill -s 12 PID

停止录制

频道内无用户的状态超过空闲频道超时退出时间( idle 设置的值),录制程序会自动退出。默认值为 300 秒。

如果想主动停止录制,可以在键盘上同时按下 CtrlC 键结束当前进程。


Q14. 本地服务端录制崩溃处理方法

录制崩溃可能导致以下情况:

  • 视频文件无法播放。
  • uid_xxx.txt 文件最后没有 mp4 文件的 close 信息。

录制崩溃之后怎么办

请升级至官网最新版本,如果无法解决:

2.2.3 及之后的版本请检查在 AgoraCoreService 同一目录下有没有生成 crash.log

2.2.3 之前的版本请检查在 AgoraCoreService 同一目录下有没有生成 core 文件。

  1. 如果有生成 core 文件,那么按照下面流程:
    a. 把 bin/AgoraCoreService 放在和 core 文件一起,然后命令行执行 gdb -c core_xxxx AgoraCoreService。
    b. 将 core 文件、a 中的结果、 recording_sys.log 提供给技术支持。
  2. 如果没有找到 core 文件:
    a. 如果没有专门设置 core 文件的目录,那么 core 文件一般是在录制的 AgoraCoreService 文件所在的目录。
    b. 如果还是没有找到,Linux 上执行 ulimit -c, 输出如果为0,则说明 coredump 没有打开,需要通过执行 ulimit -c unlimited 打开。
    c. 打开后,之后再出现 crash 就可以生成 core 文件了。
    d. 针对这次没有 core 文件生成的场景,提供 recording_sys.log 给技术支持。