From e1ca6ca6e6d120ad29d8dd84af84851764acf9c4 Mon Sep 17 00:00:00 2001 From: Siavash Sameni Date: Mon, 25 May 2026 20:39:25 +0400 Subject: [PATCH] fix(video): use relay-default stream for room video --- crates/wzp-video/src/transport.rs | 7 ++++++- desktop/src-tauri/src/engine.rs | 4 ++++ 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/crates/wzp-video/src/transport.rs b/crates/wzp-video/src/transport.rs index 195365c..e4af035 100644 --- a/crates/wzp-video/src/transport.rs +++ b/crates/wzp-video/src/transport.rs @@ -63,7 +63,11 @@ pub fn packetize_video_frame( flags, media_type: MediaType::Video, codec_id, - stream_id: 1, // stream 0 = audio, 1 = video + // Legacy relays default receivers to video layer 0. Use video stream + // 0 for the single-layer room-video path so packets are forwarded + // before any receiver quality state exists. Audio is separated by + // media_type, so stream_id 0 does not collide with audio packets. + stream_id: 0, fec_ratio: 0, seq: *seq, timestamp: timestamp_ms, @@ -188,6 +192,7 @@ mod tests { assert!(pkts[0].header.is_keyframe()); assert!(pkts[0].header.is_frame_end()); assert_eq!(pkts[0].header.media_type, MediaType::Video); + assert_eq!(pkts[0].header.stream_id, 0); let mut reassembler = VideoReassembler::new(); let result = reassembler.push(&pkts[0]); diff --git a/desktop/src-tauri/src/engine.rs b/desktop/src-tauri/src/engine.rs index 4591894..c373ff7 100644 --- a/desktop/src-tauri/src/engine.rs +++ b/desktop/src-tauri/src/engine.rs @@ -1212,6 +1212,7 @@ impl CallEngine { "t_ms": recv_t0.elapsed().as_millis() as u64, "codec": format!("{:?}", pkt.header.codec_id), "payload_bytes": pkt.payload.len(), + "stream_id": pkt.header.stream_id, }), ); } @@ -1943,6 +1944,7 @@ impl CallEngine { "first_pkt_bytes": pkts[0].payload.len(), "last_pkt_bytes": pkts.last().map(|pkt| pkt.payload.len()).unwrap_or(0), "encoded_bytes": encoded.len(), + "stream_id": pkts[0].header.stream_id, "is_keyframe": is_keyframe, }), ); @@ -2461,6 +2463,7 @@ impl CallEngine { "t_ms": recv_t0.elapsed().as_millis() as u64, "codec": format!("{:?}", pkt.header.codec_id), "payload_bytes": pkt.payload.len(), + "stream_id": pkt.header.stream_id, }), ); } @@ -3042,6 +3045,7 @@ impl CallEngine { "first_pkt_bytes": pkts[0].payload.len(), "last_pkt_bytes": pkts.last().map(|pkt| pkt.payload.len()).unwrap_or(0), "encoded_bytes": encoded.len(), + "stream_id": pkts[0].header.stream_id, "is_keyframe": is_keyframe, }), );