sender_congestion_controller.h 1.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354
  1. #ifndef __sender_congestion_controller_h_
  2. #define __sender_congestion_controller_h_
  3. #include "../estimator/cc_feedback_adapter.h"
  4. #include "../estimator/delay_base_bwe.h"
  5. #include "../estimator/bitrate_controller.h"
  6. #include "../pacing/pace_sender.h"
  7. #include "../estimator/ack_bitrate_estimator.h"
  8. #include "../cc/razor_api.h"
  9. typedef struct
  10. {
  11. razor_sender_t sender;
  12. int accepted_queue_ms; /*视频报文在发送queue的最大延迟*/
  13. int was_in_alr;
  14. int32_t rtt;
  15. delay_base_bwe_t* bwe; /*基于延迟的带宽评估器*/
  16. bitrate_controller_t* bitrate_controller; /*码率控制器,会根据bwe、ack rate和loss进行综合码率调节*/
  17. ack_bitrate_estimator_t* ack; /*远端确认收到的数据带宽评估器*/
  18. pace_sender_t* pacer; /*发送端的步长控制器*/
  19. feedback_adapter_t adapter; /*处理反馈信息的适配器*/
  20. bin_stream_t strm;
  21. void* trigger; /*码率改变后需要通知给通信层的trigger*/
  22. bitrate_changed_func trigger_cb; /*通知函数*/
  23. }sender_cc_t;
  24. sender_cc_t* sender_cc_create(void* trigger, bitrate_changed_func bitrate_cb, void* handler, pace_send_func send_cb, int queue_ms);
  25. void sender_cc_destroy(sender_cc_t* cc);
  26. void sender_cc_heartbeat(sender_cc_t* cc);
  27. /*packet_id是报文序号,相当于RTP的头中的SEQ*/
  28. int sender_cc_add_pace_packet(sender_cc_t* cc, uint32_t packet_id, int retrans, size_t size);
  29. /*这里的seq是transport的自增长ID,即使包重发,这个ID也是不一样的*/
  30. void sender_on_send_packet(sender_cc_t* cc, uint16_t seq, size_t size);
  31. void sender_on_feedback(sender_cc_t* cc, uint8_t* feedback, int feedback_size);
  32. void sender_cc_update_rtt(sender_cc_t* cc, int32_t rtt);
  33. void sender_cc_set_bitrates(sender_cc_t* cc, uint32_t min_bitrate, uint32_t start_bitrate, uint32_t max_bitrate);
  34. int64_t sender_cc_get_pacer_queue_ms(sender_cc_t* cc);
  35. int64_t sender_cc_get_first_packet_ts(sender_cc_t* cc);
  36. #endif