1200字范文,内容丰富有趣,写作的好帮手!
1200字范文 > pulseaudio-webrtc-audio-processing的编译环境搭建

pulseaudio-webrtc-audio-processing的编译环境搭建

时间:2018-11-20 09:34:26

相关推荐

pulseaudio-webrtc-audio-processing的编译环境搭建

先上编译大环境

再上编译小环境

pulse-webrtc使用meson+ninja编译架构,所以首先需要搭建meson和ninja;

而meson又依赖python3的环境,准确说是python 3.6及以上版本,详情请见官网:/Getting-meson.html

python3

添加python3的ppa源

# add-apt-repository ppa:deadsnakes/ppa# apt update# apt install python3.7 (目前最新版本支持到3.10)

切换系统的python3软链接(更改优先级,优先使用3.7版本,数字越大优先级越高)

# 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 --versionPython 3.7.9

有需求的朋友可以自行切换pip的国内源,增加下载速度(未实测,我用的是默认源)

之前没有安装过pip的话,可以通过命令:apt install python3-pip安装

# pip3 install pip -U -i https://pypi.tuna./simple# pip3 config set global.index-url https://pypi.tuna./simple

meson

更新完了python3之后,配置meson环境可以使用如下简单的命令完成

# pip3 install meson

ninja

下载源码后代码切换release分支:

# git clone git@:ninja-build/ninja.git# git checkout -b release remotes/origin/release

编译,运行之后会在当前目录下生成ninja二进制文件

# ./configure.py --bootstrap# cp ninja /usr/bin/

到这里已经完成所有必需的编译小环境,下面就可以准备对webrtc进行编译了。

但是在编译过程中遇到了一些依赖问题,这里也顺便把解决方法写一下:

abseil依赖库

这个是webrtc内的音频处理模块需要使用的库,需要将依赖库安装到编译环境里;该库源码使用的cmake编译框架,可以按照如下方式进行编译

# git clone /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;

webrtc源码编译

源码下载

# git clone git@:freedesktop/pulseaudio-webrtc-audio-processing.git (这个是github上的会同步更新)# 或者 # git clone git@:pulseaudio/webrtc-audio-processing.git (这个是官方平台)

进入源码目录,并创建build目录用于ninja编译

# cd pulseaudio-webrtc-audio-processing/# mkdir build# cd build# meson ../ (命令成功之后会生成build.ninja,用于ninja的编译解析)# ninja

【注意】

执行meson检测环境时旧版本会存在报错,master分支最新版本已解决,问题详见:/pulseaudio/webrtc-audio-processing/-/issues/4即便用了最新的代码,在ninja编译的时候会报错,需要在源码中做如下修订才可以解决

diff --git a/webrtc/modules/audio_processing/echo_detector/ b/webrtc/modules/audio_processing/echo_detector/index a857403..10853f3 100644--- a/webrtc/modules/audio_processing/echo_detector/+++ b/webrtc/modules/audio_processing/echo_detector/@@ -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/ b/webrtc/modules/audio_processing/echo_detector/index 8ec9fe9..dbed359 100644--- a/webrtc/modules/audio_processing/echo_detector/+++ b/webrtc/modules/audio_processing/echo_detector/@@ -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() {

最后再唠叨几句

webrtc使用的meson编译架构,在执行meson命令的时候他会解析meson.build文件,进行编译环境的配置。

在这边meson命令其实可以等价成以前的configure命令,所以我们也可以在运行meson时添加一些参数选项:

# meson ../ --buildtype=debug or meson ../ --buildtype=release# meson ../ --cross-file xxx.txt (交叉编译)

webrtc示例代码(TODO:待补充)

最后关于meson的编译扩展,详见官网:/

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。