fromData static method
Implementation
static RecordTimeLineFile? fromData(RecordTimeLineData timeLineData) {
var bytes = timeLineData.bytes!;
int byteOffset = 0;
int type = bytes.getUint8(byteOffset);
byteOffset += 1;
if ((type & 0x03) != 0x00) {
timeLineData.offset = byteOffset;
return null;
}
RecordTimeLineFile lineFile = RecordTimeLineFile();
lineFile.record_alarm = (type & 0xFC) >> 2;
var timestamp = bytes!.getUint32(byteOffset, Endian.little);
byteOffset += 4;
timeLineData.offset = byteOffset;
var dateTime =
DateTime.fromMillisecondsSinceEpoch(timestamp * 1000, isUtc: true);
lineFile.record_time = timestamp;
lineFile.record_name =
'${dateTimeString(dateTime)}_${_eventName(lineFile.record_alarm!)}.mp4';
lineFile.frame_len = bytes.getUint16(byteOffset, Endian.little);
byteOffset += 2;
timeLineData.offset = byteOffset;
lineFile.frame_interval = bytes.getUint8(byteOffset);
byteOffset += 1;
timeLineData.offset = byteOffset;
for (int i = 0; i < lineFile.frame_len!; i++) {
type = bytes.getInt8(byteOffset);
byteOffset += 1;
timeLineData.offset = byteOffset;
if ((type & 0x03) != 0x01) continue;
RecordTimeLineFrame lineFrame = RecordTimeLineFrame();
timestamp = bytes.getUint32(byteOffset, Endian.little);
byteOffset += 4;
timeLineData.offset = byteOffset;
lineFrame.timestamp =
DateTime.fromMillisecondsSinceEpoch(timestamp * 1000, isUtc: true);
if (lineFile.record_start == null)
lineFile.record_start = lineFrame.timestamp;
lineFrame.frame_no = bytes.getUint16(byteOffset, Endian.little);
byteOffset += 2;
timeLineData.offset = byteOffset;
lineFrame.frame_gop = bytes.getUint8(byteOffset);
if (lineFrame.frame_gop == 45) lineFile.frame_interval = 3;
byteOffset += 1;
timeLineData.offset = byteOffset;
lineFile.frames.add(lineFrame);
}
type = bytes.getInt8(byteOffset);
byteOffset += 1;
timeLineData.offset = byteOffset;
if ((type & 0x03) != 0x02) {
timeLineData.offset = byteOffset;
return null;
}
timestamp = bytes.getUint32(byteOffset, Endian.little);
byteOffset += 4;
timeLineData.offset = byteOffset;
lineFile.record_end =
DateTime.fromMillisecondsSinceEpoch(timestamp * 1000, isUtc: true);
lineFile.record_duration =
lineFile.record_end?.difference(lineFile.record_start!).inSeconds ?? 0;
lineFile.frame_len = bytes.getUint16(byteOffset, Endian.little);
byteOffset += 2;
timeLineData.offset = byteOffset;
bytes.getUint8(byteOffset);
byteOffset += 1;
timeLineData.offset = byteOffset;
return lineFile;
}