123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130 |
- #ifndef MODULES_PACING_BITRATE_PROBER_H_
- #define MODULES_PACING_BITRATE_PROBER_H_
- #include <stddef.h>
- #include <stdint.h>
- #include <queue>
- #include "api/transport/field_trial_based_config.h"
- #include "api/transport/network_types.h"
- #include "rtc_base/experiments/field_trial_parser.h"
- namespace webrtc {
- class RtcEventLog;
- struct BitrateProberConfig {
- explicit BitrateProberConfig(const WebRtcKeyValueConfig* key_value_config);
- BitrateProberConfig(const BitrateProberConfig&) = default;
- BitrateProberConfig& operator=(const BitrateProberConfig&) = default;
- ~BitrateProberConfig() = default;
-
- FieldTrialParameter<int> min_probe_packets_sent;
-
- FieldTrialParameter<TimeDelta> min_probe_delta;
-
- FieldTrialParameter<TimeDelta> min_probe_duration;
-
-
- FieldTrialParameter<TimeDelta> max_probe_delay;
- };
- class BitrateProber {
- public:
- explicit BitrateProber(const WebRtcKeyValueConfig& field_trials);
- ~BitrateProber();
- void SetEnabled(bool enable);
-
-
-
- bool is_probing() const { return probing_state_ == ProbingState::kActive; }
-
-
-
- void OnIncomingPacket(size_t packet_size);
-
-
- void CreateProbeCluster(DataRate bitrate, Timestamp now, int cluster_id);
-
-
-
- Timestamp NextProbeTime(Timestamp now) const;
-
- PacedPacketInfo CurrentCluster() const;
-
-
- size_t RecommendedMinProbeSize() const;
-
-
-
-
- void ProbeSent(Timestamp now, size_t probe_size);
- private:
- enum class ProbingState {
-
- kDisabled,
-
- kInactive,
-
-
- kActive,
-
-
- kSuspended,
- };
-
-
- struct ProbeCluster {
- PacedPacketInfo pace_info;
- int sent_probes = 0;
- int sent_bytes = 0;
- Timestamp created_at = Timestamp::MinusInfinity();
- Timestamp started_at = Timestamp::MinusInfinity();
- int retries = 0;
- };
- Timestamp CalculateNextProbeTime(const ProbeCluster& cluster) const;
- ProbingState probing_state_;
-
-
-
- std::queue<ProbeCluster> clusters_;
-
- Timestamp next_probe_time_;
- int total_probe_count_;
- int total_failed_probe_count_;
- BitrateProberConfig config_;
- };
- }
- #endif
|