Old way to produce this histogram was based on RtcpStatisticsCallback reporting sent RTCP messages, with some additional processing by the ReportBlockStats class. After this cl, to grand average fraction loss is computed by StreamStatistician, queried by VideoReceiveStream when the stream is closed down, and passed to ReceiveStatisticsProxy which produces histograms. This is a preparation for deleting the RtcpStatisticsCallback from ReceiveStatistics. Bug: webrtc:10679 Change-Id: Ie37062c1ae590fd92d3bd0f94c510e135ab93e8d Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/147722 Reviewed-by: Åsa Persson <asapersson@webrtc.org> Reviewed-by: Danil Chapovalov <danilchap@webrtc.org> Commit-Queue: Niels Moller <nisse@webrtc.org> Cr-Commit-Position: refs/heads/master@{#28747}
93 lines
3.2 KiB
C++
93 lines
3.2 KiB
C++
/*
|
|
* Copyright (c) 2013 The WebRTC project authors. All Rights Reserved.
|
|
*
|
|
* Use of this source code is governed by a BSD-style license
|
|
* that can be found in the LICENSE file in the root of the source
|
|
* tree. An additional intellectual property rights grant can be found
|
|
* in the file PATENTS. All contributing project authors may
|
|
* be found in the AUTHORS file in the root of the source tree.
|
|
*/
|
|
|
|
#ifndef MODULES_RTP_RTCP_INCLUDE_RECEIVE_STATISTICS_H_
|
|
#define MODULES_RTP_RTCP_INCLUDE_RECEIVE_STATISTICS_H_
|
|
|
|
#include <map>
|
|
#include <memory>
|
|
#include <vector>
|
|
|
|
#include "absl/types/optional.h"
|
|
#include "call/rtp_packet_sink_interface.h"
|
|
#include "modules/include/module.h"
|
|
#include "modules/include/module_common_types.h"
|
|
#include "modules/rtp_rtcp/include/rtcp_statistics.h"
|
|
#include "modules/rtp_rtcp/include/rtp_rtcp_defines.h"
|
|
#include "modules/rtp_rtcp/source/rtcp_packet/report_block.h"
|
|
#include "rtc_base/deprecation.h"
|
|
|
|
namespace webrtc {
|
|
|
|
class Clock;
|
|
|
|
class ReceiveStatisticsProvider {
|
|
public:
|
|
virtual ~ReceiveStatisticsProvider() = default;
|
|
// Collects receive statistic in a form of rtcp report blocks.
|
|
// Returns at most |max_blocks| report blocks.
|
|
virtual std::vector<rtcp::ReportBlock> RtcpReportBlocks(
|
|
size_t max_blocks) = 0;
|
|
};
|
|
|
|
class StreamStatistician {
|
|
public:
|
|
virtual ~StreamStatistician();
|
|
|
|
virtual bool GetStatistics(RtcpStatistics* statistics, bool reset) = 0;
|
|
virtual void GetDataCounters(size_t* bytes_received,
|
|
uint32_t* packets_received) const = 0;
|
|
|
|
// Returns average over the stream life time.
|
|
virtual absl::optional<int> GetFractionLostInPercent() const = 0;
|
|
|
|
// Gets received stream data counters (includes reset counter values).
|
|
virtual void GetReceiveStreamDataCounters(
|
|
StreamDataCounters* data_counters) const = 0;
|
|
|
|
virtual uint32_t BitrateReceived() const = 0;
|
|
};
|
|
|
|
class ReceiveStatistics : public ReceiveStatisticsProvider,
|
|
public RtpPacketSinkInterface {
|
|
public:
|
|
~ReceiveStatistics() override = default;
|
|
|
|
static ReceiveStatistics* Create(Clock* clock) {
|
|
return Create(clock, nullptr, nullptr).release();
|
|
}
|
|
|
|
static std::unique_ptr<ReceiveStatistics> Create(
|
|
Clock* clock,
|
|
RtcpStatisticsCallback* rtcp_callback,
|
|
StreamDataCountersCallback* rtp_callback);
|
|
|
|
// Increment counter for number of FEC packets received.
|
|
virtual void FecPacketReceived(const RtpPacketReceived& packet) = 0;
|
|
|
|
// Returns a pointer to the statistician of an ssrc.
|
|
virtual StreamStatistician* GetStatistician(uint32_t ssrc) const = 0;
|
|
|
|
// TODO(bugs.webrtc.org/10669): Deprecated, delete as soon as downstream
|
|
// projects are updated. This method sets the max reordering threshold of all
|
|
// current and future streams.
|
|
virtual void SetMaxReorderingThreshold(int max_reordering_threshold) = 0;
|
|
|
|
// Sets the max reordering threshold in number of packets.
|
|
virtual void SetMaxReorderingThreshold(uint32_t ssrc,
|
|
int max_reordering_threshold) = 0;
|
|
// Detect retransmissions, enabling updates of the retransmitted counters. The
|
|
// default is false.
|
|
virtual void EnableRetransmitDetection(uint32_t ssrc, bool enable) = 0;
|
|
};
|
|
|
|
} // namespace webrtc
|
|
#endif // MODULES_RTP_RTCP_INCLUDE_RECEIVE_STATISTICS_H_
|