OWT(Open WebRTC Toolkit) Client Native编译生成sdk

3,666 阅读5分钟

前言

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-gnueabihfg++-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