xcDeviceSDCalendar method
查询设备端媒体日历(SD卡)
deviceId 设备序列号或IP+Port
monthDateTime 查询日期,到月即可 eg:DateTime(2023,6)
fileType 媒体文件类型 mp4:MP4录像,jpg:图片, idximg:索引图片, h264:录像
eventType 事件类型
Implementation
// * :全部录像或抓图
// A :外部报警录像或抓图
// M :动检报警录像或抓图
// H :手动录像或手动抓图
// K :关键录像或关键抓图
// V :紧急录像
// R :原始
// P :感应图片
// I :入侵
// S :滞留
// U :人形检测
// F :人脸检测
// N :车牌识别
// G :场景切换
Future<List<String>> xcDeviceSDCalendar(
{required String deviceId,
required DateTime monthDateTime,
required String fileType,
required String eventType,
String rev = '',
int timeout = 5000}) async {
final Map<String, dynamic> rMap = {
'year': monthDateTime.year,
'month': monthDateTime.month,
'fileType': fileType,
'sEvent': eventType,
};
final result = await _api.xcDeviceSDCalendar(
deviceId, jsonEncode(rMap), timeout, ApiSeq.instance.getSeq());
if (kDebugMode) {
XCloudResponse.fromOriginResponse(result);
}
if (result.param1 < 0) {
return Future.error(
XCloudAPIException(code: result.param1, commandId: result.commandId));
}
int mask = 0;
//{ "Name" : "OPSCalendar", "OPSCalendar" : { "Mask" : 0 }, "Ret" : 100, "SessionID" : "0x11" }
String byteString = XCloudResponse.byteToString(result.byteStream);
if (byteString.isEmpty) {
return [];
}
Map<String, dynamic> calendarData = json.decode(byteString);
if (calendarData.containsKey(result.data)) {
Map<String, dynamic> maskMap = calendarData[result.data];
mask = maskMap['Mask'];
}
final binaryStr = mask.toRadixString(2);
List<String> binaryStrList = binaryStr.split('');
if (kDebugMode) {
print('xcDeviceSDCalendar==> mask:$mask, binaryStr:$binaryStr');
}
final List<String> ans = [];
int day = 1;
while (binaryStrList.isNotEmpty) {
String p = binaryStrList.removeLast();
if (p == '1') {
String timeStr =
'${monthDateTime.year}-${monthDateTime.month.toString().padLeft(2, '0')}-${day.toString().padLeft(2, '0')}';
ans.add(timeStr);
}
day++;
}
return Future.value(ans);
}