WebRtc音视频实时通信--发送端拥塞控制之IntervalBudget代码走读
IntervalBudget简介:
IntervalBudget作为PacedSender的一个成员变量media_budget_,其主要作用是根据当前PacedSender->Process的调用时间间隔和当前目标码率target bitrate来计算出本次Process理应发送的字节数,
如当前码率是100 000bps,本次Process调用与上次调用间隔是20ms, 则本次理应发送的字节数是 100 bits per ms * 20 ms = 2000 bits = 250bytes.
250bytes为本次发送理应发送的字节数,但因为实际上我们的RTP包是差不多一个MTU大小的(<1500字节-IP头-udp头),我们不可能真正在本次发送250bytes的数据,因此可能会导致比理应发送的数据量多或少的问题。如何解决这个问题呢?
IntervalBudget中引入了一个bytes_remaining_的变量来记录上次发送后,与理应发送数据量相比,多或少发了多少。其值为负表示上轮我们实际发送的比理应发送的数据量多了,我们本轮应该停止发送。其值为正表示我们上轮实际发送比理应发送的要少,还有富于。
实质上IntervalBudget就是用来在发送前估计我们本轮是否应该发送数据的。若发送间隔过小,比如5ms,在100kbps带宽下对应数据量是5ms * 100 bits per ms = 500 bits /8 = 63bytes.
IntervalBudget代码走读: