{
  "title": "foxglove.CompressedVideo",
  "description": "A single frame of a compressed video bitstream",
  "$comment": "Generated by https://github.com/foxglove/foxglove-sdk",
  "type": "object",
  "properties": {
    "timestamp": {
      "type": "object",
      "title": "time",
      "properties": {
        "sec": {
          "type": "integer",
          "minimum": 0
        },
        "nsec": {
          "type": "integer",
          "minimum": 0,
          "maximum": 999999999
        }
      },
      "description": "Timestamp of video frame"
    },
    "frame_id": {
      "type": "string",
      "description": "Frame of reference for the video.\n\nThe origin of the frame is the optical center of the camera. +x points to the right in the video, +y points down, and +z points into the plane of the video."
    },
    "data": {
      "type": "string",
      "contentEncoding": "base64",
      "description": "Compressed video frame data.\n\nFor packet-based video codecs this data must begin and end on packet boundaries (no partial packets), and must contain enough video packets to decode exactly one image (either a keyframe or delta frame). Note: Foxglove does not support video streams that include B frames because they require lookahead.\n\nSpecifically, the requirements for different `format` values are:\n\n- `h264`\n  - Use Annex B formatted data\n  - Each CompressedVideo message should contain enough NAL units to decode exactly one video frame\n  - Each message containing a key frame (IDR) must also include a SPS NAL unit\n\n- `h265` (HEVC)\n  - Use Annex B formatted data\n  - Each CompressedVideo message should contain enough NAL units to decode exactly one video frame\n  - Each message containing a key frame (IRAP) must also include relevant VPS/SPS/PPS NAL units\n\n- `vp9`\n  - Each CompressedVideo message should contain exactly one video frame\n\n- `av1`\n  - Use the \"Low overhead bitstream format\" (section 5.2)\n  - Each CompressedVideo message should contain enough OBUs to decode exactly one video frame\n  - Each message containing a key frame must also include a Sequence Header OBU"
    },
    "format": {
      "type": "string",
      "description": "Video format.\n\nSupported values: `h264`, `h265`, `vp9`, `av1`.\n\nNote: compressed video support is subject to hardware limitations and patent licensing, so not all encodings may be supported on all platforms. See more about [H.265 support](https://caniuse.com/hevc), [VP9 support](https://caniuse.com/webm), and [AV1 support](https://caniuse.com/av1)."
    }
  },
  "required": [
    "timestamp",
    "frame_id",
    "data",
    "format"
  ]
}
