[fix] fix loss rate calculation

This commit is contained in:
dijunkun
2024-11-29 18:20:26 +08:00
parent daef6f19dc
commit b0fdcd9193
4 changed files with 34 additions and 5 deletions

View File

@@ -30,6 +30,7 @@ void RtpAudioReceiver::InsertRtpPacket(RtpPacket& rtp_packet) {
if (io_statistics_) { if (io_statistics_) {
io_statistics_->UpdateAudioInboundBytes(last_recv_bytes_); io_statistics_->UpdateAudioInboundBytes(last_recv_bytes_);
io_statistics_->IncrementAudioInboundRtpPacketCount(); io_statistics_->IncrementAudioInboundRtpPacketCount();
io_statistics_->UpdateAudioPacketLossCount(rtp_packet.SequenceNumber());
} }
if (CheckIsTimeSendRR()) { if (CheckIsTimeSendRR()) {

View File

@@ -30,6 +30,7 @@ void RtpDataReceiver::InsertRtpPacket(RtpPacket& rtp_packet) {
if (io_statistics_) { if (io_statistics_) {
io_statistics_->UpdateDataInboundBytes(last_recv_bytes_); io_statistics_->UpdateDataInboundBytes(last_recv_bytes_);
io_statistics_->IncrementDataInboundRtpPacketCount(); io_statistics_->IncrementDataInboundRtpPacketCount();
io_statistics_->UpdateDataPacketLossCount(rtp_packet.SequenceNumber());
} }
if (CheckIsTimeSendRR()) { if (CheckIsTimeSendRR()) {

View File

@@ -33,6 +33,7 @@ void RtpVideoReceiver::InsertRtpPacket(RtpPacket& rtp_packet) {
if (io_statistics_) { if (io_statistics_) {
io_statistics_->UpdateVideoInboundBytes(last_recv_bytes_); io_statistics_->UpdateVideoInboundBytes(last_recv_bytes_);
io_statistics_->IncrementVideoInboundRtpPacketCount(); io_statistics_->IncrementVideoInboundRtpPacketCount();
io_statistics_->UpdateVideoPacketLossCount(rtp_packet.SequenceNumber());
} }
if (CheckIsTimeSendRR()) { if (CheckIsTimeSendRR()) {

View File

@@ -2,6 +2,8 @@
#include "log.h" #include "log.h"
#define RTP_SEQ_NUM_MAX 65535
IOStatistics::IOStatistics( IOStatistics::IOStatistics(
std::function<void(const NetTrafficStats&)> io_report_callback) std::function<void(const NetTrafficStats&)> io_report_callback)
: io_report_callback_(io_report_callback) { : io_report_callback_(io_report_callback) {
@@ -52,7 +54,7 @@ void IOStatistics::Process() {
} }
if (expected_audio_inbound_rtp_pkt_cnt_ > 0 && if (expected_audio_inbound_rtp_pkt_cnt_ > 0 &&
audio_inbound_rtp_pkt_cnt_tmp_ > 0) { audio_inbound_rtp_pkt_cnt_tmp_ >= 0) {
audio_rtp_pkt_loss_rate_ = audio_rtp_pkt_loss_rate_ =
audio_rtp_pkt_loss_cnt_ / (float)audio_inbound_rtp_pkt_cnt_; audio_rtp_pkt_loss_cnt_ / (float)audio_inbound_rtp_pkt_cnt_;
} else { } else {
@@ -60,7 +62,7 @@ void IOStatistics::Process() {
} }
if (expected_data_inbound_rtp_pkt_cnt_ > 0 && if (expected_data_inbound_rtp_pkt_cnt_ > 0 &&
data_inbound_rtp_pkt_cnt_ > 0) { data_inbound_rtp_pkt_cnt_ >= 0) {
data_rtp_pkt_loss_rate_ = data_rtp_pkt_loss_rate_ =
data_rtp_pkt_loss_cnt_ / (float)data_inbound_rtp_pkt_cnt_; data_rtp_pkt_loss_cnt_ / (float)data_inbound_rtp_pkt_cnt_;
} else { } else {
@@ -122,6 +124,30 @@ void IOStatistics::Process() {
video_outbound_rtp_pkt_cnt_ + audio_outbound_rtp_pkt_cnt_ + video_outbound_rtp_pkt_cnt_ + audio_outbound_rtp_pkt_cnt_ +
data_outbound_rtp_pkt_cnt_; data_outbound_rtp_pkt_cnt_;
LOG_ERROR(
"[{} {} {}] | [{} {}] | [{} {} {}] | [{} {}] | [{} {} {}] | [{} "
"{}] | [{} {} {}] | [{} {}]",
net_traffic_stats.video_inbound_stats.bitrate,
net_traffic_stats.video_inbound_stats.loss_rate,
net_traffic_stats.video_inbound_stats.rtp_packet_count,
net_traffic_stats.video_outbound_stats.bitrate,
net_traffic_stats.video_outbound_stats.rtp_packet_count,
net_traffic_stats.audio_inbound_stats.bitrate,
net_traffic_stats.audio_inbound_stats.loss_rate,
net_traffic_stats.audio_inbound_stats.rtp_packet_count,
net_traffic_stats.audio_outbound_stats.bitrate,
net_traffic_stats.audio_outbound_stats.rtp_packet_count,
net_traffic_stats.data_inbound_stats.bitrate,
net_traffic_stats.data_inbound_stats.loss_rate,
net_traffic_stats.data_inbound_stats.rtp_packet_count,
net_traffic_stats.data_outbound_stats.bitrate,
net_traffic_stats.data_outbound_stats.rtp_packet_count,
net_traffic_stats.total_inbound_stats.bitrate,
net_traffic_stats.total_inbound_stats.loss_rate,
net_traffic_stats.total_inbound_stats.rtp_packet_count,
net_traffic_stats.total_outbound_stats.bitrate,
net_traffic_stats.total_outbound_stats.rtp_packet_count);
io_report_callback_(net_traffic_stats); io_report_callback_(net_traffic_stats);
} }
} }
@@ -158,7 +184,7 @@ void IOStatistics::UpdateVideoPacketLossCount(uint16_t seq_num) {
0xffff - last_received_video_rtp_pkt_seq_ + seq_num + 1; 0xffff - last_received_video_rtp_pkt_seq_ + seq_num + 1;
} else { } else {
expected_video_inbound_rtp_pkt_cnt_ += expected_video_inbound_rtp_pkt_cnt_ +=
seq_num - last_received_video_rtp_pkt_seq_ - 1; seq_num - last_received_video_rtp_pkt_seq_;
} }
} else if (last_received_video_rtp_pkt_seq_ > seq_num) { } else if (last_received_video_rtp_pkt_seq_ > seq_num) {
expected_video_inbound_rtp_pkt_cnt_ += expected_video_inbound_rtp_pkt_cnt_ +=
@@ -184,7 +210,7 @@ void IOStatistics::UpdateAudioPacketLossCount(uint16_t seq_num) {
0xffff - last_received_audio_rtp_pkt_seq_ + seq_num + 1; 0xffff - last_received_audio_rtp_pkt_seq_ + seq_num + 1;
} else { } else {
expected_audio_inbound_rtp_pkt_cnt_ += expected_audio_inbound_rtp_pkt_cnt_ +=
seq_num - last_received_audio_rtp_pkt_seq_ - 1; seq_num - last_received_audio_rtp_pkt_seq_;
} }
} else if (last_received_audio_rtp_pkt_seq_ > seq_num) { } else if (last_received_audio_rtp_pkt_seq_ > seq_num) {
expected_audio_inbound_rtp_pkt_cnt_ += expected_audio_inbound_rtp_pkt_cnt_ +=
@@ -210,7 +236,7 @@ void IOStatistics::UpdateDataPacketLossCount(uint16_t seq_num) {
0xffff - last_received_data_rtp_pkt_seq_ + seq_num + 1; 0xffff - last_received_data_rtp_pkt_seq_ + seq_num + 1;
} else { } else {
expected_data_inbound_rtp_pkt_cnt_ += expected_data_inbound_rtp_pkt_cnt_ +=
seq_num - last_received_data_rtp_pkt_seq_ - 1; seq_num - last_received_data_rtp_pkt_seq_;
} }
} else if (last_received_data_rtp_pkt_seq_ > seq_num) { } else if (last_received_data_rtp_pkt_seq_ > seq_num) {
expected_data_inbound_rtp_pkt_cnt_ += expected_data_inbound_rtp_pkt_cnt_ +=