注:webrtc 源碼編譯需要自備梯子.
獲取源碼
安裝 depot_tools
depot_tools是個(gè)工具包羊壹,里面包含gclient蝙茶、gcl扣唱、gn和ninja等工具款违。其中g(shù)client是代碼獲取工具唐瀑,它其實(shí)是利用了svn和Git.
//todo install
git clone https://chromium.googlesource.com/chromium/tools/depot_tools.git
修改 ~/.zshrc
export PATH=$PATH:~/work/depot_tools/depot_tools
獲取源碼
創(chuàng)建源碼目錄 webrtc, fetch 執(zhí)行之后將在 webrtc 目錄中創(chuàng)建 src 目錄, 而 src/webrtc 才是真正源碼所在. 源碼目錄估計(jì)在 8G 左右大小.
mkdir webrtc && cd webrtc
linux : fetch --nohooks webrtc
android: fetch --nohooks webrtc_android
ios: fetch --nohooks webrtc_ios
gclient sync
切換分支代碼
由于 master 分支更新度頻繁, 不利于自身 patch 維護(hù), 需要切換到指定版本分支.
cd src
gclient sync --with_branch_heads
git fetch
git checkout -b local_branch branch_heads/$branch
gclient sync
編譯
區(qū)分為 linux 平臺(tái), android 平臺(tái), ios 平臺(tái).
linux
在 ubuntu 16.04 實(shí)現(xiàn)編譯, 需要注意 webrtc 內(nèi)部腳本僅支持 lts 發(fā)布版, 所以 Ubuntu15.04 這個(gè)估計(jì)有點(diǎn)麻煩了, 本文不討論此情況.
gn gen out/Default
ninja -C out/Default
android
android 版本只支持在 linux 編譯, 無(wú)法在 mac 環(huán)境中編譯.
編譯環(huán)境 jdk8 安裝:
具體安裝就不說(shuō)了, 關(guān)鍵是環(huán)境變量設(shè)置, 樓主踩過(guò)這個(gè)坑, 環(huán)境變量未設(shè)置正確, 致各種 jni 相關(guān)的錯(cuò)誤.
export JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64
export JRE_HOME=${JAVA_HOME}/jre
export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib
export GYP_DEFINES="OS=android"
export PATH=$PATH:${JAVA_HOME}/bin
android 編譯
針對(duì) armv7, armv8, x86, x64 都需要重新編譯下
gn gen out/Default --args='target_os="android" target_cpu="arm64"'
ninja -C out/Default
ios
// todo install
切換到分支:
git checkout -b local_branch branch_heads/$branch
gclient sync
./tools_webrtc/ios/build_ios_libs.sh
出現(xiàn)報(bào)錯(cuò):
../../third_party/usrsctp/usrsctplib/usrsctplib/netinet/sctp_input.c:1734:15: error: taking address of packed member 'time_entered' of class or structure 'sctp_state_cookie' may result in an unaligned pointer value [-Werror,-Waddress-of-packed-member]
&cookie->time_entered,
^~~~~~~~~~~~~~~~~~~~
../../third_party/usrsctp/usrsctplib/usrsctplib/netinet/sctp_input.c:2486:10: error: taking address of packed member 'time_entered' of class or structure 'sctp_state_cookie' may result in an unaligned pointer value [-Werror,-Waddress-of-packed-member]
需要打個(gè)補(bǔ)丁,Pacth [https://codereview.chromium.org/2833833002]
cd build
patch -p2 -i /path/to/downloaded/issue2833833002_1.diff
此外需要根據(jù)不同 xcode 版本 如 8.3.3 則增加 xcode_version == "0833" 到 build/config/compiler/BUILD.gn 文件中( 搜索 xcode_version, 增加 || 條件 )
執(zhí)行 ./tools_webrtc/ios/build_ios_libs.sh
提取 src/out_ios_libs/WebRTC.framework