feat: add streamer-owned recording control service

Introduce a dedicated streamer-side recording control plane instead of sharing the producer recorder API.

- register streamer-owned recorder endpoints as a NATS micro service
- add explicit MP4 and MCAP recorder control protobufs and subject helpers
- wire recorder lifecycle handling into the pipeline runtime
- add MP4 writer and depth-alignment support files used by the new recording flow
This commit is contained in:
2026-04-12 20:21:33 +08:00
parent 4f016d9cef
commit 213adee887
11 changed files with 2474 additions and 400 deletions
+18 -1
View File
@@ -176,6 +176,14 @@ protobuf_generate(
"${CMAKE_CURRENT_LIST_DIR}/proto/cvmmap_streamer/DepthMap.proto"
"${CMAKE_CURRENT_LIST_DIR}/proto/cvmmap_streamer/BundleManifest.proto"
IMPORT_DIRS "${CMAKE_CURRENT_LIST_DIR}")
add_library(cvmmap_streamer_control_proto STATIC)
protobuf_generate(
TARGET cvmmap_streamer_control_proto
LANGUAGE cpp
PROTOC_OUT_DIR "${CMAKE_CURRENT_BINARY_DIR}"
PROTOS
"${CMAKE_CURRENT_LIST_DIR}/proto/cvmmap_streamer/recorder_control.proto"
IMPORT_DIRS "${CMAKE_CURRENT_LIST_DIR}")
add_library(cvmmap_streamer_protobuf INTERFACE)
target_include_directories(cvmmap_streamer_foxglove_proto
PUBLIC
@@ -187,6 +195,11 @@ target_include_directories(cvmmap_streamer_depth_proto
"${CMAKE_CURRENT_BINARY_DIR}"
"${CMAKE_CURRENT_BINARY_DIR}/proto"
${Protobuf_INCLUDE_DIRS})
target_include_directories(cvmmap_streamer_control_proto
PUBLIC
"${CMAKE_CURRENT_BINARY_DIR}"
"${CMAKE_CURRENT_BINARY_DIR}/proto"
${Protobuf_INCLUDE_DIRS})
target_include_directories(cvmmap_streamer_protobuf
INTERFACE
"${CMAKE_CURRENT_BINARY_DIR}/proto"
@@ -203,6 +216,7 @@ if (TARGET PkgConfig::PROTOBUF_PKG)
endif()
target_link_libraries(cvmmap_streamer_foxglove_proto PUBLIC cvmmap_streamer_protobuf)
target_link_libraries(cvmmap_streamer_depth_proto PUBLIC cvmmap_streamer_protobuf)
target_link_libraries(cvmmap_streamer_control_proto PUBLIC cvmmap_streamer_protobuf)
add_library(cvmmap_streamer_mcap_runtime STATIC
src/record/mcap_runtime.cpp)
@@ -218,7 +232,8 @@ add_library(cvmmap_streamer_record_support STATIC
src/encode/encoder_backend.cpp
src/encode/ffmpeg_encoder_backend.cpp
src/record/protobuf_descriptor.cpp
src/record/mcap_record_sink.cpp)
src/record/mcap_record_sink.cpp
src/record/mp4_record_writer.cpp)
target_include_directories(cvmmap_streamer_record_support
PUBLIC
"${CMAKE_CURRENT_LIST_DIR}/include"
@@ -250,6 +265,7 @@ add_library(cvmmap_streamer_common STATIC
src/core/frame_source.cpp
src/core/ingest_runtime.cpp
src/ipc/contracts.cpp
src/protocol/nats_request_reply_server.cpp
src/protocol/wire_codec.cpp
src/metrics/latency_tracker.cpp
src/pipeline/pipeline_runtime.cpp
@@ -293,6 +309,7 @@ elseif (TARGET spdlog)
endif()
list(APPEND CVMMAP_STREAMER_LINK_DEPS cvmmap_streamer_protobuf)
list(APPEND CVMMAP_STREAMER_LINK_DEPS cvmmap_streamer_control_proto)
if (TARGET PkgConfig::PROTOBUF_PKG)
list(APPEND CVMMAP_STREAMER_LINK_DEPS PkgConfig::PROTOBUF_PKG)
endif()