diff --git a/internal/__snapshots__/exportTypeScriptSchemas.test.ts.snap b/internal/__snapshots__/exportTypeScriptSchemas.test.ts.snap
index bba4d9f..7c49d57 100644
--- a/internal/__snapshots__/exportTypeScriptSchemas.test.ts.snap
+++ b/internal/__snapshots__/exportTypeScriptSchemas.test.ts.snap
@@ -204,13 +204,32 @@ export type CompressedVideo = {
* Compressed video frame data.
*
* For 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.
+ *
+ * Specifically, the requirements for different \`format\` values are:
+ *
+ * - \`h264\`
+ * - Use Annex B formatted data
+ * - Each CompressedVideo message should contain enough NAL units to decode exactly one video frame
+ * - Each message containing a key frame (IDR) must also include a SPS NAL unit
+ *
+ * - \`h265\` (HEVC)
+ * - Use Annex B formatted data
+ * - Each CompressedVideo message should contain enough NAL units to decode exactly one video frame
+ * - Each message containing a key frame (IRAP) must also include relevant VPS/SPS/PPS NAL units
+ *
+ * - \`av1\`
+ * - Use the "Low overhead bitstream format" (section 5.2)
+ * - Each CompressedVideo message should contain enough OBUs to decode exactly one video frame
+ * - Each message containing a key frame must also include a Sequence Header OBU
*/
data: Uint8Array;
/**
* Video format.
*
- * Supported values: \`h264\` (Annex B formatted data only)
+ * Supported values: \`h264\`, \`h265\`, \`av1\`.
+ *
+ * Note: 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) and [AV1 support](https://caniuse.com/av1).
*/
format: string;
};
diff --git a/internal/schemas.ts b/internal/schemas.ts
index 24ba5cf..88fb2d2 100644
--- a/internal/schemas.ts
+++ b/internal/schemas.ts
@@ -810,13 +810,32 @@ const CompressedVideo: FoxgloveMessageSchema = {
{
name: "data",
type: { type: "primitive", name: "bytes" },
- 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.",
+ description: `Compressed video frame data.
+
+For 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.
+
+Specifically, the requirements for different \`format\` values are:
+
+- \`h264\`
+ - Use Annex B formatted data
+ - Each CompressedVideo message should contain enough NAL units to decode exactly one video frame
+ - Each message containing a key frame (IDR) must also include a SPS NAL unit
+
+- \`h265\` (HEVC)
+ - Use Annex B formatted data
+ - Each CompressedVideo message should contain enough NAL units to decode exactly one video frame
+ - Each message containing a key frame (IRAP) must also include relevant VPS/SPS/PPS NAL units
+
+- \`av1\`
+ - Use the "Low overhead bitstream format" (section 5.2)
+ - Each CompressedVideo message should contain enough OBUs to decode exactly one video frame
+ - Each message containing a key frame must also include a Sequence Header OBU`,
},
{
name: "format",
type: { type: "primitive", name: "string" },
- description: "Video format.\n\nSupported values: `h264` (Annex B formatted data only)",
+ description:
+ "Video format.\n\nSupported values: `h264`, `h265`, `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) and [AV1 support](https://caniuse.com/av1).",
},
],
};
diff --git a/ros_foxglove_msgs/ros1/CompressedVideo.msg b/ros_foxglove_msgs/ros1/CompressedVideo.msg
index e8d8ec4..1534dea 100644
--- a/ros_foxglove_msgs/ros1/CompressedVideo.msg
+++ b/ros_foxglove_msgs/ros1/CompressedVideo.msg
@@ -14,9 +14,28 @@ string frame_id
# Compressed video frame data.
#
# For 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.
+#
+# Specifically, the requirements for different `format` values are:
+#
+# - `h264`
+# - Use Annex B formatted data
+# - Each CompressedVideo message should contain enough NAL units to decode exactly one video frame
+# - Each message containing a key frame (IDR) must also include a SPS NAL unit
+#
+# - `h265` (HEVC)
+# - Use Annex B formatted data
+# - Each CompressedVideo message should contain enough NAL units to decode exactly one video frame
+# - Each message containing a key frame (IRAP) must also include relevant VPS/SPS/PPS NAL units
+#
+# - `av1`
+# - Use the "Low overhead bitstream format" (section 5.2)
+# - Each CompressedVideo message should contain enough OBUs to decode exactly one video frame
+# - Each message containing a key frame must also include a Sequence Header OBU
uint8[] data
# Video format.
#
-# Supported values: `h264` (Annex B formatted data only)
+# Supported values: `h264`, `h265`, `av1`.
+#
+# Note: 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) and [AV1 support](https://caniuse.com/av1).
string format
diff --git a/ros_foxglove_msgs/ros2/CompressedVideo.msg b/ros_foxglove_msgs/ros2/CompressedVideo.msg
index bbb48e0..ad42f00 100644
--- a/ros_foxglove_msgs/ros2/CompressedVideo.msg
+++ b/ros_foxglove_msgs/ros2/CompressedVideo.msg
@@ -14,9 +14,28 @@ string frame_id
# Compressed video frame data.
#
# For 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.
+#
+# Specifically, the requirements for different `format` values are:
+#
+# - `h264`
+# - Use Annex B formatted data
+# - Each CompressedVideo message should contain enough NAL units to decode exactly one video frame
+# - Each message containing a key frame (IDR) must also include a SPS NAL unit
+#
+# - `h265` (HEVC)
+# - Use Annex B formatted data
+# - Each CompressedVideo message should contain enough NAL units to decode exactly one video frame
+# - Each message containing a key frame (IRAP) must also include relevant VPS/SPS/PPS NAL units
+#
+# - `av1`
+# - Use the "Low overhead bitstream format" (section 5.2)
+# - Each CompressedVideo message should contain enough OBUs to decode exactly one video frame
+# - Each message containing a key frame must also include a Sequence Header OBU
uint8[] data
# Video format.
#
-# Supported values: `h264` (Annex B formatted data only)
+# Supported values: `h264`, `h265`, `av1`.
+#
+# Note: 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) and [AV1 support](https://caniuse.com/av1).
string format
diff --git a/schemas/README.md b/schemas/README.md
index 1db6add..72e3de2 100644
--- a/schemas/README.md
+++ b/schemas/README.md
@@ -667,6 +667,23 @@ Compressed video frame data.
For 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.
+Specifically, the requirements for different `format` values are:
+
+- `h264`
+ - Use Annex B formatted data
+ - Each CompressedVideo message should contain enough NAL units to decode exactly one video frame
+ - Each message containing a key frame (IDR) must also include a SPS NAL unit
+
+- `h265` (HEVC)
+ - Use Annex B formatted data
+ - Each CompressedVideo message should contain enough NAL units to decode exactly one video frame
+ - Each message containing a key frame (IRAP) must also include relevant VPS/SPS/PPS NAL units
+
+- `av1`
+ - Use the "Low overhead bitstream format" (section 5.2)
+ - Each CompressedVideo message should contain enough OBUs to decode exactly one video frame
+ - Each message containing a key frame must also include a Sequence Header OBU
+
@@ -680,7 +697,9 @@ string
Video format.
-Supported values: `h264` (Annex B formatted data only)
+Supported values: `h264`, `h265`, `av1`.
+
+Note: 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) and [AV1 support](https://caniuse.com/av1).
diff --git a/schemas/flatbuffer/CompressedVideo.fbs b/schemas/flatbuffer/CompressedVideo.fbs
index 0a9a1a6..6ffebc5 100644
--- a/schemas/flatbuffer/CompressedVideo.fbs
+++ b/schemas/flatbuffer/CompressedVideo.fbs
@@ -17,11 +17,30 @@ table CompressedVideo {
/// Compressed video frame data.
///
/// For 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.
+ ///
+ /// Specifically, the requirements for different `format` values are:
+ ///
+ /// - `h264`
+ /// - Use Annex B formatted data
+ /// - Each CompressedVideo message should contain enough NAL units to decode exactly one video frame
+ /// - Each message containing a key frame (IDR) must also include a SPS NAL unit
+ ///
+ /// - `h265` (HEVC)
+ /// - Use Annex B formatted data
+ /// - Each CompressedVideo message should contain enough NAL units to decode exactly one video frame
+ /// - Each message containing a key frame (IRAP) must also include relevant VPS/SPS/PPS NAL units
+ ///
+ /// - `av1`
+ /// - Use the "Low overhead bitstream format" (section 5.2)
+ /// - Each CompressedVideo message should contain enough OBUs to decode exactly one video frame
+ /// - Each message containing a key frame must also include a Sequence Header OBU
data:[uint8] (id: 2);
/// Video format.
///
- /// Supported values: `h264` (Annex B formatted data only)
+ /// Supported values: `h264`, `h265`, `av1`.
+ ///
+ /// Note: 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) and [AV1 support](https://caniuse.com/av1).
format:string (id: 3);
}
diff --git a/schemas/jsonschema/CompressedVideo.json b/schemas/jsonschema/CompressedVideo.json
index 5443f9f..88f5d1c 100644
--- a/schemas/jsonschema/CompressedVideo.json
+++ b/schemas/jsonschema/CompressedVideo.json
@@ -27,11 +27,11 @@
"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."
+ "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- `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` (Annex B formatted data only)"
+ "description": "Video format.\n\nSupported values: `h264`, `h265`, `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) and [AV1 support](https://caniuse.com/av1)."
}
}
}
diff --git a/schemas/jsonschema/index.ts b/schemas/jsonschema/index.ts
index 1e5f733..99d0db7 100644
--- a/schemas/jsonschema/index.ts
+++ b/schemas/jsonschema/index.ts
@@ -360,11 +360,11 @@ export const CompressedVideo = {
"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."
+ "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- `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` (Annex B formatted data only)"
+ "description": "Video format.\n\nSupported values: `h264`, `h265`, `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) and [AV1 support](https://caniuse.com/av1)."
}
}
};
diff --git a/schemas/omgidl/foxglove/CompressedVideo.idl b/schemas/omgidl/foxglove/CompressedVideo.idl
index 0853692..a2e664b 100644
--- a/schemas/omgidl/foxglove/CompressedVideo.idl
+++ b/schemas/omgidl/foxglove/CompressedVideo.idl
@@ -17,11 +17,30 @@ struct CompressedVideo {
// Compressed video frame data.
//
// For 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.
+ //
+ // Specifically, the requirements for different `format` values are:
+ //
+ // - `h264`
+ // - Use Annex B formatted data
+ // - Each CompressedVideo message should contain enough NAL units to decode exactly one video frame
+ // - Each message containing a key frame (IDR) must also include a SPS NAL unit
+ //
+ // - `h265` (HEVC)
+ // - Use Annex B formatted data
+ // - Each CompressedVideo message should contain enough NAL units to decode exactly one video frame
+ // - Each message containing a key frame (IRAP) must also include relevant VPS/SPS/PPS NAL units
+ //
+ // - `av1`
+ // - Use the "Low overhead bitstream format" (section 5.2)
+ // - Each CompressedVideo message should contain enough OBUs to decode exactly one video frame
+ // - Each message containing a key frame must also include a Sequence Header OBU
sequence data;
// Video format.
//
- // Supported values: `h264` (Annex B formatted data only)
+ // Supported values: `h264`, `h265`, `av1`.
+ //
+ // Note: 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) and [AV1 support](https://caniuse.com/av1).
string format;
};
diff --git a/schemas/proto/foxglove/CompressedVideo.proto b/schemas/proto/foxglove/CompressedVideo.proto
index 37e5ca5..74e79e0 100644
--- a/schemas/proto/foxglove/CompressedVideo.proto
+++ b/schemas/proto/foxglove/CompressedVideo.proto
@@ -19,10 +19,29 @@ message CompressedVideo {
// Compressed video frame data.
//
// For 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.
+ //
+ // Specifically, the requirements for different `format` values are:
+ //
+ // - `h264`
+ // - Use Annex B formatted data
+ // - Each CompressedVideo message should contain enough NAL units to decode exactly one video frame
+ // - Each message containing a key frame (IDR) must also include a SPS NAL unit
+ //
+ // - `h265` (HEVC)
+ // - Use Annex B formatted data
+ // - Each CompressedVideo message should contain enough NAL units to decode exactly one video frame
+ // - Each message containing a key frame (IRAP) must also include relevant VPS/SPS/PPS NAL units
+ //
+ // - `av1`
+ // - Use the "Low overhead bitstream format" (section 5.2)
+ // - Each CompressedVideo message should contain enough OBUs to decode exactly one video frame
+ // - Each message containing a key frame must also include a Sequence Header OBU
bytes data = 3;
// Video format.
//
- // Supported values: `h264` (Annex B formatted data only)
+ // Supported values: `h264`, `h265`, `av1`.
+ //
+ // Note: 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) and [AV1 support](https://caniuse.com/av1).
string format = 4;
}
diff --git a/schemas/ros1/CompressedVideo.msg b/schemas/ros1/CompressedVideo.msg
index e8d8ec4..1534dea 100644
--- a/schemas/ros1/CompressedVideo.msg
+++ b/schemas/ros1/CompressedVideo.msg
@@ -14,9 +14,28 @@ string frame_id
# Compressed video frame data.
#
# For 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.
+#
+# Specifically, the requirements for different `format` values are:
+#
+# - `h264`
+# - Use Annex B formatted data
+# - Each CompressedVideo message should contain enough NAL units to decode exactly one video frame
+# - Each message containing a key frame (IDR) must also include a SPS NAL unit
+#
+# - `h265` (HEVC)
+# - Use Annex B formatted data
+# - Each CompressedVideo message should contain enough NAL units to decode exactly one video frame
+# - Each message containing a key frame (IRAP) must also include relevant VPS/SPS/PPS NAL units
+#
+# - `av1`
+# - Use the "Low overhead bitstream format" (section 5.2)
+# - Each CompressedVideo message should contain enough OBUs to decode exactly one video frame
+# - Each message containing a key frame must also include a Sequence Header OBU
uint8[] data
# Video format.
#
-# Supported values: `h264` (Annex B formatted data only)
+# Supported values: `h264`, `h265`, `av1`.
+#
+# Note: 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) and [AV1 support](https://caniuse.com/av1).
string format
diff --git a/schemas/ros2/CompressedVideo.msg b/schemas/ros2/CompressedVideo.msg
index bbb48e0..ad42f00 100644
--- a/schemas/ros2/CompressedVideo.msg
+++ b/schemas/ros2/CompressedVideo.msg
@@ -14,9 +14,28 @@ string frame_id
# Compressed video frame data.
#
# For 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.
+#
+# Specifically, the requirements for different `format` values are:
+#
+# - `h264`
+# - Use Annex B formatted data
+# - Each CompressedVideo message should contain enough NAL units to decode exactly one video frame
+# - Each message containing a key frame (IDR) must also include a SPS NAL unit
+#
+# - `h265` (HEVC)
+# - Use Annex B formatted data
+# - Each CompressedVideo message should contain enough NAL units to decode exactly one video frame
+# - Each message containing a key frame (IRAP) must also include relevant VPS/SPS/PPS NAL units
+#
+# - `av1`
+# - Use the "Low overhead bitstream format" (section 5.2)
+# - Each CompressedVideo message should contain enough OBUs to decode exactly one video frame
+# - Each message containing a key frame must also include a Sequence Header OBU
uint8[] data
# Video format.
#
-# Supported values: `h264` (Annex B formatted data only)
+# Supported values: `h264`, `h265`, `av1`.
+#
+# Note: 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) and [AV1 support](https://caniuse.com/av1).
string format
diff --git a/schemas/typescript/CompressedVideo.ts b/schemas/typescript/CompressedVideo.ts
index 132a45f..9be37fb 100644
--- a/schemas/typescript/CompressedVideo.ts
+++ b/schemas/typescript/CompressedVideo.ts
@@ -19,13 +19,32 @@ export type CompressedVideo = {
* Compressed video frame data.
*
* For 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.
+ *
+ * Specifically, the requirements for different `format` values are:
+ *
+ * - `h264`
+ * - Use Annex B formatted data
+ * - Each CompressedVideo message should contain enough NAL units to decode exactly one video frame
+ * - Each message containing a key frame (IDR) must also include a SPS NAL unit
+ *
+ * - `h265` (HEVC)
+ * - Use Annex B formatted data
+ * - Each CompressedVideo message should contain enough NAL units to decode exactly one video frame
+ * - Each message containing a key frame (IRAP) must also include relevant VPS/SPS/PPS NAL units
+ *
+ * - `av1`
+ * - Use the "Low overhead bitstream format" (section 5.2)
+ * - Each CompressedVideo message should contain enough OBUs to decode exactly one video frame
+ * - Each message containing a key frame must also include a Sequence Header OBU
*/
data: Uint8Array;
/**
* Video format.
*
- * Supported values: `h264` (Annex B formatted data only)
+ * Supported values: `h264`, `h265`, `av1`.
+ *
+ * Note: 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) and [AV1 support](https://caniuse.com/av1).
*/
format: string;
};