美文网首页WebRTC
MAC+Ubuntu虚拟机 WebRTC for Android

MAC+Ubuntu虚拟机 WebRTC for Android

作者: Mr_PangPing | 来源:发表于2018-04-21 14:02 被阅读37次

    写在开始

    Google大神的WebRtc编译实在是太痛苦了,笔者花了两天一夜才编译完成,其实编译流程本身并不复制,事实上比ffmpeg的编译还简单,整个过程都有写好的脚本及工具支持,甚至不需要自己写一段脚本,但是!!!webrtc的工程有TM 16个G(大小不定,笔者第一次下载的是25个G,后面编崩溃了,删除重来),历经千幸万苦,最后编译成功了,再次笔者把自己的踩过的坑以及心德和大家分享下,希望来者可以避开这些坑,轻松编译WebRtc

    注意事项

    笔者编译过两次。第一次使用的是Ubuntu 14.04 LTS 64位系统进行编译,没有成功,笔者认为可能是两个地方的问题,

    1.一些依赖库没有安装到,更新了很多源都安装不上,包括阿里,网易,搜狐,清华,官方源,都没装上。

    2.笔者第一次clone是在MAC上进行的,clone完成后执行过一些脚本,笔者认为可能是系统环境影响,导致下载下来的clang clang++都是MAC OS的,所以把工程放入Linux 64下,编译会报错。如下所示:

    ../../third_party/llvm-build/Release+Asserts/bin/clang++: xxxxxx not found (required by ../../third_party/llvm-build/Release+Asserts/bin/clang++)

    汲取了以上的教训,笔者第二次编译使用了Ubuntu 16.04 LTS DeskTop 64位镜像,在虚拟机内下载WebRTC源码。并且默认使用官方源(请不要修改源,网上说的清华源靠谱,并不是!!!)


    流程

    虚拟机搭建->编译环境搭建->获取源码->设置编译环境->下载依赖库->编译->成功


    1.虚拟机环境搭建

    笔者用的是MAC+VirtualBox的方式搭建编译环境的,这一步不用多说,安装VirtualBox,下载Ubuntu 16.04 LTS镜像,设置VirtualBox(最好是打开文件夹共享功能,需要安装增强功能软件,步骤如下:)

    Host: Device->Install Guest Additions

    虚拟机内会弹出截图,点击安装即可:

    虚拟机安装完成后,下载JDK并安装,笔者安装的是64位JDK 1.8.171,切勿下载rpm格式,ubuntu不支持rpm安装。在Oracle官网下载:

    http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html


    下载完成后配置JDK环境:

    sudo gedit /etc/profile

    在文件的最后添加以下内容:

    #set Java environment 

    #your path 是你的jdk路径

    export JAVA_HOME= your path/jdk1.8.0_171

    export JRE_HOME=$JAVA_HOME/jreexport CLASSPATH=.:$JAVA_HOME/lib:$JRE_HOME/lib:$CLASSPATH

    export PATH=$JAVA_HOME/bin:$JRE_HOME/bin:$PATH


    安装完成后,可以执行命令:

    source /etc/profile


    在命令窗口执行java -version命令测试是否安装成功

    2.编译环境搭建

    这一步需要访问Google的代码仓库,所以你懂的,需要利器支持,笔者使用的是在APP Store下载的VPN Plus,完全免费不说,速度贼快(用过最好的利器,一万个赞)。

    有了梯子之后,就可以进行安装了,首先在ubuntu里安装

    sudo apt-get install git


    安装完成后,开始安装google的源代码管理利器,depot-tools:

    git clone https://chromium.googlesource.com/chromium/tools/depot_tools.git


    clone完成后,开始配置环境变量:

    sudo gedit /etc/profile

    # 针对每个用户 # 在最后添加下面语句 your path为depot_tools位置

    export PATH=$PATH:your path/depot_tools


    配置完成后,使配置生效:

    source /etc/profile

    #重启全局生效,否则只针对该bash有效


    验证是否有些,在命令窗口输入:

    which gn

    # 如果正常打印出gn命令路径,说明成功


    3.获取源码

    这一步完成后,开始最为艰辛和漫长的代码同步了,webrtc for Android有16个G,还需要有梯子帮助,笔者下载了一晚上,恶心到吐。具体步骤如下:

    创建文件夹webrtc:

    mkdir webrtc

    cd webrtc


    开始下载代码:

    # 选择android 分支版本

    fetch --nohooks webrtc_android


    这一步完成之后,开始clone代码到本地(如果重复执行上一步命令,depot-tools会提示已经配置过版本信息),如下图:

    执行代码同步命令:

    # 同步代码

    gclient sync


    然后就是漫长的等待了,非常漫长。其中有一些库比较难下载,特别是android-tools和android ndk大概会有8个G作用,下载过程中会出现中断,或者错误的情况再重复执行上一步操作即可,其中下载等待界面,如下图:

    经过漫长的等待和各种失败重试之后,下载完成。会出现如下界面代表(终于TM下完了!!!):

    出现这个画面,恭喜你的的代码下载完成了。这个时候depot-tools会自动执行一次gclient runhooks下载一些编译环境需要的代码和资源文件,只有耐心等待就好了,很快很快(相比之前)。

    当这个过程也执行完成后,会出现是否同意协议的命令行,键入Y。然后回车:

    回车之后,Running hooks执行完成,我们就可以开始配置编译环境了。

    4.设置编译环境

    首先需要设置的是编译的目标平台,这个步骤需要在src目录下,然后设置编译环境:

    cd src/ 

    source ./build/android/envsetup.sh


    然后设置编译工具和目标平台

     export GYP_DEFINES="$GYP_DEFINES OS=android"

     export GYP_GENERATORS=ninja


    5.下载依赖库

    第一步执行apt-get update,可能会出现一个问题,Problem executing scripts APT:Update::Post-Invoke xxxxxx,return an error code

    遇到这样的问题,只需要执行一个命令即可:

    sudo apt-get purge libappstream3

    然后开始执行下载,这一步我们不需要写任何脚本文件,因为webrtc已经为我们写好了,只需要执行就好(还是在src目录下),首先执行这个命令,apt-get会开始下载一些依赖库(请使用默认源,不要去更改源):

    sudo ./build/install-build-deps.sh

    中途可能会出现一些问题,比如让你选择是否安装,左右键选择OK,安装就行了,最为主要的是下载到最后会安装一个叫Chrome OS Fronts的玩意儿,一直下载不动。笔者goolge之后发现这玩意儿根本就不需要,所以直接忽略就好 CTL+C:

    这一步执行完成之后,我们就可以执行Android环境相关库的下载了,同样在src目录下,执行:

    sudo ./build/install-build-deps-android.sh


    下载过程中会删除一些依赖和清除一些库,然后下载一些新库,大部分库在上一步已经下载完毕了,这一步很快:

    这一步也完成之后,我们就可以开始编译工作了。

    6.编译

    首先返回到src的上级目录(假如我们在src目录下),下载编译所需的build文件等信息:

    $ cd ..

    $ gclient runhooks --force


    然后再次进入src目录,生成ninja项目文件:

    $ gn gen out/Debug --args='target_os="android" target_cpu="arm"' // 生成debug版ninja项目文件


    这个是debug模式,如果需要编译release模式的话,cmd键入:

    $ gn gen out/Release --args='target_os="android" target_cpu="arm" is_debug=false' // 生成release版ninja项目文件

    完成之后如下所示:

    这一步也完成之后,我们就可以开始编译了:

    $ ninja -C out/Debug


    如果没什么问题的话,就会出现如下开始编译的过程,等待大约40-60分钟就能编译完成:

    编译后的jar,静态库,动态库,apk demo等都放在out/Debug目录下面:

    如果到了这一步,恭喜小伙伴,webrtc for Android 成功了,今天的经验就到这儿了.希望能帮到各位小伙伴。

    相关文章

      网友评论

      • e410433d2581:可以说是很秀了
      • IT人故事会:做开发很累,还的学习,之前你这个我也碰到过,但是没记录谢谢了

      本文标题:MAC+Ubuntu虚拟机 WebRTC for Android

      本文链接:https://www.haomeiwen.com/subject/zngtlftx.html