本文将介绍安防监控场景下的录制与截图功能。录制与截图为纯应用端能力:应用端对正在拉取的监控画面进行截图或本地录制,设备端无需接入任何工作。
应用端接入
截图
接口说明
方法 / 回调 | 说明 |
对 channelId 通道的当前画面发起截图。 | |
onSnapshotComplete | 截图完成回调,返回 channelId、图片对象与错误码。 |
调用示例
// 发起截图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 三个回调返回。接口说明
方法 / 回调 | 说明 |
结束本地录制。 | |
onLocalRecordBegin | 录制开始回调,返回 errCode 与录制文件路径。 |
onLocalRecording | 录制中进度回调,每秒钟回调一次已录制时长 durationMs 与文件路径。 |
onLocalRecordComplete | 录制结束回调,返回 errCode 与最终录制文件路径。 |
调用示例
// 开始录制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 为最终文件路径}}
错误处理
错误码 | 说明 | 建议处理方式 |
ERR_RECORD_DURATION_TOO_SHORT | 录像时长过短。 | 过短的录像可忽略。 |
ERR_FILE_PATH_UNWRITABLE | 文件路径不可写。 | 确认保存目录存在且有写入权限。 |
ERR_FILE_PATH_ALREADY_EXIST | 文件已存在。 | 使用新的文件路径,避免覆盖已有文件。 |
错误码 | 数值 | 说明 | 建议处理方式 |
TXIoTErrorCodeRecordDurationTooShort | -2007 | 录像时长过短。 | 过短的录像可忽略。 |
TXIoTErrorCodeFilePathUnwritable | -2008 | 文件路径不可写。 | 确认保存目录存在且有写入权限。 |
TXIoTErrorCodeFilePathAlreadyExist | -2009 | 文件已存在。 | 使用新的文件路径,避免覆盖已有文件。 |
常见问题
现象 | 排查建议 |
onSnapshotComplete 返回非 0 错误码。 | |
录制文件无法生成或打开。 | 确认 outputPath 所在目录已存在且应用有写入权限。 |
录制过程中应用退到后台后录制中断。 | 本地录制依赖持续拉流,应用退后台被系统回收会中断录制,建议在退后台前自动停止录制。 |