MillicastSDK 1.8.4
Loading...
Searching...
No Matches
stats.h
Go to the documentation of this file.
1#ifndef MILLICAST_API_STATS_H
2#define MILLICAST_API_STATS_H
3
11#include <map>
12#include <memory>
13#include <optional>
14#include <string>
15#include <vector>
16
18
19namespace millicast {
20
21namespace rtcstats {
22
23enum class Type {
24 CODEC,
32};
33
34struct Stats {
39 int64_t timestamp;
40 std::string id;
42
43 template <typename T>
44 const T* cast_to() const {
45 return static_cast<const T*>(this);
46 }
47 virtual ~Stats() = default;
48};
49
50struct Codecs : public Stats {
51 enum class Type { ENCODE, DECODE };
53
54 unsigned long payload_type;
55 std::string transport_id;
56 std::string mime_type;
57
58 std::optional<Type> codec_type;
59 std::optional<unsigned long> clock_rate;
60 std::optional<unsigned long> channels;
61 std::optional<std::string> sdp_fmtp_line;
62};
63
64struct RtpStream : public Stats {
65 unsigned long ssrc;
66 std::string kind;
67 std::optional<std::string> transport_id;
68 std::optional<std::string> codec_id;
69};
70
72 static constexpr auto STYPE = Type::INBOUND_RTP;
73
74 std::optional<unsigned long long> packets_received;
75 std::optional<double> jitter;
76 std::optional<long long> packets_lost;
77 std::optional<unsigned long long> frames_dropped;
78};
79
81 static constexpr auto STYPE = Type::INBOUND_RTP;
82
83 std::optional<std::string> remote_id;
84 std::optional<std::string> mid;
85 std::optional<std::string> track_identifier;
86 std::optional<unsigned long> frames_decoded;
87 std::optional<unsigned long> key_frames_decoded;
88 std::optional<unsigned long> nack_count;
89 std::optional<unsigned long long> fir_count;
90 std::optional<unsigned long long> pli_count;
91 std::optional<unsigned long> frames_received;
92 std::optional<unsigned long> frame_width;
93 std::optional<unsigned long> frame_height;
94 std::optional<double> frames_per_second;
95 std::optional<unsigned long long> bytes_received;
96 std::optional<unsigned long long> header_bytes_received;
97 std::optional<unsigned long long> last_packet_received_timestamp;
98 std::optional<double> audio_level;
99 std::optional<double> total_audio_energy;
100 std::optional<unsigned long long> fec_packets_received;
101 std::optional<unsigned long long> fec_packets_discarded;
102 std::optional<unsigned long long> total_samples_received;
103 std::optional<unsigned long long> concealed_samples;
104 std::optional<unsigned long long> silent_concealed_samples;
105 std::optional<unsigned long long> concealment_events;
106 std::optional<unsigned long long> inserted_samples_for_deceleration;
107 std::optional<unsigned long long> removed_samples_for_acceleration;
108 std::optional<unsigned long long> frames_assembled_from_multiple_packets;
109 std::optional<double> total_samples_duration;
110 std::optional<std::string> decoder_implementation;
111
112 std::optional<double> jitter_buffer_delay;
113 std::optional<double> jitter_buffer_target_delay;
114 std::optional<double> jitter_buffer_minimum_delay;
115 std::optional<double> total_processing_delay;
116 std::optional<double> total_decode_time;
117 std::optional<double> total_assembly_time;
118 std::optional<double> total_inter_frame_delay;
119 std::optional<double> total_squared_inter_frame_delay;
120
121 std::optional<uint32_t> freeze_count;
122 std::optional<uint64_t> jitter_buffer_emitted_count;
123 std::optional<uint64_t> estimated_playout_timestamp;
124 std::optional<double> min_playout_delay;
125};
126
127struct SentRtpStream : public RtpStream {
128 static constexpr auto STYPE = Type::OUTBOUND_RTP;
129 unsigned long packets_sent;
131 unsigned long long bytes_sent;
133 unsigned long long header_bytes_sent;
134};
135
137 static constexpr auto STYPE = Type::OUTBOUND_RTP;
138 std::optional<std::string> sender_id;
139 std::optional<std::string> remote_id;
140 std::optional<double> target_bitrate;
141 std::optional<unsigned long> frame_width;
142 std::optional<unsigned long> frame_height;
143 std::optional<double> frames_per_second;
144 std::optional<unsigned long> frames_sent;
145 std::optional<unsigned long> huge_frames_sent;
146 std::optional<unsigned long> total_packet_send_delay;
147 std::optional<unsigned long> frames_encoded;
148 std::optional<unsigned long> key_frames_encoded;
149 std::optional<unsigned long> total_encoded_bytes_target;
150 std::optional<unsigned long> nack_count;
151 std::optional<unsigned long> fir_count;
152 std::optional<unsigned long> pli_count;
153 std::optional<unsigned long> qp_sum;
154 std::optional<std::string> quality_limitation_durations;
155 std::optional<unsigned int> quality_limitation_resolution_changes;
156 std::optional<std::string> quality_limitation_reason;
157 std::optional<std::string> encoder_implementation;
158};
159
161 static constexpr auto STYPE = Type::REMOTE_OUTBOUND_RTP;
162 std::string local_id;
164 unsigned long long reports_sent;
168};
169
171 static constexpr auto STYPE = Type::REMOTE_INBOUND_RTP;
172 std::string local_id;
176 double fraction_lost; // fraction packet loss
177};
178
179struct MediaSource : public Stats {
180 static constexpr auto STYPE = Type::MEDIA_SOURCE;
181 std::string track_identifier;
182 std::string kind;
183};
184
185struct VideoSource : public MediaSource {
186 static constexpr auto STYPE = Type::VIDEO_SOURCE;
187 std::optional<unsigned long> width;
188 std::optional<unsigned long> height;
189 std::optional<unsigned long> frames;
190 std::optional<double> frames_per_second;
191};
192
193struct AudioSource : public MediaSource {
194 static constexpr auto STYPE = Type::AUDIO_SOURCE;
195 std::optional<double> audio_level;
196 std::optional<double> total_audio_energy;
197 std::optional<double> total_samples_duration;
198 std::optional<double> echo_return_loss;
199 std::optional<double> echo_return_loss_enhancement;
200};
201} // namespace rtcstats
202
203using StatObject = std::unique_ptr<const rtcstats::Stats>;
204
206 public:
207 class const_iterator { // NOLINT
208 std::map<std::string, StatObject>::const_iterator _it;
209
210 public:
211 const_iterator(std::map<std::string, StatObject>::const_iterator it)
212 : _it(it) {}
213 const_iterator(const_iterator&& other) = default;
214 ~const_iterator() = default;
215
217 ++_it;
218 return *this;
219 }
220 const_iterator& operator++(int) { return ++(*this); }
221 const rtcstats::Stats& operator*() const { return *_it->second.get(); }
222 const rtcstats::Stats* operator->() const { return _it->second.get(); }
223 bool operator==(const const_iterator& other) const {
224 return _it == other._it;
225 }
226 bool operator!=(const const_iterator& other) const {
227 return !(*this == other);
228 }
229 };
230
232 virtual ~StatsReport() = default;
233
234 virtual void add_stats(StatObject stats) = 0;
235 [[nodiscard]] virtual const rtcstats::Stats* get(
236 const std::string& id) const = 0;
237 template <typename T>
238 const T* get_as(const std::string& id) const {
239 const rtcstats::Stats* stats = get(id);
240 if (!stats || stats->type != T::STYPE) {
241 return nullptr;
242 }
243
244 return stats->cast_to<const T>();
245 }
246
247 [[nodiscard]] virtual const_iterator begin() const = 0;
248 [[nodiscard]] virtual const_iterator end() const = 0;
249
250 template <typename T>
251 std::vector<const T*> get_stats_of_type() const {
252 std::vector<const T*> stats_of_type;
253 for (const auto& stats : *this) {
254 if (stats.type == T::STYPE) {
255 stats_of_type.push_back(stats.cast_to<const T>());
256 }
257 }
258 return stats_of_type;
259 }
260
261 // Removes the stats object from the report, returning ownership of it or null
262 // if there is no object with `id`.
263 virtual StatObject take(const std::string& id) = 0;
264
265 [[nodiscard]] virtual size_t size() const = 0;
266};
267
268} // namespace millicast
269
270#endif /* MILLICAST_API_STATS_H */
const_iterator(std::map< std::string, StatObject >::const_iterator it)
Definition stats.h:211
const_iterator(const_iterator &&other)=default
const_iterator & operator++(int)
Definition stats.h:220
const rtcstats::Stats & operator*() const
Definition stats.h:221
const rtcstats::Stats * operator->() const
Definition stats.h:222
bool operator!=(const const_iterator &other) const
Definition stats.h:226
const_iterator & operator++()
Definition stats.h:216
bool operator==(const const_iterator &other) const
Definition stats.h:223
Definition stats.h:205
virtual ~StatsReport()=default
const T * get_as(const std::string &id) const
Definition stats.h:238
virtual const rtcstats::Stats * get(const std::string &id) const =0
std::vector< const T * > get_stats_of_type() const
Definition stats.h:251
virtual const_iterator end() const =0
virtual const_iterator begin() const =0
virtual void add_stats(StatObject stats)=0
virtual size_t size() const =0
virtual StatObject take(const std::string &id)=0
#define MILLICAST_API
Definition exports.h:51
Type
Definition stats.h:23
Definition capabilities.h:15
std::unique_ptr< const rtcstats::Stats > StatObject
Definition stats.h:203
Definition stats.h:193
static constexpr auto STYPE
Definition stats.h:194
std::optional< double > echo_return_loss_enhancement
Definition stats.h:199
std::optional< double > total_samples_duration
Definition stats.h:197
std::optional< double > total_audio_energy
Definition stats.h:196
std::optional< double > echo_return_loss
Definition stats.h:198
std::optional< double > audio_level
Definition stats.h:195
Definition stats.h:50
std::string transport_id
Definition stats.h:55
std::string mime_type
Definition stats.h:56
std::optional< unsigned long > clock_rate
Definition stats.h:59
std::optional< unsigned long > channels
Definition stats.h:60
static constexpr auto STYPE
Definition stats.h:52
std::optional< Type > codec_type
Definition stats.h:58
std::optional< std::string > sdp_fmtp_line
Definition stats.h:61
unsigned long payload_type
Definition stats.h:54
Type
Definition stats.h:51
std::optional< unsigned long long > fir_count
Definition stats.h:89
std::optional< unsigned long long > frames_assembled_from_multiple_packets
Definition stats.h:108
std::optional< uint64_t > estimated_playout_timestamp
Definition stats.h:123
std::optional< unsigned long long > last_packet_received_timestamp
Definition stats.h:97
std::optional< unsigned long long > concealment_events
Definition stats.h:105
std::optional< double > total_samples_duration
Definition stats.h:109
std::optional< double > total_assembly_time
Definition stats.h:117
std::optional< unsigned long > frames_received
Definition stats.h:91
std::optional< std::string > decoder_implementation
Definition stats.h:110
std::optional< double > total_audio_energy
Definition stats.h:99
std::optional< unsigned long long > concealed_samples
Definition stats.h:103
std::optional< double > jitter_buffer_target_delay
Definition stats.h:113
std::optional< std::string > mid
Definition stats.h:84
std::optional< unsigned long long > total_samples_received
Definition stats.h:102
std::optional< double > jitter_buffer_delay
Definition stats.h:112
std::optional< unsigned long > nack_count
Definition stats.h:88
std::optional< unsigned long long > pli_count
Definition stats.h:90
std::optional< unsigned long long > header_bytes_received
Definition stats.h:96
std::optional< unsigned long > frame_width
Definition stats.h:92
std::optional< unsigned long > frame_height
Definition stats.h:93
std::optional< unsigned long long > removed_samples_for_acceleration
Definition stats.h:107
std::optional< double > frames_per_second
Definition stats.h:94
std::optional< unsigned long long > bytes_received
Definition stats.h:95
std::optional< std::string > track_identifier
Definition stats.h:85
std::optional< double > total_decode_time
Definition stats.h:116
std::optional< uint32_t > freeze_count
Definition stats.h:121
std::optional< unsigned long > key_frames_decoded
Definition stats.h:87
std::optional< double > total_processing_delay
Definition stats.h:115
std::optional< unsigned long long > inserted_samples_for_deceleration
Definition stats.h:106
std::optional< uint64_t > jitter_buffer_emitted_count
Definition stats.h:122
std::optional< double > min_playout_delay
Definition stats.h:124
std::optional< double > audio_level
Definition stats.h:98
std::optional< unsigned long long > fec_packets_received
Definition stats.h:100
std::optional< unsigned long long > fec_packets_discarded
Definition stats.h:101
std::optional< double > total_inter_frame_delay
Definition stats.h:118
std::optional< double > jitter_buffer_minimum_delay
Definition stats.h:114
std::optional< std::string > remote_id
Definition stats.h:83
std::optional< double > total_squared_inter_frame_delay
Definition stats.h:119
std::optional< unsigned long > frames_decoded
Definition stats.h:86
static constexpr auto STYPE
Definition stats.h:81
std::optional< unsigned long long > silent_concealed_samples
Definition stats.h:104
Definition stats.h:179
std::string track_identifier
Definition stats.h:181
static constexpr auto STYPE
Definition stats.h:180
std::string kind
Definition stats.h:182
std::optional< unsigned long > huge_frames_sent
Definition stats.h:145
std::optional< unsigned int > quality_limitation_resolution_changes
Definition stats.h:155
std::optional< std::string > sender_id
Definition stats.h:138
static constexpr auto STYPE
Definition stats.h:137
std::optional< std::string > quality_limitation_durations
Definition stats.h:154
std::optional< std::string > encoder_implementation
Definition stats.h:157
std::optional< std::string > remote_id
Definition stats.h:139
std::optional< unsigned long > frames_sent
Definition stats.h:144
std::optional< unsigned long > pli_count
Definition stats.h:152
std::optional< unsigned long > frames_encoded
Definition stats.h:147
std::optional< double > target_bitrate
Definition stats.h:140
std::optional< unsigned long > qp_sum
Definition stats.h:153
std::optional< unsigned long > frame_height
Definition stats.h:142
std::optional< unsigned long > nack_count
Definition stats.h:150
std::optional< unsigned long > total_packet_send_delay
Definition stats.h:146
std::optional< unsigned long > fir_count
Definition stats.h:151
std::optional< double > frames_per_second
Definition stats.h:143
std::optional< unsigned long > total_encoded_bytes_target
Definition stats.h:149
std::optional< unsigned long > key_frames_encoded
Definition stats.h:148
std::optional< std::string > quality_limitation_reason
Definition stats.h:156
std::optional< unsigned long > frame_width
Definition stats.h:141
std::optional< unsigned long long > frames_dropped
Definition stats.h:77
std::optional< unsigned long long > packets_received
Definition stats.h:74
std::optional< long long > packets_lost
Definition stats.h:76
static constexpr auto STYPE
Definition stats.h:72
std::optional< double > jitter
Definition stats.h:75
double total_round_trip_time
Definition stats.h:174
unsigned long round_trip_time_measurements
Definition stats.h:175
double fraction_lost
Definition stats.h:176
std::string local_id
Definition stats.h:172
double round_trip_time
Definition stats.h:173
static constexpr auto STYPE
Definition stats.h:171
double round_trip_time
Definition stats.h:165
double total_round_trip_time
Definition stats.h:167
unsigned long long round_trip_time_measurements
Definition stats.h:166
unsigned long long reports_sent
Definition stats.h:164
double remote_timestamp
Definition stats.h:163
std::string local_id
Definition stats.h:162
static constexpr auto STYPE
Definition stats.h:161
Definition stats.h:64
std::optional< std::string > codec_id
Definition stats.h:68
std::optional< std::string > transport_id
Definition stats.h:67
unsigned long ssrc
Definition stats.h:65
std::string kind
Definition stats.h:66
unsigned long long bytes_sent
Definition stats.h:131
unsigned long retransmitted_bytes_sent
Definition stats.h:132
unsigned long retransmitted_packets_sent
Definition stats.h:130
static constexpr auto STYPE
Definition stats.h:128
unsigned long long header_bytes_sent
Definition stats.h:133
unsigned long packets_sent
Definition stats.h:129
Definition stats.h:34
std::string id
Definition stats.h:40
Type type
Definition stats.h:41
int64_t timestamp
The timestamp in Milliseconds since Unix Epoch (Jan 1, 1970 00:00:00 UTC).
Definition stats.h:39
const T * cast_to() const
Definition stats.h:44
virtual ~Stats()=default
Definition stats.h:185
std::optional< unsigned long > frames
Definition stats.h:189
static constexpr auto STYPE
Definition stats.h:186
std::optional< unsigned long > width
Definition stats.h:187
std::optional< double > frames_per_second
Definition stats.h:190
std::optional< unsigned long > height
Definition stats.h:188