WebRTC本地C++開發(fā)基礎

本文以Linux/Mac平臺為例,簡單歸納總結(jié)WebRTC本地C++開發(fā)的基本步驟。

1. 先決條件

Google使用一個腳本工具集depot_tools進行代碼檢出、下載管理、代碼審查、代碼提交等日常開發(fā)工作[1]。該工具集中的常用工具包括gclient,gcl,git-cl,repo等等。在Linux/Mac平臺上安裝depot_tools工具集非常簡單[2]:下載源代碼并添加到PATH中即可:

git clone https://chromium.googlesource.com/chromium/tools/depot_tools.git
export PATH=`pwd`/depot_tools:"$PATH"

需要注意的是,我們要把depot_tools放在PATH的最前端,否則gcl命令會指向GNU Common Lisp編譯器。另外,export這一句最好添加到.bashrc中,這樣就不必每次都設置。

對于Ubuntu/Debian系統(tǒng),除安裝depot_tools工具集,還有另外一項先決條件:在獲取WebRTC源代碼后,需要運行源代碼中的install-build-deps.sh腳本安裝一系列依賴軟件:

./build/install-build-deps.sh

對于Mac,只需要xcode版本大于5即可,推薦使用最新的xcode。

2. 獲取WebRTC源代碼

2.1 下載WebRTC源碼
mkdir webrtc-checkout
cd webrtc-checkout
fetch --nohooks webrtc
gclient sync

WebRTC源碼的代碼量很大(PC平臺大概6.4GB),因為需要使用Chromium的編譯工具鏈和第三方依賴庫。整個下載過程尤其是gclient sync需要耐心等待。

2.2 配置及創(chuàng)建分支

假設我們在master分支上進行開發(fā)。首先我們需要針對分支作一些配置,包括如何合并遠程分支,是否需要自動rebase,等等[3]:

git config branch.autosetupmerge always      // 自動合并遠程分支到本地分支。
git config branch.autosetuprebase always     // git pull時自動rebase。

并創(chuàng)建本地master分支:

cd src
git checkout –b master origin/master
2.3 更新代碼

更新當前分支:

git pull origin master

更新編譯工具鏈和第三方依賴庫:

gclient sync

3. 編譯WebRTC

Ninja是WebRTC的默認跨平臺編譯系統(tǒng)[4],其構(gòu)建文件通過GN生成[5]。Ninja構(gòu)建文件默認生成在out/Release、out/Debug目錄下,當然這個目錄是可以指定的。在src目錄下執(zhí)行如下命令,可生成Debug版構(gòu)建文件:

gn gen out/Default

生成Release版構(gòu)建文件:

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

清理Ninja構(gòu)建文件:

gn clean out/Default
gn clean out/Release

編譯WebRTC源代碼:

ninja –C out/Default

共3500多個源文件,編譯時長視機器的性能而定,從幾分鐘到幾十分鐘不等。gn也支持使用其他IDE構(gòu)建系統(tǒng),例如在Mac上用xcode生成工程文件:

gn gen out/Default --ide=xcode

就會在out/Default下生成all.xcworkspace工程文件,用xcode打開即可進行編譯。

4. 在Release分支開發(fā)

查看當前已發(fā)布的所有Release分支:

gclient sync --with_branch_heads
git fetch origin
git branch –r

檢出branch 60分支進行開發(fā):

git checkout –b branch_60 refs/remotes/branch-heads/60
gclient sync

5. 總結(jié)

本文對WebRTC的本地C++開發(fā)進行總結(jié),是一個操作手冊。

參考文獻

[1] Using depot_tools:
http://dev.chromium.org/developers/how-tos/depottools
[2] Install depot_tools:
http://dev.chromium.org/developers/how-tos/install-depot-tools
[3] WebRTC Development: https://webrtc.org/native-code/development/
[4] Ninja: https://ninja-build.org/
[5] What is GN?
https://chromium.googlesource.com/chromium/src/+/master/tools/gn/README.md

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

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

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