「Agora 本地服务端录制」FAQ 汇总

本文总结了开发者在集成 Agora 本地服务端录制 SDK 过程中遇到的常见问题及答案。

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

不同系统与程序配置 java.library.path 的方法请参考 修改java.library.path的位置

录制文件夹下没有生成录制文件

  • 检查 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 用户才能进行录制。如果只有录制客户端,则无法录到文件。如果频道内确认有用户,则还需要确认用户是否有发流,如果没有发流录制也是不会生成文件的。

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

黑屏:

  • 这种现象多是使用了不支持的播放器,请参考播放器列表

蓝屏:

  • 蓝屏是默认背景色,如果合流录制时,没有设置布局,就会只录制远端音频,没有视频。详见 setVideoMixingLayout

对于此类问题,可查看日志中布局关键字以及布局信息进行确认:

AgoraCoreService[1589]:(1589):INFO(19:27:23:838|3)1589; SET_VIDEO_MIXING_LAYOUT_URI

AgoraCoreService[1589]:(1589):INFO(19:27:23:838|0)1589; Layout: { client ms: 0, canvas: { width: 360, height: 640, bgnd: 2341340 }, Regions: [ 1243, x: 0, y: 0, width: 1, height: 1, alpha: 255, render_mode: 0, zorder: NotSet}]

录制退出报错 Error: 3, with stat_code:16

如出现 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” 的关键字即可确认。