一、核心功能
VideoSendStreamImpl 是 WebRTC 视频发送流的核心实现,主要功能包括:
-
视频编码与发送:管理视频编码器输出,将编码后的帧通过 RTP 发送
-
码率控制:根据网络状况动态调整视频码率
-
带宽分配:与带宽分配器交互获取可用带宽
-
流控制:管理流的启动/停止和层级激活
-
超时检测:监控编码器活动状态
-
配置管理:处理编码器参数变更
二、核心算法原理
-
码率分配算法:
-
分层码率分配:支持 simulcast/SVC 的多层码率分配
-
填充码率计算:根据活跃流计算最大填充码率
-
码率优先级:基于流优先级分配带宽
// 计算填充码率 (video_send_stream_impl.cc) int CalculateMaxPadBitrateBps(const std::vector<VideoStream>& streams, ...) { // 根据活跃流、内容类型、ALR探测等计算填充码率 } -
-
码率更新限流:
-
避免频繁发送相似的码率分配
-
10% 变化阈值 + 500ms 时间窗口
// 码率分配更新限流 (video_send_stream_impl.cc) if (is_similar && (now_ms - last_send_time) < kMaxVbaThrottleTimeMs) { throttled_allocation = allocation; // 缓存相似分配 } -
-
编码器超时检测:
-
定时检查编码器活动状态
-
2秒无活动判定为超时
// 超时检测任务 (video_send_stream_impl.cc) check_encoder_activity_task_ = RepeatingTaskHandle::DelayedStart( worker_queue_, kEncoderTimeOut, [this] { /* 检测逻辑 */ }); -
三、关键数据结构
-
<

最低0.47元/天 解锁文章

被折叠的 条评论
为什么被折叠?



