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
查看Android 和 iOS 单独的说明
更新代码
使用下面的命令更新当前的分支
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_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 达到兼容