269 lines
8.6 KiB
Markdown
269 lines
8.6 KiB
Markdown
# WebRTC development
|
|
|
|
The currently supported platforms are Windows, Mac OS X, Linux, Android and
|
|
iOS. See the [Android][webrtc-android-development] and [iOS][webrtc-ios-development]
|
|
pages for build instructions and example applications specific to these mobile platforms.
|
|
|
|
|
|
## Before You Start
|
|
|
|
First, be sure to install the [prerequisite software][webrtc-prerequisite-sw].
|
|
|
|
[webrtc-prerequisite-sw]: https://webrtc.googlesource.com/src/+/refs/heads/master/docs/native-code/development/prerequisite-sw/index.md
|
|
|
|
|
|
## Getting the Code
|
|
|
|
For desktop development:
|
|
|
|
1. Create a working directory, enter it, and run `fetch webrtc`:
|
|
|
|
```
|
|
$ mkdir webrtc-checkout
|
|
$ cd webrtc-checkout
|
|
$ fetch --nohooks webrtc
|
|
$ gclient sync
|
|
```
|
|
|
|
NOTICE: During your first sync, you'll have to accept the license agreement of the Google Play Services SDK.
|
|
|
|
The checkout size is large due the use of the Chromium build toolchain and many dependencies. Estimated size:
|
|
|
|
* Linux: 6.4 GB.
|
|
* Linux (with Android): 16 GB (of which ~8 GB is Android SDK+NDK images).
|
|
* Mac (with iOS support): 5.6GB
|
|
|
|
2. Optionally you can specify how new branches should be tracked:
|
|
|
|
```
|
|
$ git config branch.autosetupmerge always
|
|
$ git config branch.autosetuprebase always
|
|
```
|
|
|
|
3. Alternatively, you can create new local branches like this (recommended):
|
|
|
|
```
|
|
$ cd src
|
|
$ git checkout master
|
|
$ git new-branch your-branch-name
|
|
```
|
|
|
|
See the [Android][webrtc-android-development] and [iOS][webrtc-ios-development] pages for separate instructions.
|
|
|
|
**NOTICE:** if you get `Remote: Daily bandwidth rate limit exceeded for <ip>`,
|
|
make sure you're logged in. The quota is much larger for logged in users.
|
|
|
|
## Updating the Code
|
|
|
|
Update your current branch with:
|
|
|
|
```
|
|
$ git checkout master
|
|
$ git pull origin master
|
|
$ gclient sync
|
|
$ git checkout my-branch
|
|
$ git merge master
|
|
```
|
|
|
|
## Building
|
|
|
|
[Ninja][ninja] is the default build system for all platforms.
|
|
|
|
See the [Android][webrtc-android-development] and [iOS][webrtc-ios-development] pages for build
|
|
instructions specific to those platforms.
|
|
|
|
## Generating Ninja project files
|
|
|
|
[Ninja][ninja] project files are generated using [GN][gn]. They're put in a
|
|
directory of your choice, like `out/Debug` or `out/Release`, but you can
|
|
use any directory for keeping multiple configurations handy.
|
|
|
|
To generate project files using the defaults (Debug build), run (standing in
|
|
the src/ directory of your checkout):
|
|
|
|
```
|
|
$ gn gen out/Default
|
|
```
|
|
|
|
To generate ninja project files for a Release build instead:
|
|
|
|
```
|
|
$ gn gen out/Default --args='is_debug=false'
|
|
```
|
|
|
|
To clean all build artifacts in a directory but leave the current GN
|
|
configuration untouched (stored in the args.gn file), do:
|
|
|
|
```
|
|
$ gn clean out/Default
|
|
```
|
|
|
|
See the [GN][gn-doc] documentation for all available options. There are also more
|
|
platform specific tips on the [Android][webrtc-android-development] and
|
|
[iOS][webrtc-ios-development] instructions.
|
|
|
|
## Compiling
|
|
|
|
When you have Ninja project files generated (see previous section), compile
|
|
(standing in `src/`) using:
|
|
|
|
For [Ninja][ninja] project files generated in `out/Default`:
|
|
|
|
```
|
|
$ ninja -C out/Default
|
|
```
|
|
|
|
|
|
## Using Another Build System
|
|
|
|
Other build systems are **not supported** (and may fail), such as Visual
|
|
Studio on Windows or Xcode on OSX. GN supports a hybrid approach of using
|
|
[Ninja][ninja] for building, but Visual Studio/Xcode for editing and driving
|
|
compilation.
|
|
|
|
To generate IDE project files, pass the `--ide` flag to the [GN][gn] command.
|
|
See the [GN reference][gn-doc] for more details on the supported IDEs.
|
|
|
|
|
|
## Working with Release Branches
|
|
|
|
To see available release branches, run:
|
|
|
|
```
|
|
$ git branch -r
|
|
```
|
|
|
|
To create a local branch tracking a remote release branch (in this example,
|
|
the 43 branch):
|
|
|
|
```
|
|
$ git checkout -b my_branch refs/remotes/branch-heads/43
|
|
$ gclient sync
|
|
```
|
|
|
|
**NOTICE**: depot_tools are not tracked with your checkout, so it's possible gclient
|
|
sync will break on sufficiently old branches. In that case, you can try using
|
|
an older depot_tools:
|
|
|
|
```
|
|
which gclient
|
|
$ # cd to depot_tools dir
|
|
$ # edit update_depot_tools; add an exit command at the top of the file
|
|
$ git log # find a hash close to the date when the branch happened
|
|
$ git checkout <hash>
|
|
$ cd ~/dev/webrtc/src
|
|
$ gclient sync
|
|
$ # When done, go back to depot_tools, git reset --hard, run gclient again and
|
|
$ # verify the current branch becomes REMOTE:origin/master
|
|
```
|
|
|
|
The above is untested and unsupported, but it might help.
|
|
|
|
Commit log for the branch: [https://webrtc.googlesource.com/src/+log/branch-heads/43][m43-log]
|
|
To browse it: [https://webrtc.googlesource.com/src/+/branch-heads/43][m43]
|
|
|
|
For more details, read Chromium's [Working with Branches][chromium-work-branches] and
|
|
[Working with Release Branches][chromium-work-release-branches] pages.
|
|
|
|
|
|
## Contributing Patches
|
|
|
|
Please see [Contributing Fixes][webrtc-contributing] for information on how to run
|
|
`git cl upload`, getting your patch reviewed, and getting it submitted. You can also
|
|
find info on how to run trybots and applying for try rights.
|
|
|
|
## Chromium Committers
|
|
|
|
Many WebRTC committers are also Chromium committers. To make sure to use the
|
|
right account for pushing commits to WebRTC, use the `user.email` Git config
|
|
setting. The recommended way is to have the chromium.org account set globally
|
|
as described at the [depot tools setup page][depot-tools] and then set `user.email`
|
|
locally for the WebRTC repos using (change to your webrtc.org address):
|
|
|
|
```
|
|
$ cd /path/to/webrtc/src
|
|
$ git config user.email yourname@webrtc.org
|
|
```
|
|
|
|
## Example Applications
|
|
|
|
WebRTC contains several example applications, which can be found under
|
|
`src/webrtc/examples`. Higher level applications are listed first.
|
|
|
|
|
|
### Peerconnection
|
|
|
|
Peerconnection consist of two applications using the WebRTC Native APIs:
|
|
|
|
* A server application, with target name `peerconnection_server`
|
|
* A client application, with target name `peerconnection_client` (not currently supported on Mac/Android)
|
|
|
|
The client application has simple voice and video capabilities. The server
|
|
enables client applications to initiate a call between clients by managing
|
|
signaling messages generated by the clients.
|
|
|
|
|
|
#### Setting up P2P calls between peerconnection_clients
|
|
|
|
Start `peerconnection_server`. You should see the following message indicating
|
|
that it is running:
|
|
|
|
```
|
|
Server listening on port 8888
|
|
```
|
|
|
|
Start any number of `peerconnection_clients` and connect them to the server.
|
|
The client UI consists of a few parts:
|
|
|
|
**Connecting to a server:** When the application is started you must specify
|
|
which machine (by IP address) the server application is running on. Once that
|
|
is done you can press **Connect** or the return button.
|
|
|
|
**Select a peer:** Once successfully connected to a server, you can connect to
|
|
a peer by double-clicking or select+press return on a peer's name.
|
|
|
|
**Video chat:** When a peer has been successfully connected to, a video chat
|
|
will be displayed in full window.
|
|
|
|
**Ending chat session:** Press **Esc**. You will now be back to selecting a
|
|
peer.
|
|
|
|
**Ending connection:** Press **Esc** and you will now be able to select which
|
|
server to connect to.
|
|
|
|
|
|
#### Testing peerconnection_server
|
|
|
|
Start an instance of `peerconnection_server` application.
|
|
|
|
Open `src/webrtc/examples/peerconnection/server/server_test.html` in your
|
|
browser. Click **Connect**. Observe that the `peerconnection_server` announces
|
|
your connection. Open one more tab using the same page. Connect it too (with a
|
|
different name). It is now possible to exchange messages between the connected
|
|
peers.
|
|
|
|
### STUN Server
|
|
|
|
Target name `stunserver`. Implements the STUN protocol for Session Traversal
|
|
Utilities for NAT as documented in [RFC 5389][rfc-5389].
|
|
|
|
|
|
### TURN Server
|
|
|
|
Target name `turnserver`. Used for unit tests.
|
|
|
|
|
|
[ninja]: https://ninja-build.org/
|
|
[gn]: https://gn.googlesource.com/gn/+/master/README.md
|
|
[gn-doc]: https://gn.googlesource.com/gn/+/master/docs/reference.md#IDE-options
|
|
[webrtc-android-development]: https://webrtc.googlesource.com/src/+/refs/heads/master/docs/native-code/android/index.md
|
|
[webrtc-ios-development]: https://webrtc.googlesource.com/src/+/refs/heads/master/docs/native-code/ios/index.md
|
|
[chromium-work-branches]: https://www.chromium.org/developers/how-tos/get-the-code/working-with-branches
|
|
[chromium-work-release-branches]: https://www.chromium.org/developers/how-tos/get-the-code/working-with-release-branches
|
|
[webrtc-contributing]: https://webrtc.org/support/contributing/
|
|
[depot-tools]: http://commondatastorage.googleapis.com/chrome-infra-docs/flat/depot_tools/docs/html/depot_tools_tutorial.html#_setting_up
|
|
[rfc-5389]: https://tools.ietf.org/html/rfc5389
|
|
[rfc-5766]: https://tools.ietf.org/html/rfc5766
|
|
[m43-log]: https://webrtc.googlesource.com/src/+log/branch-heads/43
|
|
[m43]: https://webrtc.googlesource.com/src/+/branch-heads/43
|