当前位置: 首页 > news >正文

怎么在网站上投放广告到哪个网站找内控制度建设

怎么在网站上投放广告,到哪个网站找内控制度建设,苏州做企业网站有哪些,网站前端做报名框代码一、 核心功能GoogCcNetworkController 是 WebRTC Google Congestion Control (GoogCC) 算法的网络控制核心。它负责根据网络反馈(如延迟、丢包、带宽估计)来调整发送端的码率、探测行为、拥塞窗口等,其主要功能包括:带宽估计&…

一、 核心功能

GoogCcNetworkController 是 WebRTC Google Congestion Control (GoogCC) 算法的网络控制核心。它负责根据网络反馈(如延迟、丢包、带宽估计)来调整发送端的码率、探测行为、拥塞窗口等,其主要功能包括:

  • 带宽估计:基于延迟(Delay-Based)和丢包(Loss-Based)两种算法综合估算可用带宽。

  • 码率控制:根据带宽估计结果、目标约束和网络状态,计算目标发送码率。

  • 探测控制:负责发起带宽探测(如初始探测、ALR 探测、定期探测等),以快速发现可用带宽。

  • 拥塞窗口控制:基于 RTT 和码率动态调整拥塞窗口,实现基于延迟的拥塞避免。

  • 路由适应:当检测到网络路由变化时,安全地重置估计器状态。

  • ALR 检测:检测应用受限区域(Application Limited Region),辅助码率控制决策。


二、 核心算法原理

a. 延迟带宽估计(Delay-Based BWE)

  • 原理:通过分析数据包的单向延迟变化趋势判断网络拥塞。

  • 实现DelayBasedBwe 类使用趋势线滤波器或过载检测器,判断网络是处于“正常”、“过载”还是“欠载”状态,并据此调整带宽估计值。

b. 丢包带宽估计(Loss-Based BWE)

  • 原理:根据丢包率调整发送码率。丢包率高时降低码率,低时提高码率。

  • 实现SendSideBandwidthEstimation 根据接收端反馈的丢包信息,使用加性增、乘性减(AIMD)策略调整码率。

c. 联合控制

  • 最终目标码率取延迟估计和丢包估计的最小值,确保不超过网络容量。

  • 支持使用网络状态预测器进一步优化估计。


三、 关键数据结构

a. GoogCcConfig(配置结构)

struct GoogCcConfig {std::unique_ptr<NetworkStateEstimator> network_state_estimator;std::unique_ptr<NetworkStatePredictor> network_state_predictor;bool feedback_only;  // 是否仅使用传输反馈(而非RTCP)
};

b. GoogCcNetworkController 成员变量

// 估计器与控制组件
std::unique_ptr<SendSideBandwidthEstimation> bandwidth_estimation_;
std::unique_ptr<DelayBasedBwe> delay_based_bwe_;
std::unique_ptr<AcknowledgedBitrateEstimatorInterface> acknowledged_bitrate_estimator_;
std::unique_ptr<ProbeController> probe_controller_;
std::unique_ptr<CongestionWindowPushbackController> congestion_window_pushback_controller_;// 状态与配置
DataRate last_loss_based_target_rate_;        // 最近一次基于丢包的目标码率
DataRate last_pushback_target_rate_;          // 经拥塞窗口 pushback 调整后的码率
absl::optional<DataSize> current_data_window_; // 当前拥塞窗口大小
LossBasedState last_loss_base_state_;         // 丢包控制状态机状态

c. 网络状态枚举

enum class BandwidthUsage { kBwNormal, kBwUnderusing, kBwOverusing };
enum class LossBasedState {kDecreasing,kIncreaseUsingPadding,kIncreasing,kDelayBasedEstimate
};

四、 核心方法详解

a. OnTransportPacketsFeedback(处理反馈包)

这是最重要的方法,处理接收端返回的传输反馈信息。

NetworkControlUpdate GoogCcNetworkController::OnTransportPacketsFeedback(TransportPacketsFeedback report) {// 1. 更新RTT、传播延迟、丢包率// 2. 更新确认码率估计(acknowledged_bitrate_estimator_)// 3. 处理探测包并估算探测码率(probe_bitrate_estimator_)// 4. 调用 delay_based_bwe_->IncomingPacketFeedbackVector 更新延迟估计// 5. 调用 bandwidth_estimation_->UpdateLossBasedEstimator 更新丢包估计// 6. 触发状态更新(MaybeTriggerOnNetworkChanged)// 7. 更新拥塞窗口(UpdateCongestionWindowSize)// 8. 返回网络控制更新(如目标码率、探测集群、拥塞窗口等)
}

b. MaybeTriggerOnNetworkChanged(触发网络状态更新)

void GoogCcNetworkController::MaybeTriggerOnNetworkChanged(NetworkControlUpdate* update,Timestamp at_time) {// 获取当前带宽估计、丢包率、RTTDataRate loss_based_target_rate = bandwidth_estimation_->target_rate();uint8_t fraction_loss = bandwidth_estimation_->fraction_loss();TimeDelta round_trip_time = bandwidth_estimation_->round_trip_time();// 如果状态变化,更新目标码率并设置探测if (loss_based_target_rate != last_loss_based_target_rate_ || ...) {TargetTransferRate target_rate_msg;target_rate_msg.target_rate = pushback_target_rate; // 可能经过拥塞窗口调整target_rate_msg.stable_target_rate = stable_target_rate;// ... 设置网络估计参数(丢包率、RTT、周期)update->target_rate = target_rate_msg;// 请求探测auto probes = probe_controller_->SetEstimatedBitrate(...);update->probe_cluster_configs.insert(...);}
}

c. ResetConstraints(重置码率约束)

std::vector<ProbeClusterConfig> GoogCcNetworkController::ResetConstraints(TargetRateConstraints new_constraints) {// 更新最小、最大、起始码率约束min_target_rate_ = new_constraints.min_data_rate.value_or(DataRate::Zero());max_data_rate_ = new_constraints.max_data_rate.value_or(DataRate::PlusInfinity());starting_rate_ = new_constraints.starting_rate;ClampConstraints(); // 确保约束有效性// 更新带宽估计器和延迟估计器bandwidth_estimation_->SetBitrates(...);if (starting_rate_)delay_based_bwe_->SetStartBitrate(*starting_rate_);// 返回初始探测集群配置return probe_controller_->SetBitrates(...);
}

五、 设计亮点

  • 多算法融合:结合延迟、丢包、确认码率、网络状态估计等多种信息,综合决策。

  • 自适应探测机制:支持多种探测策略(初始探测、ALR 探测、最大分配码率触发探测等)。

  • 拥塞窗口 Pushback:在带宽受限时通过拥塞窗口反向压制发送码率,防止队列堆积。

  • 路由改变安全重置:支持在路由改变时选择性地重置估计器,避免历史信息误导。

  • 配置灵活:通过 FieldTrials 实现大量算法参数和策略的运行时配置(A/B 测试)。


六、 典型工作流程

  1. 初始化:根据初始配置(起始码率、最小/最大码率)设置估计器,并发起初始探测。

  2. 反馈处理:收到 TransportPacketsFeedback 后,更新 RTT、丢包、确认码率、延迟趋势等信息。

  3. 带宽估计

    • 延迟估计器(delay_based_bwe_)更新状态并返回新估计。

    • 丢包估计器(bandwidth_estimation_)根据丢包率调整码率。

  4. 状态决策:若估计值发生变化,触发 MaybeTriggerOnNetworkChanged

    • 计算目标码率(可能经拥塞窗口调整)。

    • 设置网络状态估计(丢包率、RTT、周期)。

    • 请求探测(若需要)。

  5. 输出控制:返回 NetworkControlUpdate,包含:

    • target_rate:目标发送码率。

    • probe_cluster_configs:探测集群配置。

    • congestion_window:拥塞窗口大小(如果启用)。

    • pacer_config: pacing 速率配置。

GoogCcNetworkController 类时序图

初始化阶段

  1. 调用者创建 GoogCcNetworkController 实例,传入配置参数

  2. 控制器创建所有必要的子组件:

    • 带宽估计器 (SendSideBandwidthEstimation)

    • 延迟带宽估计器 (DelayBasedBwe)

    • 确认码率估计器 (AcknowledgedBitrateEstimator)

    • 探测控制器 (ProbeController)

    • 拥塞窗口控制器 (CongestionWindowPushbackController,可选)

    • ALR检测器 (AlrDetector)

    • 探测码率估计器 (ProbeBitrateEstimator)

    • 网络状态估计器 (NetworkStateEstimator,可选)

处理网络反馈主要流程

  1. 调用者调用 OnTransportPacketsFeedback 方法,传入传输包反馈数据

  2. 如果有拥塞窗口控制器,更新在途数据量

  3. 计算RTT和传播延迟,更新带宽估计器

  4. 在 packet_feedback_only 模式下,更新RTT和丢包信息

  5. 检查ALR状态变化,更新相关组件

  6. 将反馈包输入确认码率估计器,获取确认码率并设置到带宽估计器

  7. 处理探测包,更新探测码率估计

  8. 如果有网络状态估计器,更新网络状态估计并通知探测控制器

  9. 获取探测码率估计值

  10. 将反馈包输入延迟带宽估计器,获取新的延迟估计

  11. 如果延迟估计已更新,更新带宽估计器的延迟估计值

  12. 更新基于丢包的估计器

  13. 可能触发网络状态变更,更新目标码率和探测配置

  14. 如果从过载状态恢复,请求探测

  15. 如果使用拥塞窗口,更新拥塞窗口大小

  16. 如果有拥塞窗口控制器,设置数据窗口;否则直接返回拥塞窗口

  17. 返回网络控制更新

这个时序图展示了 GoogCcNetworkController 如何处理网络反馈并生成控制决策的完整流程,突出了各组件之间的协作关系和数据处理顺序。

GoogCcNetworkController 类架构关系图

核心控制器

  • GoogCcNetworkController: Google拥塞控制算法的核心实现,负责协调所有子组件。

主要组件

  • 带宽估计器 (SendSideBandwidthEstimation): 综合延迟和丢包信息进行带宽估计

  • 延迟估计器 (DelayBasedBwe): 基于网络延迟变化进行带宽估计

  • 探测控制器 (ProbeController): 管理带宽探测策略

辅助组件

  • 确认码率估计 (AcknowledgedBitrateEstimator): 估算已确认数据的传输速率

  • 拥塞控制器 (CongestionWindowController): 管理拥塞窗口大小和反压机制

  • ALR检测器 (AlrDetector): 检测应用受限区域

数据流向

  1. 输入: 网络反馈数据通过 TransportPacketsFeedback 传入控制器

  2. 处理: 控制器协调各组件处理数据并生成估计结果

  3. 输出: 生成 NetworkControlUpdate 包含目标码率、探测配置等控制决策


注释精要

// 核心网络控制器类,实现 GoogCC 拥塞控制算法
class GoogCcNetworkController : public NetworkControllerInterface {public:// 构造函数,接受网络控制器配置和 GoogCC 特定配置GoogCcNetworkController(NetworkControllerConfig config, GoogCcConfig goog_cc_config);// 处理网络可用性变化(如网络中断恢复)NetworkControlUpdate OnNetworkAvailability(NetworkAvailability msg) override;// 处理网络路由变化(如切换WiFi/4G),可能重置估计器NetworkControlUpdate OnNetworkRouteChange(NetworkRouteChange msg) override;// 处理定时处理间隔,更新状态、执行探测、更新拥塞窗口等NetworkControlUpdate OnProcessInterval(ProcessInterval msg) override;// 处理接收端报告的 REMB(仅在使用 RTCP 时有效)NetworkControlUpdate OnRemoteBitrateReport(RemoteBitrateReport msg) override;// 处理 RTT 更新(非平滑值)NetworkControlUpdate OnRoundTripTimeUpdate(RoundTripTimeUpdate msg) override;// 处理发送包事件,更新 ALR 检测和已发送数据量NetworkControlUpdate OnSentPacket(SentPacket msg, bool is_video) override;// 处理接收包事件(当前为空实现)NetworkControlUpdate OnReceivedPacket(ReceivedPacket msg) override;// 处理流配置变化(如 ALR 探测开关、最大分配码率等)NetworkControlUpdate OnStreamsConfig(StreamsConfig msg) override;// 处理目标码率约束变化(如用户手动设置码率范围)NetworkControlUpdate OnTargetRateConstraints(TargetRateConstraints msg) override;// 处理传输丢包报告(非反馈包模式)NetworkControlUpdate OnTransportLossReport(TransportLossReport msg) override;// 【核心】处理传输包反馈(Transport-CC 反馈),更新估计值并返回控制决策NetworkControlUpdate OnTransportPacketsFeedback(TransportPacketsFeedback msg) override;// 处理网络状态估计(来自外部估计器)NetworkControlUpdate OnNetworkStateEstimate(NetworkStateEstimate msg) override;// 获取当前网络状态(目标码率、 pacing 配置、拥塞窗口等)NetworkControlUpdate GetNetworkState(Timestamp at_time) const;
};

作为网络控制的核心组件,GoogCcNetworkController 直接决定视频通话的质量和稳定性,通过智能的带宽估计和码率控制,在保证流畅性的同时最大化视频质量。

这类是 WebRTC 拥塞控制系统的关键组成部分,广泛应用于实时音视频通信场景中。

http://www.dtcms.com/a/436726.html

相关文章:

  • 网站建设要用多少种字体内容营销成功案例
  • 网站开发验证码功能网站界面设计案例
  • 做ic贸易去什么网站好网站申请微信支付接口
  • 网站开发容易吗如何用网站开发工具停止网页进程
  • 资源平台如何建设网站一个网站怎么建设
  • 工商营业执照注册网站wordpress qq快捷登录
  • 010网站建设wordpress安全监测
  • 手机网站 制作教程网站界面排版好看
  • 建设网站需要学什么wordpress分类目录插件
  • 网站建设数据处理宁远网站建设
  • 公司网站设计与制商城类网站主要分为哪些模块
  • 友山建站优化wordpress wp_video_shortcode
  • 个人网站建设第一步网站常见的风格
  • 使用vue做的商城网站seo承诺排名的公司
  • 济南定机票网站建设广东建设协会网站
  • 网站200m虚拟主机能放多少东西贵州省交通建设工程质量监督局网站
  • 建立微网站深圳住房和建设局网站哪里预约
  • 网站设计代码在青海省住房和城乡建设厅网站
  • 查询网站最新域名wordpress旅游社区
  • 怎样做网站域名300元建站
  • 为什么要进行网站备案正规网站建设官网
  • ssc网站建设担保交易2018江苏省海门市建设局网站
  • 做竞价的网站需要做外部链接吗最后的目的是什么
  • 佛山市外贸网站建设价格电脑搭建网站
  • 精品课程网站设计与实现开题报告wordpress创建标签页
  • 如何做免费域名网站制作微信公众号的步骤
  • 个人网站怎么建立要多少钱世界工厂采购网登录
  • 智能建站吧贵阳装饰装修公司网站
  • 怎么用手机制作网站福建外贸网站建设
  • 成都专业的网站建设制作公司哪家好廊坊网站关键词排名