xref: /aosp_15_r20/external/webrtc/api/voip/voip_statistics.h (revision d9f758449e529ab9291ac668be2861e7a55c2422)
1*d9f75844SAndroid Build Coastguard Worker /*
2*d9f75844SAndroid Build Coastguard Worker  *  Copyright (c) 2020 The WebRTC project authors. All Rights Reserved.
3*d9f75844SAndroid Build Coastguard Worker  *
4*d9f75844SAndroid Build Coastguard Worker  *  Use of this source code is governed by a BSD-style license
5*d9f75844SAndroid Build Coastguard Worker  *  that can be found in the LICENSE file in the root of the source
6*d9f75844SAndroid Build Coastguard Worker  *  tree. An additional intellectual property rights grant can be found
7*d9f75844SAndroid Build Coastguard Worker  *  in the file PATENTS.  All contributing project authors may
8*d9f75844SAndroid Build Coastguard Worker  *  be found in the AUTHORS file in the root of the source tree.
9*d9f75844SAndroid Build Coastguard Worker  */
10*d9f75844SAndroid Build Coastguard Worker 
11*d9f75844SAndroid Build Coastguard Worker #ifndef API_VOIP_VOIP_STATISTICS_H_
12*d9f75844SAndroid Build Coastguard Worker #define API_VOIP_VOIP_STATISTICS_H_
13*d9f75844SAndroid Build Coastguard Worker 
14*d9f75844SAndroid Build Coastguard Worker #include "api/neteq/neteq.h"
15*d9f75844SAndroid Build Coastguard Worker #include "api/voip/voip_base.h"
16*d9f75844SAndroid Build Coastguard Worker 
17*d9f75844SAndroid Build Coastguard Worker namespace webrtc {
18*d9f75844SAndroid Build Coastguard Worker 
19*d9f75844SAndroid Build Coastguard Worker struct IngressStatistics {
20*d9f75844SAndroid Build Coastguard Worker   // Stats included from api/neteq/neteq.h.
21*d9f75844SAndroid Build Coastguard Worker   NetEqLifetimeStatistics neteq_stats;
22*d9f75844SAndroid Build Coastguard Worker 
23*d9f75844SAndroid Build Coastguard Worker   // Represents the total duration in seconds of all samples that have been
24*d9f75844SAndroid Build Coastguard Worker   // received.
25*d9f75844SAndroid Build Coastguard Worker   // https://w3c.github.io/webrtc-stats/#dom-rtcinboundrtpstreamstats-totalsamplesduration
26*d9f75844SAndroid Build Coastguard Worker   double total_duration = 0.0;
27*d9f75844SAndroid Build Coastguard Worker };
28*d9f75844SAndroid Build Coastguard Worker 
29*d9f75844SAndroid Build Coastguard Worker // Remote statistics obtained via remote RTCP SR/RR report received.
30*d9f75844SAndroid Build Coastguard Worker struct RemoteRtcpStatistics {
31*d9f75844SAndroid Build Coastguard Worker   // Jitter as defined in RFC 3550 [6.4.1] expressed in seconds.
32*d9f75844SAndroid Build Coastguard Worker   double jitter = 0.0;
33*d9f75844SAndroid Build Coastguard Worker 
34*d9f75844SAndroid Build Coastguard Worker   // Cumulative packets lost as defined in RFC 3550 [6.4.1]
35*d9f75844SAndroid Build Coastguard Worker   int64_t packets_lost = 0;
36*d9f75844SAndroid Build Coastguard Worker 
37*d9f75844SAndroid Build Coastguard Worker   // Fraction lost as defined in RFC 3550 [6.4.1] expressed as a floating
38*d9f75844SAndroid Build Coastguard Worker   // pointer number.
39*d9f75844SAndroid Build Coastguard Worker   double fraction_lost = 0.0;
40*d9f75844SAndroid Build Coastguard Worker 
41*d9f75844SAndroid Build Coastguard Worker   // https://w3c.github.io/webrtc-stats/#dom-rtcremoteinboundrtpstreamstats-roundtriptime
42*d9f75844SAndroid Build Coastguard Worker   absl::optional<double> round_trip_time;
43*d9f75844SAndroid Build Coastguard Worker 
44*d9f75844SAndroid Build Coastguard Worker   // Last time (not RTP timestamp) when RTCP report received in milliseconds.
45*d9f75844SAndroid Build Coastguard Worker   int64_t last_report_received_timestamp_ms;
46*d9f75844SAndroid Build Coastguard Worker };
47*d9f75844SAndroid Build Coastguard Worker 
48*d9f75844SAndroid Build Coastguard Worker struct ChannelStatistics {
49*d9f75844SAndroid Build Coastguard Worker   // https://w3c.github.io/webrtc-stats/#dom-rtcsentrtpstreamstats-packetssent
50*d9f75844SAndroid Build Coastguard Worker   uint64_t packets_sent = 0;
51*d9f75844SAndroid Build Coastguard Worker 
52*d9f75844SAndroid Build Coastguard Worker   // https://w3c.github.io/webrtc-stats/#dom-rtcsentrtpstreamstats-bytessent
53*d9f75844SAndroid Build Coastguard Worker   uint64_t bytes_sent = 0;
54*d9f75844SAndroid Build Coastguard Worker 
55*d9f75844SAndroid Build Coastguard Worker   // https://w3c.github.io/webrtc-stats/#dom-rtcreceivedrtpstreamstats-packetsreceived
56*d9f75844SAndroid Build Coastguard Worker   uint64_t packets_received = 0;
57*d9f75844SAndroid Build Coastguard Worker 
58*d9f75844SAndroid Build Coastguard Worker   // https://w3c.github.io/webrtc-stats/#dom-rtcinboundrtpstreamstats-bytesreceived
59*d9f75844SAndroid Build Coastguard Worker   uint64_t bytes_received = 0;
60*d9f75844SAndroid Build Coastguard Worker 
61*d9f75844SAndroid Build Coastguard Worker   // https://w3c.github.io/webrtc-stats/#dom-rtcreceivedrtpstreamstats-jitter
62*d9f75844SAndroid Build Coastguard Worker   double jitter = 0.0;
63*d9f75844SAndroid Build Coastguard Worker 
64*d9f75844SAndroid Build Coastguard Worker   // https://w3c.github.io/webrtc-stats/#dom-rtcreceivedrtpstreamstats-packetslost
65*d9f75844SAndroid Build Coastguard Worker   int64_t packets_lost = 0;
66*d9f75844SAndroid Build Coastguard Worker 
67*d9f75844SAndroid Build Coastguard Worker   // SSRC from remote media endpoint as indicated either by RTP header in RFC
68*d9f75844SAndroid Build Coastguard Worker   // 3550 [5.1] or RTCP SSRC of sender in RFC 3550 [6.4.1].
69*d9f75844SAndroid Build Coastguard Worker   absl::optional<uint32_t> remote_ssrc;
70*d9f75844SAndroid Build Coastguard Worker 
71*d9f75844SAndroid Build Coastguard Worker   absl::optional<RemoteRtcpStatistics> remote_rtcp;
72*d9f75844SAndroid Build Coastguard Worker };
73*d9f75844SAndroid Build Coastguard Worker 
74*d9f75844SAndroid Build Coastguard Worker // VoipStatistics interface provides the interfaces for querying metrics around
75*d9f75844SAndroid Build Coastguard Worker // the jitter buffer (NetEq) performance.
76*d9f75844SAndroid Build Coastguard Worker class VoipStatistics {
77*d9f75844SAndroid Build Coastguard Worker  public:
78*d9f75844SAndroid Build Coastguard Worker   // Gets the audio ingress statistics by `ingress_stats` reference.
79*d9f75844SAndroid Build Coastguard Worker   // Returns following VoipResult;
80*d9f75844SAndroid Build Coastguard Worker   //  kOk - successfully set provided IngressStatistics reference.
81*d9f75844SAndroid Build Coastguard Worker   //  kInvalidArgument - `channel_id` is invalid.
82*d9f75844SAndroid Build Coastguard Worker   virtual VoipResult GetIngressStatistics(ChannelId channel_id,
83*d9f75844SAndroid Build Coastguard Worker                                           IngressStatistics& ingress_stats) = 0;
84*d9f75844SAndroid Build Coastguard Worker 
85*d9f75844SAndroid Build Coastguard Worker   // Gets the channel statistics by `channel_stats` reference.
86*d9f75844SAndroid Build Coastguard Worker   // Returns following VoipResult;
87*d9f75844SAndroid Build Coastguard Worker   //  kOk - successfully set provided ChannelStatistics reference.
88*d9f75844SAndroid Build Coastguard Worker   //  kInvalidArgument - `channel_id` is invalid.
89*d9f75844SAndroid Build Coastguard Worker   virtual VoipResult GetChannelStatistics(ChannelId channel_id,
90*d9f75844SAndroid Build Coastguard Worker                                           ChannelStatistics& channel_stats) = 0;
91*d9f75844SAndroid Build Coastguard Worker 
92*d9f75844SAndroid Build Coastguard Worker  protected:
93*d9f75844SAndroid Build Coastguard Worker   virtual ~VoipStatistics() = default;
94*d9f75844SAndroid Build Coastguard Worker };
95*d9f75844SAndroid Build Coastguard Worker 
96*d9f75844SAndroid Build Coastguard Worker }  // namespace webrtc
97*d9f75844SAndroid Build Coastguard Worker 
98*d9f75844SAndroid Build Coastguard Worker #endif  // API_VOIP_VOIP_STATISTICS_H_
99