A .NET implementation of the WebRTC standard built using the WebRTC Project native client for Windows desktop applications. WebRtcNet is not endorsed by or affiliated with Google or the WebRTC Project in any way.
WebRtcNet currently uses WebRTC branch-heads/7778, which corresponds to Chromium milestone 148 (see https://chromiumdash.appspot.com/branches).
See WebRTC 1.0: Real-time Communication Between Browsers for API documentation.
- Human contributor workflow requirements:
CONTRIBUTING.md - AI execution guardrails for this repository:
Agents.md
This repository keeps a local standards corpus in docs\standards\specs\ to support standards-alignment work in WebRtcNet.Api without repeated web fetching.
- Canonical snapshots:
TR-*.html - Copilot-friendly artifacts:
*-summary.md,*-idl.webidl, andspecs\index\spec-map.* - API mapping:
docs\standards\crosswalk\webrtcnet-api-to-spec.md
Refresh with:
.\scripts\update-spec-docs.ps1Recommended refresh triggers:
- Monthly (scheduled automation is available in
.github\workflows\update-spec-docs.yml). - After public API changes in
WebRtcNet.Apithat affect spec alignment.
The easiest way to get started is to pull the pre-built WebRTC artifacts from the GitHub Container Registry. This avoids a multi-hour native build.
Prerequisites: Docker Desktop configured for Windows containers.
.\docker\get-webrtc-artifacts.ps1 -WebRtcBranch 7778This pulls ghcr.io/general-fault/webrtc:msvc-shared-7778 and extracts headers, .inc/module files, and libraries to third-party\google\webrtc\ inside the repository. No files are written outside the repo.
If you already built the artifacts image locally, you can skip GHCR and extract directly from that local image:
.\docker\get-webrtc-artifacts.ps1 -LocalWebRtcInterop.BuildPaths.props automatically detects the artifact directory and sets the correct include and library paths. No environment variables or Visual Studio restart are required.
dotnet restore WebRtcNet.slnx
dotnet build WebRtcNet.Api\WebRtcNet.Api.csproj -c Debug
dotnet msbuild WebRtcInterop\WebRtcInterop.Framework.vcxproj /p:Configuration=Debug /p:Platform=x64Or build the full solution:
dotnet msbuild WebRtcNet.slnx /p:Configuration=Debug /p:Platform=x64dotnet test WebRtcNet.Api.UnitTests\WebRtcNet.Api.UnitTests.csprojC++/CLI interop tests (requires a built WebRTC):
dotnet msbuild WebRtcInterop.UnitTests\WebRtcInterop.UnitTests.vcxproj /p:Configuration=Debug /p:Platform=x64
.\WebRtcInterop.UnitTests\x64\Debug\WebRtcInterop.UnitTests.exeThe build pipeline uses individual-stage Dockerfiles rather than a single monolithic file. docker buildx is not used — Windows containers require classic docker build.
| Dockerfile | Purpose |
|---|---|
docker\Dockerfile.webrtc-toolchain |
VS Build Tools, depot_tools, git |
docker\Dockerfile.webrtc-sync |
Syncs WebRTC source for a given branch |
docker\Dockerfile.webrtc-build |
Compiles WebRTC (webrtc-build stage) |
docker\Dockerfile.webrtc |
Creates webrtc-artifacts-stage, webrtc-artifacts, and final webrtc image tags from prebuilt inputs |
docker\Dockerfile.webrtcnet |
Builds WebRtcNet using artifacts from GHCR |
docker\build-images.ps1 orchestrates the full pipeline:
.\docker\build-images.ps1 -WebRtcBranch 7778By default this builds all images locally without publishing. Add -Publish to push only the artifacts image (ghcr.io/general-fault/webrtc:msvc-shared-<branch>) to GHCR. Skip stages you haven't changed with -SkipToolchain and -SkipSync. Speed up the sync stage during Dockerfile iteration with -FastDevSync.
For publishing, the script can automatically load credentials from a repo-local .env file and run docker login for you. Copy .env.example to .env and set:
GHCR_USERNAME=General-Fault
GHCR_PAT=<classic PAT with write:packages>Then publish normally:
.\docker\build-images.ps1 -WebRtcBranch 7778 -PublishThe WebRTC build takes several hours. The GitHub Actions workflow (build-webrtc.yml) can be triggered manually via workflow_dispatch and runs on windows-2025. It pushes only webrtc:msvc-shared-<branch> to GHCR. A self-hosted runner is recommended for the WebRTC build.
If you intend to build the native WebRTC library outside of the Docker pipeline, follow the Google WebRTC native build instructions — they change periodically. The short version:
-
Install Visual Studio 2022 or later (Community Edition is sufficient).
- "Desktop development with C++" workload
- 10.0.26100.0 Windows 11 SDK
-
Install Chromium depot_tools.
-
Configure git:
git config --global user.name "My Name" git config --global user.email "name@email" git config --global core.autocrlf false git config --global core.filemode false git config branch.autosetupmerge always git config branch.autosetuprebase always -
Fetch and sync the WebRTC source (~10 GB):
fetch --nohooks webrtc git checkout -b webrtcnet_148 refs/remotes/branch-heads/7778 gclient sync -
Point Visual Studio at your local build by setting environment variables or by placing the source tree so that
WebRtcInterop.BuildPaths.propscan find it:WEBRTC_SRC_PATH— path to the WebRTCsrc\directory (overrides the repo-local default)WEBRTC_OUT_PATH— path where build outputs land (overrides the repo-local default)- Leave
WEBRTC_PREBUILTunset (or0) so the gn/ninja custom build step runs on first build.