本地录制 常见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 文件。
- 如果有生成 core 文件,那么按照下面流程:
a. 把 bin/AgoraCoreService 放在和 core 文件一起,然后命令行执行 gdb -c core_xxxx AgoraCoreService。
b. 将 core 文件、a 中的结果、recording_sys.log
提供给技术支持。 - 如果没有找到 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
- 开始录制:
- 控制单个录制进程:
- 获取对应频道号的进程号:
ps aux | grep 'channelName'
- 控制单个录制进程(PID 为获取的进程号)
- 开始录制:
kill -s 10 PID
- 暂停录制:
kill -s 12 PID
- 获取对应频道号的进程号:
停止录制
频道内无用户的状态超过空闲频道超时退出时间( idle
设置的值),录制程序会自动退出。默认值为 300 秒。
如果想主动停止录制,可以在键盘上同时按下 Ctrl 和 C 键结束当前进程。
Q14. 本地服务端录制崩溃处理方法
录制崩溃可能导致以下情况:
- 视频文件无法播放。
-
uid_xxx.txt
文件最后没有 mp4 文件的 close 信息。
录制崩溃之后怎么办
请升级至官网最新版本,如果无法解决:
2.2.3 及之后的版本请检查在 AgoraCoreService 同一目录下有没有生成 crash.log
。
2.2.3 之前的版本请检查在 AgoraCoreService 同一目录下有没有生成 core 文件。
- 如果有生成 core 文件,那么按照下面流程:
a. 把 bin/AgoraCoreService 放在和 core 文件一起,然后命令行执行 gdb -c core_xxxx AgoraCoreService。
b. 将 core 文件、a 中的结果、recording_sys.log
提供给技术支持。 - 如果没有找到 core 文件:
a. 如果没有专门设置 core 文件的目录,那么 core 文件一般是在录制的 AgoraCoreService 文件所在的目录。
b. 如果还是没有找到,Linux 上执行 ulimit -c, 输出如果为0,则说明 coredump 没有打开,需要通过执行 ulimit -c unlimited 打开。
c. 打开后,之后再出现 crash 就可以生成 core 文件了。
d. 针对这次没有 core 文件生成的场景,提供recording_sys.log
给技术支持。