WebRtc下载与编译

WebRtc下载与编译

一、 环境准备:
保证磁盘容量足够(>30G),源码全部大概22G左右。

  1. 本人电脑配置ubuntu16.04.2 kylin 64位
  2. jdk 1.8 下载安装,两种安装方式:
    a) Installing default JRE/JDK
sudo apt-get update
sudo apt-get install default-jre
sudo apt-get install default-jdk

b) Installing Oracle JDK

sudo apt-get install python-software-properties
sudo add-apt-repository ppa:webupd8team/java
sudo apt-get update

Oracle JDK 6

sudo apt-get install oracle-java6-installer

Oracle JDK 7

sudo apt-get install oracle-java7-installer

Oracle JDK 8

sudo apt-get install oracle-java8-installer

并配置到环境变量。命令:gedit /etc/profile .将JDK所在目录追加到PATH中。重启系统。

  1. 安装git
sudo apt-get install git

配置git

git config --global user.name "github帐号"
git config --global user.email "github邮箱"
  1. 安装depot_tools:
    先在ubuntu的“系统设置”的“网络设置"中将代理设置为手动,地址指向代理IP(本示例装在虚拟机中,翻墙是在主机中使用shadowsocks,因此指向物理机地址:192.168.164.1,端口1080),重启,然后git拷贝代码:
git clone https://chromium.googlesource.com/chromium/tools/depot_tools.git

并配置到环境变量。命令:

gedit /etc/profile

将depot_tools所在目录追加到PATH中。重启系统。

export PATH=/home/thf/depot_tools:$PATH
  1. 安装如下编译webrtc需要用到的工具 ( sudo apt-get install ..) :
    g++ (>= 4.2)
    python (>= 2.4)
    libnss3-dev >= 3.12
    libasound2-dev
    libpulse-dev
    libjpeg62-dev
    libxv-dev
    libgtk2.0-dev
    libexpat1-dev

二、下载代码

  1. 创建WebRTC目录
mkdir WebRTC
cd WebRTC
  1. 设置depot_tools代理(gclient sync出现download_from_google_storage错误时的解决方法)
    新建一个文件gclient.boto(比如/home/thf/gclient.boto),添加以下内容
[Boto]
proxy=192.168.164.1
proxy_port=1080

并配置环境变量。

sudo gedit /etc/profile 

添加

export NO_AUTH_BOTO_CONFIG=/home/thf/gclient.boto
  1. 同步WebRTC代码
export GYP_DEFINES="OS=android"
fetch --nohooks webrtc_android
gclient sync

注意,若长时间出现 Still working on等信息,请不要中断或者关闭,它依然在运行,如果你这里中断了,那么之前下载的东西会全部删除,然后又得重新sync一遍
三、编译代码

  1. 安装编译需要的软件及配置 (需要翻墙,运行成功过一次以后就不用再运行了):
sudo src/build/install-build-deps-android.sh
  1. 更新ubuntu软件包(如果重启后报下列错误)
failed to start clean up any mess left by 0dns-up.See 'systemctl status dns-clean.service' for details.
ubuntu the system is running in low-graphics mode

则进入命令行模式,执行:

sudo apt-get update
sudo apt-get upgrade
reboot
  1. 进入到src目录下 执行,这一步是配置环境变量:
. build/android/envsetup.sh 
  1. 开始编译
gn gen out/Debug --args='target_os="android" target_cpu="arm"'

编译Debug版: ninja -C out/Debug
编译Release版:ninja -C out/Release
耐心等待编译完成,只要前几部没什么问题,这一步还是很顺利的,成功后可以在out/Debug 下找到编译好的apk demo文件及so,jar包等等

  1. 编译模块
    后缀为 ninja(*.ninja) 的文件是 ninja 的 构建文件。对 WebRTC 来讲,执行完 gn gen 之后,会在 out/Debug(out/Release) 下生成 build.ninja 文件,可以把这个文件看做是整个 WebRTC 的“ Makefile ”。它里面调用了各个模块的 ninja 文件。
    要编译某个模块,可以在 ninja 命令后跟模块名字(build.ninja文件中定义的构建目标,就像 Makefile 中的构建目标一样)。比如构建 webrtc/media:
ninja media

ninja 支持子工具,比如 clean ,用来清理一次构建。用法如下:

ninja -t clean

如果要清理某个模块,可以这样:

ninja -t clean media

WebRTC编译系统之gn和ninja

gn

使用 gn 生成 ninja 构建文件的常用命令:
a) 生成 debug 版本的构建文件,默认配置

gn gen out/Debug

b) 生成 release 版本的构建文件

gn gen out/Release --args="is_debug=false"

注意,通过 --args 可以传递参数给 gn ,具体参数的含义,由 WebRTC 的构建系统来解释。比如 is_debug 选项,决定构建 debug 还是 release 版本。
如果有多个参数,可以这样传递:

gn gen out/Release --args="is_debug=false proprietary_codecs=true"

args指定多个参数时,参数之间用空格分隔。生成的参数,存放在 out/Release 下的 args.gn 文件中。你可以直接打开该文件查看。
通过--args 指定的参数,会覆盖 WebRTC 构建系统中同名参数。
gn 支持为 WebRTC 生成针对某个 IDE 的工程文件,通过 --ide 来指定。具体支持哪些 IDE ,可以使用下列命令查看:

gn gen --help

比如下列命令,生成支持 QtCreator 的项目文件:

gn gen out/Release --args="is_debug=false" --ide="qtcreator"

如果你已经使用 gn gen 生成过构建文件,想看看这个版本的构建文件都指定了什么参数,可以使用下面命令:

gn args out/Release --list

它会列出所有的 build arguments 和对应的文档,以及当前值。
如果你想查看某个参数,可以使用下面的命令:

gn args out/Release --list="is_debug"
ninja

后缀为 ninja(*.ninja) 的文件是 ninja 的 构建文件。对 WebRTC 来讲,执行完 gn gen 之后,会在 out/Release 下生成 build.ninja 文件,可以把这个文件看做是整个 WebRTC 的“ Makefile ”。它里面调用了各个模块的 ninja 文件。
要完整编译 WebRTC ,只要在 src 目录执行下列命令:

ninja -C out/Release

-C 选项告诉 ninja ,进入 out/Release 目录来编译。所以,它等同于:

cd out/Release
ninja

编译某个模块,可以在 ninja 命令后跟模块名字(build.ninja文件中定义的构建目标,就像 Makefile 中的构建目标一样)。比如:
构建 webrtc/media

ninja media

使用下列命令可以查看帮助:

ninja --help

ninja 支持子工具,比如 clean ,用来清理一次构建。用法如下:

ninja -t clean

如果要清理某个模块,可以这样:

ninja -t clean media

更多子工具,可以这样看到:

ninja -t list
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 160,999评论 4 368
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 68,102评论 1 302
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 110,709评论 0 250
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 44,439评论 0 217
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,846评论 3 294
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,881评论 1 224
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 32,062评论 2 317
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,783评论 0 205
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,517评论 1 248
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,762评论 2 253
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,241评论 1 264
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,568评论 3 260
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,236评论 3 241
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,145评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,941评论 0 201
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,965评论 2 283
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,802评论 2 275

推荐阅读更多精彩内容