WebRTC与QttAudio的回声消除技术在 Android 可视对讲程序中的应用对比

随着移动互联网技术的发展,智能手机上基于无线网络的可视对讲功能的应用开始逐步兴起。在android上的此类应用程序的开发过程中,都会遇到声学回声难题。aec技术非常复杂,需要非常专业的声学和音频处理技术。webrtc的发布改变了这一局面,而qttaudio sdk的诞生,则完全将回声消除、声学音频处理等复杂技术难度降至最低,使任何开发者都可以快速的开发出音视频对讲功能应用。
webrtc介绍
webrtc是谷歌公司2011年发布的一项技术。webrtc技术主要用于在支持html5的浏览器上实现实时音视频对话。功能包括会话初始化协议sip的实现、音视频编解码和音视频数据处理等等。经过源代码分析,将aec部分的代码单独摘取出来,并编译成动态链接库,通过jni技术使java代码调用动态链接库,实现高质量回声消除。
webrtc的aec模块采用自适应滤波算法实现回声消除。该算法以输出到扬声器的音频数据为依据,根据现场的回声路径特征,模拟出回声信号。以模拟回声信号为依据,从麦克风采集到的音频数据中滤除模拟回声信号。算法的实现原理如图1所示。y(n)代表远端语音数据,y(n)在交给近端扬声器播放的同时,还送到自适应滤波器,产生回声估计值d^(n)。x(n)代表近端有用语音,麦克风采集的数据是x(n)和y(n)产生的回声d(n)的叠加,即x(n)+d(n)。经滤波处理,最终近端语音数据为:u(n)=x(n)+d(n)-d^(n)。其中e(n)=d(n)-d^(n),称为回声消除误差。理想状态下,e(n)应为0。但现实中e(n)不可能为0。滤波器会根据e(n)的值自动调整滤波系数。
 webrtc的移植我们将aec模块分成了两个大块,第一个大块是音频处理的通用模块webtrc_audio(该模块编译成功后生成“libwebrtc_spl.so”动态库,供第二大块调用),源代码位于webrtc源代码根路径下的“common_audio\signal_processing”中。第二大块是webrtc_aec(该模块编译成功后生成“libwebrtc_aec.so”动态库),源代码位于webrtc源代码根路径下的“modules\audio_processing\aec”中。
如下是webrtc_aec模块的编译脚本主要部分:
local_path:=$(call my-dir)
include $(clear_vars)
local_module:=signal_prebuilt
local_src_files:=webrtc_signal/libwebrtc_spl.so
include $(prebuilt_shared_library)
include $(clear_vars)
local_module := libwebrtc_aec
local_shared_libraries := signal_prebuilt
include $(build_shared_library)
先看编译脚本的前五行,定义了一个预编译模块,即webrtc_
a u d i o 块, 然后通过l o c a l _ s h a r e d _ l i b r a r i e s :=signal_prebuilt来导入该模块。
应用层多线程实现回声消除如果想要成功消除回声,必须将近端数据和远端数据之间的时间差控制在合理范围内。在android应用开发中,使用audiorecord进行音频采集,使用audiortrack进行远端音频播放。协调好这两个类的输入输出时间同步,是回声消除功能实现的重要保障。为了保证时间上的连续性和时间差,需要使用两个单独线程readthread和writethread来分别进行音频采集和音频播放。另外还有两个单独的线程intrhead和outthread来完成数据的接收和发送,还有一个线程aecthread完成回声消除操作。线程之间的数据交换使用队列来完成。
qttaudio sdk解决回声消除问题上文可以看出,使用webrtc消除回音是一个很复杂的工作,编译复杂,使用复杂,很不好控制近端与远端时间差值,而且如何跨平台的使用,同时满足android,ios, linux, windows等平台的需求,对于需要开发可视对讲、音视频通话等应用的企业来说,太难了。使用qttaudio sdk就简单得多,跨平台使用,10分钟就可轻松集成,无需担心回音、噪音、混音等问题,节约时间,提高开发效率,让产品尽早上市。

实地走访欧菲深圳公明园区 员工群体事件惊现反转剧情
年度盘点 | 千视电子2021大事件回顾
一种利用两个轻型的卷积神经网络来学习获取任意迁移矩阵的方法
电池大电流短路试验机(BE-8102)的结构特征-电池类测试设备
人脸识别闸机的原理说明
WebRTC与QttAudio的回声消除技术在 Android 可视对讲程序中的应用对比
杆指示表的各部位名称
芬兰监狱内的服刑人员尝试一种新型劳役:人工智能算法
应用程序生命周期管理软件增强产品开发测试和可追溯性
解读射频电路设计四大基础特性
一首AI写出来的歌,一个科技让音乐更美好的时代
英国“现代工业战略”与《中国制造2025》异同分析
三星QLED 8K电视让客厅秒变运动场 能在玩游戏享受欢乐的同时燃烧脂肪
8位MCU市场规模分析
AppleWatch2何时才能到来?迟到还想涨价?
紫光同芯合并紫光芯能,布局多品类汽车产品
特斯拉11月中国交付5000辆进口车型,国产Model 3也即将交付
Intel发布服务器路线图 10nm又被往后挤了一段
rc滤波r和c的作用分别是什么
变电站智能巡检系统:提高运行效率和安全性