-
-
Notifications
You must be signed in to change notification settings - Fork 55
WebRTCnative
The bottom of the stack, and a separate repository: melihercan/WebRTCnative. It builds Google's WebRTC native libraries for every platform and publishes them as GitHub Actions artifacts. WebRTCme consumes the results.
You do not need it to use WebRTCme. The native binaries are already committed here and already inside the published packages. This page exists for the two cases where it matters: you want to know which WebRTC version you are shipping, or you want to build it yourself.
Its own wiki is the reference. This page is a summary and a set of pointers.
Building WebRTC needs depot_tools, a checkout of roughly 30 GB, and a long compile on a machine
with the right platform SDK. None of that belongs in an application repository, and nobody wants it
on their laptop. Keeping it elsewhere means the expensive part happens on GitHub's runners, on
demand, and WebRTCme consumes prebuilt binaries.
flowchart LR
src["webrtc.googlesource.com<br/>+ chromiumdash — which milestone is stable?"]
gha["WebRTCnative<br/>GitHub Actions"]
and2["libwebrtc.aar"]
ios["WebRTC.xcframework"]
mac["WebRTC.framework"]
win["WebRtcInterop.dll<br/>+ its import closure"]
ba["Bindings.Maui.Android"]
bi["Bindings.Maui.iOS"]
bm["Bindings.Maui.MacCatalyst"]
bw["Bindings.Maui.Windows"]
src --> gha
gha --> and2 --> ba
gha --> ios --> bi
gha --> mac --> bm
gha --> win --> bw
Blazor is absent from that picture on purpose: there is no native payload on the web, because the browser already ships WebRTC. See Bindings.
Windows is the odd one. The other three artifacts are the platform SDKs Google itself publishes —
a Java SDK, an Objective-C framework. There is no such SDK for Windows, so WebRTCnative builds one:
WebRtcInterop.dll, a flat C ABI over libwebrtc, designed to be P/Invoked. Its contract is the
Interop ABI page.
It is a property of the build, not of this repository, and that is deliberate. Nothing in WebRTCme pins a WebRTC version. Each WebRTCnative run resolves one: given a branch number it uses that, and given nothing it asks the Chromium dashboard for the newest milestone that has reached stable and takes that milestone's branch head.
Two consequences:
- The answer lives in the artifact name of the run a binary came from —
webrtc-<platform>-m<milestone>-<branch>. - Two artifacts built on different days can be different WebRTC versions from identical inputs, because "newest stable milestone" moves.
WebRTCme.Bindings/README_NativeSdkVersions.txt records when each artifact was committed here,
which is the closest thing to a version this repository honestly knows. It used to record version
numbers and they were four years stale and believed, which is why it no longer does.
Summarised; the detail is in Consuming the artifacts.
-
Run the workflow for the platform from WebRTCnative's Actions tab. Leave the inputs blank for the current stable milestone, or set
webrtc_branchto pin one. Expect about an hour. -
Download the artifact and copy the payload into the matching binding project:
lands in Android WebRTCme.Bindings/Maui/WebRTCme.Bindings.Maui.Android/Jars/libwebrtc.aariOS WebRTCme.Bindings/Maui/WebRTCme.Bindings.Maui.iOS/WebRTC.xcframeworkMac Catalyst WebRTCme.Bindings/Maui/WebRTCme.Bindings.Maui.MacCatalyst/WebRTC.frameworkWindows WebRTCme.Bindings/Maui/WebRTCme.Bindings.Maui.Windows/native/win-x64/ -
On Windows, take only the files that folder's
README.mdlists — the artifact also carries the build machine's debugger tooling, which nothing imports. -
Rebuild the bindings. An Objective-C or Java SDK that has changed shape may need its binding definitions regenerated; see Bindings.
Two things that are easy to get wrong and fail late rather than loudly:
-
Mac Catalyst's
WebRTC.frameworkmust be a versioned bundle —Versions/Aplus symlinks — or macOS refuses to codesign an app embedding it. Windows can neither check those symlinks out of git nor write them into a zip, which is why CI builds that slice on a Mac. - The Windows payload is a component build:
WebRtcInterop.dllis not statically linked and needs its four sibling DLLs plus the MSVC runtime beside it.
| WebRTCnative wiki home | Everything below |
| Running a build | Dispatching a workflow, the inputs, where the artifact lands |
| Branch selection | How a WebRTC branch is chosen, and why nothing is hard-coded |
| Interop ABI | The C contract the Windows binding P/Invokes |
| Platform layers | What is actually inside each artifact, and what is missing |
| Shared library patch | Turning WebRTC's static-only build into a DLL / .so / .dylib |
| Troubleshooting | Build failures seen in practice |
Next layer up: Bindings.
Start here
The stack
- WebRTCnative
- Bindings
- The unified API
- Middleware
- Connection
- · Signaling (mesh)
- · MediaSoup (SFU)
- Demo apps
Reference
When it breaks