基于纯净的Docker环境编译libwebrtc
·
基于纯净的Docker环境编译libwebrtc
引言:为什么我们需要自己编译WebRTC?
WebRTC(Web Real-Time Communication)是一个开源项目,它让网页和移动应用能够轻松实现实时音视频通信。你可能用过微信视频、腾讯会议,或者在网页上直接进行过视频聊天,其背后的核心技术之一就是WebRTC。
那么,既然WebRTC已经是开源的,为什么我们还需要自己动手编译呢?
- 定制化需求:官方提供的预编译库可能不包含我们需要的特定功能或编解码器(如H.264,这对于iOS设备兼容性至关重要)。
- 平台与架构适配:我们需要为特定的操作系统(如Linux)和CPU架构(如x64, arm64)生成库文件。
- 集成与修改:我们可能需要对WebRTC源码进行定制化修改,或将其与自己的项目深度集成。
- 学习与研究:编译过程本身就是深入理解WebRTC架构和依赖关系的最佳途径。
创建并进入工作容器
mkdir webrtc_dev
cd webrtc_dev/
docker stop libwebrtc_dev
docker rm libwebrtc_dev
docker run -it --privileged --net=host \
-v $PWD:/home -w /home --name=libwebrtc_dev ubuntu:20.04 /bin/bash
docker exec -ti libwebrtc_dev bash
解释一下:
docker run: 从ubuntu:20.04镜像创建一个新容器并运行。-it: 给我们一个交互式的终端。--privileged: 赋予容器更高的权限,有些编译步骤需要。--net=host: 让容器使用主机的网络,方便后续设置代理。-v $PWD:/home: 将你当前目录(webrtc_dev)挂载到容器内的/home目录。这是关键! 它使得你在容器内编译的所有成果,都会保存在你本机的文件夹里,不会随着容器销毁而丢失。--name libwebrtc_dev: 给容器起个名字,方便管理。- 最后,我们通过
docker exec命令再次进入这个容器的终端。
现在,我们就置身于一个全新的Ubuntu 20.04系统里了,可以开始大展拳脚。
安装必要的工具链
apt update
apt install software-properties-common -y
add-apt-repository ppa:ubuntu-toolchain-r/ppa
apt update
apt install git gcc g++ build-essential -y
apt install curl wget file -y
apt install lsb-release -y
apt install sudo -y
apt install pkg-config -y
apt install python3.9 -y
配置网络代理
WebRTC的代码仓库和依赖主要位于国外,国内下载可能会非常慢。设置代理可以极大提升速度。
export HTTP_PROXY=http://your.proxy.address:port
export HTTPS_PROXY=http://your.proxy.address:port
git config --global http.proxy http://your.proxy.address:port
git config --global https.proxy http://your.proxy.address:port
获取depot_tools
WebRTC使用Google Chromium项目的定制化构建工具集——depot_tools。它管理着复杂的代码仓库和依赖关系。
cd /home
git clone https://chromium.googlesource.com/chromium/tools/depot_tools.git
# 添加到PATH
echo 'export PATH="/home/depot_tools:$PATH"' >> ~/.bashrc
source ~/.bashrc
获取WebRTC源码
cd /home
mkdir libwebrtc_build
cd libwebrtc_build
# 首先,创建一个名为`.gclient`的配置文件,它告诉`depot_tools`如何获取代码。
cat > .gclient << 'EOF'
solutions = [
{
"name" : 'src',
"url" : 'https://github.com/webrtc-sdk/webrtc.git@m137_release',
"deps_file" : 'DEPS',
"managed" : False,
"custom_deps" : {
},
"custom_vars": {},
},
]
target_os = ['linux']
EOF
# 然后,执行同步命令,这会下载数GB的WebRTC源码及其所有依赖。
gclient sync
# 同步完成后,进入`src`目录,并克隆`libwebrtc`仓库,它提供了将WebRTC编译成单个库(`libwebrtc.so`)的“配方”。
cd src
git clone https://github.com/webrtc-sdk/libwebrtc
# 为了让这个“配方”生效,我们需要打一个补丁,并对构建文件做一个小修改。
git apply libwebrtc/patchs/custom_audio_source_m137.patch
sed -i 's/deps = \[ ":webrtc" \]/deps = [ ":webrtc","\/\/libwebrtc", ]/' BUILD.gn
# 安装编译Chromium/WebRTC所需的一整套开发库,如X11、音频、视频相关库等。
./build/install-build-deps.sh
# 配置构建参数
export ARCH=x64
gn gen out-debug/Linux-$ARCH --args="target_os=\"linux\" target_cpu=\"$ARCH\" is_debug=false rtc_include_tests=false rtc_use_h264=true ffmpeg_branding=\"Chrome\" is_component_build=false use_rtti=true use_custom_libcxx=false rtc_enable_protobuf=false"
# 修复可能的Python链接问题
ln -s /usr/bin/python3.9 /usr/bin/python3 -f
# 执行编译
ninja -C out-debug/Linux-$ARCH libwebrtc
# 编译一个测试程序
g++ -I libwebrtc/include/ -o demo libwebrtc/.conan/test_package/main.cpp out-debug/Linux-x64/libwebrtc.so
更多推荐

所有评论(0)