1、编译
支持webrtc-aec
./configure --host=arm-openwrt-linux-muslgnueabi --prefix=$PWD/install --disable-libwebrtc --disable-libyuv --disable-v4l2 --disable-opencore-amrnb --disable-speex-codec --disable-speex-aec --with-openh264=/home/lyz/work/broadcast_app/app/thirds_libs_src/pjproject-2.12.1/third_party/openh264-2.3.1 --enable-libwebrtc-aec3 --with-opus=/home/lyz/work/broadcast_app/app/thirds_libs_src/pjproject-2.12.1/third_party/opus/
支持外部webrtc
./configure --host=arm-openwrt-linux-muslgnueabi --prefix=$PWD/install --enable-libwebrtc --disable-libyuv --disable-v4l2 --disable-opencore-amrnb --disable-speex-codec --disable-speex-aec --with-openh264=/home/lyz/work/broadcast_app/app/thirds_libs_src/pjproject-2.12.1/third_party/openh264-2.3.1 --disable-libwebrtc-aec3 --with-opus=/home/lyz/work/broadcast_app/app/thirds_libs_src/pjproject-2.12.1/third_party/opus/
2、代码修改:增加两个方法处理播放和录制;
PJ_DEF(pj_status_t) webrtc_aec_cancel_echo_playback(void *state, pj_int16_t *play_frm ){ webrtc_ec *echo = (webrtc_ec*) state; unsigned i, j, frm_idx = 0; int status; const sample * buf_ptr; for(i = echo->samples_per_frame / echo->subframe_len; i > 0; i--) { #if PJMEDIA_WEBRTC_AEC_USE_MOBILE buf_ptr = &play_frm[frm_idx]; #else for (j = 0; j < echo->subframe_len; j++) { echo->tmp_buf2[j] = play_frm[frm_idx+j]; } buf_ptr = echo->tmp_buf2; #endif /* Feed farend buffer */ status = WebRtcAec_BufferFarend(echo->AEC_inst, buf_ptr, echo->subframe_len); frm_idx+= echo->subframe_len; } return PJ_SUCCESS; } PJ_DEF(pj_status_t) webrtc_aec_cancel_echo_capture(void *state, pj_int16_t *rec_frm, unsigned options ){ webrtc_ec *echo = (webrtc_ec*) state; int status; unsigned i, j, frm_idx = 0; const sample * buf_ptr; sample * out_buf_ptr; for(i = echo->samples_per_frame / echo->subframe_len; i > 0; i--) { #if PJMEDIA_WEBRTC_AEC_USE_MOBILE buf_ptr = &rec_frm[frm_idx]; #else for (j = 0; j < echo->subframe_len; j++) { echo->tmp_buf[j] = rec_frm[frm_idx+j]; echo->tmp_buf2[j] = NULL; } buf_ptr = echo->tmp_buf2; #endif buf_ptr = echo->tmp_buf; out_buf_ptr = echo->tmp_buf2; #if PJMEDIA_WEBRTC_AEC_USE_MOBILE status = WebRtcAecm_Process(echo->AEC_inst, &rec_frm[frm_idx], (echo->NS_inst? buf_ptr: NULL), out_buf_ptr, echo->subframe_len, echo->tail); #else status = WebRtcAec_Process(echo->AEC_inst, &buf_ptr, echo->channel_count, &out_buf_ptr, echo->subframe_len, (int16_t)echo->tail, 0); #endif if (status != 0) { print_webrtc_aec_error("Process echo", echo->AEC_inst); return PJ_EUNKNOWN; } for (j = 0; j < echo->subframe_len; j++) { rec_frm[frm_idx++] = (pj_int16_t)out_buf_ptr[j]; } } return PJ_SUCCESS; } /* * WebRTC AEC prototypes */ #if defined(PJMEDIA_HAS_WEBRTC_AEC) && PJMEDIA_HAS_WEBRTC_AEC!=0 static struct ec_operations webrtc_aec_op = { "WebRTC AEC", &webrtc_aec_create, &webrtc_aec_destroy, &webrtc_aec_reset, &webrtc_aec_cancel_echo, &webrtc_aec_cancel_echo_playback, &webrtc_aec_cancel_echo_capture, &webrtc_aec_get_stat }; #endif
"pjlib/include/pj/config_site.h"
3、支持外部webrtc
#define PJMEDIA_HAS_WEBRTC_AEC 1 # define PJMEDIA_WEBRTC_AEC_USE_MOBILE 1
4、修改default.conf文件配置pjsua_app的启动配置文件支持回声消除:
#webrtc echo--ec-opt=3#webrtc-aec3 echo #--ec-opt=4#--stereo--ec-tail=75
5、webrtc-aec3如何开启
./configure --host=arm-openwrt-linux-muslgnueabi --prefix=$PWD/install --disable-libwebrtc --disable-libyuv --disable-v4l2 --disable-opencore-amrnb --disable-speex-codec --disable-speex-aec --with-openh264=/home/app/thirds_libs_src/pjproject-2.12.1/third_party/openh264-2.3.1 --enable-libwebrtc-aec3 --with-opus=/home/ap/thirds_libs_src/pjproject-2.12.1/third_party/opus/ 修改third_party\build\os-auto.mak ifneq (,1) ifeq (0,1) # External webrtc AEC3 else DIRS += webrtc_aec3 WEBRTC_AEC3_OTHER_CFLAGS = -fexceptions -mfpu=neon -mfloat-abi=hard -DWEBRTC_LINUX=1 -DWEBRTC_APM_DEBUG_DUMP=0 -DWEBRTC_POSIX=1 ifneq ($(findstring sse2,sse2),) # export WEBRTC_AEC3_SRC = \ # common_audio/resampler/sinc_resampler_sse.o \ # common_audio/third_party/ooura/fft_size_128/ooura_fft_sse2.o # export WEBRTC_AEC3_SRC += \ # common_audio/resampler/sinc_resampler_avx2.o \ # modules/audio_processing/aec3/adaptive_fir_filter_erl_avx2.o \ # modules/audio_processing/aec3/adaptive_fir_filter_avx2.o \ # modules/audio_processing/aec3/fft_data_avx2.o \ # modules/audio_processing/aec3/matched_filter_avx2.o \ # modules/audio_processing/aec3/vector_math_avx2.o \ # modules/audio_processing/agc2/rnn_vad/rnn_vector_math_avx2.o # WEBRTC_AEC3_OTHER_CFLAGS += -mfma else ifneq ($(findstring neon,sse2),) export WEBRTC_AEC3_SRC = \ common_audio/resampler/sinc_resampler_neon.o \ common_audio/third_party/ooura/fft_size_128/ooura_fft_neon.o WEBRTC_AEC3_OTHER_CFLAGS += -DWEBRTC_HAS_NEON endif endif endif 配置aec-3参数,启动配置文件中增加webrtc echo的配置 #webrtc echo --ec-opt=4
-------------------广告线---------------
项目、合作,欢迎勾搭,邮箱:promall@qq.com
本文为呱牛笔记原创文章,转载无需和我联系,但请注明来自呱牛笔记 ,it3q.com