pulse-webrtc使用meson+ninja编译架构,所以首先需要搭建meson和ninja;
而meson又依赖python3的环境,准确说是python 3.6及以上版本,详情请见官网:https://mesonbuild.com/Getting-meson.html
# add-apt-repository ppa:deadsnakes/ppa
# apt update
# apt install python3.7 (目前最新版本支持到3.10)
# update-alternatives --install /usr/bin/python3 python3 /usr/bin/python3.5 1
# update-alternatives --install /usr/bin/python3 python3 /usr/bin/python3.7 2
# python3 --version
Python 3.7.9
# pip3 install pip -U -i https://pypi.tuna.tsinghua.edu.cn/simple
# pip3 config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple
# pip3 install meson
# git clone [email protected]:ninja-build/ninja.git
# git checkout -b release remotes/origin/release
# ./configure.py --bootstrap
# cp ninja /usr/bin/
到这里已经完成所有必需的编译小环境,下面就可以准备对webrtc进行编译了。
但是在编译过程中遇到了一些依赖问题,这里也顺便把解决方法写一下:
这个是webrtc内的音频处理模块需要使用的库,需要将依赖库安装到编译环境里;该库源码使用的cmake编译框架,可以按照如下方式进行编译
# git clone https://github.com/abseil/abseil-cpp
# cd abseil-cpp/
# mkdir build
# cd build
# cmake .. -DCMAKE_INSTALL_PREFIX=/usr/ -DCMAKE_CXX_STANDARD=11 -DCMAKE_POSITION_INDEPENDENT_CODE=ON
# make && make install
这里要提一下cmake的编译选项:
INSTALL_PREFIX是程序的安装目录,放在/usr下便于后面编译webrtc时可以自动索引到;
CXX_STANDARD指定用c++ 11规范来进行编译,不然编译会出错;
POSITION_INDEPENDENT_CODE这个选项也很重要,类似于Makefile里面的-fPIC选项,用于指定静态库连接的方式,不加这一个选项的话在webrtc里面链接abseil库时会报错:error adding symbols: Bad value;
# git clone [email protected]:freedesktop/pulseaudio-webrtc-audio-processing.git (这个是github上的会同步更新)
# 或者
# git clone [email protected]:pulseaudio/webrtc-audio-processing.git (这个是官方平台)
# cd pulseaudio-webrtc-audio-processing/
# mkdir build
# cd build
# meson ../ (命令成功之后会生成build.ninja,用于ninja的编译解析)
# ninja
【注意】
diff --git a/webrtc/modules/audio_processing/echo_detector/mean_variance_estimator.cc b/webrtc/modules/audio_processing/echo_detector/mean_variance_estimator.cc
index a857403..10853f3 100644
--- a/webrtc/modules/audio_processing/echo_detector/mean_variance_estimator.cc
+++ b/webrtc/modules/audio_processing/echo_detector/mean_variance_estimator.cc
@@ -26,8 +26,8 @@ void MeanVarianceEstimator::Update(float value) {
mean_ = (1.f - kAlpha) * mean_ + kAlpha * value;
variance_ =
(1.f - kAlpha) * variance_ + kAlpha * (value - mean_) * (value - mean_);
- RTC_DCHECK(isfinite(mean_));
- RTC_DCHECK(isfinite(variance_));
+ RTC_DCHECK(std::isfinite(mean_));
+ RTC_DCHECK(std::isfinite(variance_));
}
float MeanVarianceEstimator::std_deviation() const {
diff --git a/webrtc/modules/audio_processing/echo_detector/normalized_covariance_estimator.cc b/webrtc/modules/audio_processing/echo_detector/normalized_covariance_estimator.cc
index 8ec9fe9..dbed359 100644
--- a/webrtc/modules/audio_processing/echo_detector/normalized_covariance_estimator.cc
+++ b/webrtc/modules/audio_processing/echo_detector/normalized_covariance_estimator.cc
@@ -31,8 +31,8 @@ void NormalizedCovarianceEstimator::Update(float x,
covariance_ =
(1.f - kAlpha) * covariance_ + kAlpha * (x - x_mean) * (y - y_mean);
normalized_cross_correlation_ = covariance_ / (x_sigma * y_sigma + .0001f);
- RTC_DCHECK(isfinite(covariance_));
- RTC_DCHECK(isfinite(normalized_cross_correlation_));
+ RTC_DCHECK(std::isfinite(covariance_));
+ RTC_DCHECK(std::isfinite(normalized_cross_correlation_));
}
void NormalizedCovarianceEstimator::Clear() {
# meson ../ --buildtype=debug or meson ../ --buildtype=release
# meson ../ --cross-file xxx.txt (交叉编译)
最后关于meson的编译扩展,详见官网:https://mesonbuild.com/