webrtc音频调参(WebRTC M153/7985 APM + NetEq 100+ 参数表)

标记说明

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 本身就包含 bufferingdelayfilterecho_modelsuppressor 等大型配置结构。

# 参数 类型 作用 调大通常 调小通常 优先级
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 = 250max_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_delaydown_sampling_factornum_filtersdelay_headroom_samplesfixed_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_blocksinitial_state_secondscoarse_reset_hangover_blocksconservative_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 明确包含 quantileforget_factorstart_forget_weightresample_interval_msmax_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

当前源码还可以看到例如 kDelayBucketskBucketSizeMskStartDelayMskMaxNumReorderedPackets 这些算法常量,因此"参数表"不能只列 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 = 50kDefaultTargetLevelWindowMs = 100kDecelerationTargetLevelOffsetMs = 85 这类常量,以及 estimate_dtx_delaytime_stretch_cntarget_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影响
推荐测试值
风险等级
相关推荐
m0_614523553 小时前
剪映数字人视频口播不自然怎么办?从音频断句到口型验收
音视频·视频编辑
Niuguangshuo3 小时前
论文解读:Paraformer,非自回归中文 ASR 的并行 Transformer
算法·音视频·语音识别
ai小陈3 小时前
LTX2.5音视频生成任务验收实战:批量记录与音画质量检查
人工智能·python·深度学习·ai·音视频·gpu算力
hz567895 小时前
音频视频sdk开发实践:从实时通话到视频互动的完整方案
音视频·实时音视频·信息与通信
纽格立科技5 小时前
把警报链从纸面接到机房——读德国DAB+自动安全警报实施指南
车载系统·音视频·信息与通信·传媒
hz567895 小时前
视频会议私有化部署指南:架构、成本与实施流程详解
安全·音视频·实时音视频·信息与通信
纽格立科技6 小时前
9月10日,德国的收音机会自己醒来——DAB+自动安全警报进入常态运行
车载系统·音视频·信息与通信·传媒
AI码农小姐姐1 天前
AI漫剧推文短视频动态镜头实现:FFmpeg zoompan 与 Ken Burns 效果实践
人工智能·音视频·ai工具·ai漫剧
技灵AI1 天前
ChatGPT Images 2.5 深度解读:延迟减半、Sketch 草图与 Flare/Sunburst 双模型 API
人工智能·gpt·aigc·音视频·images2.5