OWT(Open WebRTC Toolkit)是英特尔开源的WebRTC协同通信开发套件,采用商业友好的Apache 2.0 License软件许可,Github代码已经公开。这篇文章主要记录一下Android客户端SDK的编译过程owt-client-native(Android客户端需要在Linux环境下编译,iOS需要在MacOS环境下编译,流程是相同的)
开发环境:Ubuntu/Debian(注意,一定要是这两者,因为有个脚本只支持这两种系统)
云主机或者非常稳定且带宽给力的梯子
注:一开始我准备在自己的电脑上编译,我电脑装的是Ubuntu/Windows双系统,但是由于众所周知的问题,梯子也不稳定,导致无法继续,后面我去购买了一台Google云服务器(Google云新注册有用户有300美元的额度,AWS也可以免费使用一年,但是免费硬盘空间只有30G),才完整将整个项目拉下来。整个项目有30G的大小,所以可想而知,如果在自己的本地电脑上,光下载这个30G的文件,就好花费好久的时间,如果中间梯子不稳定,心态都要崩了。所以直接买台国外的云服务器最省事。
准备工作完成了,就可以开始下面的步骤了,官方文档其实说的很详细了,但是还是有一些不那么明确的地方,我也是踩了几次坑之后才慢慢了解的。需要注意的是,Android SDK的编译需要切换到4.2.x分支,其他分支是不支持的,这是我在Issues里找到的官方答复,切换到4.3.x分支也能在文档里发现这个提示,但是master分支没有这个提示,嗐。
第一步
再进行这一步之前,要确保机器安装了Git,可以使用命令git --version
确认,如果没有安装,那么先安装Git,使用命令sudo apt install git
拉取代码,Android记得切换到4.2.x分支
第二步
下载Depot Tools,并配好环境变量,官方文档有很详细的说明,跟着流程走。官方文档有提到需要OpenSSL,一般情况下,Linux机器都是有的,可以使用openssl
命令验证一下。
第三步
这一点,修改源码目录名称,这里有点坑,要注意一下,不同分支上的描述有点不一上。我解释一下,拉取代码之后git clone https://github.com/open-webrtc-toolkit/owt-client-native.git
,源码文件如果你没设置目录名的话,源码是在名为owt-client-native
的目录下的,这时你需要将owt-client-native
重命名为src
(命令:mv owt-client-native src)
。为了方便,可以将src移到一个新创建的目录下,例如owt-native
。这时你需要在src
的同级目录下创建.gclient
文件,内容如下:
solutions = [
{
"managed": False,
"name": "src",
"url": "https://github.com/open-webrtc-toolkit/owt-client-native.git",
"custom_deps": {},
"deps_file": "DEPS",
"safesync_url": "",
},
]
target_os = ["android"]
target_os
内容根据你需要的SDK而定,例如android
,这时owt-native
目录下有src
和.gclient
两项(命令:ls -la
)。
第四步
如果机器上有Python2.7的环境,这一步可以跳过。可以使用命令验证一下python2 --version
现在新版本的Linux一般是自带的Python3的环境,所以我们需要手动安装Python2.7,命令:sudo apt-get install python2.7
第五步
拉取WebRTC编译所需的依赖,切换到src的上一级目录,运行命令:
sudo apt-get update
gclient sync
这一步耗时会比较久,中间可能会出各种问题,要有耐心:)我记录一下我这一步碰到的一些问题:
[0:01:17] error: RPC failed; result=56, HTTP code = 200
[0:01:17] fatal: The remote end hung up unexpectedly
[0:01:17] fatal: early EOF
[0:01:17] fatal: index-pack failed
Traceback (most recent call last):
File "/opt/depot_tools/gclient_scm.py", line 881, in _Clone
self._Run(clone_cmd, options, cwd=self._root_dir, retry=True)
File "/opt/depot_tools/gclient_scm.py", line 1166, in _Run
gclient_utils.CheckCallAndFilterAndHeader(cmd, env=env, **kwargs)
File "/opt/depot_tools/gclient_utils.py", line 292, in CheckCallAndFilterAndHeader
return CheckCallAndFilter(args, **kwargs)
File "/opt/depot_tools/gclient_utils.py", line 538, in CheckCallAndFilter
rv, args, kwargs.get('cwd', None), None, None)
CalledProcessError: Command 'git -c core.deltaBaseCacheLimit=2g clone --no-checkout --progress https://chromium.googlesource.com/chromium/src/third_party /srv/example/webrtc/src/_gclient_third_party_1reibo' returned non-zero exit status 128 in /srv/example/webrtc
----------------------------------------
Traceback (most recent call last):
File "/opt/depot_tools/gclient.py", line 2128, in <module>
sys.exit(main(sys.argv[1:]))
File "/opt/depot_tools/gclient.py", line 2114, in main
return dispatcher.execute(OptionParser(), argv)
File "/opt/depot_tools/subcommand.py", line 252, in execute
return command(parser, args[1:])
File "/opt/depot_tools/gclient.py", line 1876, in CMDsync
ret = client.RunOnDeps('update', args)
File "/opt/depot_tools/gclient.py", line 1363, in RunOnDeps
这是由于某些库没有下载下来导致,我们可以手动下载
git -c core.deltaBaseCacheLimit=2g clone --no-checkout --progress https://chromium.googlesource.com/chromium/src/third_party
可能还会碰到其他的问题,比如可能zip解压工具未安装,具体可以Google一下,然后继续gclient sync
第六步
gclient sync
成功之后,还需要下载一些依赖,先更新一下sudo apt-get update && sudo apt-get install pkg-config
,然后执行脚本./build/install-build-deps.sh
,执行这个脚本之后,回去下载一些依赖,如果失败,会提示缺少哪些软件,比如gcc-arm-linux-gnueabihf
,g++-arm-linux-gnueabihf
然后安装对应的软件
sudo apt-get install gcc-arm-linux-gnueabihf
sudo apt-get install g++-arm-linux-gnueabihf
安装完成之后,再执行一遍,没问题的后,就可以开始最后一步了
第七步
最后一步,编译。执行脚本python2 scripts/build_android.py
,上面的步骤都成功的话,这一步应该是不会有问题的。最后会在src/out/dist/release
生成对应平台的sdk,如下
arm64-v8a
armeabi-v7a
libwebrtc.jar
x86
到这里编译的工作已经完了,一路走下来蛮不容易,这才万里长征第一步,WebRTC征程漫漫,与诸君共勉。
前面客户端SDK已经生成了,我们就可以运行owt-client-android,这里以Android客户端为例。
拉取代码,工程里dependencies目录下的so、jar文件都是无效,需要我们自己编译生成对应文件,然后替换掉,如果各位不想动手,可以使用我编译生成好的:) 网盘链接,提取码:vufk