美文网首页webrtc技术探讨webrtc自适应编码
webrtc视频接收端带宽预测(三)---AimdRateCon

webrtc视频接收端带宽预测(三)---AimdRateCon

作者: ai___believe | 来源:发表于2017-06-12 15:53 被阅读128次

    本文主要探讨AimdRateControl.cc文件中的相关机制,这个Aimd就是加增乘减,就是通过之前得到的overuse,underuse,normal来得到接收端评估带宽,用来发送回给发送端,最后用来控制发送端实际发送码率。

    更新input,包括
    BandwidthUsage _bwState;//网络状态
    uint32_t _incomingBitRate;//实际接收码率
    double _noiseVar;//测量噪声方差

    RateControlRegion AimdRateControl::Update(const RateControlInput* input,
                                              int64_t now_ms)
    {
      assert(input);
    
      // Set the initial bit rate value to what we're receiving the first half
      // second.
      if (!bitrate_is_initialized_) {
        if (time_first_incoming_estimate_ < 0) {
          if (input->_incomingBitRate > 0) {
            time_first_incoming_estimate_ = now_ms;
          }
        } else if (now_ms - time_first_incoming_estimate_ > 500 &&
                   input->_incomingBitRate > 0) {
          current_bitrate_bps_ = input->_incomingBitRate;
          bitrate_is_initialized_ = true;
        }
      }
    
      if (updated_ && current_input_._bwState == kBwOverusing) {
        // Only update delay factor and incoming bit rate. We always want to react
        // on an over-use.
        current_input_._noiseVar = input->_noiseVar;
        current_input_._incomingBitRate = input->_incomingBitRate;
      } else {
        updated_ = true;
        current_input_ = *input;
      }
      return rate_control_region_;
    }
    

    状态转移,由卡尔曼滤波结果,得到的网络状态,进一步得到现在的码率控制状态,即保持,减少和增加。



    一共维持三个状态,增长、保持、衰减,状态转换根据OveruseDetector的三个状态(Normal, Overuse, Underuse)来进行判断。
    当Overuse发生时,无论什么状态都进入衰减。
    当Underuse发生时,无论什么状态都进入保持状态。
    在保持和增长阶段,Normal状态将保持继续增长。
    在衰减阶段,Normal状态会将状态拉回保持状态。

    void AimdRateControl::ChangeState(const RateControlInput& input,
                                      int64_t now_ms) 
    {
      switch (current_input_._bwState) 
      {
        case kBwNormal:
            if (rate_control_state_ == kRcHold) {
            time_last_bitrate_change_ = now_ms;
            ChangeState(kRcIncrease);
            }
            break;
        case kBwOverusing:
        if (rate_control_state_ != kRcDecrease) {
            time_last_bitrate_change_ = now_ms;
            ChangeState(kRcDecrease);
            }
            break;
        case kBwUnderusing:
            time_last_bitrate_change_ = now_ms;
        ChangeState(kRcHold);
            break;
        default:
            assert(false);
      }
    }
    

    参考文献:
    [1] http://blog.csdn.net/MeRcy_PM/article/details/72629384

    相关文章

      网友评论

        本文标题:webrtc视频接收端带宽预测(三)---AimdRateCon

        本文链接:https://www.haomeiwen.com/subject/qvblqxtx.html