fromBytes static method
Creates a packet from raw bytes.
Implementation
static AtemPacket fromBytes(Uint8List bytes) {
if (bytes.length < headerSize) {
throw ArgumentError('Packet too short: ${bytes.length} < $headerSize');
}
final packet = AtemPacket();
final view = ByteData.view(bytes.buffer, bytes.offsetInBytes, bytes.length);
// First 2 bytes: length (11 bits) + flags (5 bits)
final firstWord = view.getUint16(0);
packet.length = firstWord & 0x07FF;
packet.flags = (firstWord >> 11) & 0x1F;
// Validate length
if (packet.length != bytes.length) {
throw FormatException(
'Packet length mismatch: header says ${packet.length}, actual ${bytes.length}');
}
packet.session = view.getUint16(2);
packet.acknowledgementNumber = view.getUint16(4);
packet.remoteSequenceNumber = view.getUint16(6);
// Bytes 8-9 are reserved. The packet sequence number is the final
// 16-bit field in the 12-byte ATEM UDP header.
packet.sequenceNumber = view.getUint16(10);
if (packet.length > headerSize) {
packet.data = bytes.sublist(headerSize);
}
return packet;
}