回调
事件类型、回调线程模型、幂等处理与重试建议。
回调
Legacy 面
IRecordingEngineEventHandler(24 个成员)由宿主继承;默认实现是空体,因此「不关心某个回调」是合法用法。录制管线按真实事件触发:
| 时机 | 回调 |
|---|---|
| 会话进入 recording | onConnectionStateChanged(CONNECTION_STATE_CONNECTED, CONNECTION_CHANGED_JOIN_SUCCESS) → onJoinChannelSuccess(channelId, uid) |
参与者加入/离开(InjectUser/RemoveUser) | onUserJoined / onUserInfoUpdated / onUserOffline |
| 录制中 | onRecordingStats(RecordingStats)(duration 为真实会话秒数) |
| 会话正常结束 | onLeaveChannel(LEAVE_PATH_CODE) |
| 启动/写入/校验失败 | onError(ERROR_CODE_TYPE, STAT_CODE_TYPE) |
4.x 面
IAgoraMediaRtcRecorderEventHandler(21 个成员)。录制器通过 registerRecorderEventHandle 注册:
| 时机 | 回调 |
|---|---|
joinChannel 成功 | onConnected(channelId, uid) |
| 录制开始 | onRecorderStateChanged(RECORDER_STATE_START=2, RECORDER_REASON_NONE=0) |
| 录制结束 | onRecorderStateChanged(RECORDER_STATE_STOP=3) + onRecorderInfoUpdated(RecorderInfo{fileName,durationMs,fileSize}) |
| 失败 | onRecorderStateChanged(RECORDER_STATE_ERROR=-1, RECORDER_REASON_WRITE_FAILED=1) + onError |
leaveChannel | onDisconnected(channelId, uid, CONNECTION_CHANGED_LEAVE_CHANNEL=5) |
回调在调用线程上同步触发(joinChannel/leaveChannel/startRecording 返回前),因此不要在回调里再调用会阻塞的录制 API。