天天看點

webrtc的音頻處理子產品apm( audio processing)下載下傳與編譯出libwebrtc_audio_preprocessing.so

2017-05-22更新!

http://pan.baidu.com/s/1nvbTcRf

jni修改後的代碼,可以直接ndk-build出so檔案!!!!!!!!

-------------------------------------------------------

webrtc代碼在android和chromium項目中都有。但是android中的那個帶有Android.mk,稍微修改下就能用ndk-build編譯出libwebrtc_audio_preprocessing.so

 更新

cd webrtc

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

版本問題,

 解決辦法:

APP_PLATFORM := android-9     //對應2.3.1

#APP_STL := stlport_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

附:

參考:

<a href="https://github.com/webrtc/samples" target="_blank">https://github.com/webrtc/samples</a>