Skip to main content
See the normative layout in spec/transport/frames. Quick reference:
Little-endian throughout. Flags: bit 0 keyframe, bit 1 end-of-burst, bit 2 has_extensions, bit 3 resync (first frame after a discontinuity; always a keyframe), bits 4–7 reserved (zero on send, ignored on receive). Extension types: 0x01 tick (u64), 0x02 ts_sim_ns (i64), 0x03 ts_send_ns (u64), 0x800xFF vendor. payload_len counts payload bytes only.

Inline JSON form

In the inline binding the same frame is an obs.frame or cmd.frame notification (AWP-DAT-004):
awp:obs-frame
flags in JSON carries bits 0, 1, and 3 only; extension values are the named fields tick, ts_sim_ns, and ts_send_ns (vendor extensions: x-<vendor>.<name>). A streaming observation frame carries its send time (test vector streaming_ts_send):
awp:obs-frame

Worked example

Keyframe on channel 1, seq 42, ts_mono_ns 913005200000, tick 4212, 16-byte payload (test vector keyframe_tick):
All vectors, including the malformed ones a decoder must reject, are in schemas/test-vectors/frames.json and are exercised by the reference decoder in CI (AWP-DAT-008).