webrtc代碼在android和chromium項目中都有。但是android中的那個帶有Android.mk,稍微修改下就能用ndk-build編譯出libwebrtc_audio_preprocessing.so
apm幾個模塊:
NS(Noise Suppression 噪聲抑制)、
VAD(Voice Activity Detection 靜音檢測)、
AECM(Acoustic Echo Canceller for Mobile 聲學回聲消除)
AGC(Auto Gain Control 自動增益控制)
剛開始目錄:

刪除了modules下的audio_coding目錄,並把src改名為webrtc了,當然同時得修改Android.mk中對audio_coding相關mk的引用,還要修改路徑,原來是src,要改成webrtc.
最后會生成libwebrtc_audio_coding.so,這個需要在Android.mk中修改。其中有個
LOCAL_MODULE := libwebrtc_audio_coding
把相關的刪除,從
include $(CLEAR_VARS)
。。。。
include $(BUILD_SHARED_LIBRARY)
這個也可以通過上面一樣的辦法刪除
LOCAL_MODULE := libwebrtc_audio_coding_gnustl_static
其它文件刪除:
MODULE_LICENSE_BSD,
NOTICE,
TODO

test目錄刪除,.git目錄刪除
最終效果:

發現在modules\audio_processing\test目錄下有unit_test.cc
ndk-build編譯,幾乎很少改動。即可生成libwebrtc_audio_preprocessing.so
===================================

上面錯誤解決:需要將源代碼放在一個叫jni的目錄中。

解決:

#include <map>報錯
由於
NDK
默認使用最小
C++
運行時庫進行項目的編譯,導致無法編譯
WebRTC
中使用諸如
std::map
等
STL
容器的源碼。因此我們需要自行設定適合本項目的
C++
運行時庫
gnustl_static
。
解決:
Application.mk
APP_ABI := armeabi-v7a
APP_STL := gnustl_static
APP_PLATFORM :=21

版本問題,
好像webrtc對android的版本要求過高,至少要求2.3.1,所以從原來的2.2換成2.3.1即可
解決辦法:
#APP_PLATFORM := android-8 //對應2.2
APP_PLATFORM := android-9 //對應2.3.1
#APP_STL := stlport_static
APP_STL := gnustl_static
2.

undefined reference to 'WebRtcSpl_SqrtFloor'
這個函數在spl_sqrt_floor.c,在
webrtc\common_audio\signal_processing\Android.mk中的LOCAL_SRC_FILES加上
spl_sqrt_floor.c \
生成的so

附:

