yuanrongxi / razor

A google's congestion Control Algorithm
MIT License
352 stars 152 forks source link

请教下pace_sender获取target bitrate的步骤 #44

Closed adcen0107 closed 3 years ago

adcen0107 commented 3 years ago

袁老师: 您好! pace_sender.c的pace_try_transmit函数中,在发包前先获取target bitrate,当发送队列中有包时,即通过两步获取target bitrate。(1)、通过pacer_queue_target_bitrate_kbps计算一个码率;(2)、比较第1步的码率与control计算出的码率,两者取大。我没明白第1步中计算码率的原理,袁老师可以稍微解释一下吗?并且那个注释是“/计算缓冲区在500毫秒之内要发送完毕所需的带宽/”,我也没看从哪儿看出来是500ms。。 uint32_t pacer_queue_target_bitrate_kbps(pacer_queue_t* que, int64_t now_ts) { uint32_t ret = 0, space;

if (que->oldest_ts != -1 && now_ts > que->oldest_ts){
    space = (uint32_t)(now_ts - que->oldest_ts);        
    if (space >= que->max_que_ms)
        space = 500;
    else
        space = que->max_que_ms - space;                                        
}
else
    space = que->max_que_ms - 1;

/*计算缓冲区在500毫秒之内要发送完毕所需的带宽*/         
if (skiplist_size(que->cache) > 0 && que->total_size > 0)
    ret = que->total_size * 8 / space;

return ret;

}

yuanrongxi commented 3 years ago

因为在实时视频领域需要控制pace queue的时间长度,在razor里面pace queue最大允许的延迟是500MS,如果根据网络带宽估计的带宽太小,但是queue中数据又很多(500MS按照估计的带宽发送不过来),就会根据queue的数据和最大容忍的延迟算一个比较激进的带宽来进行pacer 发送

adcen0107 commented 3 years ago

明白了,谢谢袁老师!