2016-12-16 譯:
當前支持Windows ,Mac OS X , Linux, Android 和 IOS平臺.查看Android 和 IOS 的構建說明和這些移動平臺特定的例程.
開始之前
首先,確保安裝 預先要求的工具軟件.
獲取源碼
對於桌面開發者:
1.創建一個工作目錄,進入該目錄,並且運行 fetch webrtc
mkdir webrtc-checkout
cd webrtc-checkout
fetch --nohooks webrtc
gclient sync
注意:由於bug 5578,你可能需要按’y’ 獲取許可證對話框來下載 Google Play Service SDK.
由於將會下載幾個Gbyte的整個Chromium 存儲庫和依賴關係,下載過程將會耗費很長時間.
不要中斷其中的步驟,否則將需要全部重新開始(可能需要在執行gclient sync前清理).
2.(可選)設置如何跟蹤新分支
git config branch.autosetupmerge always
git config branch.autosetuprebase always
3.或者你可以創建新的分支(推薦):
cd src
git checkout master
git new-branch your-branch-name
更新代碼
使用下面的命令更新當前的分支
git pull
注意:如果你不是在一個分支上,git pull 將不起作用,你需要使用git fetch 代替之.
定期更新WebRTC的構建工具鏈和依賴關係.可以通過下列命令獲取更新:
gclient sync
構建
Ninja是所有平臺的默認構建系統
查看 Android和 iOS 這些平臺單獨的構建說明.
生成Ninja工程文件
使用GN 生成 Ninja 工程文件,它將根據你的選擇創建一個路徑,像 out/Debug 或 out/Release ,你也可以使用任何路徑靈活地保存多個配置.
爲了生成默認(Debug build)的工程文件,執行:(在 src/ 路徑下執行)
gn gen out/Default
注意:默認下調試構建是組件構建(動態共享庫), 當需要發行構建時需要將is_component_build=false 傳遞給gn gen –args 發行構建默認是靜態庫.
使用下列命令來發行構建ninja工程文件:
gn gen out/Default --args='is_debug=false'
要清除目錄中的所有構建工件,但保留當前GN配置(存儲在args.gn文件中),請執行:
gn clean out/Default
查看GN文檔獲取可用的選項.更多祥光平臺提示信息可以查看Android和iOS
使用GYP(已棄用)
注意:GYP不再受支持,並且可能很快消逝.我們鼓勵你儘快遷移到GN上來.如果你仍需要使用GYP,請參考在generate_build_file中GYP構建步驟的命令行,這裏.
使用GYP時,Ninja的工程文件默認由GYP在out/Debug 和out/Release 中生成.重新生成Ninja 工程文件需要執行:
python webrtc/build/gyp_webrtc.py
編譯
當你使用Ninja工程文件後,在 src/ 路徑下使用:
對於Ninja工程文件,默認生成到 out/Default :
ninja -C out/Default
使用其他構建系統
其他構建系統是不受支持的(容易失敗),例如Windows下的Visual Studio 或 OSX下的Xcode .GN支持使用Ninja構建的混合方法,但Visual Studio/Xcode 可用於編輯和驅動編譯.
要生成IDE工程文件,傳遞–ide 標誌位給GN命令. 參照GN參考獲悉更多支持IDEs的細節.
使用發佈分支
查看可用的發佈分支可以執行:
git branch -r
注意:如果你只看到本地分支,則是在我們切換到Git(2015.03.24)之前創建的checkout,這種情況下,首先執行:
cd /path/to/webrtc/src
gclient sync --with_branch_heads
git fetch origin
你現在應該在.git/config [remote “origin”]下可以找到下列條目:
fetch = +refs/branch-heads/*:refs/remotes/branch-heads/*
創建一個本地分支跟蹤遠程發佈分支(在下列例子中是 “43” 分支):
git checkout -b my_branch refs/remotes/branch-heads/43
分支的提交日誌:https://chromium.googlesource.com/external/webrtc/+log/branch-heads/43
瀏覽它:https://chromium.googlesource.com/external/webrtc/+/branch-heads/43
查看更多細節,可參照Chromium的Working with Branches和Working with Release Branches
貢獻補丁
請參照Contributing Fixes獲悉如何在WebRTC代碼基礎下提交修改,同時,你需要設置認證從而來提交補丁.
提交代碼
要直接提交代碼到Git倉庫,你必須是一個提交者。 外部貢獻者創建的CL可以通過提交隊列(Commit Queue,CQ)提交。
真正的源碼在Git倉庫 : https://chromium.googlesource.com/external/webrtc. 爲了確保可以提交代碼. 你需要執行一下步驟(前提你是提交者).
1.前往https://chromium.googlesource.com/new-password 並且登錄你的webrtc.org賬戶.
2.按照如何在本地路徑下認證.gitcookies文件的說明.
3.前往https://chromium-review.googlesource.com 並且登錄你的webrtc.org賬號.該操作將會在Gerrit認證系統下創建正確的提交者組織的用戶.
4.請求添加到提交者組織中.以能夠推送代碼.
5.確保你在depot tools setup page的指定git配置中的設置user.name 和 user.email .如果你同時是chromium的代碼提交者,閱讀下一節.
使用以下命令提交修改列表到GIT倉庫中
git cl land
注意:在Windows下,你將需要在git bash 下運行該指令以保證gclient找到.gitcookies文件.
有時候有必要繞過預提交檢查(就像修復已經關閉的樹的錯誤),然後使用 -bypass-hooks 標誌.
Chromium 提交者
許多WebRTC代碼提交者同時也是Chromium代碼提交者,在Git 配置中設置user.email 以確保以正確的賬號推送提交的代碼.推薦的做法是在全局設置Chromium.org 的賬號,在本地設置user.email 倉庫使用者(該爲你的webrtc.org地址).
cd /path/to/webrtc/src
git config user.email yourname@webrtc.org
示例應用程序
WebRTC包含幾個示例程序,這些應用程序可以在 src/webrtc/example 和 src/talk/example下找到.以下首先列出的是高級的應用程序.
Peerconnection
Peerconnection 使用WebRTC Native APIs,由兩個應用程序組成.
- 一個服務端程序,目標名稱爲:peerconnection_server ;
- 一個客戶端程序,目標名稱爲:peerconnection_client ;
客戶端可以簡單地俘獲音頻和視頻,服務器使得客戶端應用能夠通過管理由客戶端生成的信令消息來發起客戶端之間的呼叫。
在兩個peerconnection_client 之間建立p2p連接
啓動peerconnection_server後,你可以在它運行後看到以下信息:
Server listening on port 8888
啓動任何數量的peerconnection_client 並且將它們連接到服務端上,客戶端的UI界面包含以下幾個部分:
- Connecting to server ,當程序運行後你必須指定服務端具體是哪臺機器(通過IP地址識別),一旦制定後就可以按 Connect 或者 回車按鍵.
- Select a peer : 一旦連接到服務端後,你可以在peer name 上雙擊或者選擇+回車 來和另一個peer連接.
- Video Chat : 兩個peer端建立連接後,Video Chat 將會全屏顯示在窗口上.
- Ending chat session : 按下 Esc,你可以回到選擇peer 的界面上.
- Ending Connection : 按下 ESC ,你可以回到選擇server 的界面上.
- Testing Peerconnection_server : 啓動 peerconnection_server 的應用實例,在瀏覽器中打開路徑爲rc/webrtc/examples/peerconnection/server/server_test.html 的html 文本,點擊connect,注意peerconnection_server 將會公示你的連接,打開一個以上同樣鏈接的 tab ,連接上它(使用不同的名稱),現在你可能可以在連接的peer兩端上交換信息了.
Call App
目標名稱爲call(當前以取消),一個使用libjingle建立呼叫的應用程序,call 使用xmpp 以使你可以登錄到gmail賬戶並且和gmail好友進行音頻和視頻通話.這是建立在libjingle之上來提供此功能的.
此外,你可以指定RTP輸入輸出的儲存庫,它提供兩個簡單的輸入RTP儲存庫:包含單信道流的voice.rtpdump,使用G722編碼的16khz的視頻流,以及包含的30幀每秒,H264編碼的320x240 video.rtpdump, 所提供的示例將可以和Google Talk Video 互操作.如果你指定了不同的輸入RTP dump 你需要在call_main.cc (215-222行)中修改編碼器.
Relay Server
目標名稱爲:relayserver ,在直接的p2p 連接無法建立的情況下提供中繼傳輸.可用於Call應用程序中.
STUN Server
目標名稱: stunserver ;實現用於遍歷NAT實用工具協議的服務器;參閱 RFC5389說明文檔.
TURN Server
目標名稱: turnserver ; 實際開發中和 RFC 5766 達到兼容