溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點(diǎn)擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

WebRTC 開發(fā)實(shí)踐:編譯 Android 平臺源碼

發(fā)布時間:2020-07-13 17:19:11 來源:網(wǎng)絡(luò) 閱讀:3616 作者:Jhuster 欄目:軟件技術(shù)

前面兩篇文章分別介紹了如何利用 WebRTC API 實(shí)現(xiàn)一對一視頻通話和多人視頻會議,并給出了相應(yīng)的 demo 程序,該 demo 是基于官方預(yù)編譯好的庫開發(fā)的。如果要想深入學(xué)習(xí)和研究 WebRTC,僅僅掌握偏上層的 API 接口是遠(yuǎn)遠(yuǎn)不夠的,而是應(yīng)該做到能自己編譯和修改 WebRTC 源碼,這樣才能不受限制地根據(jù)自己的需要優(yōu)化和改進(jìn)產(chǎn)品的質(zhì)量和效果。

網(wǎng)上有很多介紹 WebRTC 源碼編譯的文章,我這里也不會贅述太多,只介紹些關(guān)鍵經(jīng)驗??傮w來說,有下面幾個點(diǎn)先提前說明一下:

1. 最靠譜的編譯指南是官方的指導(dǎo)文章:https://webrtc.org/native-code/android/

2. WebRTC Android 的編譯只支持在 Linux 環(huán)境中進(jìn)行,推薦安裝 Ubuntu 16.04 的物理機(jī)或者 VPS,不建議在 Mac/Windows 上使用 Docker 或者虛擬機(jī)等方式來編譯,容易遇到很多奇怪的問題。當(dāng)然,我下面也還是會介紹下 Mac 下如何利用虛擬機(jī)來編譯。

3. WebRTC Android 的源碼和配套工具大約 16 GB 左右,國內(nèi)由于 GFW 的原因,需要配置代理來下載和同步,由此可能帶來很多奇奇怪怪的問題。

4. 時間就是金錢,由于配置代理同步代碼容易遇到各種坑,比較推薦的方式是在 Linode 或者 Vultr 購買一臺位于國外的 VPS 虛擬機(jī),基本上參照 WebRTC 官方文檔,半天時間就可以順利走通整個源碼同步和編譯流程了。

一、編譯步驟和過程

下面先介紹下編譯步驟和過程,假設(shè)你使用了國外的 VPS 或者已經(jīng)解決好了代理,編譯環(huán)境是  Ubuntu 16.04。

首先,通過 ssh 登錄到 VPS

1 安裝配置編譯環(huán)境

// 安裝一些基礎(chǔ)的軟件依賴
$ sudo apt-get update
$ sudo apt-get install -y openssl vim git gcc g++ curl python build-essential inetutils-ping net-tools sudo lsb-release libxml2

// 下載和配置 Google 提供的相關(guān)工具和腳本
$ git clone https://chromium.googlesource.com/chromium/tools/depot_tools.git
$ vi ~/.bashrc
// 添加如下內(nèi)容
export DEPOT_TOOLS_PATH=~/depot_tools
export PATH=${PATH}:${DEPOT_TOOLS_PATH}

// 執(zhí)行腳本使其生效 
$ source ~/.bashrc

2 拉取代碼并安裝相關(guān)依賴

$ mkdir webrtc
$ cd webrtc
$ fetch --nohooks webrtc_android
$ gclient sync // 異常斷開后,可多執(zhí)行幾次

$ cd src
$ ./build/install-build-deps.sh
$ ./build/install-build-deps-android.sh

3 創(chuàng)建編譯工程文件并執(zhí)行編譯

$ . build/android/envsetup.sh
$ gn gen out/release/armeabi-v7a --args='target_os="android" target_cpu=“arm" is_debug=false'
$ ninja -C out/release/armeabi-v7a

如果要編譯其他 CPU 架構(gòu)的參數(shù)配置如下:

  • ARM64: target_cpu="arm64"

  • 32-bit x86: target_cpu="x86"

  • 64-bit x64: target_cpu=“x64"

編譯成功后,輸出的關(guān)鍵文件如下:

out/release/armeabi-v7a/lib.java/sdk/android/libwebrtc.jar
out/release/armeabi-v7a/libjingle_peerconnection_so.so

二、Mac 下利用 Vagrant 打造編譯環(huán)境

1 前置環(huán)境

實(shí)現(xiàn)命令行能使用 shadowsocks 代理,有如下三種方案:

  • Proxifier

  • privoxy

  • polipo

關(guān)于如何使用和配置它們的文章很多,這里不再贅述,這一步至關(guān)重要。

2 安裝 Vagrant 和 Virtual Box

在官網(wǎng)下載 Vagrant 和 VirtualBox 并安裝它們。

3 安裝 Ubuntu 16.04 虛擬機(jī)

$ mkdir webrtc-builder
$ cd webrtc-builder
$ vagrant init ubuntu/xenial64

4 配置共享目錄

這里可以使用 Mac 下的磁盤目錄,利用 NFS 掛載到 vagrant 虛擬機(jī)里進(jìn)行代碼同步,這樣就可以很方便地在 Mac 系統(tǒng)下修改和編輯 WebRTC 源碼了。

$ cd webrtc-builder
$ vi Vagrantfile

// 前者是主機(jī)的目錄,后者是虛擬機(jī)內(nèi)掛載的目錄,注意要使用 NFS 方式掛載
config.vm.network "private_network", ip: "192.168.50.4"
config.vm.synced_folder “/Volumes/fs/webrtc", "/webrtc", type: "nfs"

$ vagrant reload

// 注: 這個過程需要給 iTerm 控制臺完全的磁盤訪問權(quán)限:設(shè)置 -> 安全性與隱私 -> 隱私,添加 iTerm 控制臺程序

注意:由于 Mac OS 使用的 APFS 文件系統(tǒng)默認(rèn)是大小寫不敏感的,而 WebRTC 源碼目錄下不僅存在了大寫名字的這些文件,也同時存在了對應(yīng)的小寫名字的對應(yīng)的文件,所以 APFS 系統(tǒng)無法將這兩種文件區(qū)分開來,導(dǎo)致同步代碼的時候 git 出現(xiàn):“You have unstaged changes.” 這樣的錯誤,例如,常見的一個錯誤提示如下:

Syncing projects:  85% (114/134) src/third_party/android_tools

src/third_party/android_ndk (ERROR)
----------------------------------------
[0:02:21] Started.
----------------------------------------
Error: 83>
83> ____ src/third_party/android_ndk at 4e2cea441bfd43f0863d14f57b1e1844260b9884
83>     You have unstaged changes.
83>     Please commit, stash, or reset.

解決方案:打開 Mac 電腦的 “磁盤工具”,新建一個卷宗(假設(shè)叫:fs)用于放置 webrtc 源碼,如:/Volumes/fs/webrtc,注意選擇格式為:APFS(區(qū)分大小寫)這種配置。

5 啟動并進(jìn)入虛擬機(jī)

$ cd webrtc-builder
$ vagrant up
$ vagrant ssh

剩下的步驟就參考上面的“編譯步驟和過程”章節(jié)即可,編譯完成后,可以通過 vagrant suspend 或者 vagrant halt 命令掛起或者關(guān)閉虛擬機(jī)。

三、小結(jié)

關(guān)于如何編譯 WebRTC Android 平臺源碼就分享到這里了,如有疑問的小伙伴歡迎來信 lujun.hust@gmail.com 交流。另外,也歡迎大家關(guān)注我的新浪微博 @盧_俊 或者 微信公眾號 @Jhuster 獲取最新的文章和資訊。

WebRTC 開發(fā)實(shí)踐:編譯 Android 平臺源碼


向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報,并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI