PipeConsumer::FillBuffer returns two FBS::RtpStream::CreateSendStats,
Consumer.rs getStats need a ConsumerStat and a ProducerStat
_ => {
let consumer_stat = ConsumerStat::from_fbs(&data.stats[0]);
let producer_stat = ProducerStat::from_fbs(&data.stats[1]);
Ok(ConsumerStats::WithProducer((consumer_stat, producer_stat)))
}
Got panic in ProducerStat::from_fbs with rtp_stream::StatsData:SendStats
let rtp_stream::StatsData::RecvStats(ref stats) = stats.data else {
error!("panic RecvStats data: {:?}", stats);
panic!("Wrong message from worker");
};
PipeConsumer::FillBuffer only can returns some FBS::RtpStream::SendStats with this->rtpStreams .
flatbuffers::Offset<FBS::Consumer::GetStatsResponse> PipeConsumer::FillBufferStats(
flatbuffers::FlatBufferBuilder& builder)
{
MS_TRACE();
std::vector<flatbuffers::Offset<FBS::RtpStream::Stats>> rtpStreams;
rtpStreams.reserve(this->rtpStreams.size());
// Add stats of our send streams.
for (auto* rtpStream : this->rtpStreams)
{
rtpStreams.emplace_back(rtpStream->FillBufferStats(builder));
}
return FBS::Consumer::CreateGetStatsResponseDirect(builder, &rtpStreams);
}
Log:
panicked at crates/mediasoup/rust/src/router/producer.rs:325:13:
Wrong message from worker"
panic RecvStats data: Stats { data: SendStats(SendStats { base: Stats { data: BaseStats(BaseStats { timestamp: 1845502334, ssrc: 862273841, kind: Video, mime_type: "video/H264", packets_lost: 0, fraction_lost: 0, packets_discarded: 0, packets_retransmitted: 0, packets_repaired_by_nack: 0, packets_repaired_by_red: 0, nack_count: 0, nack_packet_count: 0, pli_count: 0, fir_count: 0, score: 10, rid: None, rtx_ssrc: None, rtx_packets_discarded: 0, round_trip_time: 0.0 }) }, packet_count: 0, byte_count: 0, bitrate: 0, rtx_bitrate: 0, red_bitrate: 0 }) }