自从想要了解学习Webrtc,就从网上到处找源码编译,但是要么是源码本身的问题,要么是编译过程用的的工具问题,找到源码总是不能编译过去。于是下决心直接从源头拉取最新源码编译,经过几天折腾,解决了上网问题后,下载编译了linux和Android的源码,并编译通过。过程记录如下,供大家参考。
一、Linux版本
1、安装depot_tools
创建工作目录webrtc,cd 到自己创建的工作目录(/home/zhangpf/webrtc),拉取工具:
git clone https://chromium.googlesource.com/chromium/tools/depot_tools.git
如果出现443 timeout,需要手工设置git的proxy,走主机vp n端口(备注:V PN使用的http端口10809)
git config --global http.proxy "192.168.0.46:10809"
git config --global https.proxy "192.168.0.46:10809"
成功后,将工具路径添加到环境变量中:
vi ~/.bashrc
# .bashrc添加如下一行
export PATH="$PATH:/home/zhangpf/webrtc/depot_tools" (一定要全路径)
执行生效source ~/.bashrc
2、获取代码
mkdir code (/home/zhangpf/webrtc/code)
cd code
fetch --nohooks webrtc
过一会儿,显示如下就表示正常进行:
中间如果报错,出现中断,执行: gclient sync 继续下载。
没有报错,下载完后也执行一下 gclient sync。
中途如果下载个别文件因为网络原因有出错的地方,fetch会中断,可以找到日志中的git 链接复制过来直接手工下载,比如:
git -c core.deltaBaseCacheLimit=2g clone --no-checkout --progress https://chromium.googlesource.com/chromium/tools/depot_tools.git /home/zpf/webrtc/src/third_party/_gclient_depot_tools_z3x8wt3s
成功后再执行: gclient sync 继续下载。
gclient sync 最后可能会停止住很长时间不动,如果这时去统计src目录的大小,可以看到字节数在变化,说明后台还在下载,要耐心等待。然后开始出现 Running hooks: 的打印:
时间大概需要几十分钟左右。在90%会停止很久的样子,src的字节数会继续大幅增加。一般会出现如下NOTICE,但是应该没有什么问题。如果要解决,参考这个从其他网页截取的方法。
以上操作是下载最新版本,如果要下载指定分支,如下操作:
比如将分支定位到m72
(查看分支: get branch -r)
$ cd src
$ git checkout -b m72 refs/remotes/branch-heads/72
$ cd …
$ gclient sync
3、安装依赖
cd src
./build/install-build-deps.sh
在Ubuntu 22版本上,大多数依赖软件的版本都比要求的高,因此一路就下来了。
4、生成Ninja工程文件
gn gen out/Default (目标输出目录out/Default)
编译报错:
1)gn: command not found 或者 gclient command not found
解决办法:
因为 depot_tools 环境变量配置有误,没有正确找到 depot_tools 目录下的 gn 或 gclient 工具,确认 ~/.bashrc 文件配置是否正确。或者不能使用sudo。
2)编译错误
解决方法如下:
gn gen 成功后,提示如下:
5、编译
ninja -C out/Default
耗时: 09:45 - 11:37
成功后,在out/Default/obj文件夹下生成静态库——libwebrtc.a
二、Android版本
1、安装depot_tools
和linux一样,如果装过了就省略这一步。
2、拉取代码:
fetch --nohooks webrtc_android
gclient sync
代码总大小: 27.65G。
3、安装依赖:
cd src
./build/install-build-deps.sh
./build/install-build-deps-android.sh (最新版没有这一步了,省略)
source build/android/envsetup.sh
4、生成Nijia文件
gn gen out/Default --args='target_os="android" target_cpu="arm64" is_debug=false'
5、编译:
Ninja -C out/Default
虚拟机新装的ubuntu会报没有gcc的错误,需要运行 sudo apt-get install gcc。
编译用时: real 206m9.113s
6、输出文件
在Default目录下找自己需要的输出文件,比如libjingle_so.so。