webrtc的音頻處理模塊apm( audio processing)下載與編譯出libwebrtc_audio_preprocessing.so


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
附:
Application.mk Android.mk


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM