1. 嵌入式设备WebRTC环境搭建
任务目标
在嵌入式Linux开发板(以ARM Cortex-A53为例)上完成WebRTC开发环境搭建,实现交叉编译工具链配置、关键依赖库(libsrtp、libevent、opus)的交叉编译,以及WebRTC源码的编译选项配置,最终生成可在目标板上运行的静态库与测试可执行文件。
环境与依赖
- 主机:x86_64 Ubuntu 20.04+
- 目标板:ARM Cortex-A53(aarch64架构)
- 交叉编译工具链:gcc-aarch64-linux-gnu(主机执行
sudo apt install gcc-aarch64-linux-gnu g++-aarch64-linux-gnu) - WebRTC源码:使用
depot_tools获取,版本分支branch-heads/5481 - 依赖库源码:libsrtp 2.x、libevent 2.1.x、opus 1.3.x
实现步骤与关键代码
1. 交叉编译工具链配置
创建环境变量脚本 set_env.sh,统一管理交叉编译参数:
#!/bin/bash
export ARCH=arm64
export CROSS_COMPILE=aarch64-linux-gnu-
export CC=${CROSS_COMPILE}gcc
export CXX=${CROSS_COMPILE}g++
export AR=${CROSS_COMPILE}ar
export LD=${CROSS_COMPILE}ld
export SYSROOT=/usr/aarch64-linux-gnu
export PREFIX=$HOME/webrtc_arm_build
export PKG_CONFIG_PATH=$PREFIX/lib/pkgconfig
export CFLAGS="--sysroot=$SYSROOT -I$PREFIX/include"
export LDFLAGS="--sysroot=$SYSROOT -L$PREFIX/lib"
mkdir -p $PREFIX
2. 依赖库交叉编译
以下脚本 build_deps.sh 依次编译libsrtp、libevent、opus:
#!/bin/bash
source set_env.sh
# libsrtp
cd libsrtp
./configure --host=aarch64-linux-gnu --prefix=$PREFIX --enable-static --disable-shared
make -j4 && make install
cd ..
# libevent
cd libevent
./configure --host=aarch64-linux-gnu --prefix=$PREFIX --enable-static --disable-shared --disable-openssl
make -j4 && make install
cd ..
# opus
cd opus
./configure --host=aarch64-linux-gnu --prefix=$PREFIX --enable-static --disable-shared
make -j4 && make install
cd ..
3. WebRTC源码获取与编译配置
使用depot_tools获取源码后,创建编译参数文件 args.gn:
# 位于 src/ 目录下执行
gn gen out/arm --args='
target_os="linux"
target_cpu="arm64"
is_debug=false
is_component_build=false
rtc_use_h264=false
rtc_use_opus=true
rtc_include_tests=false
rtc_build_examples=false
use_custom_libcxx=false
sysroot="/usr/aarch64-linux-gnu"
extra_cflags=["--sysroot=/usr/aarch64-linux-gnu"]
extra_ldflags=["--sysroot=/usr/aarch64-linux-gnu"]
'
ninja -C out/arm webrtc
4. 最小验证程序
创建 test_webrtc.c 验证核心库链接正确性:
#include <stdio.h>
#include "rtc_base/strings/string_builder.h"
int main() {
rtc::StringBuilder sb;
sb << "WebRTC ARM build OK";
printf("%s\n", sb.str().c_str());
return 0;
}
编译命令:
source set_env.sh
${CXX} test_webrtc.c -I$PREFIX/webrtc/src \
-L$PREFIX/webrtc/out/arm/obj \
-lwebrtc -lpthread -ldl -lrt \
-o test_webrtc_arm
运行与验证
- 将
test_webrtc_arm拷贝至目标板:scp test_webrtc_arm root@<板卡IP>:/root/ - 目标板执行:
chmod +x test_webrtc_arm && ./test_webrtc_arm - 通过条件:输出
WebRTC ARM build OK,且ldd test_webrtc_arm显示仅依赖系统基础库(无未解析的WebRTC符号)
常见问题
- gn无法识别sysroot:确认
/usr/aarch64-linux-gnu目录存在且包含完整的libc头文件与库文件 - opus编译失败:需在configure前执行
export CFLAGS="$CFLAGS -fPIC"解决重定位问题 - 链接时找不到libevent:检查
PKG_CONFIG_PATH是否指向$PREFIX/lib/pkgconfig