xref: /aosp_15_r20/external/webrtc/docs/native-code/development/index.md (revision d9f758449e529ab9291ac668be2861e7a55c2422)
1*d9f75844SAndroid Build Coastguard Worker# WebRTC development
2*d9f75844SAndroid Build Coastguard Worker
3*d9f75844SAndroid Build Coastguard WorkerThe currently supported platforms are Windows, Mac OS X, Linux, Android and
4*d9f75844SAndroid Build Coastguard WorkeriOS. See the [Android][webrtc-android-development] and [iOS][webrtc-ios-development]
5*d9f75844SAndroid Build Coastguard Workerpages for build instructions and example applications specific to these mobile platforms.
6*d9f75844SAndroid Build Coastguard Worker
7*d9f75844SAndroid Build Coastguard Worker
8*d9f75844SAndroid Build Coastguard Worker## Before You Start
9*d9f75844SAndroid Build Coastguard Worker
10*d9f75844SAndroid Build Coastguard WorkerFirst, be sure to install the [prerequisite software][webrtc-prerequisite-sw].
11*d9f75844SAndroid Build Coastguard Worker
12*d9f75844SAndroid Build Coastguard Worker[webrtc-prerequisite-sw]: https://webrtc.googlesource.com/src/+/main/docs/native-code/development/prerequisite-sw/index.md
13*d9f75844SAndroid Build Coastguard Worker
14*d9f75844SAndroid Build Coastguard Worker
15*d9f75844SAndroid Build Coastguard Worker## Getting the Code
16*d9f75844SAndroid Build Coastguard Worker
17*d9f75844SAndroid Build Coastguard WorkerFor desktop development:
18*d9f75844SAndroid Build Coastguard Worker
19*d9f75844SAndroid Build Coastguard Worker1. Create a working directory, enter it, and run `fetch webrtc`:
20*d9f75844SAndroid Build Coastguard Worker
21*d9f75844SAndroid Build Coastguard Worker```
22*d9f75844SAndroid Build Coastguard Worker$ mkdir webrtc-checkout
23*d9f75844SAndroid Build Coastguard Worker$ cd webrtc-checkout
24*d9f75844SAndroid Build Coastguard Worker$ fetch --nohooks webrtc
25*d9f75844SAndroid Build Coastguard Worker$ gclient sync
26*d9f75844SAndroid Build Coastguard Worker```
27*d9f75844SAndroid Build Coastguard Worker
28*d9f75844SAndroid Build Coastguard WorkerNOTICE: During your first sync, you'll have to accept the license agreement of the Google Play Services SDK.
29*d9f75844SAndroid Build Coastguard Worker
30*d9f75844SAndroid Build Coastguard WorkerThe checkout size is large due the use of the Chromium build toolchain and many dependencies. Estimated size:
31*d9f75844SAndroid Build Coastguard Worker
32*d9f75844SAndroid Build Coastguard Worker* Linux: 6.4 GB.
33*d9f75844SAndroid Build Coastguard Worker* Linux (with Android): 16 GB (of which ~8 GB is Android SDK+NDK images).
34*d9f75844SAndroid Build Coastguard Worker* Mac (with iOS support): 5.6GB
35*d9f75844SAndroid Build Coastguard Worker
36*d9f75844SAndroid Build Coastguard Worker2. Optionally you can specify how new branches should be tracked:
37*d9f75844SAndroid Build Coastguard Worker
38*d9f75844SAndroid Build Coastguard Worker```
39*d9f75844SAndroid Build Coastguard Worker$ git config branch.autosetupmerge always
40*d9f75844SAndroid Build Coastguard Worker$ git config branch.autosetuprebase always
41*d9f75844SAndroid Build Coastguard Worker```
42*d9f75844SAndroid Build Coastguard Worker
43*d9f75844SAndroid Build Coastguard Worker3. Alternatively, you can create new local branches like this (recommended):
44*d9f75844SAndroid Build Coastguard Worker
45*d9f75844SAndroid Build Coastguard Worker```
46*d9f75844SAndroid Build Coastguard Worker$ cd src
47*d9f75844SAndroid Build Coastguard Worker$ git checkout main
48*d9f75844SAndroid Build Coastguard Worker$ git new-branch your-branch-name
49*d9f75844SAndroid Build Coastguard Worker```
50*d9f75844SAndroid Build Coastguard Worker
51*d9f75844SAndroid Build Coastguard WorkerSee the [Android][webrtc-android-development] and [iOS][webrtc-ios-development] pages for separate instructions.
52*d9f75844SAndroid Build Coastguard Worker
53*d9f75844SAndroid Build Coastguard Worker**NOTICE:** if you get `Remote: Daily bandwidth rate limit exceeded for <ip>`,
54*d9f75844SAndroid Build Coastguard Workermake sure you're logged in. The quota is much larger for logged in users.
55*d9f75844SAndroid Build Coastguard Worker
56*d9f75844SAndroid Build Coastguard Worker## Updating the Code
57*d9f75844SAndroid Build Coastguard Worker
58*d9f75844SAndroid Build Coastguard WorkerUpdate your current branch with:
59*d9f75844SAndroid Build Coastguard Worker
60*d9f75844SAndroid Build Coastguard Worker```
61*d9f75844SAndroid Build Coastguard Worker$ git checkout main
62*d9f75844SAndroid Build Coastguard Worker$ git pull origin main
63*d9f75844SAndroid Build Coastguard Worker$ gclient sync
64*d9f75844SAndroid Build Coastguard Worker$ git checkout my-branch
65*d9f75844SAndroid Build Coastguard Worker$ git merge main
66*d9f75844SAndroid Build Coastguard Worker```
67*d9f75844SAndroid Build Coastguard Worker
68*d9f75844SAndroid Build Coastguard Worker## Building
69*d9f75844SAndroid Build Coastguard Worker
70*d9f75844SAndroid Build Coastguard Worker[Ninja][ninja] is the default build system for all platforms.
71*d9f75844SAndroid Build Coastguard Worker
72*d9f75844SAndroid Build Coastguard WorkerSee the [Android][webrtc-android-development] and [iOS][webrtc-ios-development] pages for build
73*d9f75844SAndroid Build Coastguard Workerinstructions specific to those platforms.
74*d9f75844SAndroid Build Coastguard Worker
75*d9f75844SAndroid Build Coastguard Worker## Generating Ninja project files
76*d9f75844SAndroid Build Coastguard Worker
77*d9f75844SAndroid Build Coastguard Worker[Ninja][ninja] project files are generated using [GN][gn]. They're put in a
78*d9f75844SAndroid Build Coastguard Workerdirectory of your choice, like `out/Debug` or `out/Release`, but you can
79*d9f75844SAndroid Build Coastguard Workeruse any directory for keeping multiple configurations handy.
80*d9f75844SAndroid Build Coastguard Worker
81*d9f75844SAndroid Build Coastguard WorkerTo generate project files using the defaults (Debug build), run (standing in
82*d9f75844SAndroid Build Coastguard Workerthe src/ directory of your checkout):
83*d9f75844SAndroid Build Coastguard Worker
84*d9f75844SAndroid Build Coastguard Worker```
85*d9f75844SAndroid Build Coastguard Worker$ gn gen out/Default
86*d9f75844SAndroid Build Coastguard Worker```
87*d9f75844SAndroid Build Coastguard Worker
88*d9f75844SAndroid Build Coastguard WorkerTo generate ninja project files for a Release build instead:
89*d9f75844SAndroid Build Coastguard Worker
90*d9f75844SAndroid Build Coastguard Worker```
91*d9f75844SAndroid Build Coastguard Worker$ gn gen out/Default --args='is_debug=false'
92*d9f75844SAndroid Build Coastguard Worker```
93*d9f75844SAndroid Build Coastguard Worker
94*d9f75844SAndroid Build Coastguard WorkerTo clean all build artifacts in a directory but leave the current GN
95*d9f75844SAndroid Build Coastguard Workerconfiguration untouched (stored in the args.gn file), do:
96*d9f75844SAndroid Build Coastguard Worker
97*d9f75844SAndroid Build Coastguard Worker```
98*d9f75844SAndroid Build Coastguard Worker$ gn clean out/Default
99*d9f75844SAndroid Build Coastguard Worker```
100*d9f75844SAndroid Build Coastguard Worker
101*d9f75844SAndroid Build Coastguard WorkerTo build the fuzzers residing in the [test/fuzzers][fuzzers] directory, use
102*d9f75844SAndroid Build Coastguard Worker```
103*d9f75844SAndroid Build Coastguard Worker$ gn gen out/fuzzers --args='use_libfuzzer=true optimize_for_fuzzing=true'
104*d9f75844SAndroid Build Coastguard Worker```
105*d9f75844SAndroid Build Coastguard WorkerDepending on the fuzzer additional arguments like `is_asan`, `is_msan` or `is_ubsan_security` might be required.
106*d9f75844SAndroid Build Coastguard Worker
107*d9f75844SAndroid Build Coastguard WorkerSee the [GN][gn-doc] documentation for all available options. There are also more
108*d9f75844SAndroid Build Coastguard Workerplatform specific tips on the [Android][webrtc-android-development] and
109*d9f75844SAndroid Build Coastguard Worker[iOS][webrtc-ios-development] instructions.
110*d9f75844SAndroid Build Coastguard Worker
111*d9f75844SAndroid Build Coastguard Worker## Compiling
112*d9f75844SAndroid Build Coastguard Worker
113*d9f75844SAndroid Build Coastguard WorkerWhen you have Ninja project files generated (see previous section), compile
114*d9f75844SAndroid Build Coastguard Worker(standing in `src/`) using:
115*d9f75844SAndroid Build Coastguard Worker
116*d9f75844SAndroid Build Coastguard WorkerFor [Ninja][ninja] project files generated in `out/Default`:
117*d9f75844SAndroid Build Coastguard Worker
118*d9f75844SAndroid Build Coastguard Worker```
119*d9f75844SAndroid Build Coastguard Worker$ autoninja -C out/Default
120*d9f75844SAndroid Build Coastguard Worker```
121*d9f75844SAndroid Build Coastguard Worker
122*d9f75844SAndroid Build Coastguard WorkerTo build everything in the generated folder (`out/Default`):
123*d9f75844SAndroid Build Coastguard Worker
124*d9f75844SAndroid Build Coastguard Worker```
125*d9f75844SAndroid Build Coastguard Worker$ autoninja all -C out/Default
126*d9f75844SAndroid Build Coastguard Worker```
127*d9f75844SAndroid Build Coastguard Worker
128*d9f75844SAndroid Build Coastguard Worker`autoninja` is a wrapper that automatically provides optimal values for the arguments passed to `ninja`.
129*d9f75844SAndroid Build Coastguard Worker
130*d9f75844SAndroid Build Coastguard WorkerSee [Ninja build rules][ninja-build-rules] to read more about difference between `ninja` and `ninja all`.
131*d9f75844SAndroid Build Coastguard Worker
132*d9f75844SAndroid Build Coastguard Worker
133*d9f75844SAndroid Build Coastguard Worker## Using Another Build System
134*d9f75844SAndroid Build Coastguard Worker
135*d9f75844SAndroid Build Coastguard WorkerOther build systems are **not supported** (and may fail), such as Visual
136*d9f75844SAndroid Build Coastguard WorkerStudio on Windows or Xcode on OSX. GN supports a hybrid approach of using
137*d9f75844SAndroid Build Coastguard Worker[Ninja][ninja] for building, but Visual Studio/Xcode for editing and driving
138*d9f75844SAndroid Build Coastguard Workercompilation.
139*d9f75844SAndroid Build Coastguard Worker
140*d9f75844SAndroid Build Coastguard WorkerTo generate IDE project files, pass the `--ide` flag to the [GN][gn] command.
141*d9f75844SAndroid Build Coastguard WorkerSee the [GN reference][gn-doc] for more details on the supported IDEs.
142*d9f75844SAndroid Build Coastguard Worker
143*d9f75844SAndroid Build Coastguard Worker
144*d9f75844SAndroid Build Coastguard Worker## Working with Release Branches
145*d9f75844SAndroid Build Coastguard Worker
146*d9f75844SAndroid Build Coastguard WorkerTo see available release branches, run:
147*d9f75844SAndroid Build Coastguard Worker
148*d9f75844SAndroid Build Coastguard Worker```
149*d9f75844SAndroid Build Coastguard Worker$ git branch -r
150*d9f75844SAndroid Build Coastguard Worker```
151*d9f75844SAndroid Build Coastguard Worker
152*d9f75844SAndroid Build Coastguard WorkerTo create a local branch tracking a remote release branch (in this example,
153*d9f75844SAndroid Build Coastguard Workerthe branch corresponding to Chrome M80):
154*d9f75844SAndroid Build Coastguard Worker
155*d9f75844SAndroid Build Coastguard Worker```
156*d9f75844SAndroid Build Coastguard Worker$ git checkout -b my_branch refs/remotes/branch-heads/3987
157*d9f75844SAndroid Build Coastguard Worker$ gclient sync
158*d9f75844SAndroid Build Coastguard Worker```
159*d9f75844SAndroid Build Coastguard Worker
160*d9f75844SAndroid Build Coastguard Worker**NOTICE**: depot_tools are not tracked with your checkout, so it's possible gclient
161*d9f75844SAndroid Build Coastguard Workersync will break on sufficiently old branches. In that case, you can try using
162*d9f75844SAndroid Build Coastguard Workeran older depot_tools:
163*d9f75844SAndroid Build Coastguard Worker
164*d9f75844SAndroid Build Coastguard Worker```
165*d9f75844SAndroid Build Coastguard Workerwhich gclient
166*d9f75844SAndroid Build Coastguard Worker$ # cd to depot_tools dir
167*d9f75844SAndroid Build Coastguard Worker$ # edit update_depot_tools; add an exit command at the top of the file
168*d9f75844SAndroid Build Coastguard Worker$ git log  # find a hash close to the date when the branch happened
169*d9f75844SAndroid Build Coastguard Worker$ git checkout <hash>
170*d9f75844SAndroid Build Coastguard Worker$ cd ~/dev/webrtc/src
171*d9f75844SAndroid Build Coastguard Worker$ gclient sync
172*d9f75844SAndroid Build Coastguard Worker$ # When done, go back to depot_tools, git reset --hard, run gclient again and
173*d9f75844SAndroid Build Coastguard Worker$ # verify the current branch becomes REMOTE:origin/main
174*d9f75844SAndroid Build Coastguard Worker```
175*d9f75844SAndroid Build Coastguard Worker
176*d9f75844SAndroid Build Coastguard WorkerThe above is untested and unsupported, but it might help.
177*d9f75844SAndroid Build Coastguard Worker
178*d9f75844SAndroid Build Coastguard WorkerCommit log for the branch: [https://webrtc.googlesource.com/src/+log/branch-heads/3987][m80-log]
179*d9f75844SAndroid Build Coastguard WorkerTo browse it: [https://webrtc.googlesource.com/src/+/branch-heads/3987][m80]
180*d9f75844SAndroid Build Coastguard Worker
181*d9f75844SAndroid Build Coastguard WorkerFor more details, read Chromium's [Working with Branches][chromium-work-branches] and
182*d9f75844SAndroid Build Coastguard Worker[Working with Release Branches][chromium-work-release-branches] pages.
183*d9f75844SAndroid Build Coastguard WorkerTo find the branch corresponding to a Chrome release check the
184*d9f75844SAndroid Build Coastguard Worker[Chromium Dashboard][https://chromiumdash.appspot.com/branches].
185*d9f75844SAndroid Build Coastguard Worker
186*d9f75844SAndroid Build Coastguard Worker
187*d9f75844SAndroid Build Coastguard Worker## Contributing Patches
188*d9f75844SAndroid Build Coastguard Worker
189*d9f75844SAndroid Build Coastguard WorkerPlease see [Contributing Fixes][contributing] for information on how to run
190*d9f75844SAndroid Build Coastguard Worker`git cl upload`, getting your patch reviewed, and getting it submitted. You can also
191*d9f75844SAndroid Build Coastguard Workerfind info on how to run trybots and applying for try rights.
192*d9f75844SAndroid Build Coastguard Worker
193*d9f75844SAndroid Build Coastguard Worker[contributing]: https://webrtc.googlesource.com/src/+/refs/heads/main/docs/native-code/development/contributing.md
194*d9f75844SAndroid Build Coastguard Worker
195*d9f75844SAndroid Build Coastguard Worker
196*d9f75844SAndroid Build Coastguard Worker## Chromium Committers
197*d9f75844SAndroid Build Coastguard Worker
198*d9f75844SAndroid Build Coastguard WorkerMany WebRTC committers are also Chromium committers. To make sure to use the
199*d9f75844SAndroid Build Coastguard Workerright account for pushing commits to WebRTC, use the `user.email` Git config
200*d9f75844SAndroid Build Coastguard Workersetting. The recommended way is to have the chromium.org account set globally
201*d9f75844SAndroid Build Coastguard Workeras described at the [depot tools setup page][depot-tools] and then set `user.email`
202*d9f75844SAndroid Build Coastguard Workerlocally for the WebRTC repos using (change to your webrtc.org address):
203*d9f75844SAndroid Build Coastguard Worker
204*d9f75844SAndroid Build Coastguard Worker```
205*d9f75844SAndroid Build Coastguard Worker$ cd /path/to/webrtc/src
206*d9f75844SAndroid Build Coastguard Worker$ git config user.email [email protected]
207*d9f75844SAndroid Build Coastguard Worker```
208*d9f75844SAndroid Build Coastguard Worker
209*d9f75844SAndroid Build Coastguard Worker## Example Applications
210*d9f75844SAndroid Build Coastguard Worker
211*d9f75844SAndroid Build Coastguard WorkerWebRTC contains several example applications, which can be found under
212*d9f75844SAndroid Build Coastguard Worker`src/webrtc/examples`. Higher level applications are listed first.
213*d9f75844SAndroid Build Coastguard Worker
214*d9f75844SAndroid Build Coastguard Worker
215*d9f75844SAndroid Build Coastguard Worker### Peerconnection
216*d9f75844SAndroid Build Coastguard Worker
217*d9f75844SAndroid Build Coastguard WorkerPeerconnection consist of two applications using the WebRTC Native APIs:
218*d9f75844SAndroid Build Coastguard Worker
219*d9f75844SAndroid Build Coastguard Worker* A server application, with target name `peerconnection_server`
220*d9f75844SAndroid Build Coastguard Worker* A client application, with target name `peerconnection_client` (not currently supported on Mac/Android)
221*d9f75844SAndroid Build Coastguard Worker
222*d9f75844SAndroid Build Coastguard WorkerThe client application has simple voice and video capabilities. The server
223*d9f75844SAndroid Build Coastguard Workerenables client applications to initiate a call between clients by managing
224*d9f75844SAndroid Build Coastguard Workersignaling messages generated by the clients.
225*d9f75844SAndroid Build Coastguard Worker
226*d9f75844SAndroid Build Coastguard Worker
227*d9f75844SAndroid Build Coastguard Worker#### Setting up P2P calls between peerconnection_clients
228*d9f75844SAndroid Build Coastguard Worker
229*d9f75844SAndroid Build Coastguard WorkerStart `peerconnection_server`. You should see the following message indicating
230*d9f75844SAndroid Build Coastguard Workerthat it is running:
231*d9f75844SAndroid Build Coastguard Worker
232*d9f75844SAndroid Build Coastguard Worker```
233*d9f75844SAndroid Build Coastguard WorkerServer listening on port 8888
234*d9f75844SAndroid Build Coastguard Worker```
235*d9f75844SAndroid Build Coastguard Worker
236*d9f75844SAndroid Build Coastguard WorkerStart any number of `peerconnection_clients` and connect them to the server.
237*d9f75844SAndroid Build Coastguard WorkerThe client UI consists of a few parts:
238*d9f75844SAndroid Build Coastguard Worker
239*d9f75844SAndroid Build Coastguard Worker**Connecting to a server:** When the application is started you must specify
240*d9f75844SAndroid Build Coastguard Workerwhich machine (by IP address) the server application is running on. Once that
241*d9f75844SAndroid Build Coastguard Workeris done you can press **Connect** or the return button.
242*d9f75844SAndroid Build Coastguard Worker
243*d9f75844SAndroid Build Coastguard Worker**Select a peer:** Once successfully connected to a server, you can connect to
244*d9f75844SAndroid Build Coastguard Workera peer by double-clicking or select+press return on a peer's name.
245*d9f75844SAndroid Build Coastguard Worker
246*d9f75844SAndroid Build Coastguard Worker**Video chat:** When a peer has been successfully connected to, a video chat
247*d9f75844SAndroid Build Coastguard Workerwill be displayed in full window.
248*d9f75844SAndroid Build Coastguard Worker
249*d9f75844SAndroid Build Coastguard Worker**Ending chat session:** Press **Esc**. You will now be back to selecting a
250*d9f75844SAndroid Build Coastguard Workerpeer.
251*d9f75844SAndroid Build Coastguard Worker
252*d9f75844SAndroid Build Coastguard Worker**Ending connection:** Press **Esc** and you will now be able to select which
253*d9f75844SAndroid Build Coastguard Workerserver to connect to.
254*d9f75844SAndroid Build Coastguard Worker
255*d9f75844SAndroid Build Coastguard Worker
256*d9f75844SAndroid Build Coastguard Worker#### Testing peerconnection_server
257*d9f75844SAndroid Build Coastguard Worker
258*d9f75844SAndroid Build Coastguard WorkerStart an instance of `peerconnection_server` application.
259*d9f75844SAndroid Build Coastguard Worker
260*d9f75844SAndroid Build Coastguard WorkerOpen `src/webrtc/examples/peerconnection/server/server_test.html` in your
261*d9f75844SAndroid Build Coastguard Workerbrowser. Click **Connect**. Observe that the `peerconnection_server` announces
262*d9f75844SAndroid Build Coastguard Workeryour connection. Open one more tab using the same page. Connect it too (with a
263*d9f75844SAndroid Build Coastguard Workerdifferent name). It is now possible to exchange messages between the connected
264*d9f75844SAndroid Build Coastguard Workerpeers.
265*d9f75844SAndroid Build Coastguard Worker
266*d9f75844SAndroid Build Coastguard Worker### STUN Server
267*d9f75844SAndroid Build Coastguard Worker
268*d9f75844SAndroid Build Coastguard WorkerTarget name `stunserver`. Implements the STUN protocol for Session Traversal
269*d9f75844SAndroid Build Coastguard WorkerUtilities for NAT as documented in [RFC 5389][rfc-5389].
270*d9f75844SAndroid Build Coastguard Worker
271*d9f75844SAndroid Build Coastguard Worker
272*d9f75844SAndroid Build Coastguard Worker### TURN Server
273*d9f75844SAndroid Build Coastguard Worker
274*d9f75844SAndroid Build Coastguard WorkerTarget name `turnserver`. Used for unit tests.
275*d9f75844SAndroid Build Coastguard Worker
276*d9f75844SAndroid Build Coastguard Worker
277*d9f75844SAndroid Build Coastguard Worker[ninja]: https://ninja-build.org/
278*d9f75844SAndroid Build Coastguard Worker[ninja-build-rules]: https://gn.googlesource.com/gn/+/master/docs/reference.md#the-all-and-default-rules
279*d9f75844SAndroid Build Coastguard Worker[gn]: https://gn.googlesource.com/gn/+/master/README.md
280*d9f75844SAndroid Build Coastguard Worker[gn-doc]: https://gn.googlesource.com/gn/+/master/docs/reference.md#IDE-options
281*d9f75844SAndroid Build Coastguard Worker[webrtc-android-development]: https://webrtc.googlesource.com/src/+/main/docs/native-code/android/index.md
282*d9f75844SAndroid Build Coastguard Worker[webrtc-ios-development]: https://webrtc.googlesource.com/src/+/main/docs/native-code/ios/index.md
283*d9f75844SAndroid Build Coastguard Worker[chromium-work-branches]: https://www.chromium.org/developers/how-tos/get-the-code/working-with-branches
284*d9f75844SAndroid Build Coastguard Worker[chromium-work-release-branches]: https://www.chromium.org/developers/how-tos/get-the-code/working-with-release-branches
285*d9f75844SAndroid Build Coastguard Worker[depot-tools]: http://commondatastorage.googleapis.com/chrome-infra-docs/flat/depot_tools/docs/html/depot_tools_tutorial.html#_setting_up
286*d9f75844SAndroid Build Coastguard Worker[rfc-5389]: https://tools.ietf.org/html/rfc5389
287*d9f75844SAndroid Build Coastguard Worker[rfc-5766]: https://tools.ietf.org/html/rfc5766
288*d9f75844SAndroid Build Coastguard Worker[m80-log]: https://webrtc.googlesource.com/src/+log/branch-heads/3987
289*d9f75844SAndroid Build Coastguard Worker[m80]: https://webrtc.googlesource.com/src/+/branch-heads/3987
290*d9f75844SAndroid Build Coastguard Worker[fuzzers]: https://webrtc.googlesource.com/src/+/main/test/fuzzers/
291