Propagate OnSendPacket signal to SendStatisticsProxy

With an intent to use it instead of the SendSideDelayUpdated

Bug: None
Change-Id: Ifa2b76af6882b36b2ccca13d8038aa4fbb1a67fb
Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/317801
Commit-Queue: Danil Chapovalov <danilchap@webrtc.org>
Reviewed-by: Åsa Persson <asapersson@webrtc.org>
Cr-Commit-Position: refs/heads/main@{#40725}
This commit is contained in:
Danil Chapovalov 2023-08-25 13:47:41 +00:00 committed by WebRTC LUCI CQ
parent a8e3111d8c
commit 6e237e7914
5 changed files with 44 additions and 17 deletions

View File

@ -44,7 +44,6 @@ class SendDelayStats : public SendPacketObserver {
// Called when a packet is sent (leaving socket).
bool OnSentPacket(int packet_id, Timestamp time);
protected:
// From SendPacketObserver.
// Called when a packet is sent to the transport.
void OnSendPacket(uint16_t packet_id,

View File

@ -1382,6 +1382,13 @@ void SendStatisticsProxy::FrameCountUpdated(const FrameCounts& frame_counts,
stats->frame_counts = frame_counts;
}
void SendStatisticsProxy::OnSendPacket(uint32_t ssrc, Timestamp capture_time) {
[[maybe_unused]] TimeDelta send_delay = clock_->CurrentTime() - capture_time;
// TODO(danilchap): Calculate average and max send_delay per ssrc over last
// second, Use that measurement instead of whatever is received in
// SendSideDelayUpdated below.
}
void SendStatisticsProxy::SendSideDelayUpdated(int avg_delay_ms,
int max_delay_ms,
uint32_t ssrc) {

View File

@ -103,6 +103,8 @@ class SendStatisticsProxy : public VideoStreamEncoderObserver,
void OnEncodedFrameTimeMeasured(int encode_time_ms,
int encode_usage_percent) override;
void OnSendPacket(uint32_t ssrc, Timestamp capture_time);
int GetInputFrameRate() const override;
int GetSendFrameRate() const;

View File

@ -91,7 +91,7 @@ RtpSenderFrameEncryptionConfig CreateFrameEncryptionConfig(
RtpSenderObservers CreateObservers(RtcpRttStats* call_stats,
EncoderRtcpFeedback* encoder_feedback,
SendStatisticsProxy* stats_proxy,
SendDelayStats* send_delay_stats) {
SendPacketObserver* send_packet_observer) {
RtpSenderObservers observers;
observers.rtcp_rtt_stats = call_stats;
observers.intra_frame_callback = encoder_feedback;
@ -102,7 +102,7 @@ RtpSenderObservers CreateObservers(RtcpRttStats* call_stats,
observers.frame_count_observer = stats_proxy;
observers.rtcp_type_observer = stats_proxy;
observers.send_delay_observer = stats_proxy;
observers.send_packet_observer = send_delay_stats;
observers.send_packet_observer = send_packet_observer;
return observers;
}
@ -151,6 +151,7 @@ VideoSendStream::VideoSendStream(
const FieldTrialsView& field_trials)
: transport_(transport),
stats_proxy_(clock, config, encoder_config.content_type, field_trials),
send_packet_observer_(&stats_proxy_, send_delay_stats),
config_(std::move(config)),
content_type_(encoder_config.content_type),
video_stream_encoder_(CreateVideoStreamEncoder(
@ -169,20 +170,20 @@ VideoSendStream::VideoSendStream(
[this](uint32_t ssrc, const std::vector<uint16_t>& seq_nums) {
return rtp_video_sender_->GetSentRtpPacketInfos(ssrc, seq_nums);
}),
rtp_video_sender_(
transport->CreateRtpVideoSender(suspended_ssrcs,
suspended_payload_states,
config_.rtp,
config_.rtcp_report_interval_ms,
config_.send_transport,
CreateObservers(call_stats,
&encoder_feedback_,
&stats_proxy_,
send_delay_stats),
event_log,
std::move(fec_controller),
CreateFrameEncryptionConfig(&config_),
config_.frame_transformer)),
rtp_video_sender_(transport->CreateRtpVideoSender(
suspended_ssrcs,
suspended_payload_states,
config_.rtp,
config_.rtcp_report_interval_ms,
config_.send_transport,
CreateObservers(call_stats,
&encoder_feedback_,
&stats_proxy_,
&send_packet_observer_),
event_log,
std::move(fec_controller),
CreateFrameEncryptionConfig(&config_),
config_.frame_transformer)),
send_stream_(clock,
&stats_proxy_,
transport,

View File

@ -99,6 +99,23 @@ class VideoSendStream : public webrtc::VideoSendStream {
private:
friend class test::VideoSendStreamPeer;
class OnSendPacketObserver : public SendPacketObserver {
public:
OnSendPacketObserver(SendStatisticsProxy* stats_proxy,
SendDelayStats* send_delay_stats)
: stats_proxy_(*stats_proxy), send_delay_stats_(*send_delay_stats) {}
void OnSendPacket(uint16_t packet_id,
Timestamp capture_time,
uint32_t ssrc) override {
stats_proxy_.OnSendPacket(ssrc, capture_time);
send_delay_stats_.OnSendPacket(packet_id, capture_time, ssrc);
}
private:
SendStatisticsProxy& stats_proxy_;
SendDelayStats& send_delay_stats_;
};
absl::optional<float> GetPacingFactorOverride() const;
@ -106,6 +123,7 @@ class VideoSendStream : public webrtc::VideoSendStream {
RtpTransportControllerSendInterface* const transport_;
SendStatisticsProxy stats_proxy_;
OnSendPacketObserver send_packet_observer_;
const VideoSendStream::Config config_;
const VideoEncoderConfig::ContentType content_type_;
std::unique_ptr<VideoStreamEncoderInterface> video_stream_encoder_;