标记说明
P0 = 最值得调
P1 = 有明显场景价值
P2 = 高级/特定场景
I = Internal Config
FT = FieldTrial
RT = Runtime 状态
HC = Hard-coded 常量
API = Public API
1. APM 总体参数
| # | 模块 | 参数/对象 | 类型 | 主要作用 | 调参重点 |
|---|---|---|---|---|---|
| 1 | APM | AudioProcessing::Config |
API | APM总配置 | P0 |
| 2 | APM | high_pass_filter.enabled |
API | 高通滤波 | P1 |
| 3 | APM | echo_canceller.enabled |
API | AEC开关 | P0 |
| 4 | APM | noise_suppression.enabled |
API | NS开关 | P0 |
| 5 | APM | gain_controller1.enabled |
API | 旧AGC | P2 |
| 6 | APM | gain_controller2.enabled |
API | AGC2 | P0 |
| 7 | APM | pre_amplifier.enabled |
API | 前级增益 | P1 |
| 8 | APM | transient_suppression.enabled |
API | 瞬态抑制 | P1 |
| 9 | APM | voice_detection.enabled |
API | VAD | P1 |
| 10 | APM | APM capture sample rate | RT | 采样率 | P0 |
| 11 | APM | APM render sample rate | RT | Render采样率 | P0 |
| 12 | APM | input frame size | RT | 输入帧长度 | P0 |
| 13 | APM | output frame size | RT | 输出帧长度 | P0 |
| 14 | APM | capture channels | RT | 采集通道数 | P1 |
| 15 | APM | render channels | RT | 播放通道数 | P1 |
2. AEC3 Buffering
AEC3 的 EchoCanceller3Config 本身就包含 buffering、delay、filter、echo_model、suppressor 等大型配置结构。
| # | 参数 | 类型 | 作用 | 调大通常 | 调小通常 | 优先级 |
|---|---|---|---|---|---|---|
| 16 | excess_render_detection_interval_blocks |
I | Render过量检测周期 | 检测更慢 | 检测更快 | P1 |
| 17 | max_allowed_excess_render_blocks |
I | 允许Render积压 | 容忍更多buffer | 更敏感 | P1 |
| 18 | render buffer size | RT | Render缓存 | 稳定性↑/延迟↑ | 延迟↓/风险↑ | P0 |
| 19 | render block size | RT | AEC处理块 | CPU↓ | 响应快 | P1 |
| 20 | render alignment | RT | Capture/Render对齐 | 对齐稳定 | 可能抖动 | P0 |
源码当前默认结构中可以看到 excess_render_detection_interval_blocks = 250、max_allowed_excess_render_blocks = 8,但这里再次强调:不要把当前 HEAD 数字直接当 M153/7985 数字。
3. AEC3 Delay ------ 核心区
| # | 参数 | 类型 | 作用 | 主要影响 | 优先级 |
|---|---|---|---|---|---|
| 21 | default_delay |
I | 初始delay估计 | AEC启动 | P0 |
| 22 | down_sampling_factor |
I | Delay搜索采样率 | CPU/精度 | P1 |
| 23 | num_filters |
I | Delay搜索filter数量 | delay范围 | P0 |
| 24 | delay_headroom_samples |
I | delay余量 | 抗delay变化 | P1 |
| 25 | hysteresis_limit_blocks |
I | delay切换滞回 | 稳定性 | P1 |
| 26 | fixed_capture_delay_samples |
I | 固定capture delay | 硬件延迟补偿 | P0 |
| 27 | delay_estimate_smoothing |
I | delay平滑 | 稳定性 | P0 |
| 28 | delay_estimate_smoothing_delay_found |
I | 找到delay后的平滑 | 收敛速度 | P1 |
| 29 | delay_candidate_detection_threshold |
I | delay候选阈值 | delay检测灵敏度 | P1 |
| 30 | delay_selection_thresholds.initial |
I | 初始delay选择 | 启动收敛 | P1 |
| 31 | delay_selection_thresholds.converged |
I | 收敛后选择 | 稳定性 | P1 |
| 32 | use_external_delay_estimator |
I | 外部delay估计 | 系统集成 | P2 |
| 33 | log_warning_on_delay_changes |
I | delay变化日志 | Debug | P2 |
| 34 | render_alignment_mixing.downmix |
I | Render downmix | 多通道 | P1 |
| 35 | render_alignment_mixing.adaptive_selection |
I | 自动选择channel | 多麦克风 | P1 |
| 36 | render_alignment_mixing.activity_power_threshold |
I | channel活动阈值 | channel选择 | P2 |
| 37 | render_alignment_mixing.prefer_first_two_channels |
I | 优先channel | 多声道 | P2 |
| 38 | capture_alignment_mixing.downmix |
I | Capture downmix | 多通道 | P1 |
| 39 | capture_alignment_mixing.adaptive_selection |
I | Capture channel选择 | 多通道 | P1 |
| 40 | capture_alignment_mixing.activity_power_threshold |
I | Capture活动阈值 | channel检测 | P2 |
| 41 | capture_alignment_mixing.prefer_first_two_channels |
I | channel偏好 | 多通道 | P2 |
| 42 | detect_pre_echo |
I | Pre-echo检测 | AEC质量 | P1 |
当前 AEC3 配置源码明确包含上述 Delay 字段;例如当前代码的默认结构中可见 default_delay、down_sampling_factor、num_filters、delay_headroom_samples、fixed_capture_delay_samples、两个 smoothing 参数以及 delay selection thresholds。
4. AEC3 Filter ------ 非常重要
| # | 参数 | 类型 | 作用 | 调大通常 | 优先级 |
|---|---|---|---|---|---|
| 43 | filter.refined.length_blocks |
I | Refined filter长度 | Echo path覆盖↑ | P0 |
| 44 | filter.refined.leakage_converged |
I | 收敛leakage | 稳定/收敛特性变化 | P1 |
| 45 | filter.refined.leakage_diverged |
I | 发散leakage | 发散后恢复 | P1 |
| 46 | filter.refined.error_floor |
I | error下限 | 稳定性 | P1 |
| 47 | filter.refined.error_ceil |
I | error上限 | 异常控制 | P2 |
| 48 | filter.refined.noise_gate |
I | 噪声门限 | 更新抑制 | P1 |
| 49 | filter.coarse.length_blocks |
I | Coarse filter长度 | 覆盖更长echo | P0 |
| 50 | filter.coarse.rate |
I | Coarse adaptation rate | 收敛快 | P0 |
| 51 | filter.coarse.noise_gate |
I | Coarse noise gate | 更新控制 | P1 |
| 52 | filter.refined_initial.length_blocks |
I | 初始refined长度 | 启动阶段 | P1 |
| 53 | filter.refined_initial.leakage_converged |
I | 初始收敛 | 启动速度 | P1 |
| 54 | filter.refined_initial.leakage_diverged |
I | 初始发散处理 | 启动稳定 | P2 |
| 55 | filter.refined_initial.error_floor |
I | 初始error floor | 启动稳定 | P2 |
| 56 | filter.refined_initial.error_ceil |
I | 初始error ceiling | 启动稳定 | P2 |
| 57 | filter.refined_initial.noise_gate |
I | 初始noise gate | 启动学习 | P2 |
| 58 | filter.coarse_initial.length_blocks |
I | 初始coarse长度 | 启动 | P1 |
| 59 | filter.coarse_initial.rate |
I | 初始coarse速率 | 收敛速度 | P0 |
| 60 | filter.coarse_initial.noise_gate |
I | 初始noise gate | 学习 | P2 |
| 61 | config_change_duration_blocks |
I | 参数变化过渡期 | 平滑性 | P1 |
| 62 | initial_state_seconds |
I | 初始AEC状态时间 | 启动收敛 | P1 |
| 63 | coarse_reset_hangover_blocks |
I | coarse reset保护 | 防抖 | P2 |
| 64 | conservative_initial_phase |
I | 初始保守模式 | 启动质量 | P2 |
| 65 | enable_coarse_filter_output_usage |
I | 是否使用coarse输出 | AEC路径 | P1 |
| 66 | use_linear_filter |
I | Linear filter | 算法路径 | P1 |
| 67 | high_pass_filter_echo_reference |
I | Echo reference HPF | 低频处理 | P1 |
当前源码明确可以看到 coarse/refined 以及 initial 两套 filter 参数,同时存在 config_change_duration_blocks、initial_state_seconds、coarse_reset_hangover_blocks、conservative_initial_phase 等配置。
5. AEC3 Echo Model
| # | 参数/区域 | 类型 | 作用 | 优先级 |
|---|---|---|---|---|
| 68 | echo model gain | I | Echo幅度模型 | P0 |
| 69 | echo model decay | I | Echo衰减 | P1 |
| 70 | echo model spectral characteristics | I | Echo频谱 | P1 |
| 71 | echo model comfort noise | I | Echo/CNG处理 | P2 |
| 72 | echo path change detection | RT | Echo路径变化 | P0 |
| 73 | echo path gain estimate | RT | Echo路径增益 | P0 |
| 74 | render energy estimate | RT | Render能量 | P0 |
| 75 | capture energy estimate | RT | Capture能量 | P0 |
这一部分很多不是简单的 public parameter,而是内部状态,所以真正调优时要结合 echo_model 源码和 metrics 看。
6. AEC3 Suppressor
| # | 参数 | 类型 | 作用 | 优先级 |
|---|---|---|---|---|
| 76 | subband_nearend_detection |
I | 近端语音检测 | P0 |
| 77 | subband2.low |
I | 子带范围低端 | P2 |
| 78 | subband2.high |
I | 子带范围高端 | P2 |
| 79 | nearend_threshold |
I | Near-end门限 | P0 |
| 80 | snr_threshold |
I | SNR门限 | P0 |
| 81 | high_bands_suppression.enr_threshold |
I | 高频echo阈值 | P1 |
| 82 | max_gain_during_echo |
I | Echo期间最大gain | P0 |
| 83 | anti_howling_activation_threshold |
I | Anti-howling触发 | P1 |
| 84 | anti_howling_gain |
I | Anti-howling gain | P1 |
| 85 | high_frequency_suppression.limiting_gain_band |
I | 高频限制起始band | P1 |
| 86 | bands_in_limiting_gain |
I | 高频限制band数 | P1 |
| 87 | floor_first_increase |
I | suppression floor | P2 |
| 88 | mask_lf.enr_transparent |
I | LF透明阈值 | P0 |
| 89 | mask_lf.enr_suppress |
I | LF suppress阈值 | P0 |
| 90 | mask_lf.emr_transparent |
I | LF residual阈值 | P1 |
| 91 | mask_hf.enr_transparent |
I | HF透明阈值 | P1 |
| 92 | mask_hf.enr_suppress |
I | HF suppress阈值 | P0 |
| 93 | mask_hf.emr_transparent |
I | HF residual阈值 | P1 |
| 94 | max_inc_factor |
I | 最大增益变化 | P1 |
| 95 | max_dec_factor_lf |
I | LF最大衰减 | P0 |
AEC3 的 Validate() 也明确对 suppressor 的 near-end、SNR、高频 suppression、anti-howling 等参数进行范围约束,说明这些确实是算法配置入口,而不是单纯的测试变量。
7. AEC3 Multi-channel
| # | 参数/状态 | 作用 | 优先级 |
|---|---|---|---|
| 96 | render channel count | Render通道数 | P0 |
| 97 | capture channel count | Capture通道数 | P0 |
| 98 | multichannel default config | 多通道AEC配置 | P1 |
| 99 | multichannel coarse filter length | 多通道收敛 | P1 |
| 100 | multichannel coarse filter rate | 多通道适应速度 | P1 |
| 101 | channel downmix | 通道降混 | P1 |
| 102 | channel selection | 通道选择 | P1 |
当前 AEC3 对多通道有专门的 CreateDefaultMultichannelConfig(),并针对多 Render channel 调整 coarse filter 长度和 adaptation rate。
8. NS / Noise Suppression
| # | 参数/区域 | 作用 | 优先级 |
|---|---|---|---|
| 103 | NS enabled | NS总开关 | P0 |
| 104 | NS level | 抑制等级 | P0 |
| 105 | NS speech probability | Speech判断 | P1 |
| 106 | NS noise estimate | Noise估计 | P0 |
| 107 | NS spectral suppression | 频谱抑制 | P0 |
| 108 | NS low-frequency suppression | 低频抑制 | P1 |
| 109 | NS high-frequency suppression | 高频抑制 | P1 |
| 110 | NS transient handling | 瞬态处理 | P1 |
| 111 | NS comfort noise | 残余噪声处理 | P2 |
9. AGC2
| # | 参数/区域 | 作用 | 优先级 |
|---|---|---|---|
| 112 | AGC2 enabled | 总开关 | P0 |
| 113 | adaptive digital gain | 自动数字增益 | P0 |
| 114 | fixed digital gain | 固定数字增益 | P1 |
| 115 | analog gain controller | 硬件增益 | P0 |
| 116 | target level | 目标音量 | P0 |
| 117 | gain change rate | 增益变化速度 | P1 |
| 118 | limiter | 防爆音 | P0 |
| 119 | limiter threshold | Limiter阈值 | P1 |
| 120 | saturation protection | 饱和保护 | P1 |
| 121 | RMS/peak level estimator | 音量估计 | P1 |
| 122 | speech level estimator | 语音音量 | P1 |
10. HPF / Transient / VAD
| # | 参数 | 作用 | 优先级 |
|---|---|---|---|
| 123 | HPF enable | 去低频噪声 | P1 |
| 124 | HPF cutoff | 截止频率 | P1 |
| 125 | transient suppression enable | 去突发噪声 | P1 |
| 126 | transient detection threshold | 瞬态检测 | P2 |
| 127 | transient suppression strength | 抑制强度 | P1 |
| 128 | VAD enable | VAD | P1 |
| 129 | VAD speech threshold | 语音阈值 | P1 |
| 130 | VAD hangover | 语音保持 | P1 |
| 131 | VAD probability smoothing | 概率平滑 | P2 |
11. NetEq Public Config
NetEq 的核心调参入口包括 sample_rate_hz、buffer容量、最小/最大delay以及 time-scale 等能力;NetEq内部还组合了 DelayManager、PacketBuffer、DecisionLogic、Expand、Accelerate、PreemptiveExpand 等组件。
| # | 参数 | 类型 | 作用 | 优先级 |
|---|---|---|---|---|
| 132 | sample_rate_hz |
API | NetEq采样率 | P0 |
| 133 | max_packets_in_buffer |
API | PacketBuffer容量 | P0 |
| 134 | min_delay_ms |
API/Config | 最小目标delay | P0 |
| 135 | max_delay_ms |
API/Config | 最大目标delay | P0 |
| 136 | enable_fast_accelerate |
API/Config | 快速追赶 | P0 |
| 137 | enable_muted_state |
API/Config | muted state | P2 |
| 138 | enable_rtx_handling |
API/Config | RTX处理 | P0 |
| 139 | for_test_no_time_stretching |
Test | 禁用time-scale | P2 |
| 140 | base_min_delay_ms |
Internal | 基础delay下限 | P0 |
| 141 | allow_time_stretching |
Internal | 是否允许时间伸缩 | P0 |
12. DelayManager ------ NetEq 最值得调的部分
当前源码中的 DelayManagerConfig 明确包含 quantile、forget_factor、start_forget_weight、resample_interval_ms、max_history_ms 等。
| # | 参数 | 类型 | 作用 | 调大 | 调小 | 优先级 |
|---|---|---|---|---|---|---|
| 142 | quantile |
FT/I | Jitter目标分位数 | 延迟↑稳定↑ | 延迟↓风险↑ | P0 |
| 143 | forget_factor |
FT/I | 历史权重 | 记忆长 | 适应快 | P0 |
| 144 | start_forget_weight |
FT/I | 启动权重 | 初期更稳定 | 初期更敏感 | P1 |
| 145 | resample_interval_ms |
FT/I | 重采样周期 | 更新慢 | 更新快 | P0 |
| 146 | max_history_ms |
FT/I | jitter历史窗口 | 稳定 | 快适应 | P1 |
| 147 | max_packets_in_buffer |
I | DelayManager容量 | 抗burst↑ | latency↓ | P0 |
| 148 | base_minimum_delay_ms |
I | 最低delay | latency↑ | latency↓ | P0 |
| 149 | kDelayBuckets |
HC | histogram bucket数 | 分辨率 | 分辨率 | P2 |
| 150 | kBucketSizeMs |
HC | histogram bucket大小 | 粗 | 细 | P2 |
| 151 | kStartDelayMs |
HC | 初始delay | 初始稳定 | 低延迟 | P1 |
| 152 | kMaxNumReorderedPackets |
HC | 重排序容忍 | 抗reorder↑ | 更快处理 | P1 |
当前源码还可以看到例如 kDelayBuckets、kBucketSizeMs、kStartDelayMs、kMaxNumReorderedPackets 这些算法常量,因此"参数表"不能只列 Config;这些 HC 也会改变实际行为。
13. DecisionLogic
| # | 参数 | 类型 | 作用 | 优先级 |
|---|---|---|---|---|
| 153 | estimate_dtx_delay |
FT | DTX期间delay估计 | P1 |
| 154 | time_stretch_cn |
FT | CNG time stretch | P1 |
| 155 | target_level_window_ms |
FT | buffer目标窗口 | P0 |
| 156 | deceleration_target_level_offset_ms |
FT/HC | 加速/减速判定 | P0 |
| 157 | reinit_after_expands |
FT/HC | 连续Expand后重初始化 | P1 |
| 158 | packet_history_size_ms |
FT/HC | packet历史 | P1 |
| 159 | cng_timeout_ms |
FT/HC | CNG timeout | P2 |
| 160 | enable_stable_playout_delay |
FT | 稳定playout | P1 |
| 161 | combine_concealment_decision |
FT | concealment决策 | P2 |
| 162 | kPostponeDecodingLevel |
HC | 延迟解码阈值 | P1 |
| 163 | kDefaultTargetLevelWindowMs |
HC | 默认target窗口 | P0 |
| 164 | kDecelerationTargetLevelOffsetMs |
HC | deceleration offset | P0 |
| 165 | kReinitAfterExpands |
HC | Expand重初始化 | P1 |
| 166 | kMaxWaitForPacket |
HC | 等待packet上限 | P1 |
| 167 | kMinTimescaleInterval |
HC | time-scale最小间隔 | P1 |
当前 DecisionLogic 源码可以确认 kPostponeDecodingLevel = 50、kDefaultTargetLevelWindowMs = 100、kDecelerationTargetLevelOffsetMs = 85 这类常量,以及 estimate_dtx_delay、time_stretch_cn、target_level_window 等运行时参数;但这些具体数值不要直接覆盖到你的 7985 源码。
14. BufferLevelFilter
| # | 参数/状态 | 作用 | 优先级 |
|---|---|---|---|
| 168 | filtered buffer level | 平滑buffer | P0 |
| 169 | buffer level history | buffer历史 | P1 |
| 170 | filter update interval | 更新频率 | P1 |
| 171 | target level | 目标buffer | P0 |
| 172 | level deviation | buffer偏差 | P0 |
| 173 | filter reset condition | reset条件 | P2 |
15. NetEq Normal / Expand / PLC
| # | 模块 | 参数/状态 | 作用 | 优先级 |
|---|---|---|---|---|
| 174 | Normal | normal decode | 正常解码 | P0 |
| 175 | Expand | expand length | 丢包隐藏 | P0 |
| 176 | Expand | expand mutefactor | concealment淡入 | P1 |
| 177 | Expand | random attenuation | PLC随机性 | P2 |
| 178 | PLC | codec PLC | Opus PLC | P0 |
| 179 | PLC | packet loss estimate | loss估计 | P0 |
| 180 | PLC | consecutive loss | 连续丢包 | P0 |
| 181 | PLC | concealment duration | 隐藏时长 | P0 |
| 182 | CNG | RFC3389 CNG | 舒适噪声 | P1 |
| 183 | CNG | codec internal CNG | Codec CNG | P1 |
| 184 | CNG | CNG timeout | CNG状态切换 | P2 |
16. Accelerate / PreemptiveExpand
| # | 参数/状态 | 作用 | 优先级 |
|---|---|---|---|
| 185 | Accelerate enable | buffer过大追赶 | P0 |
| 186 | FastAccelerate | 激进追赶 | P0 |
| 187 | Accelerate factor | 加速程度 | P1 |
| 188 | PreemptiveExpand enable | buffer过低补偿 | P0 |
| 189 | PreemptiveExpand threshold | 触发阈值 | P0 |
| 190 | PreemptiveExpand low-energy mode | 低能量模式 | P1 |
| 191 | timescale countdown | time-scale间隔 | P1 |
| 192 | previous time-scale state | 上一次操作 | P2 |
| 193 | consecutive accelerate | 连续加速次数 | P1 |
| 194 | consecutive preemptive expand | 连续PE次数 | P1 |
NetEq 当前实现确实是由 Normal、Expand、Accelerate、PreemptiveExpand、Merge 等不同处理对象共同组成,而不是单一 jitter buffer。
17. PacketBuffer
| # | 参数/状态 | 作用 | 优先级 |
|---|---|---|---|
| 195 | max packets | 最大packet数 | P0 |
| 196 | max buffer duration | 最大buffer时间 | P0 |
| 197 | packet ordering | RTP排序 | P0 |
| 198 | packet discard | 过期包丢弃 | P0 |
| 199 | packet duplicate detection | 重复包 | P1 |
| 200 | timestamp ordering | timestamp排序 | P0 |
| 201 | sequence number continuity | Seq连续性 | P0 |
| 202 | RED packet handling | RED拆包 | P1 |
| 203 | RTX packet handling | RTX解包 | P0 |
18. RTP / 网络相关参数
虽然这些不是严格意义上的 APM/NetEq 参数,但如果你真的要优化"弱网 + 低延迟",必须一起考虑。
| # | 参数/机制 | 作用 | 优先级 |
|---|---|---|---|
| 204 | RTP timestamp | 音频时间轴 | P0 |
| 205 | RTP sequence number | 丢包判断 | P0 |
| 206 | SSRC | stream标识 | P1 |
| 207 | NACK | 请求重传 | P0 |
| 208 | RTX | 重传 | P0 |
| 209 | TWCC | 网络反馈 | P0 |
| 210 | RTT | 网络延迟 | P0 |
| 211 | jitter | 抖动 | P0 |
| 212 | packet loss | 丢包 | P0 |
| 213 | packet reordering | 重排序 | P1 |
| 214 | burst loss | 连续丢包 | P0 |
| 215 | pacing | 发送平滑 | P0 |
| 216 | BWE | 带宽估计 | P0 |
| 217 | audio bitrate adaptation | 音频码率自适应 | P0 |
19. Opus 参数
这一层建议单独建立实验矩阵。
| # | 参数 | 作用 | 优先级 |
|---|---|---|---|
| 218 | bitrate | 音质/带宽 | P0 |
| 219 | packetization/ptime | 包时长 | P0 |
| 220 | frame duration | 编码帧 | P0 |
| 221 | in-band FEC | 丢包恢复 | P0 |
| 222 | expected packet loss | 编码器loss优化 | P0 |
| 223 | DTX | 静音省带宽 | P1 |
| 224 | complexity | CPU/质量 | P1 |
| 225 | bandwidth | 编解码带宽 | P0 |
| 226 | stereo | 单/双声道 | P1 |
| 227 | application | VOIP/音频 | P0 |
| 228 | signal type | voice/music | P1 |
| 229 | packet loss percentage | FEC策略 | P0 |
| 230 | max average bitrate | 码率上限 | P0 |
| 231 | min bitrate | 码率下限 | P1 |
20. Audio Device / Clock
| # | 参数/状态 | 作用 | 优先级 |
|---|---|---|---|
| 232 | capture callback period | 采集周期 | P0 |
| 233 | render callback period | 播放周期 | P0 |
| 234 | hardware buffer size | 硬件buffer | P0 |
| 235 | capture latency | 采集延迟 | P0 |
| 236 | render latency | 播放延迟 | P0 |
| 237 | device sample rate | 硬件采样率 | P0 |
| 238 | resampling | 重采样 | P1 |
| 239 | clock drift | 时钟漂移 | P0 |
| 240 | capture/render clock offset | 时钟偏移 | P0 |
| 241 | timestamp accuracy | timestamp精度 | P0 |
| 242 | callback jitter | callback抖动 | P1 |
21. 最重要的 30 个参数
如果你不想一次改 200 多个,我建议先盯这 30 个:
1. Audio frame size
2. Capture buffer
3. Render buffer
4. AEC3 default_delay
5. AEC3 fixed_capture_delay_samples
6. AEC3 num_filters
7. AEC3 delay_estimate_smoothing
8. AEC3 delay_candidate_detection_threshold
9. AEC3 coarse.length_blocks
10. AEC3 coarse.rate
11. AEC3 refined.length_blocks
12. AEC3 suppressor nearend_threshold
13. AEC3 suppressor snr_threshold
14. AEC3 max_gain_during_echo
15. NS level
16. AGC2 target level
17. AGC2 digital gain
18. AGC2 limiter
19. Opus bitrate
20. Opus ptime
21. Opus FEC
22. Opus expected packet loss
23. Opus DTX
24. NetEq min_delay_ms
25. NetEq max_delay_ms
26. DelayManager quantile
27. DelayManager forget_factor
28. resample_interval_ms
29. target_level_window_ms
30. FastAccelerate
22. 不要"乱调"
对于这种目标:
低延迟 + 弱网 + 语音质量 + AEC
分成四阶段。
第一阶段:只调 NetEq
min_delay
max_delay
quantile
forget_factor
resample_interval
target_level_window
FastAccelerate
PreemptiveExpand
目标:
Latency ↓
Expand 不明显增加
Accelerate 不爆发
第二阶段:调 Opus
ptime
bitrate
FEC
expected loss
DTX
目标:
Packet Loss ↑
语音质量仍然稳定
第三阶段:调 AEC3
重点:
fixed_capture_delay
delay estimator
num_filters
coarse filter
refined filter
suppressor
目标:
ERLE ↑
Residual Echo ↓
Double Talk质量 ↑
第四阶段:设备/时钟
最后解决:
Audio callback
hardware buffer
timestamp
clock drift
capture/render delay
这一层经常才是:
"为什么参数明明都对,但是实际延迟还是很高?"
的真正原因。
23. 建议
如果有 M153/7985 的 WebRTC 源码目录,建议不要继续靠"通用 WebRTC 参数表"猜。
直接在源码执行:
grep -R "EchoCanceller3Config" modules api
grep -R "DelayManagerConfig" modules
grep -R "DecisionLogic" modules/audio_coding/neteq
grep -R "WebRTC-Audio-NetEq" .
grep -R "WebRTC-Aec3" .
然后把结果和这张表对应起来。
因为当前 AEC3 源码已经能证明配置数量非常多,而 NetEq 又存在 Config + FieldTrial + Hard-coded constants + Runtime state 四层参数;只看 NetEq::Config 会漏掉大量真正影响行为的变量。
下一步最适合直接做的是:把这 240+ 项继续整理成一份"可直接修改源码的 Excel/CSV 参数字典",字段做成:
编号
模块
参数名
C++结构体
源码文件
M153默认值
7985默认值
FieldTrial名称
参数类型
单位
最小值
最大值
调大效果
调小效果
延迟影响
音质影响
弱网影响
CPU影响
推荐测试值
风险等级