音频带宽预测与动态参数调整优化报告
- 优化背景与目的
基于18年8月份对listensin项目开发,还存在弱网络环境下动态参数调整不合理或不匹配的情况,导致点对点音频质量下降明显造成沟通不畅等问题,近期在依照友商产品体验的基础上进行全方位优化和改善。经过多轮反复试验,最终在原来优化的基础上增加了音频带宽估计和探测模块,实时探测网络状态以此来增加动态参数调整的精准性和稳定性。
- 优化内容与思路
目前的优化内容主要分两大块,第一块是根据视频带宽估计算法研发适合音频带宽估计算法,并以音频RTCP上报参数为输入,合理且准确的探测实时网络状态。第二块是在**项目原来动态参数调整优化的基础上,重新依据音频带宽预测算法的结果进行校准和加强,更进一步的提升参数调整的精准性和稳定性。具体的算法流程如下图所示:
- 测试结果汇总
- 测试环境:
- oppo A53m,vivo YS1A
- 5U ,360随身wifi(所有测试不支持穿透)
2) 测试版本:
- 组件demo(*_*优化版)
3) 测试日期:
20180927-20190103
4) 测试数据:
整个优化结果测试分三部分内容,第一部分是针对随机丢包型网络环境的模拟测试;第二部分是针对带宽受限网络环境的模拟测试;第三部分是公司内外环境实测。下面给出所有测试数据的可视化结果:
- 随机丢包网络
以下是随机丢包时音频质量客观打MOS分优化前后的对比数据及结果:
优化前:
oppo-vivo(丢包型网络测试20181214.pm) | |||||||
PESQ | loss_0(2) | loss_5(2) | loss_10(2) | loss_15(2) | loss_20(2) | loss_25(2) | loss_30(2) |
1 | 3.370061 | 2.905927 | 3.499287 | 3.404371 | 3.295826 | 3.297021 | 3.338209 |
2 | 3.385545 | 2.834871 | 3.435212 | 3.309201 | 3.420796 | 3.237281 | 3.203207 |
3 | 3.549577 | 2.792232 | 3.553399 | 3.422488 | 3.311166 | 3.038989 | 3.129062 |
4 | 3.460091 | 2.743378 | 3.381129 | 3.398325 | 3.39405 | 3.394241 | 3.053357 |
5 | 3.40444 | 2.6114 | 3.380411 | 3.323582 | 2.689613 | 3.388399 | 3.415845 |
6 | 3.573653 | 2.892318 | 3.139908 | 3.151786 | 3.373795 | 3.232671 | 3.247233 |
7 | 3.606637 | 3.57055 | 3.35731 | 3.424259 | 3.472592 | 3.271495 | 2.929102 |
8 | 3.538327 | 3.484503 | 3.46594 | 3.407129 | 3.498017 | 3.279175 | 3.291739 |
9 | 3.480042 | 3.574271 | 3.449543 | 3.450506 | 3.439924 | 3.28474 | 3.082016 |
10 | 3.535377 | 3.475205 | 3.557088 | 3.465139 | 3.500109 | 3.291108 | 3.413235 |
11 | 3.544504 | 3.402068 | 3.51105 | 3.095682 | 3.342456 | 3.286378 | 3.0514 |
12 | 3.450694 | 3.533487 | 3.491782 | 3.45277 | 3.386364 | 3.087695 | 3.348873 |
13 | 3.52391 | 3.382691 | 3.488458 | 3.470394 | 3.415443 | 3.292772 | 3.125211 |
14 | 3.543186 | 3.398965 | 3.485341 | 3.271558 | 3.409754 | 3.347441 | 3.305228 |
15 | 3.358573 | 3.536434 | 3.315572 | 3.378471 | 3.450915 | 3.001553 | 3.194984 |
16 | 3.554061 | 3.543655 | 3.206439 | 3.445502 | 3.393796 | 3.311512 | 3.024478 |
17 | 3.54502 | 3.560767 | 3.507227 | 3.367013 | 3.40395 | 3.235411 | 3.289442 |
18 | 3.542076 | 3.511924 | 3.516299 | 3.375159 | 3.485049 | 3.203533 | 3.163313 |
19 | 3.540627 | 3.487232 | 3.483391 | 3.419155 | 3.503042 | 3.138331 | 3.293976 |
20 | 3.574316 | 3.47036 | 3.497866 | 3.267719 | 3.436174 | 3.293526 | 3.297687 |
ave | 3.50404 | 3.28561 | 3.43613 | 3.36501 | 3.38114 | 3.24566 | 3.20988 |
优化后:
音频带宽预测与动态参数调整优化后测试(丢包型) | |||||
PESQ | loss_0 | loss_10 | loss_20 | loss_30 | |
1 | 3.581892 | 3.3530384 | 3.323348 | 3.4051845 | |
2 | 3.693079 | 3.3812542 | 3.4506771 | 3.1282094 | |
3 | 3.640126 | 3.2701449 | 3.4046766 | 3.2826426 | |
4 | 3.550487 | 3.2745932 | 3.1507787 | 3.3590552 | |
5 | 3.631282 | 3.3795495 | 3.498502 | 3.3592153 | |
6 | 3.658274 | 3.4505254 | 3.6146792 | 3.323378 | |
7 | 3.634765 | 3.3026954 | 3.4580843 | 3.2250086 | |
8 | 3.633726 | 3.180577 | 3.6640651 | 3.2564071 | |
9 | 3.597269 | 3.3062328 | 3.455854 | 3.262503 | |
10 | 3.608318 | 3.0994845 | 2.9999142 | 3.2511825 | |
11 | 3.617133 | 3.4360691 | 3.4581188 | 3.2747811 | |
12 | 3.591663 | 3.4123199 | 3.1360772 | 3.0440633 | |
13 | 3.602614 | 3.1443354 | 3.4811986 | 3.3711946 | |
14 | 3.579307 | 3.2638493 | 3.4981088 | 3.1625546 | |
15 | 3.485615 | 3.1380241 | 3.2499485 | 3.4597067 | |
16 | 3.614804 | 3.1591571 | 3.6183229 | 3.289511 | |
17 | 3.55441 | 3.3615295 | 3.2055085 | 3.2561232 | |
18 | 3.577459 | 3.2388448 | 3.4639943 | 3.2591554 | |
19 | 3.661506 | 3.2797162 | 3.3081652 | 3.1793327 | |
20 | 3.635031 | 3.3373805 | 3.3173479 | 3.3076838 | |
ave | 3.60744 | 3.28847 | 3.38787 | 3.27284 |
对于丢包10% 情况的补测:
PESQ | loss_10 | loss_20 |
1 | 3.5853458 | 3.54228643 |
2 | 3.4604239 | 3.64773385 |
3 | 3.5217533 | 3.56190119 |
4 | 3.3528071 | 3.53825506 |
5 | 3.6429737 | 3.57656051 |
6 | 3.5365111 | 3.48528114 |
7 | 3.3628605 | 3.55925245 |
8 | 3.5415521 | 3.52325164 |
9 | 3.069106 | 3.51530436 |
10 | 3.5859071 | 3.48828 |
ave | 3.46592 | 3.543811 |
对比结果:
对于丢包型网络优化前后MOS差别并不大,但是增加了带宽预测大幅度提升了动态参数调整的稳定性。对于10%丢包时,原来是做1倍FEC,补测时候优化了FEC倍数,大部分情况是固定在2倍,通过客观打分可知,2倍FEC效果明显比1倍要好。
下面给出随机丢包时音频带宽预测与动态参数调整的对应图:
- loss_0
当丢包为0时,整个网络状态正常,FEC = 0,码率稳定在32Kbps,打包时长为20ms,语音流程及舒服。
- loss_10
当丢包为10%时,整个网络判断为随机丢包型,FEC 从0升到1倍,码率从32Kbps下降到28Kbps或者24Kbps,由于丢包率实时不稳,导致FEC和码率出现波动,但大部分时间FEC维持在1倍,打包时长为20ms,语音偶有抖动。经过进一步优化,当丢包在10% 时,FEC大部分时间是在2倍,码率维持在24Kbps,偶尔出现28Kbps。
- loss_20
当丢包为20%时,整个网络判断为随机丢包型,FEC 从1升到2倍,码率从28Kbps下降到24Kbps或者20Kbps,在此丢包环境中FEC长期维持在2倍,打包时长为20ms,语音质量良好。
- loss_30
当丢包为30%时,整个网络判断为随机丢包型,FEC 从2升到3倍,码率从24Kbps下降到20Kbps或者16Kbps,大部分时间是码率是在16Kbps,在此丢包环境中FEC长期维持在3倍,打包时长为20ms,语音质量偶有断续。
- 带宽受限网络
以下是带宽受限时音频质量客观打MOS分优化前后的对比数据及结果:
优化前:
oppo_vivo_bandwidth_limited | ||||||
PESQ | BW_10Kbps | BW_20Kbps | BW_30Kbps | BW_40Kbps | BW_50Kbps | BW_60Kbps |
1 | 2.601568 | 1.67448 | 3.06806 | 2.820486 | 2.959418 | 3.594051 |
2 | 2.339853 | 2.79228 | 3.131402 | 2.697895 | 3.150837 | 3.686515 |
3 | 2.291011 | 2.788003 | 3.105273 | 3.013852 | 3.268429 | 3.627768 |
4 | 1.982152 | 2.946084 | 3.023104 | 2.567237 | 3.12272 | 3.58907 |
5 | 1.642909 | 2.96764 | 3.132432 | 2.667567 | 3.168038 | 3.645766 |
6 | 1.570973 | 2.759303 | 3.105778 | 2.952561 | 3.162108 | 3.653011 |
7 | 2.201833 | 2.961261 | 3.128179 | 2.842049 | 3.151019 | 3.601191 |
8 | 2.088249 | 3.077856 | 3.084443 | 2.742224 | 3.179106 | 3.453066 |
9 | 2.419226 | 3.000576 | 3.126656 | 2.346461 | 2.910072 | 3.634661 |
10 | 2.273802 | 2.968391 | 3.245327 | 2.71915 | 3.128245 | 3.611123 |
11 | NULL | 2.448584 | 3.083232 | 2.252314 | 3.13823 | 3.548242 |
12 | NULL | 2.848855 | 3.122928 | 2.491703 | 3.161694 | 3.654188 |
13 | NULL | 2.961658 | 3.150632 | 2.173534 | 3.241694 | 3.659575 |
14 | NULL | 2.939521 | 3.134724 | 2.59373 | 3.267812 | 3.650173 |
15 | NULL | 2.464737 | 2.970218 | 2.512123 | 3.159766 | 3.581073 |
16 | NULL | 2.774561 | 3.147867 | 2.822346 | 3.184654 | 3.54242 |
17 | NULL | 2.927303 | 3.087036 | 2.631536 | 3.112652 | 3.618958 |
18 | NULL | 3.039998 | 3.1227 | 1.989405 | 3.117034 | 3.617706 |
19 | NULL | 2.769489 | 3.132696 | 2.737104 | 3.120486 | 3.593507 |
20 | NULL | 3.458922 | 3.070295 | 2.152924 | 2.678733 | 3.671388 |
ave | 2.14116 | 2.82847 | 3.10865 | 2.58631 | 3.11914 | 3.61167 |
优化后:
音频带宽预测与动态参数调整优化后测试(带宽受限型) | |||||
PESQ | 20Kbps | 30Kbps | 40Kbps | 50Kbps | |
1 | 2.905216 | 3.2000843 | 3.2515887 | 3.1305338 | |
2 | 2.830818 | 3.1909283 | 3.329109 | 3.4737558 | |
3 | 2.944941 | 3.1782422 | 3.039244 | 3.2050032 | |
4 | 2.808687 | 2.9882597 | 3.2651568 | 3.2217209 | |
5 | 2.955799 | 3.1333501 | 3.1390289 | 3.2314285 | |
6 | 2.903797 | 3.1760258 | 3.3278516 | 3.2023102 | |
7 | 2.982072 | 3.2496957 | 3.1075692 | 3.3539428 | |
8 | 3.157925 | 3.0950396 | 3.2951549 | 3.2776835 | |
9 | 2.980941 | 3.2288895 | 3.274097 | 3.2184626 | |
10 | 2.944647 | 3.0519907 | 3.3424703 | 3.2973596 | |
11 | 2.911858 | 3.1840512 | 3.1366697 | 3.3087954 | |
12 | 2.931631 | 3.1525966 | 3.1209302 | 3.2480386 | |
13 | 2.984569 | 3.0784391 | 3.1623669 | 3.3535867 | |
14 | 2.815945 | 3.1931631 | 3.0871016 | 3.2677181 | |
15 | 2.800154 | 3.1147891 | 3.3107909 | 3.2988959 | |
16 | 2.87494 | 2.860091 | 3.1214618 | 3.3347192 | |
17 | 2.932218 | 2.8556505 | 2.5044113 | 3.2178878 | |
18 | 2.861084 | 2.8268298 | 3.3791481 | 3.2784919 | |
19 | 2.899303 | 2.8874664 | 3.1854166 | 3.2596039 | |
20 | 2.836517 | 2.6819692 | 3.1459508 | 3.3006196 | |
ave | 2.91315 | 3.06638 | 3.17628 | 3.27403 |
对比结果:
对于带宽受限型网络,从客观打MOS分来看,质量提升明显,且能做到稳定精确,对于不同的网络受限能采取相对应的策略,整个动态参数调整合理且有效。
下面给出带宽受限时音频带宽预测与动态参数调整的对应图:
- 20Kbps_Network_limited
当带宽受限20Kbps时,整个网络判断为带宽受限型,动态参数的调整主要集中在码率,FEC始终保持为0倍。码率从正常网络的32Kbps下降到8Kbps,最终稳定在8Kbps,只有在网络状态完全正常,所有的判断都重新开始的时候才有细微波动,这是算法重新收敛的过程属于合理现象。整个过程语音清晰但声音质量只能是8Kbps码率的标准,不是很饱满。
- 30Kbps_Network_limited
当带宽受限30Kbps时,整个网络判断为带宽受限型,FEC为0倍,码率从8Kbps升到12Kbps,最终稳定在12Kbps。整个过程语音清晰但声音质量比8Kbps码率好,但声音还不不饱满。
- 40Kbps_Network_limited
当带宽受限40Kbps时,整个网络判断为带宽受限型,FEC为0倍,码率从12Kbps升到16Kbps,最终稳定在16Kbps。整个过程语音清晰声音饱满,失真小。
- 50Kbps_Network_limited
由于带宽受限在50Kbps的时候,由于opus编码目前在demo中的最大码率为32Kbps,再刚开始带宽受限时码率还是维持在32Kbps,但是随着检测的深入,经过优化大部分情况是可以检测到带宽受限的,只要带宽受限标志位置为1,后面的动态参数就会被锁定,近期多次测试结果来看,锁定为24Kbps和20Kbps的可能性最大,所以这样优加强了参数调整的稳定性,使得语音质量良好,且清晰流畅,当比起不受限时语音还是存在失真。
- 实际网络
在实际网络测试时,选择公司内部的listensin WIFI,主叫和被叫都连接统一WIFI,当不支持穿透。一端在走廊和洗手间门口走动时,此端会短时间内判断为带宽受限,按带宽受限的策略去调整动态参数,却能长时间锁定一档码率,符合算法设计初衷,保证了通话顺畅,提升了语音质量的稳定性。当到工作位置时,带宽估计算法会探测到已解除带宽受限,经过长时间的跟踪最终确定网络确实正常后,开始全面提升码率,提升语音质量,且进入新一轮判断。
- 优化结论
1. 经过多轮测试,动态参数的调整比原来更加精确和稳定,基本达到算法设计要求。
2. 增加了音频带宽估计和探测算法后,对不同网络状态的判断更加准确,增加了动态参数调整的稳定性。
3. 通过优化前后音频质量客观打分可知,优化后参数调整更加稳定,尤其对于带宽受限型网络,MOS分提升明显。
附件:demo:
整理后数据:
**项目音频动态参数优化说明:
优化前测试报告: