WebRtc下載與編譯

WebRtc下載與編譯

一、 環(huán)境準(zhǔn)備:
保證磁盤(pán)容量足夠(>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

并配置到環(huán)境變量。命令:gedit /etc/profile .將JDK所在目錄追加到PATH中。重啟系統(tǒng)。

  1. 安裝git
sudo apt-get install git

配置git

git config --global user.name "github帳號(hào)"
git config --global user.email "github郵箱"
  1. 安裝depot_tools:
    先在ubuntu的“系統(tǒng)設(shè)置”的“網(wǎng)絡(luò)設(shè)置"中將代理設(shè)置為手動(dòng),地址指向代理IP(本示例裝在虛擬機(jī)中,翻墻是在主機(jī)中使用shadowsocks,因此指向物理機(jī)地址:192.168.164.1,端口1080),重啟,然后git拷貝代碼:
git clone https://chromium.googlesource.com/chromium/tools/depot_tools.git

并配置到環(huán)境變量。命令:

gedit /etc/profile

將depot_tools所在目錄追加到PATH中。重啟系統(tǒng)。

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. 創(chuàng)建WebRTC目錄
mkdir WebRTC
cd WebRTC
  1. 設(shè)置depot_tools代理(gclient sync出現(xiàn)download_from_google_storage錯(cuò)誤時(shí)的解決方法)
    新建一個(gè)文件gclient.boto(比如/home/thf/gclient.boto),添加以下內(nèi)容
[Boto]
proxy=192.168.164.1
proxy_port=1080

并配置環(huán)境變量。

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

注意,若長(zhǎng)時(shí)間出現(xiàn) Still working on等信息,請(qǐng)不要中斷或者關(guān)閉,它依然在運(yùn)行,如果你這里中斷了,那么之前下載的東西會(huì)全部刪除,然后又得重新sync一遍
三、編譯代碼

  1. 安裝編譯需要的軟件及配置 (需要翻墻,運(yùn)行成功過(guò)一次以后就不用再運(yùn)行了):
sudo src/build/install-build-deps-android.sh
  1. 更新ubuntu軟件包(如果重啟后報(bào)下列錯(cuò)誤)
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

則進(jìn)入命令行模式,執(zhí)行:

sudo apt-get update
sudo apt-get upgrade
reboot
  1. 進(jìn)入到src目錄下 執(zhí)行,這一步是配置環(huán)境變量:
. build/android/envsetup.sh 
  1. 開(kāi)始編譯
gn gen out/Debug --args='target_os="android" target_cpu="arm"'

編譯Debug版: ninja -C out/Debug
編譯Release版:ninja -C out/Release
耐心等待編譯完成,只要前幾部沒(méi)什么問(wèn)題,這一步還是很順利的,成功后可以在out/Debug 下找到編譯好的apk demo文件及so,jar包等等

  1. 編譯模塊
    后綴為 ninja(*.ninja) 的文件是 ninja 的 構(gòu)建文件。對(duì) WebRTC 來(lái)講,執(zhí)行完 gn gen 之后,會(huì)在 out/Debug(out/Release) 下生成 build.ninja 文件,可以把這個(gè)文件看做是整個(gè) WebRTC 的“ Makefile ”。它里面調(diào)用了各個(gè)模塊的 ninja 文件。
    要編譯某個(gè)模塊,可以在 ninja 命令后跟模塊名字(build.ninja文件中定義的構(gòu)建目標(biāo),就像 Makefile 中的構(gòu)建目標(biāo)一樣)。比如構(gòu)建 webrtc/media:
ninja media

ninja 支持子工具,比如 clean ,用來(lái)清理一次構(gòu)建。用法如下:

ninja -t clean

如果要清理某個(gè)模塊,可以這樣:

ninja -t clean media

WebRTC編譯系統(tǒng)之gn和ninja

gn

使用 gn 生成 ninja 構(gòu)建文件的常用命令:
a) 生成 debug 版本的構(gòu)建文件,默認(rèn)配置

gn gen out/Debug

b) 生成 release 版本的構(gòu)建文件

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

注意,通過(guò) --args 可以傳遞參數(shù)給 gn ,具體參數(shù)的含義,由 WebRTC 的構(gòu)建系統(tǒng)來(lái)解釋。比如 is_debug 選項(xiàng),決定構(gòu)建 debug 還是 release 版本。
如果有多個(gè)參數(shù),可以這樣傳遞:

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

args指定多個(gè)參數(shù)時(shí),參數(shù)之間用空格分隔。生成的參數(shù),存放在 out/Release 下的 args.gn 文件中。你可以直接打開(kāi)該文件查看。
通過(guò)--args 指定的參數(shù),會(huì)覆蓋 WebRTC 構(gòu)建系統(tǒng)中同名參數(shù)。
gn 支持為 WebRTC 生成針對(duì)某個(gè) IDE 的工程文件,通過(guò) --ide 來(lái)指定。具體支持哪些 IDE ,可以使用下列命令查看:

gn gen --help

比如下列命令,生成支持 QtCreator 的項(xiàng)目文件:

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

如果你已經(jīng)使用 gn gen 生成過(guò)構(gòu)建文件,想看看這個(gè)版本的構(gòu)建文件都指定了什么參數(shù),可以使用下面命令:

gn args out/Release --list

它會(huì)列出所有的 build arguments 和對(duì)應(yīng)的文檔,以及當(dāng)前值。
如果你想查看某個(gè)參數(shù),可以使用下面的命令:

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

后綴為 ninja(*.ninja) 的文件是 ninja 的 構(gòu)建文件。對(duì) WebRTC 來(lái)講,執(zhí)行完 gn gen 之后,會(huì)在 out/Release 下生成 build.ninja 文件,可以把這個(gè)文件看做是整個(gè) WebRTC 的“ Makefile ”。它里面調(diào)用了各個(gè)模塊的 ninja 文件。
要完整編譯 WebRTC ,只要在 src 目錄執(zhí)行下列命令:

ninja -C out/Release

-C 選項(xiàng)告訴 ninja ,進(jìn)入 out/Release 目錄來(lái)編譯。所以,它等同于:

cd out/Release
ninja

編譯某個(gè)模塊,可以在 ninja 命令后跟模塊名字(build.ninja文件中定義的構(gòu)建目標(biāo),就像 Makefile 中的構(gòu)建目標(biāo)一樣)。比如:
構(gòu)建 webrtc/media

ninja media

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

ninja --help

ninja 支持子工具,比如 clean ,用來(lái)清理一次構(gòu)建。用法如下:

ninja -t clean

如果要清理某個(gè)模塊,可以這樣:

ninja -t clean media

更多子工具,可以這樣看到:

ninja -t list
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀(guān)點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容