{"id":321,"date":"2022-02-08T17:13:07","date_gmt":"2022-02-08T09:13:07","guid":{"rendered":"https:\/\/www.fanyamin.com\/wordpress\/?p=321"},"modified":"2022-02-11T17:27:35","modified_gmt":"2022-02-11T09:27:35","slug":"webrtc-congestion-control-v1","status":"publish","type":"post","link":"https:\/\/www.fanyamin.com\/wordpress\/?p=321","title":{"rendered":"WebRTC congestion control v1"},"content":{"rendered":"\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"547\" src=\"https:\/\/www.fanyamin.com\/wordpress\/wp-content\/uploads\/2022\/02\/webrtc_cc_v1-1024x547.png\" alt=\"\" class=\"wp-image-322 img-fluid\" srcset=\"https:\/\/www.fanyamin.com\/wordpress\/wp-content\/uploads\/2022\/02\/webrtc_cc_v1-1024x547.png 1024w, https:\/\/www.fanyamin.com\/wordpress\/wp-content\/uploads\/2022\/02\/webrtc_cc_v1-300x160.png 300w, https:\/\/www.fanyamin.com\/wordpress\/wp-content\/uploads\/2022\/02\/webrtc_cc_v1-768x410.png 768w, https:\/\/www.fanyamin.com\/wordpress\/wp-content\/uploads\/2022\/02\/webrtc_cc_v1.png 1356w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n<pre class=\"wp-block-code\"><code>title WebRTC congestion control v1\n\nparticipant WebrtcSender as sender\nparticipant SendSideCongestionController as controller\nparticipant TransportFeedbackAdpater as adapter\nparticipant AcknowledgedBitrateEstimator as ack_estimator\nparticipant ProbeController as probe_controller\nparticipant DelayBasedBwe as delay_based_bwe\nparticipant BitrateController as bitrate_controller\n\n-&gt;sender: RecvPacket\n\nalt RTCP of transport feedback\n    sender-&gt;controller: OnTransportFeedback(feedback)\n    controller-&gt;adapter: onTransportFeedback(feedback)\nend\n\nalt currently_in_alr\n    controller-&gt;ack_estimator: SetAlrEndedTimeMs(now_ms)\n    controller-&gt;probe_controller: SetAlrEndedTimeMs(now_ms)\nend\n\ncontroller-&gt;ack_estimator: IncomingPacketFeedbackVector(feedback_vector)\ncontroller-&gt;ack_estimator: bitrate_bps()\ncontroller-&gt;delay_based_bwe:IncomingPacketFeedbackVector(...)\ndelay_based_bwe--&gt;controller: result\n\nalt result.updated\n    controller-&gt;bitrate_controller: OnDelayBasedBweResult(result)\n    controller-&gt;controller: MaybeTriggerOnNetworkChanged()\nend\n\nalt result.recovered_from_overuse\n    controller-&gt;probe_controller: RequestProbe()\nend\n\nalt in_cwnd_experiment\n    controller-&gt;controller: LimitOutstandingBytes(adapter.GetOutstandingBytes())\nend<\/code><\/pre>\n\n\n<figure class=\"wp-block-table\"><table><tbody><tr><td>Class<\/td><td>Responsibility<\/td><td>Collaborators<\/td><td>Comments<\/td><\/tr><tr><td><\/td><td><\/td><td><\/td><td><\/td><\/tr><tr><td>TrendlineEstimator<\/td><td>Estimate bandwidth usage as trendline <\/td><td>TrendlineEstimatorSettings<\/td><td>implement interface DelayIncreaseDetectorInterface<\/td><\/tr><tr><td>DelayBasedBwe<\/td><td>Estimate bandwidth based on delay<\/td><td><\/td><td><\/td><\/tr><tr><td>AimdRateControl<\/td><td>A rate control implementation based on additive increases of bitrate when no over-use is detected and multiplicative decreases when over-uses are detected. <\/td><td><\/td><td>When we think the available bandwidth has changes or is unknown, we will switch to a \"slow-start mode\" where we increase multiplicatively.<\/td><\/tr><tr><td>SendSideBandwidthEstimation<\/td><td><\/td><td>LossBasedBandwidthEstimation <br>LossBasedBweV2<\/td><td><strong>UpdateReceiverEstimate<\/strong><\/td><\/tr><\/tbody><\/table><\/figure>\n\n<p><img decoding=\"async\" src=\"https:\/\/www.fanyamin.com\/wordpress\/wp-content\/uploads\/2022\/02\/image-1644571645298.png\" alt=\"file\" \/><\/p>","protected":false},"excerpt":{"rendered":"<p>Class Responsibility Collaborators Comments TrendlineEstimator Estimate bandwidth usage as trendline TrendlineEstimatorSettings implement interface DelayIncreaseDetectorInterface DelayBasedBwe Estimate bandwidth based on delay AimdRateControl A rate control implementation based on additive increases of bitrate when no over-use is detected and multiplicative decreases when over-uses are detected. When we think the available bandwidth has changes or is unknown, we [&hellip;] <a class=\"read-more\" href=\"https:\/\/www.fanyamin.com\/wordpress\/?p=321\" title=\"Permanent Link to: WebRTC congestion control v1\">&rarr;Read&nbsp;more<\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1],"tags":[],"class_list":["post-321","post","type-post","status-publish","format-standard","hentry","category-uncategorized"],"_links":{"self":[{"href":"https:\/\/www.fanyamin.com\/wordpress\/index.php?rest_route=\/wp\/v2\/posts\/321"}],"collection":[{"href":"https:\/\/www.fanyamin.com\/wordpress\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.fanyamin.com\/wordpress\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.fanyamin.com\/wordpress\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.fanyamin.com\/wordpress\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=321"}],"version-history":[{"count":4,"href":"https:\/\/www.fanyamin.com\/wordpress\/index.php?rest_route=\/wp\/v2\/posts\/321\/revisions"}],"predecessor-version":[{"id":376,"href":"https:\/\/www.fanyamin.com\/wordpress\/index.php?rest_route=\/wp\/v2\/posts\/321\/revisions\/376"}],"wp:attachment":[{"href":"https:\/\/www.fanyamin.com\/wordpress\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=321"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.fanyamin.com\/wordpress\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=321"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.fanyamin.com\/wordpress\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=321"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}