99 lines
3.4 KiB
C++
99 lines
3.4 KiB
C++
/*
|
|
* Copyright (c) 2020 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 API_VOIP_VOIP_STATISTICS_H_
|
|
#define API_VOIP_VOIP_STATISTICS_H_
|
|
|
|
#include "api/neteq/neteq.h"
|
|
#include "api/voip/voip_base.h"
|
|
|
|
namespace webrtc {
|
|
|
|
struct IngressStatistics {
|
|
// Stats included from api/neteq/neteq.h.
|
|
NetEqLifetimeStatistics neteq_stats;
|
|
|
|
// Represents the total duration in seconds of all samples that have been
|
|
// received.
|
|
// https://w3c.github.io/webrtc-stats/#dom-rtcinboundrtpstreamstats-totalsamplesduration
|
|
double total_duration = 0.0;
|
|
};
|
|
|
|
// Remote statistics obtained via remote RTCP SR/RR report received.
|
|
struct RemoteRtcpStatistics {
|
|
// Jitter as defined in RFC 3550 [6.4.1] expressed in seconds.
|
|
double jitter = 0.0;
|
|
|
|
// Cumulative packets lost as defined in RFC 3550 [6.4.1]
|
|
int64_t packets_lost = 0;
|
|
|
|
// Fraction lost as defined in RFC 3550 [6.4.1] expressed as a floating
|
|
// pointer number.
|
|
double fraction_lost = 0.0;
|
|
|
|
// https://w3c.github.io/webrtc-stats/#dom-rtcremoteinboundrtpstreamstats-roundtriptime
|
|
absl::optional<double> round_trip_time;
|
|
|
|
// Last time (not RTP timestamp) when RTCP report received in milliseconds.
|
|
int64_t last_report_received_timestamp_ms;
|
|
};
|
|
|
|
struct ChannelStatistics {
|
|
// https://w3c.github.io/webrtc-stats/#dom-rtcsentrtpstreamstats-packetssent
|
|
uint64_t packets_sent = 0;
|
|
|
|
// https://w3c.github.io/webrtc-stats/#dom-rtcsentrtpstreamstats-bytessent
|
|
uint64_t bytes_sent = 0;
|
|
|
|
// https://w3c.github.io/webrtc-stats/#dom-rtcreceivedrtpstreamstats-packetsreceived
|
|
uint64_t packets_received = 0;
|
|
|
|
// https://w3c.github.io/webrtc-stats/#dom-rtcinboundrtpstreamstats-bytesreceived
|
|
uint64_t bytes_received = 0;
|
|
|
|
// https://w3c.github.io/webrtc-stats/#dom-rtcreceivedrtpstreamstats-jitter
|
|
double jitter = 0.0;
|
|
|
|
// https://w3c.github.io/webrtc-stats/#dom-rtcreceivedrtpstreamstats-packetslost
|
|
int64_t packets_lost = 0;
|
|
|
|
// SSRC from remote media endpoint as indicated either by RTP header in RFC
|
|
// 3550 [5.1] or RTCP SSRC of sender in RFC 3550 [6.4.1].
|
|
absl::optional<uint32_t> remote_ssrc;
|
|
|
|
absl::optional<RemoteRtcpStatistics> remote_rtcp;
|
|
};
|
|
|
|
// VoipStatistics interface provides the interfaces for querying metrics around
|
|
// the jitter buffer (NetEq) performance.
|
|
class VoipStatistics {
|
|
public:
|
|
// Gets the audio ingress statistics by |ingress_stats| reference.
|
|
// Returns following VoipResult;
|
|
// kOk - successfully set provided IngressStatistics reference.
|
|
// kInvalidArgument - |channel_id| is invalid.
|
|
virtual VoipResult GetIngressStatistics(ChannelId channel_id,
|
|
IngressStatistics& ingress_stats) = 0;
|
|
|
|
// Gets the channel statistics by |channel_stats| reference.
|
|
// Returns following VoipResult;
|
|
// kOk - successfully set provided ChannelStatistics reference.
|
|
// kInvalidArgument - |channel_id| is invalid.
|
|
virtual VoipResult GetChannelStatistics(ChannelId channel_id,
|
|
ChannelStatistics& channel_stats) = 0;
|
|
|
|
protected:
|
|
virtual ~VoipStatistics() = default;
|
|
};
|
|
|
|
} // namespace webrtc
|
|
|
|
#endif // API_VOIP_VOIP_STATISTICS_H_
|