前言
webrtc是谷歌收購并開源的一個支持實(shí)時音視頻對話的技術(shù)制跟。
官網(wǎng)是:https://webrtc.org 。
OK竭宰,介紹就這么多兼贡。
準(zhǔn)備工作
如果不打算修改webrtc相關(guān)源碼屡拨,建議不要去折騰編譯這個源碼工程只酥。
直接引用已經(jīng)編譯好的中央庫(Maven或者Gradle):
認(rèn)準(zhǔn)官方渠道:(只示例Gradle方式的)
compile 'org.webrtc:google-webrtc:1.0.+' // + 可以換成對應(yīng)版本號
相關(guān)版本可以在 https://bintray.com/google/webrtc/google-webrtc 這里查詢褥实,這個應(yīng)該會持續(xù)更新。
PS:+替換的版本號一定要去上面網(wǎng)址里面查詢是否存在該版本裂允。
有歷史的民間渠道:
compile 'io.pristine:libjingle:11139@aar'
相關(guān)版本可以在 http://mvnrepository.com/artifact/io.pristine/libjingle 進(jìn)行查詢损离,當(dāng)初更新挺頻繁,最近兩三年沒更新了叫胖,權(quán)當(dāng)個緬懷吧草冈。
源碼下載
如果想修改源碼,恭喜你瓮增,你需要自己編譯源碼。
webrtc編譯說起來哩俭,編譯既困難又簡單绷跑;困難在源碼規(guī)模太大,國內(nèi)同步代碼頻繁出問題凡资,簡單在于谷歌已經(jīng)將繁雜的編譯過程整合成簡單明了的編譯腳本命令砸捏。
強(qiáng)調(diào)一點(diǎn):下面的編譯操作是基于Linux環(huán)境。
一隙赁、安裝編譯依賴環(huán)境
webrtc的編譯環(huán)境依賴于谷歌的編譯環(huán)境垦藏,也就是 depot_tools。
很簡單伞访,就一個clone源碼到本地
git clone https://chromium.googlesource.com/chromium/tools/depot_tools.git
這里需要設(shè)置環(huán)境變量
export PATH=$PATH:/path/depot_tools #在當(dāng)前環(huán)境變量追加路徑
注意:path是你depot_tools文件夾所在的地址掂骏,需要替換為正確的路徑。
測試環(huán)境變量是否配置成功:
which gn 或者 which gclient #which指令會在環(huán)境變量設(shè)置的目錄里查找執(zhí)行文件
如果輸出了前面配置的depot_tools文件夾地址厚掷,則是配置成功弟灼!
二、下載項目源碼
1冒黑、準(zhǔn)備工作
指定一個位置存放webrtc源碼田绑,特別需要注意的是當(dāng)前硬盤存儲空間需要不少于20GB。
mkdir webrtc
cd webrtc
2抡爹、代碼同步
fetch --nohooks webrtc_android
gclient sync
這個大概會15-20GB的文件需要下載(版本持續(xù)迭代)掩驱,同步速度取決于你的VPN給不給力。
3冬竟、依賴環(huán)境配置(編譯環(huán)境只需要執(zhí)行一次)
cd src
./build/install-build-deps.sh
當(dāng)源碼下載完備后欧穴,執(zhí)行環(huán)境配置腳本,會幫你檢測并安裝編譯所需要的依賴庫和工具诱咏。
版本編譯
一苔可、編譯參數(shù)指定
gn gen out/build --args='target_os="android" target_cpu="arm" is_debug=false'
out/build : 編譯生成文件的目錄,隨意指定
target_os : 編譯目標(biāo)平臺 android ios 等
target_cpu : CPU架構(gòu)平臺 arm arm64 x86 x64等
is_debug : Release模式或者Debug模式
二袋狞、執(zhí)行編譯
由于是全量編譯焚辅,所以時間稍微有點(diǎn)長映屋,看機(jī)器性能。
ninja -C out/build
生成Gradle項目文件
build/android/gradle/generate_gradle.py --output-directory $PWD/out/build \
--target "http://examples:AppRTCMobile" --use-gradle-process-resources \
--split-projects --canary
執(zhí)行完畢同蜻,可以在out/build/目錄下會生成一個gradle的文件夾棚点,使用Android studio該gradle目錄即可運(yùn)行demo工程。
Release版本
由于webrtc是持續(xù)在master分支開發(fā)的湾蔓,所以我們二次開發(fā)webrtc最好基于穩(wěn)定的release版本瘫析。
查找?guī)焐系膔elease版本
git branch -r
然后checkout到對應(yīng)的release版本
git checkout -b my_branch branch-heads/66 #切換到M66版本
gclient sync #同步對應(yīng)版本的代碼
問題1:
如果查找不到對應(yīng)的release版本,那可能是本地源碼歷史太久遠(yuǎn)了(2015-3-24以前的版本)
需要執(zhí)行
gclient sync --with_branch_heads
git fetch origin
然后查看 .git/config
fetch = +refs/branch-heads/*:refs/remotes/branch-heads/*
則解決問題默责。
問題2:
如果checkout了比較早的版本贬循,例如branch-heads/5* 版本
執(zhí)行 gclient sync 會報同步錯誤
是因為 depot_tools 的源碼太新,導(dǎo)致與webrtc源碼不匹配桃序,可以將 depot_tools 工程恢復(fù)到與 webrtc目標(biāo)release版本相近日期的工程源碼來進(jìn)行同步編譯杖虾。
項目結(jié)構(gòu)
由于生成的gradle工程的源碼并不是放在一個位置,而且分散在webrtc各個文件夾中媒熊,可以將各個對應(yīng)文件夾下的源碼文件整合到一起奇适。
java源碼目錄如下:
#android端demo工程源碼
examples/androidapp/src
#lib源碼
modules/audio_device/android/java/src
base/android/java/src
rtc_base/java/src
sdk/android/api
sdk/android/src/java
#so庫,位于編譯目錄下
libjingle_peerconnection_so.so
PS:可以自己通過gradle文件的依賴分析查看源碼文件夾的引用路徑芦鳍。