Jeremy Leconte 6903f713d2 Revert "Report total and squared inter frame delays measured in OnRenderedFrame"
This reverts commit d49d49ad89e67d1a3c63fbc638af445af5648875.

Reason for revert:
# Check failed: total_freezes_duration_ms_double <= total_frames_duration_ms_double (196 vs. 0.044783)
https://ci.chromium.org/p/webrtc/builders/perf/Perf%20Mac%20M1%20Arm64%2012
it also breaks the metric 'freeze_duration_ratio':
https://chromeperf.appspot.com/report?sid=6e919d271ff5885c3fa6363dd255b9793d5e79332a9f202b725c33cc7d3da31a

Original change's description:
> Report total and squared inter frame delays measured in OnRenderedFrame
>
> After https://webrtc-review.googlesource.com/c/src/+/160042 we ended up with two sets of metrics representing total and total squared inter frame delays: old is measured in OnDecodedFrame and new in OnRenderedFrame. Reporting of old metrics was unshipped in https://webrtc-review.googlesource.com/c/src/+/278100. The metrics are used for calculation of harmonic frame rate and are desired to be measured as close as possible to rendering. This CL removes calculation of inter frame delay metrics from OnDecodedFrame and reports the metrics calculated in OnRenderedFrame to the stats.
>
> Bug: webrtc:11108, b/261512902
> Change-Id: Ia21b321aab3a1ac0b6136dc0df7d95f2f0fd24c6
> Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/286842
> Commit-Queue: Sergey Silkin <ssilkin@webrtc.org>
> Reviewed-by: Erik Språng <sprang@webrtc.org>
> Reviewed-by: Harald Alvestrand <hta@webrtc.org>
> Reviewed-by: Henrik Boström <hbos@webrtc.org>
> Cr-Commit-Position: refs/heads/main@{#38909}

Bug: webrtc:11108, b/261512902, webrtc:14789
Change-Id: Ie0da33c1071c48c50bff6608830c9e2a5a928fb4
Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/288402
Commit-Queue: Jeremy Leconte <jleconte@google.com>
Bot-Commit: rubber-stamper@appspot.gserviceaccount.com <rubber-stamper@appspot.gserviceaccount.com>
Reviewed-by: Harald Alvestrand <hta@webrtc.org>
Cr-Commit-Position: refs/heads/main@{#38922}
2022-12-20 11:04:31 +00:00

16 KiB

Video stats

Overview of collected statistics for VideoSendStream and VideoReceiveStream.

VideoSendStream

VideoSendStream::Stats for a sending stream can be gathered via VideoSendStream::GetStats().

Some statistics are collected per RTP stream (see StreamStats) and can be of StreamType: kMedia, kRtx, kFlexfec.

Multiple StreamStats objects are for example present if simulcast is used (multiple kMedia objects) or if RTX or FlexFEC is negotiated.

SendStatisticsProxy

VideoSendStream owns a SendStatisticsProxy which implements VideoStreamEncoderObserver, RtcpStatisticsCallback, ReportBlockDataObserver, RtcpPacketTypeCounterObserver, StreamDataCountersCallback, BitrateStatisticsObserver, FrameCountObserver, SendSideDelayObserver and holds a VideoSendStream::Stats object.

SendStatisticsProxy is called via these interfaces by different components (e.g. RtpRtcp module) to update stats.

StreamStats

  • type - kMedia, kRtx or kFlexfec.
  • referenced_media_ssrc - only present for type kRtx/kFlexfec. The SSRC for the kMedia stream that retransmissions or FEC is performed for.

Updated when a frame has been encoded, VideoStreamEncoder::OnEncodedImage.

Updated when a RTP packet is transmitted to the network, RtpSenderEgress::SendPacket.

  • rtp_stats - total number of sent bytes/packets.
  • total_bitrate_bps - total bitrate sent in bits per second (over a one second window).
  • retransmit_bitrate_bps - total retransmit bitrate sent in bits per second (over a one second window).
  • avg_delay_ms - average capture-to-send delay for sent packets (over a one second window).
  • max_delay_ms - maximum capture-to-send delay for sent packets (over a one second window).
  • total_packet_send_delay_ms - total capture-to-send delay for sent packets [rtcoutboundrtpstreamstats-totalpacketsenddelay].

Updated when an incoming RTCP packet is parsed, RTCPReceiver::ParseCompoundPacket.

  • rtcp_packet_type_counts - total number of received NACK/FIR/PLI packets [rtcoutboundrtpstreamstats-nackcount, fircount, plicount].

Updated when a RTCP report block packet is received, RTCPReceiver::TriggerCallbacksFromRtcpPacket.

  • rtcp_stats - RTCP report block data.
  • report_block_data - RTCP report block data.

Stats

  • std::map<uint32_t, StreamStats> substreams - StreamStats mapped per SSRC.

Updated when a frame is received from the source, VideoStreamEncoder::OnFrame.

  • frames - total number of frames fed to VideoStreamEncoder.
  • input_frame_rate - number of frames fed to VideoStreamEncoder during the last second.
  • frames_dropped_by_congestion_window - total number of dropped frames due to congestion window pushback.
  • frames_dropped_by_encoder_queue - total number of dropped frames due to that the encoder is blocked.

Updated if a frame from the source is dropped, VideoStreamEncoder::OnDiscardedFrame.

  • frames_dropped_by_capturer - total number dropped frames by the source.

Updated if a frame is dropped by FrameDropper, VideoStreamEncoder::MaybeEncodeVideoFrame.

  • frames_dropped_by_rate_limiter - total number of dropped frames to avoid bitrate overuse.

Updated (if changed) before a frame is passed to the encoder, VideoStreamEncoder::EncodeVideoFrame.

Updated after a frame has been encoded, VideoStreamEncoder::OnEncodedImage.

Adaptation stats.

  • bw_limited_resolution - shows if resolution is limited due to restricted bandwidth.
  • cpu_limited_resolution - shows if resolution is limited due to cpu.
  • bw_limited_framerate - shows if framerate is limited due to restricted bandwidth.
  • cpu_limited_framerate - shows if framerate is limited due to cpu.
  • quality_limitation_reason - current reason for limiting resolution and/or framerate [rtcoutboundrtpstreamstats-qualitylimitationreason].
  • quality_limitation_durations_ms - total time spent in quality limitation state [rtcoutboundrtpstreamstats-qualitylimitationdurations].
  • quality_limitation_resolution_changes - total number of times that resolution has changed due to quality limitation [rtcoutboundrtpstreamstats-qualitylimitationresolutionchanges].
  • number_of_cpu_adapt_changes - total number of times resolution/framerate has changed due to cpu limitation.
  • number_of_quality_adapt_changes - total number of times resolution/framerate has changed due to quality limitation.

Updated when the encoder is configured, VideoStreamEncoder::ReconfigureEncoder.

  • content_type - configured content type (UNSPECIFIED/SCREENSHARE).

Updated when the available bitrate changes, VideoSendStreamImpl::OnBitrateUpdated.

  • target_media_bitrate_bps - the bitrate the encoder is configured to use.
  • suspended - shows if video is suspended due to zero target bitrate.

VideoReceiveStream

VideoReceiveStream::Stats for a receiving stream can be gathered via VideoReceiveStream::GetStats().

ReceiveStatisticsProxy

VideoReceiveStream owns a ReceiveStatisticsProxy which implements VCMReceiveStatisticsCallback, RtcpCnameCallback, RtcpPacketTypeCounterObserver, CallStatsObserver and holds a VideoReceiveStream::Stats object.

ReceiveStatisticsProxy is called via these interfaces by different components (e.g. RtpRtcp module) to update stats.

Stats

  • current_payload_type - current payload type.
  • ssrc - configured SSRC for the received stream.

Updated when a complete frame is received, FrameBuffer::InsertFrame.

Updated when a frame is ready for decoding, FrameBuffer::GetNextFrame. From VCMTiming:

  • jitter_buffer_ms - jitter buffer delay in ms.
  • max_decode_ms - the 95th percentile observed decode time within a time window (10 sec).
  • render_delay_ms - render delay in ms.
  • min_playout_delay_ms - minimum playout delay in ms.
  • target_delay_ms - target playout delay in ms. Max(min_playout_delay_ms, jitter_delay_ms + max_decode_ms + render_delay_ms).
  • current_delay_ms - actual playout delay in ms.
  • jitter_buffer_delay_seconds - total jitter buffer delay in seconds [rtcinboundrtpstreamstats-jitterbufferdelay].
  • jitter_buffer_emitted_count - total number of frames that have come out from the jitter buffer [rtcinboundrtpstreamstats-jitterbufferemittedcount].

Updated (if changed) after a frame is passed to the decoder, VCMGenericDecoder::Decode.

Updated when a frame is ready for decoding, FrameBuffer::GetNextFrame.

  • timing_frame_info - timestamps for a full lifetime of a frame.
  • first_frame_received_to_decoded_ms - initial decoding latency between the first arrived frame and the first decoded frame.
  • frames_dropped - total number of dropped frames prior to decoding or if the system is too slow [rtcreceivedrtpstreamstats-framesdropped].

Updated after a frame has been decoded, VCMDecodedFrameCallback::Decoded.

Updated before a frame is sent to the renderer, VideoReceiveStream2::OnFrame.

  • frames_rendered - total number of rendered frames.
  • render_frame_rate - number of rendered frames during the last second.
  • width - width of last frame fed to renderer [rtcinboundrtpstreamstats-framewidth].
  • height - height of last frame fed to renderer [rtcinboundrtpstreamstats-frameheight].
  • estimated_playout_ntp_timestamp_ms - estimated playout NTP timestamp [rtcinboundrtpstreamstats-estimatedplayouttimestamp].
  • sync_offset_ms - NTP timestamp difference between the last played out audio and video frame.
  • freeze_count - total number of detected freezes.
  • pause_count - total number of detected pauses.
  • total_freezes_duration_ms - total duration of freezes in ms.
  • total_pauses_duration_ms - total duration of pauses in ms.
  • total_frames_duration_ms - time in ms between the last rendered frame and the first rendered frame.
  • sum_squared_frame_durations - sum of squared inter-frame delays in seconds between rendered frames.

ReceiveStatisticsImpl::OnRtpPacket is updated for received RTP packets. From ReceiveStatistics:

  • total_bitrate_bps - incoming bitrate in bps.
  • rtp_stats - RTP statistics for the received stream.

Updated when a RTCP packet is sent, RTCPSender::ComputeCompoundRTCPPacket.

  • rtcp_packet_type_counts - total number of sent NACK/FIR/PLI packets [rtcinboundrtpstreamstats-nackcount, fircount, plicount].