Closed adcen0107 closed 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;
}
因为在实时视频领域需要控制pace queue的时间长度,在razor里面pace queue最大允许的延迟是500MS,如果根据网络带宽估计的带宽太小,但是queue中数据又很多(500MS按照估计的带宽发送不过来),就会根据queue的数据和最大容忍的延迟算一个比较激进的带宽来进行pacer 发送
明白了,谢谢袁老师!
袁老师: 您好! 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;
}