webrtc_m130/modules/rtp_rtcp/include/receive_statistics.h
Niels Möller 9a9f18a736 Get WebRTC.Video.ReceivedPacketsLostInPercent from ReceiveStatistics
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}
2019-08-02 12:38:34 +00:00

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_