From 4be2615cd17082a43052192515201c4e44b853c7 Mon Sep 17 00:00:00 2001 From: Meta Vens Date: Thu, 18 Jun 2026 21:30:41 +0100 Subject: [PATCH] Emit deterministic Muninn feedback fixture --- native/obs_stem_source/muninn_media_wire.h | 21 ++++++++++++++++++--- tools/muninn_media_decoder_probe.cpp | 14 +++++++++++++- 2 files changed, 31 insertions(+), 4 deletions(-) diff --git a/native/obs_stem_source/muninn_media_wire.h b/native/obs_stem_source/muninn_media_wire.h index a66753c..e691431 100644 --- a/native/obs_stem_source/muninn_media_wire.h +++ b/native/obs_stem_source/muninn_media_wire.h @@ -176,7 +176,8 @@ inline std::vector encode_receiver_feedback_payload( const std::string &stream_id, const std::string &session_id, uint64_t frame_id, - const std::vector &missing_chunk_keys) + const std::vector &missing_chunk_keys, + const std::string &observed_at) { MsgpackWriter record; record.write_array_len(11); @@ -193,7 +194,7 @@ inline std::vector encode_receiver_feedback_payload( record.write_bool(true); record.write_i64(0); record.write_i64(0); - record.write_string(feedback_observed_at()); + record.write_string(observed_at); write_string_array(record, missing_chunk_keys); const std::string record_key = stream_id + ":" + session_id + ":feedback:starfire.obs"; @@ -207,7 +208,7 @@ inline std::vector encode_receiver_feedback_payload( document.write_string("recordKey"); document.write_string(record_key); document.write_string("storedAt"); - document.write_string(feedback_observed_at()); + document.write_string(observed_at); document.write_string("payloadEncoding"); document.write_string("messagepack"); document.write_string("payload"); @@ -232,4 +233,18 @@ inline std::vector encode_receiver_feedback_payload( return wire.bytes(); } +inline std::vector encode_receiver_feedback_payload( + const std::string &stream_id, + const std::string &session_id, + uint64_t frame_id, + const std::vector &missing_chunk_keys) +{ + return encode_receiver_feedback_payload( + stream_id, + session_id, + frame_id, + missing_chunk_keys, + feedback_observed_at()); +} + } // namespace muninn_media_wire diff --git a/tools/muninn_media_decoder_probe.cpp b/tools/muninn_media_decoder_probe.cpp index f48f052..a010984 100644 --- a/tools/muninn_media_decoder_probe.cpp +++ b/tools/muninn_media_decoder_probe.cpp @@ -1,4 +1,5 @@ #include +#include #include #include #include @@ -368,7 +369,8 @@ int main(int argc, char **argv) { if (argc < 2) { std::cerr << "usage: muninn_media_decoder_probe [more-wire.bin ...]\n" - << " muninn_media_decoder_probe --feedback-fixture\n"; + << " muninn_media_decoder_probe --feedback-fixture\n" + << " muninn_media_decoder_probe --feedback-fixture-hex\n"; return 2; } @@ -379,6 +381,16 @@ int main(int argc, char **argv) if (std::string(argv[index]) == "--feedback-fixture") { bytes = muninn_media_wire::encode_receiver_feedback_payload( "muninn.raven.av.rudp", "raven:test:video", 42, {"42:1", "42:3"}); + } else if (std::string(argv[index]) == "--feedback-fixture-hex") { + bytes = muninn_media_wire::encode_receiver_feedback_payload( + "muninn.raven.av.rudp", "raven:test:video", 42, {"42:1", "42:3"}, "unix-ms:1000"); + for (const auto byte : bytes) { + std::cout << std::hex << std::setw(2) << std::setfill('0') + << static_cast(byte); + } + std::cout << "\n"; + decoded_any = true; + continue; } else { std::ifstream file(argv[index], std::ios::binary); bytes.assign(std::istreambuf_iterator(file), std::istreambuf_iterator());