bitrate_controller.h revision ff761fba8274d93bd73e76c8b8a1f2d0776dd840
1/*
2 *  Copyright (c) 2012 The WebRTC project authors. All Rights Reserved.
3 *
4 *  Use of this source code is governed by a BSD-style license
5 *  that can be found in the LICENSE file in the root of the source
6 *  tree. An additional intellectual property rights grant can be found
7 *  in the file PATENTS.  All contributing project authors may
8 *  be found in the AUTHORS file in the root of the source tree.
9 *
10 *  Usage: this class will register multiple RtcpBitrateObserver's one at each
11 *  RTCP module. It will aggregate the results and run one bandwidth estimation
12 *  and push the result to the encoders via BitrateObserver(s).
13 */
14
15#ifndef WEBRTC_MODULES_BITRATE_CONTROLLER_INCLUDE_BITRATE_CONTROLLER_H_
16#define WEBRTC_MODULES_BITRATE_CONTROLLER_INCLUDE_BITRATE_CONTROLLER_H_
17
18#include <map>
19
20#include "webrtc/modules/include/module.h"
21#include "webrtc/modules/rtp_rtcp/include/rtp_rtcp_defines.h"
22
23namespace webrtc {
24
25class CriticalSectionWrapper;
26struct PacketInfo;
27
28class BitrateObserver {
29  // Observer class for bitrate changes announced due to change in bandwidth
30  // estimate or due to bitrate allocation changes. Fraction loss and rtt is
31  // also part of this callback to allow the obsevrer to optimize its settings
32  // for different types of network environments. The bitrate does not include
33  // packet headers and is measured in bits per second.
34 public:
35  virtual void OnNetworkChanged(uint32_t bitrate_bps,
36                                uint8_t fraction_loss,  // 0 - 255.
37                                int64_t rtt_ms) = 0;
38
39  virtual ~BitrateObserver() {}
40};
41
42class BitrateController : public Module {
43  // This class collects feedback from all streams sent to a peer (via
44  // RTCPBandwidthObservers). It does one  aggregated send side bandwidth
45  // estimation and divide the available bitrate between all its registered
46  // BitrateObservers.
47 public:
48  static const int kDefaultStartBitrateKbps = 300;
49
50  static BitrateController* CreateBitrateController(Clock* clock,
51                                                    BitrateObserver* observer);
52  virtual ~BitrateController() {}
53
54  virtual RtcpBandwidthObserver* CreateRtcpBandwidthObserver() = 0;
55
56  virtual void SetStartBitrate(int start_bitrate_bps) = 0;
57  virtual void SetMinMaxBitrate(int min_bitrate_bps, int max_bitrate_bps) = 0;
58
59  // Gets the available payload bandwidth in bits per second. Note that
60  // this bandwidth excludes packet headers.
61  virtual bool AvailableBandwidth(uint32_t* bandwidth) const = 0;
62
63  virtual void SetReservedBitrate(uint32_t reserved_bitrate_bps) = 0;
64};
65}  // namespace webrtc
66#endif  // WEBRTC_MODULES_BITRATE_CONTROLLER_INCLUDE_BITRATE_CONTROLLER_H_
67