一、截图
在查看监控(startRemoteView 成功)期间,调用 takeSnapshot 对指定通道的当前画面截图,截图结果通过 onSnapshotComplete 回调返回。
二、接口说明
| 方法 / 回调 | 说明 |
| takeSnapshot | 对 channelId 通道的当前画面发起截图。 |
| onSnapshotComplete | 截图完成回调,返回 channelId、图片对象与错误码。 |
三、调用示例
AndroidiOS// 发起截图session.takeSnapshot(0);// 在 TXIoTMonitorSessionListener 中接收结果@Overridepublic void onSnapshotComplete(int channelId, Bitmap image, int errCode) { if (errCode == 0 && image != null) { // 保存或展示截图 saveBitmapToAlbum(image); } else { Log.e(TAG, "snapshot failed: " + errCode); }}// 发起截图[session takeSnapshot:0];// 在 TXIoTMonitorSessionDelegate 中接收结果- (void)onSnapshotComplete:(int)channelId image:(UIImage *)image errCode:(int)errCode { if (errCode == 0 && image) { // 保存或展示截图 UIImageWriteToSavedPhotosAlbum(image, nil, nil, nil); } else { NSLog(@"snapshot failed: %d", errCode); }}
四、本地录制
在监控查看期间,调用 startLocalRecording 将当前通道画面录制为本地视频文件,调用 stopLocalRecording 结束录制。录制状态通过 onLocalRecordBegin / onLocalRecording / onLocalRecordComplete 三个回调返回。
五、接口说明
| 方法 / 回调 | 说明 |
| startLocalRecording | 开始本地录制,参数为 TXIoTLocalRecordingParams。 |
| stopLocalRecording | 结束本地录制。 |
| onLocalRecordBegin | 录制开始回调,返回 errCode 与录制文件路径。 |
| onLocalRecording | 录制中进度回调,每秒钟回调一次已录制时长 durationMs 与文件路径。 |
| onLocalRecordComplete | 录制结束回调,返回 errCode 与最终录制文件路径。 |
六、调用示例
AndroidiOS// 开始录制TXIoTLocalRecordingParams params = new TXIoTLocalRecordingParams();params.channelId = 0;params.outputPath = getExternalFilesDir(null) + "/record.mp4";session.startLocalRecording(params);// 结束录制session.stopLocalRecording();// 录制状态回调(TXIoTMonitorSessionListener)@Overridepublic void onLocalRecordBegin(int errCode, String storagePath) { }@Overridepublic void onLocalRecording(long durationMs, String storagePath) { }@Overridepublic void onLocalRecordComplete(int errCode, String storagePath) { if (errCode == 0) { // 录制成功,storagePath 为最终文件路径 }}// 开始录制TXIoTLocalRecordingParams *params = [[TXIoTLocalRecordingParams alloc] init];params.channelId = 0;params.outputPath = [NSTemporaryDirectory() stringByAppendingPathComponent:@"record.mp4"];[session startLocalRecording:params];// 结束录制[session stopLocalRecording];// 录制状态回调(TXIoTMonitorSessionDelegate)- (void)onLocalRecordBegin:(int)errCode storagePath:(NSString *)storagePath { }- (void)onLocalRecording:(int64_t)durationMs storagePath:(NSString *)storagePath { }- (void)onLocalRecordComplete:(int)errCode storagePath:(NSString *)storagePath { if (errCode == 0) { // 录制成功,storagePath 为最终文件路径 }}
七、错误处理
录制与截图涉及本地文件写入,以下错误码在录制或截图过程中可能返回,完整错误码定义见 TXIoTErrorCode。
AndroidiOS
| 错误码 | 说明 | 建议处理方式 |
| ERR_RECORD_DURATION_TOO_SHORT | 录像时长过短。 | 过短的录像可忽略。 |
| ERR_FILE_PATH_UNWRITABLE | 文件路径不可写。 | 确认保存目录存在且有写入权限。 |
| ERR_FILE_PATH_ALREADY_EXIST | 文件已存在。 | 使用新的文件路径,避免覆盖已有文件。 |
| 错误码 | 数值 | 说明 | 建议处理方式 |
| TXIoTErrorCodeRecordDurationTooShort | -2007 | 录像时长过短。 | 过短的录像可忽略。 |
| TXIoTErrorCodeFilePathUnwritable | -2008 | 文件路径不可写。 | 确认保存目录存在且有写入权限。 |
| TXIoTErrorCodeFilePathAlreadyExist | -2009 | 文件已存在。 | 使用新的文件路径,避免覆盖已有文件。 |
八、常见问题
| 现象 | 排查建议 |
| onSnapshotComplete 返回非 0 错误码。 | 确认调用 takeSnapshot 时该通道正在拉流(startRemoteView 已成功且画面已渲染),无画面时无法截图。 |
| 录制文件无法生成或打开。 | 确认 outputPath 所在目录已存在且应用有写入权限。 |
| 录制过程中应用退到后台后录制中断。 | 本地录制依赖持续拉流,应用退后台被系统回收会中断录制,建议在退后台前自动停止录制。 |