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; };