跨平台WebRTC
WebRTC是google开源的一个免插件实时视频通信技术,其分为web开发和native开发;目前支持chrome,firefox,Android,iOS,opera,edge。是一个真正意义上的跨平台免插件实时视频通信技术。
如果是视频应用的开发一般是基于web的,需要HTML5,JavaScript,json,websocket等这些基本编程基础,此外还需要掌握一些网络通信协议。
如果是将webRTC移植到浏览器则需要native层的开发,当然也可以对native层代码进行二次开发。
native层的安装编译
http://blog.csdn.NET/shichaog/article/details/50246155
native层语音算法测试程序
请务必完成上述连接中的内容
如果像使用native层的aec,aecm,agc,ns,vad等之类的语音处理模块,则在完成上述连接中的步骤后,即可找到一个可执行的测试文件audioproc,该而进行文件可以完成上述相关算法的测试。该文件的位置是:
- webrtc-checkout/src/out/Debug$ ./audioproc
使用help选项该文件的输出如下:
- gsc@gsc-250:~/webrtc-checkout/src/out/Debug$ ./audioproc --help
- Usage: process_test [options] [-pb PROTOBUF_FILE]
- [-ir REVERSE_FILE] [-i PRIMARY_FILE] [-o OUT_FILE]
- process_test is a test application for AudioProcessing.
- When a protobuf debug file is available, specify it with -pb. Alternately,
- when -ir or -i is used, the specified files will be processed directly in
- a simulation mode. Otherwise the full set of legacy test files is expected
- to be present in the working directory. OUT_FILE should be specified
- without extension to support both raw and wav output.
- Options
- General configuration (only used for the simulation mode):
- -fs SAMPLE_RATE_HZ
- -ch CHANNELS_IN CHANNELS_OUT
- -rch REVERSE_CHANNELS
- Component configuration:
- All components are disabled by default. Each block below begins with a
- flag to enable the component with default settings. The subsequent flags
- in the block are used to provide configuration settings.
- -aec Echo cancellation
- --drift_compensation
- --no_drift_compensation
- --no_echo_metrics
- --no_delay_logging
- --aec_suppression_level LEVEL [0 - 2]
- --extended_filter
- --no_reported_delay
- -aecm Echo control mobile
- --aecm_echo_path_in_file FILE
- --aecm_echo_path_out_file FILE
- --no_comfort_noise
- --routing_mode MODE [0 - 4]
- -agc Gain control
- --analog
- --adaptive_digital
- --fixed_digital
- --target_level LEVEL
- --compression_gain GAIN
- --limiter
- --no_limiter
- -hpf High pass filter
- -ns Noise suppression
- --ns_low
- --ns_moderate
- --ns_high
- --ns_very_high
- --ns_prob_file FILE
- -vad Voice activity detection
- --vad_out_file FILE
- -expns Experimental noise suppression
- Level metrics (enabled by default)
- --no_level_metrics
- Modifiers:
- --noasm Disable SSE optimization.
- --add_delay DELAY Add DELAY ms to input value.
- --delay DELAY Override input delay with DELAY ms.
- --perf Measure performance.
- --quiet Suppress text output.
- --no_progress Suppress progress.
- --raw_output Raw output instead of WAV file.
- --debug_file FILE Dump a debug recording.
为什么是该audioproc?
这可以从ninja这个编译器的编译过程可以看出来。
- gsc@gsc-250:~/webrtc-checkout/src/out/Debug/obj/webrtc/modules$ pwd
- /home/gsc/webrtc-checkout/src/out/Debug/obj/webrtc/modules
- gsc@gsc-250:~/webrtc-checkout/src/out/Debug/obj/webrtc/modules$ grep -nR "audioproc.process_test.o"
- audioproc.ninja:87:build obj/webrtc/modules/audio_processing/test/audioproc.process_test.o: $
- audioproc.ninja:97: obj/webrtc/modules/audio_processing/test/audioproc.process_test.o $
首先找到上面grep出现文件。打开该文件可见下面的内容:
- 87 build obj/webrtc/modules/audio_processing/test/audioproc.process_test.o: $
- 88 cxx ../../webrtc/modules/audio_processing/test/process_test.cc || $
- 89 obj/webrtc/modules/audioproc.compile_depends.stamp
- 90
- 91 ldflags = -Wl,-z,now -Wl,-z,relro -Wl,--fatal-warnings -Wl,-z,defs -pthread $
- 92 -Wl,-z,noexecstack -fPIC -fuse-ld=gold $
- 93 -B/home/gsc/webrtc-checkout/src/third_party/binutils/Linux_x64/Release/bin $
- 94 -Wl,--disable-new-dtags -m64 -Wl,--detect-odr-violations -Wl,--icf=all
- 95 libs = -lrt -lm
- 96 build audioproc: link $
- 97 obj/webrtc/modules/audio_processing/test/audioproc.process_test.o $
- 98 obj/webrtc/modules/libaudio_processing.a $
- 99 obj/webrtc/modules/libaudioproc_debug_proto.a $
- 100 obj/webrtc/modules/libaudioproc_test_utils.a $
- 101 obj/webrtc/modules/libaudioproc_protobuf_utils.a $
- 102 obj/chromium/src/testing/libgtest.a $
- 103 obj/webrtc/system_wrappers/libsystem_wrappers.a $
- 104 obj/webrtc/test/libtest_support.a $
- 105 obj/webrtc/base/librtc_base_approved.a obj/webrtc/libwebrtc_common.a $
- 106 obj/webrtc/common_audio/libcommon_audio.a $
- 107 obj/chromium/src/third_party/openmax_dl/dl/libopenmax_dl.a $
- 108 obj/webrtc/common_audio/libcommon_audio_sse2.a $
- 109 obj/webrtc/modules/libisac.a $
- 110 obj/webrtc/modules/libaudio_decoder_interface.a $
- 111 obj/webrtc/modules/libaudio_encoder_interface.a $
- 112 obj/webrtc/modules/libisac_common.a $
- 113 obj/chromium/src/third_party/protobuf/libprotobuf_lite.a $
- 114 obj/webrtc/modules/libaudio_processing_sse2.a $
- 115 obj/webrtc/system_wrappers/libfield_trial_default.a $
- 116 obj/webrtc/system_wrappers/libmetrics_default.a $
- 117 obj/chromium/src/testing/libgmock.a
- 118 ld = $ldxx
第87行指示该.o文件编译来源于process_test.cc,再根据96,97行可知包含编译生成的文件audioproc.process_test.o 经过连接后会生成audioproc这个文件,这个文件的作用见前一节。这时再来看那个cc文件。
- 1141 } // namespace
- 1142 } // namespace webrtc
- 1143
- 1144 int main(int argc, char* argv[]) {
- 1145 webrtc::void_main(argc, argv);
- 1146
- 1147 // Optional, but removes memory leak noise from Valgrind.
- 1148 google::protobuf::ShutdownProtobufLibrary();
- 1149 return 0;
- 1150 }
- 136 // void function for gtest.
- 137 void void_main(int argc, char* argv[]) {
- 138 if (argc > 1 && strcmp(argv[1], "--help") == 0) {
- 139 usage();
- 140 return;
- 141 }
- 142
- 143 if (argc < 2) {
- 144 printf("Did you mean to run without arguments?\n");
- 145 printf("Try `process_test --help' for more information.\n\n");
- 146 }
- 147
- 148 rtc::scoped_ptr<AudioProcessing> apm(AudioProcessing::Create());
- 149 ASSERT_TRUE(apm.get() != NULL);
- 150
- 151 const char* pb_filename = NULL;
- 152 const char* far_filename = NULL;
- 153 const char* near_filename = NULL;
- 154 std::string out_filename;
- 155 const char* vad_out_filename = NULL;
- 156 const char* ns_prob_filename = NULL;
- 157 const char* aecm_echo_path_in_filename = NULL;
- 158 const char* aecm_echo_path_out_filename = NULL;
- 159
- 160 int32_t sample_rate_hz = 16000;
- 161
- 162 int num_capture_input_channels = 1;
- 163 int num_capture_output_channels = 1;
文件的内容就不叙述了,该main函数就是整个测试的入口。
这里又引出来一个目录
- gsc@gsc-250:~/webrtc-checkout/src/webrtc/modules/audio_processing/test$
audio_processing就是这个目录,而test就是测试文件所在的目录
- 总结如下:编译,测试
- python webrtc/build/gyp_webrtc
- ninja -C out/Debug
- ./nonlinear_beamformer_test -i out2.wav -mic_positions "1.0 1.0 1.0 2.0 2.2 2.2 1.1 1.2 0" out.wav