Skip to content

Repository files navigation

WebRtcNet

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.

Contribution and AI guidance

  • Human contributor workflow requirements: CONTRIBUTING.md
  • AI execution guardrails for this repository: Agents.md

Local W3C spec corpus

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, and specs\index\spec-map.*
  • API mapping: docs\standards\crosswalk\webrtcnet-api-to-spec.md

Refresh with:

.\scripts\update-spec-docs.ps1

Recommended refresh triggers:

  1. Monthly (scheduled automation is available in .github\workflows\update-spec-docs.yml).
  2. After public API changes in WebRtcNet.Api that affect spec alignment.

Local development quick start

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 7778

This 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 -Local

WebRtcInterop.BuildPaths.props automatically detects the artifact directory and sets the correct include and library paths. No environment variables or Visual Studio restart are required.

Building WebRtcNet

dotnet restore WebRtcNet.slnx
dotnet build WebRtcNet.Api\WebRtcNet.Api.csproj -c Debug
dotnet msbuild WebRtcInterop\WebRtcInterop.Framework.vcxproj /p:Configuration=Debug /p:Platform=x64

Or build the full solution:

dotnet msbuild WebRtcNet.slnx /p:Configuration=Debug /p:Platform=x64

Running tests

dotnet test WebRtcNet.Api.UnitTests\WebRtcNet.Api.UnitTests.csproj

C++/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.exe

Logging configuration

Host.SetLoggerFactory(...) configures logging for managed API code, C++/CLI interop code, and WebRTC native logs.

usingMicrosoft.Extensions.Logging;usingWebRtcNet;varloggerFactory=LoggerFactory.Create(builder =>{builder.SetMinimumLevel(LogLevel.Information).AddConsole();});Host.SetLoggerFactory(loggerFactory);

If SetLoggerFactory is not called, Debug builds default to console logging and Release builds are silent.

Docker pipeline

The build pipeline uses individual-stage Dockerfiles rather than a single monolithic file. docker buildx is not used — Windows containers require classic docker build.

DockerfilePurpose
docker\Dockerfile.webrtc-toolchainVS Build Tools, depot_tools, git
docker\Dockerfile.webrtc-syncSyncs WebRTC source for a given branch
docker\Dockerfile.webrtc-buildCompiles WebRTC (webrtc-build stage)
docker\Dockerfile.webrtcCreates webrtc-artifacts-stage, webrtc-artifacts, and final webrtc image tags from prebuilt inputs
docker\Dockerfile.webrtcnetBuilds WebRtcNet using artifacts from GHCR

docker\build-images.ps1 orchestrates the full pipeline:

.\docker\build-images.ps1-WebRtcBranch 7778

By 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-Publish

The 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.

Building WebRTC natively (without Docker)

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:

  1. Install Visual Studio 2022 or later (Community Edition is sufficient).

    • "Desktop development with C++" workload
    • 10.0.26100.0 Windows 11 SDK
  2. Install Chromium depot_tools.

  3. 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
    
  4. Fetch and sync the WebRTC source (~10 GB):

    fetch --nohooks webrtc
    git checkout -b webrtcnet_148 refs/remotes/branch-heads/7778
    gclient sync
    
  5. Point Visual Studio at your local build by setting environment variables or by placing the source tree so that WebRtcInterop.BuildPaths.props can find it:

    • WEBRTC_SRC_PATH — path to the WebRTC src\ directory (overrides the repo-local default)
    • WEBRTC_OUT_PATH — path where build outputs land (overrides the repo-local default)
    • Leave WEBRTC_PREBUILT unset (or 0) so the gn/ninja custom build step runs on first build.

About

A .Net implementation of the WebRtc standard built on Google's PeerConnection native API

Resources

Contributing

Stars

12 stars

Watchers

7 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { // Add copy buttons to all
 blocks
(function() {
function addCopyButtons() {
document.querySelectorAll('pre code').forEach(function(codeBlock) {
if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;
codeBlock.parentElement.setAttribute('data-copy-added', 'true');
var btn = document.createElement('button');
btn.textContent = 'Copy';
btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';
btn.onmouseover = function() { this.style.opacity = '1'; };
btn.onmouseout = function() { this.style.opacity = '0.7'; };
btn.onclick = function() {
navigator.clipboard.writeText(codeBlock.textContent).then(function() {
btn.textContent = 'Copied!';
setTimeout(function() { btn.textContent = 'Copy'; }, 1500);
});
};
codeBlock.parentElement.style.position = 'relative';
codeBlock.parentElement.appendChild(btn);
});
}
addCopyButtons();
// Re-run on dynamic content
var observer = new MutationObserver(addCopyButtons);
observer.observe(document.body, { childList: true, subtree: true });
})();
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
GitHub - General-Fault/WebRtcNet: A .Net implementation of the WebRtc standard built on Google's PeerConnection native API · GitHub
Skip to content

Repository files navigation

WebRtcNet

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.

Contribution and AI guidance

  • Human contributor workflow requirements: CONTRIBUTING.md
  • AI execution guardrails for this repository: Agents.md

Local W3C spec corpus

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, and specs\index\spec-map.*
  • API mapping: docs\standards\crosswalk\webrtcnet-api-to-spec.md

Refresh with:

.\scripts\update-spec-docs.ps1

Recommended refresh triggers:

  1. Monthly (scheduled automation is available in .github\workflows\update-spec-docs.yml).
  2. After public API changes in WebRtcNet.Api that affect spec alignment.

Local development quick start

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 7778

This 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 -Local

WebRtcInterop.BuildPaths.props automatically detects the artifact directory and sets the correct include and library paths. No environment variables or Visual Studio restart are required.

Building WebRtcNet

dotnet restore WebRtcNet.slnx
dotnet build WebRtcNet.Api\WebRtcNet.Api.csproj -c Debug
dotnet msbuild WebRtcInterop\WebRtcInterop.Framework.vcxproj /p:Configuration=Debug /p:Platform=x64

Or build the full solution:

dotnet msbuild WebRtcNet.slnx /p:Configuration=Debug /p:Platform=x64

Running tests

dotnet test WebRtcNet.Api.UnitTests\WebRtcNet.Api.UnitTests.csproj

C++/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.exe

Logging configuration

Host.SetLoggerFactory(...) configures logging for managed API code, C++/CLI interop code, and WebRTC native logs.

usingMicrosoft.Extensions.Logging;usingWebRtcNet;varloggerFactory=LoggerFactory.Create(builder =>{builder.SetMinimumLevel(LogLevel.Information).AddConsole();});Host.SetLoggerFactory(loggerFactory);

If SetLoggerFactory is not called, Debug builds default to console logging and Release builds are silent.

Docker pipeline

The build pipeline uses individual-stage Dockerfiles rather than a single monolithic file. docker buildx is not used — Windows containers require classic docker build.

DockerfilePurpose
docker\Dockerfile.webrtc-toolchainVS Build Tools, depot_tools, git
docker\Dockerfile.webrtc-syncSyncs WebRTC source for a given branch
docker\Dockerfile.webrtc-buildCompiles WebRTC (webrtc-build stage)
docker\Dockerfile.webrtcCreates webrtc-artifacts-stage, webrtc-artifacts, and final webrtc image tags from prebuilt inputs
docker\Dockerfile.webrtcnetBuilds WebRtcNet using artifacts from GHCR

docker\build-images.ps1 orchestrates the full pipeline:

.\docker\build-images.ps1-WebRtcBranch 7778

By 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-Publish

The 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.

Building WebRTC natively (without Docker)

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:

  1. Install Visual Studio 2022 or later (Community Edition is sufficient).

    • "Desktop development with C++" workload
    • 10.0.26100.0 Windows 11 SDK
  2. Install Chromium depot_tools.

  3. 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
    
  4. Fetch and sync the WebRTC source (~10 GB):

    fetch --nohooks webrtc
    git checkout -b webrtcnet_148 refs/remotes/branch-heads/7778
    gclient sync
    
  5. Point Visual Studio at your local build by setting environment variables or by placing the source tree so that WebRtcInterop.BuildPaths.props can find it:

    • WEBRTC_SRC_PATH — path to the WebRTC src\ directory (overrides the repo-local default)
    • WEBRTC_OUT_PATH — path where build outputs land (overrides the repo-local default)
    • Leave WEBRTC_PREBUILT unset (or 0) so the gn/ninja custom build step runs on first build.

About

A .Net implementation of the WebRtc standard built on Google's PeerConnection native API

Resources

Contributing

Stars

12 stars

Watchers

7 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { // Force GitHub README to respect dark mode (function() { var style = document.createElement('style'); style.textContent = ' .markdown-body { color-scheme: dark light; } .markdown-body pre { background: #161b22 !important; } .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; } .markdown-body table th, .markdown-body table td { border-color: #30363d !important; } .markdown-body img { background: #0d1117; } .markdown-body blockquote { border-left-color: #8b949e; } .markdown-body hr { border-color: #30363d; } '; document.head.appendChild(style); })(); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' GitHub - General-Fault/WebRtcNet: A .Net implementation of the WebRtc standard built on Google's PeerConnection native API · GitHub
Skip to content

Repository files navigation

WebRtcNet

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.

Contribution and AI guidance

  • Human contributor workflow requirements: CONTRIBUTING.md
  • AI execution guardrails for this repository: Agents.md

Local W3C spec corpus

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, and specs\index\spec-map.*
  • API mapping: docs\standards\crosswalk\webrtcnet-api-to-spec.md

Refresh with:

.\scripts\update-spec-docs.ps1

Recommended refresh triggers:

  1. Monthly (scheduled automation is available in .github\workflows\update-spec-docs.yml).
  2. After public API changes in WebRtcNet.Api that affect spec alignment.

Local development quick start

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 7778

This 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 -Local

WebRtcInterop.BuildPaths.props automatically detects the artifact directory and sets the correct include and library paths. No environment variables or Visual Studio restart are required.

Building WebRtcNet

dotnet restore WebRtcNet.slnx
dotnet build WebRtcNet.Api\WebRtcNet.Api.csproj -c Debug
dotnet msbuild WebRtcInterop\WebRtcInterop.Framework.vcxproj /p:Configuration=Debug /p:Platform=x64

Or build the full solution:

dotnet msbuild WebRtcNet.slnx /p:Configuration=Debug /p:Platform=x64

Running tests

dotnet test WebRtcNet.Api.UnitTests\WebRtcNet.Api.UnitTests.csproj

C++/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.exe

Logging configuration

Host.SetLoggerFactory(...) configures logging for managed API code, C++/CLI interop code, and WebRTC native logs.

usingMicrosoft.Extensions.Logging;usingWebRtcNet;varloggerFactory=LoggerFactory.Create(builder =>{builder.SetMinimumLevel(LogLevel.Information).AddConsole();});Host.SetLoggerFactory(loggerFactory);

If SetLoggerFactory is not called, Debug builds default to console logging and Release builds are silent.

Docker pipeline

The build pipeline uses individual-stage Dockerfiles rather than a single monolithic file. docker buildx is not used — Windows containers require classic docker build.

DockerfilePurpose
docker\Dockerfile.webrtc-toolchainVS Build Tools, depot_tools, git
docker\Dockerfile.webrtc-syncSyncs WebRTC source for a given branch
docker\Dockerfile.webrtc-buildCompiles WebRTC (webrtc-build stage)
docker\Dockerfile.webrtcCreates webrtc-artifacts-stage, webrtc-artifacts, and final webrtc image tags from prebuilt inputs
docker\Dockerfile.webrtcnetBuilds WebRtcNet using artifacts from GHCR

docker\build-images.ps1 orchestrates the full pipeline:

.\docker\build-images.ps1-WebRtcBranch 7778

By 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-Publish

The 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.

Building WebRTC natively (without Docker)

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:

  1. Install Visual Studio 2022 or later (Community Edition is sufficient).

    • "Desktop development with C++" workload
    • 10.0.26100.0 Windows 11 SDK
  2. Install Chromium depot_tools.

  3. 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
    
  4. Fetch and sync the WebRTC source (~10 GB):

    fetch --nohooks webrtc
    git checkout -b webrtcnet_148 refs/remotes/branch-heads/7778
    gclient sync
    
  5. Point Visual Studio at your local build by setting environment variables or by placing the source tree so that WebRtcInterop.BuildPaths.props can find it:

    • WEBRTC_SRC_PATH — path to the WebRTC src\ directory (overrides the repo-local default)
    • WEBRTC_OUT_PATH — path where build outputs land (overrides the repo-local default)
    • Leave WEBRTC_PREBUILT unset (or 0) so the gn/ninja custom build step runs on first build.

About

A .Net implementation of the WebRtc standard built on Google's PeerConnection native API

Resources

Contributing

Stars

12 stars

Watchers

7 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { // Highlight search terms from Google/DuckDuckGo/Bing referrer (function() { var ref = document.referrer; var terms = []; if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) { var url = new URL(ref); var q = url.searchParams.get('q') || url.searchParams.get('p'); if (q) { terms = q.split(/\s+/).filter(function(t) { return t.length > 2; }); } } if (terms.length === 0) return; var style = document.createElement('style'); style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }'; document.head.appendChild(style); function highlight(node) { if (node.nodeType === 3) { // text node var text = node.textContent; var found = false; terms.forEach(function(term) { var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\]\\]/g, '\\') + ')', 'gi'); if (regex.test(text)) { found = true; var frag = document.createDocumentFragment(); var parts = text.split(regex); parts.forEach(function(part, i) { if (i % 2 === 0) { frag.appendChild(document.createTextNode(part)); } else { var span = document.createElement('span'); span.className = 'userscript-highlight'; span.textContent = part; frag.appendChild(span); } }); node.parentNode.replaceChild(frag, node); } }); } else if (node.nodeType === 1 && node.childNodes) { // element var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT']; if (!skipTags.includes(node.tagName)) { Array.from(node.childNodes).forEach(highlight); } } } highlight(document.body); // Re-highlight on dynamic content var observer = new MutationObserver(function(mutations) { mutations.forEach(function(m) { m.addedNodes.forEach(function(node) { if (node.nodeType === 1 || node.nodeType === 3) highlight(node); }); }); }); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' GitHub - General-Fault/WebRtcNet: A .Net implementation of the WebRtc standard built on Google's PeerConnection native API · GitHub
Skip to content

Repository files navigation

WebRtcNet

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.

Contribution and AI guidance

  • Human contributor workflow requirements: CONTRIBUTING.md
  • AI execution guardrails for this repository: Agents.md

Local W3C spec corpus

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, and specs\index\spec-map.*
  • API mapping: docs\standards\crosswalk\webrtcnet-api-to-spec.md

Refresh with:

.\scripts\update-spec-docs.ps1

Recommended refresh triggers:

  1. Monthly (scheduled automation is available in .github\workflows\update-spec-docs.yml).
  2. After public API changes in WebRtcNet.Api that affect spec alignment.

Local development quick start

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 7778

This 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 -Local

WebRtcInterop.BuildPaths.props automatically detects the artifact directory and sets the correct include and library paths. No environment variables or Visual Studio restart are required.

Building WebRtcNet

dotnet restore WebRtcNet.slnx
dotnet build WebRtcNet.Api\WebRtcNet.Api.csproj -c Debug
dotnet msbuild WebRtcInterop\WebRtcInterop.Framework.vcxproj /p:Configuration=Debug /p:Platform=x64

Or build the full solution:

dotnet msbuild WebRtcNet.slnx /p:Configuration=Debug /p:Platform=x64

Running tests

dotnet test WebRtcNet.Api.UnitTests\WebRtcNet.Api.UnitTests.csproj

C++/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.exe

Logging configuration

Host.SetLoggerFactory(...) configures logging for managed API code, C++/CLI interop code, and WebRTC native logs.

usingMicrosoft.Extensions.Logging;usingWebRtcNet;varloggerFactory=LoggerFactory.Create(builder =>{builder.SetMinimumLevel(LogLevel.Information).AddConsole();});Host.SetLoggerFactory(loggerFactory);

If SetLoggerFactory is not called, Debug builds default to console logging and Release builds are silent.

Docker pipeline

The build pipeline uses individual-stage Dockerfiles rather than a single monolithic file. docker buildx is not used — Windows containers require classic docker build.

DockerfilePurpose
docker\Dockerfile.webrtc-toolchainVS Build Tools, depot_tools, git
docker\Dockerfile.webrtc-syncSyncs WebRTC source for a given branch
docker\Dockerfile.webrtc-buildCompiles WebRTC (webrtc-build stage)
docker\Dockerfile.webrtcCreates webrtc-artifacts-stage, webrtc-artifacts, and final webrtc image tags from prebuilt inputs
docker\Dockerfile.webrtcnetBuilds WebRtcNet using artifacts from GHCR

docker\build-images.ps1 orchestrates the full pipeline:

.\docker\build-images.ps1-WebRtcBranch 7778

By 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-Publish

The 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.

Building WebRTC natively (without Docker)

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:

  1. Install Visual Studio 2022 or later (Community Edition is sufficient).

    • "Desktop development with C++" workload
    • 10.0.26100.0 Windows 11 SDK
  2. Install Chromium depot_tools.

  3. 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
    
  4. Fetch and sync the WebRTC source (~10 GB):

    fetch --nohooks webrtc
    git checkout -b webrtcnet_148 refs/remotes/branch-heads/7778
    gclient sync
    
  5. Point Visual Studio at your local build by setting environment variables or by placing the source tree so that WebRtcInterop.BuildPaths.props can find it:

    • WEBRTC_SRC_PATH — path to the WebRTC src\ directory (overrides the repo-local default)
    • WEBRTC_OUT_PATH — path where build outputs land (overrides the repo-local default)
    • Leave WEBRTC_PREBUILT unset (or 0) so the gn/ninja custom build step runs on first build.

About

A .Net implementation of the WebRtc standard built on Google's PeerConnection native API

Resources

Contributing

Stars

12 stars

Watchers

7 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { // Strip utm_, fbclid, gclid, etc. from all links on page (function() { var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content', 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid', 'ref', 'ref_src', 'source', 'medium', 'campaign']; function cleanUrl(url) { try { var u = new URL(url, window.location.origin); var changed = false; trackingParams.forEach(function(p) { if (u.searchParams.has(p)) { u.searchParams.delete(p); changed = true; } }); return changed ? u.toString() : url; } catch (e) { return url; } } function cleanLinks() { document.querySelectorAll('a[href]').forEach(function(a) { var clean = cleanUrl(a.href); if (clean !== a.href) a.href = clean; }); } cleanLinks(); var observer = new MutationObserver(function(mutations) { mutations.forEach(function(m) { m.addedNodes.forEach(function(node) { if (node.nodeType === 1) { if (node.tagName === 'A') cleanLinks(); node.querySelectorAll('a[href]').forEach(function(a) { var clean = cleanUrl(a.href); if (clean !== a.href) a.href = clean; }); } }); }); }); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + ' GitHub - General-Fault/WebRtcNet: A .Net implementation of the WebRtc standard built on Google's PeerConnection native API · GitHub
Skip to content

Repository files navigation

WebRtcNet

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.

Contribution and AI guidance

  • Human contributor workflow requirements: CONTRIBUTING.md
  • AI execution guardrails for this repository: Agents.md

Local W3C spec corpus

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, and specs\index\spec-map.*
  • API mapping: docs\standards\crosswalk\webrtcnet-api-to-spec.md

Refresh with:

.\scripts\update-spec-docs.ps1

Recommended refresh triggers:

  1. Monthly (scheduled automation is available in .github\workflows\update-spec-docs.yml).
  2. After public API changes in WebRtcNet.Api that affect spec alignment.

Local development quick start

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 7778

This 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 -Local

WebRtcInterop.BuildPaths.props automatically detects the artifact directory and sets the correct include and library paths. No environment variables or Visual Studio restart are required.

Building WebRtcNet

dotnet restore WebRtcNet.slnx
dotnet build WebRtcNet.Api\WebRtcNet.Api.csproj -c Debug
dotnet msbuild WebRtcInterop\WebRtcInterop.Framework.vcxproj /p:Configuration=Debug /p:Platform=x64

Or build the full solution:

dotnet msbuild WebRtcNet.slnx /p:Configuration=Debug /p:Platform=x64

Running tests

dotnet test WebRtcNet.Api.UnitTests\WebRtcNet.Api.UnitTests.csproj

C++/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.exe

Logging configuration

Host.SetLoggerFactory(...) configures logging for managed API code, C++/CLI interop code, and WebRTC native logs.

usingMicrosoft.Extensions.Logging;usingWebRtcNet;varloggerFactory=LoggerFactory.Create(builder =>{builder.SetMinimumLevel(LogLevel.Information).AddConsole();});Host.SetLoggerFactory(loggerFactory);

If SetLoggerFactory is not called, Debug builds default to console logging and Release builds are silent.

Docker pipeline

The build pipeline uses individual-stage Dockerfiles rather than a single monolithic file. docker buildx is not used — Windows containers require classic docker build.

DockerfilePurpose
docker\Dockerfile.webrtc-toolchainVS Build Tools, depot_tools, git
docker\Dockerfile.webrtc-syncSyncs WebRTC source for a given branch
docker\Dockerfile.webrtc-buildCompiles WebRTC (webrtc-build stage)
docker\Dockerfile.webrtcCreates webrtc-artifacts-stage, webrtc-artifacts, and final webrtc image tags from prebuilt inputs
docker\Dockerfile.webrtcnetBuilds WebRtcNet using artifacts from GHCR

docker\build-images.ps1 orchestrates the full pipeline:

.\docker\build-images.ps1-WebRtcBranch 7778

By 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-Publish

The 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.

Building WebRTC natively (without Docker)

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:

  1. Install Visual Studio 2022 or later (Community Edition is sufficient).

    • "Desktop development with C++" workload
    • 10.0.26100.0 Windows 11 SDK
  2. Install Chromium depot_tools.

  3. 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
    
  4. Fetch and sync the WebRTC source (~10 GB):

    fetch --nohooks webrtc
    git checkout -b webrtcnet_148 refs/remotes/branch-heads/7778
    gclient sync
    
  5. Point Visual Studio at your local build by setting environment variables or by placing the source tree so that WebRtcInterop.BuildPaths.props can find it:

    • WEBRTC_SRC_PATH — path to the WebRTC src\ directory (overrides the repo-local default)
    • WEBRTC_OUT_PATH — path where build outputs land (overrides the repo-local default)
    • Leave WEBRTC_PREBUILT unset (or 0) so the gn/ninja custom build step runs on first build.

About

A .Net implementation of the WebRtc standard built on Google's PeerConnection native API

Resources

Contributing

Stars

12 stars

Watchers

7 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { // Auto-enable theater mode on YouTube (function() { function tryTheater() { var btn = document.querySelector('button[aria-label="Theater mode"], ytd-player #player button[title="Theater mode"]'); if (btn && !btn.classList.contains('activated')) { btn.click(); } } // Try immediately tryTheater(); // Try after navigation (SPA) var lastUrl = location.href; setInterval(function() { if (location.href !== lastUrl) { lastUrl = location.href; setTimeout(tryTheater, 500); } }, 1000); // Also try on player load var observer = new MutationObserver(tryTheater); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' GitHub - General-Fault/WebRtcNet: A .Net implementation of the WebRtc standard built on Google's PeerConnection native API · GitHub
Skip to content

Repository files navigation

WebRtcNet

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.

Contribution and AI guidance

  • Human contributor workflow requirements: CONTRIBUTING.md
  • AI execution guardrails for this repository: Agents.md

Local W3C spec corpus

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, and specs\index\spec-map.*
  • API mapping: docs\standards\crosswalk\webrtcnet-api-to-spec.md

Refresh with:

.\scripts\update-spec-docs.ps1

Recommended refresh triggers:

  1. Monthly (scheduled automation is available in .github\workflows\update-spec-docs.yml).
  2. After public API changes in WebRtcNet.Api that affect spec alignment.

Local development quick start

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 7778

This 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 -Local

WebRtcInterop.BuildPaths.props automatically detects the artifact directory and sets the correct include and library paths. No environment variables or Visual Studio restart are required.

Building WebRtcNet

dotnet restore WebRtcNet.slnx
dotnet build WebRtcNet.Api\WebRtcNet.Api.csproj -c Debug
dotnet msbuild WebRtcInterop\WebRtcInterop.Framework.vcxproj /p:Configuration=Debug /p:Platform=x64

Or build the full solution:

dotnet msbuild WebRtcNet.slnx /p:Configuration=Debug /p:Platform=x64

Running tests

dotnet test WebRtcNet.Api.UnitTests\WebRtcNet.Api.UnitTests.csproj

C++/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.exe

Logging configuration

Host.SetLoggerFactory(...) configures logging for managed API code, C++/CLI interop code, and WebRTC native logs.

usingMicrosoft.Extensions.Logging;usingWebRtcNet;varloggerFactory=LoggerFactory.Create(builder =>{builder.SetMinimumLevel(LogLevel.Information).AddConsole();});Host.SetLoggerFactory(loggerFactory);

If SetLoggerFactory is not called, Debug builds default to console logging and Release builds are silent.

Docker pipeline

The build pipeline uses individual-stage Dockerfiles rather than a single monolithic file. docker buildx is not used — Windows containers require classic docker build.

DockerfilePurpose
docker\Dockerfile.webrtc-toolchainVS Build Tools, depot_tools, git
docker\Dockerfile.webrtc-syncSyncs WebRTC source for a given branch
docker\Dockerfile.webrtc-buildCompiles WebRTC (webrtc-build stage)
docker\Dockerfile.webrtcCreates webrtc-artifacts-stage, webrtc-artifacts, and final webrtc image tags from prebuilt inputs
docker\Dockerfile.webrtcnetBuilds WebRtcNet using artifacts from GHCR

docker\build-images.ps1 orchestrates the full pipeline:

.\docker\build-images.ps1-WebRtcBranch 7778

By 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-Publish

The 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.

Building WebRTC natively (without Docker)

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:

  1. Install Visual Studio 2022 or later (Community Edition is sufficient).

    • "Desktop development with C++" workload
    • 10.0.26100.0 Windows 11 SDK
  2. Install Chromium depot_tools.

  3. 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
    
  4. Fetch and sync the WebRTC source (~10 GB):

    fetch --nohooks webrtc
    git checkout -b webrtcnet_148 refs/remotes/branch-heads/7778
    gclient sync
    
  5. Point Visual Studio at your local build by setting environment variables or by placing the source tree so that WebRtcInterop.BuildPaths.props can find it:

    • WEBRTC_SRC_PATH — path to the WebRTC src\ directory (overrides the repo-local default)
    • WEBRTC_OUT_PATH — path where build outputs land (overrides the repo-local default)
    • Leave WEBRTC_PREBUILT unset (or 0) so the gn/ninja custom build step runs on first build.

About

A .Net implementation of the WebRtc standard built on Google's PeerConnection native API

Resources

Contributing

Stars

12 stars

Watchers

7 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { // Remove or un-stick sticky/fixed headers that block content (function() { function unstick() { document.querySelectorAll('header, nav, [role="banner"], .header, .navbar, .sticky, .fixed-top, [style*="position: fixed"], [style*="position:sticky"]').forEach(function(el) { if (el.style.position === 'fixed' || el.style.position === 'sticky' || getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') { el.style.position = 'static'; el.style.top = 'auto'; el.style.zIndex = 'auto'; } }); } unstick(); var observer = new MutationObserver(unstick); observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] }); })(); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' GitHub - General-Fault/WebRtcNet: A .Net implementation of the WebRtc standard built on Google's PeerConnection native API · GitHub
Skip to content

Repository files navigation

WebRtcNet

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.

Contribution and AI guidance

  • Human contributor workflow requirements: CONTRIBUTING.md
  • AI execution guardrails for this repository: Agents.md

Local W3C spec corpus

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, and specs\index\spec-map.*
  • API mapping: docs\standards\crosswalk\webrtcnet-api-to-spec.md

Refresh with:

.\scripts\update-spec-docs.ps1

Recommended refresh triggers:

  1. Monthly (scheduled automation is available in .github\workflows\update-spec-docs.yml).
  2. After public API changes in WebRtcNet.Api that affect spec alignment.

Local development quick start

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 7778

This 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 -Local

WebRtcInterop.BuildPaths.props automatically detects the artifact directory and sets the correct include and library paths. No environment variables or Visual Studio restart are required.

Building WebRtcNet

dotnet restore WebRtcNet.slnx
dotnet build WebRtcNet.Api\WebRtcNet.Api.csproj -c Debug
dotnet msbuild WebRtcInterop\WebRtcInterop.Framework.vcxproj /p:Configuration=Debug /p:Platform=x64

Or build the full solution:

dotnet msbuild WebRtcNet.slnx /p:Configuration=Debug /p:Platform=x64

Running tests

dotnet test WebRtcNet.Api.UnitTests\WebRtcNet.Api.UnitTests.csproj

C++/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.exe

Logging configuration

Host.SetLoggerFactory(...) configures logging for managed API code, C++/CLI interop code, and WebRTC native logs.

usingMicrosoft.Extensions.Logging;usingWebRtcNet;varloggerFactory=LoggerFactory.Create(builder =>{builder.SetMinimumLevel(LogLevel.Information).AddConsole();});Host.SetLoggerFactory(loggerFactory);

If SetLoggerFactory is not called, Debug builds default to console logging and Release builds are silent.

Docker pipeline

The build pipeline uses individual-stage Dockerfiles rather than a single monolithic file. docker buildx is not used — Windows containers require classic docker build.

DockerfilePurpose
docker\Dockerfile.webrtc-toolchainVS Build Tools, depot_tools, git
docker\Dockerfile.webrtc-syncSyncs WebRTC source for a given branch
docker\Dockerfile.webrtc-buildCompiles WebRTC (webrtc-build stage)
docker\Dockerfile.webrtcCreates webrtc-artifacts-stage, webrtc-artifacts, and final webrtc image tags from prebuilt inputs
docker\Dockerfile.webrtcnetBuilds WebRtcNet using artifacts from GHCR

docker\build-images.ps1 orchestrates the full pipeline:

.\docker\build-images.ps1-WebRtcBranch 7778

By 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-Publish

The 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.

Building WebRTC natively (without Docker)

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:

  1. Install Visual Studio 2022 or later (Community Edition is sufficient).

    • "Desktop development with C++" workload
    • 10.0.26100.0 Windows 11 SDK
  2. Install Chromium depot_tools.

  3. 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
    
  4. Fetch and sync the WebRTC source (~10 GB):

    fetch --nohooks webrtc
    git checkout -b webrtcnet_148 refs/remotes/branch-heads/7778
    gclient sync
    
  5. Point Visual Studio at your local build by setting environment variables or by placing the source tree so that WebRtcInterop.BuildPaths.props can find it:

    • WEBRTC_SRC_PATH — path to the WebRTC src\ directory (overrides the repo-local default)
    • WEBRTC_OUT_PATH — path where build outputs land (overrides the repo-local default)
    • Leave WEBRTC_PREBUILT unset (or 0) so the gn/ninja custom build step runs on first build.

About

A .Net implementation of the WebRtc standard built on Google's PeerConnection native API

Resources

Contributing

Stars

12 stars

Watchers

7 watching

Forks

Releases

Packages

Used by

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { // Universal Dark Mode - works on any site (function() { var enabled = true; function applyDarkMode() { if (!enabled) return; // Create style element if it doesn't exist var style = document.getElementById('universal-dark-mode-style'); if (!style) { style = document.createElement('style'); style.id = 'universal-dark-mode-style'; document.head.appendChild(style); } // Dark mode CSS - inverts colors but preserves images/video style.textContent = ' /* Invert everything except media */ html { filter: invert(1) hue-rotate(180deg) !important; background: #1a1a2e !important; } /* Restore images, videos, iframes, canvas */ img, video, iframe, canvas, svg, picture, [style*="background-image"] { filter: invert(1) hue-rotate(180deg) !important; } /* Preserve specific elements that should not be inverted */ .no-dark-mode, .no-dark-mode *, [data-theme="light"], [data-theme="light"], .ace_editor, .ace_editor *, .CodeMirror, .CodeMirror *, .monaco-editor, .monaco-editor *, .markdown-body pre, .markdown-body pre *, .highlight, .highlight *, pre code, pre code * { filter: none !important; } /* Fix common UI elements */ .modal, .popup, .dropdown-menu, .tooltip, .popover { filter: invert(1) hue-rotate(180deg) !important; background: #2d2d44 !important; border-color: #444 !important; } /* Scrollbars */ ::-webkit-scrollbar { background: #1a1a2e !important; } ::-webkit-scrollbar-thumb { background: #444 !important; } ::-webkit-scrollbar-thumb:hover { background: #555 !important; } /* Selection */ ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; } ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; } '; } function removeDarkMode() { var style = document.getElementById('universal-dark-mode-style'); if (style) style.remove(); } // Toggle with Alt+Shift+D document.addEventListener('keydown', function(e) { if (e.altKey && e.shiftKey && e.key === 'D') { e.preventDefault(); enabled = !enabled; if (enabled) { applyDarkMode(); console.log('[Universal Dark Mode] Enabled'); } else { removeDarkMode(); console.log('[Universal Dark Mode] Disabled'); } } }); // Apply on load applyDarkMode(); // Re-apply on dynamic content var observer = new MutationObserver(function(mutations) { if (enabled && !document.getElementById('universal-dark-mode-style')) { applyDarkMode(); } }); observer.observe(document.head, { childList: true }); console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle'); })(); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })(); GitHub - General-Fault/WebRtcNet: A .Net implementation of the WebRtc standard built on Google's PeerConnection native API · GitHub
Skip to content

Repository files navigation

WebRtcNet

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.

Contribution and AI guidance

  • Human contributor workflow requirements: CONTRIBUTING.md
  • AI execution guardrails for this repository: Agents.md

Local W3C spec corpus

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, and specs\index\spec-map.*
  • API mapping: docs\standards\crosswalk\webrtcnet-api-to-spec.md

Refresh with:

.\scripts\update-spec-docs.ps1

Recommended refresh triggers:

  1. Monthly (scheduled automation is available in .github\workflows\update-spec-docs.yml).
  2. After public API changes in WebRtcNet.Api that affect spec alignment.

Local development quick start

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 7778

This 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 -Local

WebRtcInterop.BuildPaths.props automatically detects the artifact directory and sets the correct include and library paths. No environment variables or Visual Studio restart are required.

Building WebRtcNet

dotnet restore WebRtcNet.slnx
dotnet build WebRtcNet.Api\WebRtcNet.Api.csproj -c Debug
dotnet msbuild WebRtcInterop\WebRtcInterop.Framework.vcxproj /p:Configuration=Debug /p:Platform=x64

Or build the full solution:

dotnet msbuild WebRtcNet.slnx /p:Configuration=Debug /p:Platform=x64

Running tests

dotnet test WebRtcNet.Api.UnitTests\WebRtcNet.Api.UnitTests.csproj

C++/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.exe

Logging configuration

Host.SetLoggerFactory(...) configures logging for managed API code, C++/CLI interop code, and WebRTC native logs.

usingMicrosoft.Extensions.Logging;usingWebRtcNet;varloggerFactory=LoggerFactory.Create(builder =>{builder.SetMinimumLevel(LogLevel.Information).AddConsole();});Host.SetLoggerFactory(loggerFactory);

If SetLoggerFactory is not called, Debug builds default to console logging and Release builds are silent.

Docker pipeline

The build pipeline uses individual-stage Dockerfiles rather than a single monolithic file. docker buildx is not used — Windows containers require classic docker build.

DockerfilePurpose
docker\Dockerfile.webrtc-toolchainVS Build Tools, depot_tools, git
docker\Dockerfile.webrtc-syncSyncs WebRTC source for a given branch
docker\Dockerfile.webrtc-buildCompiles WebRTC (webrtc-build stage)
docker\Dockerfile.webrtcCreates webrtc-artifacts-stage, webrtc-artifacts, and final webrtc image tags from prebuilt inputs
docker\Dockerfile.webrtcnetBuilds WebRtcNet using artifacts from GHCR

docker\build-images.ps1 orchestrates the full pipeline:

.\docker\build-images.ps1-WebRtcBranch 7778

By 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-Publish

The 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.

Building WebRTC natively (without Docker)

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:

  1. Install Visual Studio 2022 or later (Community Edition is sufficient).

    • "Desktop development with C++" workload
    • 10.0.26100.0 Windows 11 SDK
  2. Install Chromium depot_tools.

  3. 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
    
  4. Fetch and sync the WebRTC source (~10 GB):

    fetch --nohooks webrtc
    git checkout -b webrtcnet_148 refs/remotes/branch-heads/7778
    gclient sync
    
  5. Point Visual Studio at your local build by setting environment variables or by placing the source tree so that WebRtcInterop.BuildPaths.props can find it:

    • WEBRTC_SRC_PATH — path to the WebRTC src\ directory (overrides the repo-local default)
    • WEBRTC_OUT_PATH — path where build outputs land (overrides the repo-local default)
    • Leave WEBRTC_PREBUILT unset (or 0) so the gn/ninja custom build step runs on first build.

About

A .Net implementation of the WebRtc standard built on Google's PeerConnection native API

Resources

Contributing

Stars

12 stars

Watchers

7 watching

Forks

Releases

Packages

Used by

Contributors

Languages