webrtc-CongestionController

CongestionController
网络拥塞控制主模块,综合了基于丢包估算和基于网络延迟估算方式进行的

  1. 内部成员实例

       // rtprtcp模块包装,适配到节拍器中
       PacketRouter* const packet_router_;
       //发送节拍器
       const std::unique_ptr<PacedSender> pacer_;
       //控制估算码率,可以基于丢包进行码率调整
       const std::unique_ptr<BitrateController> bitrate_controller_;
       //用于探测发送码率控制的
       const std::unique_ptr<ProbeController> probe_controller_;
       //测试数据是否在设置的最大码率里面
       const std::unique_ptr<RateLimiter> retransmission_rate_limiter_;
     
       //接收端,估算出码率反馈给发送端,  回调 OnReceiveBitrateChanged
       WrappingBitrateEstimator remote_bitrate_estimator_;
       //接收端使用这个对象,发送反馈包的 
       RemoteEstimatorProxy remote_estimator_proxy_;
       //基于延迟计算码率  bitrate_controller_作为参数设置到此对象中
       // 处理RemoteEstimatorProxy发送过来的反馈包 
       TransportFeedbackAdapter transport_feedback_adapter_;
    
  2. 接收端数据收集

     void CongestionController::OnReceivedPacket(int64_t arrival_time_ms,
                                                 size_t payload_size,
                                                 const RTPHeader& header) {
       // Send-side BWE.
       if (header.extension.hasTransportSequenceNumber) {
     	  //接收端使用这个,把接收信息反馈给发送端,由发送端进行估算
         remote_estimator_proxy_.IncomingPacket(arrival_time_ms, payload_size,
                                                header);
       } else {
         // Receive-side BWE.
     	  //接收端使用这个,计算出码率,通过remb反馈给发送端
         remote_bitrate_estimator_.IncomingPacket(arrival_time_ms, payload_size,
                                                   header);
       }
     }
    
  3. 发送端使用处理逻辑

     void CongestionController::Process() {
       //发送端控制码率估算,
       bitrate_controller_->Process();
       //老的码率估算方式gcc方式,接收端进行码率估算,为REMB提供数据
       remote_bitrate_estimator_.Process();
       //发送端控制是否进行码率探测
       probe_controller_->Process();
       //如果估算了新的码率,更新到发送节拍器中 
       MaybeTriggerOnNetworkChanged();
     }
    

4.网络状态改变的时候,触发探测码率

	void CongestionController::SignalNetworkState(NetworkState state) {
	  if (state == kNetworkUp) {
	    pacer_->Resume();
	  } else {
	    pacer_->Pause();
	  }
	  {
	    rtc::CritScope cs(&critsect_);
	    network_state_ = state;
	  }
      //触发码率探测控制,主要网络up后,进行大码率测试 
	  probe_controller_->OnNetworkStateChanged(state);
	  MaybeTriggerOnNetworkChanged();
	}
  1. 对外的主要接口(成员变量注释)

       virtual BitrateController* GetBitrateController() const;
       virtual RemoteBitrateEstimator* GetRemoteBitrateEstimator(
           bool send_side_bwe);
       virtual int64_t GetPacerQueuingDelayMs() const;
       virtual PacedSender* pacer() { return pacer_.get(); }
       virtual TransportFeedbackObserver* GetTransportFeedbackObserver();
    
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值