AetherNet.Transport.WebRtc
2.0.0
dotnet add package AetherNet.Transport.WebRtc --version 2.0.0
NuGet\Install-Package AetherNet.Transport.WebRtc -Version 2.0.0
<PackageReference Include="AetherNet.Transport.WebRtc" Version="2.0.0" />
<PackageVersion Include="AetherNet.Transport.WebRtc" Version="2.0.0" />
<PackageReference Include="AetherNet.Transport.WebRtc" />
paket add AetherNet.Transport.WebRtc --version 2.0.0
#r "nuget: AetherNet.Transport.WebRtc, 2.0.0"
#:package AetherNet.Transport.WebRtc@2.0.0
#addin nuget:?package=AetherNet.Transport.WebRtc&version=2.0.0
#tool nuget:?package=AetherNet.Transport.WebRtc&version=2.0.0
AetherNet.Transport.WebRtc
Direct peer-to-peer transport for AetherNet over a
WebRTC RTCDataChannel — two nodes talk directly over the internet with no central server in the
data path.
Built on SIPSorcery (pure C#, cross-platform,
Android/iOS-capable). It implements ITransportService, so TransportManager slots it into the
transport ladder between the radio mesh (proximity, cheapest) and the QUIC/HTTP relay (last resort):
when a direct path can be negotiated the conversation flows peer-to-peer; otherwise the relay carries
it. PowerCostRelative = 45.
How it stays serverless
A WebRTC connection still needs a one-time signalling exchange (the SDP offer/answer plus ICE candidates). AetherNet carries that handshake over a channel you already have — the QUIC/HTTP relay, or even the radio mesh — instead of a dedicated signalling server. Once the channel is open, the conversation flows directly between the two devices.
IWebRtcSignaling— the signalling seam.RelayWebRtcSignaling— carries the handshake over anyITransportService(the cross-device path), framed with a magic prefix + source-generated (AOT-safe) JSON; non-signalling bytes pass through untouched as ordinary app traffic.InMemoryWebRtcSignalingBus— ordered in-process signalling for simulations and tests.
Install
dotnet add package AetherNet.Transport.WebRtc
Usage
services
// 1. Choose a signalling carrier:
.AddRelayWebRtcSignaling<QuicRelayTransportService>() // cross-device: ride the relay
// 2. Register the transport (joins TransportManager's ladder at PowerCostRelative 45):
.AddWebRtcTransport(localUhid: "aether:alice:01");
ICE servers default to a public STUN server. Pass an explicit list to override; an explicit empty list forces host-candidate-only ICE (same-LAN / loopback, no STUN/TURN):
services.AddWebRtcTransport(
localUhid: "aether:alice:01",
iceServers: new[]
{
new RTCIceServer { urls = "stun:stun.l.google.com:19302" },
new RTCIceServer { urls = "turn:turn.example.com", username = "u", credential = "p" },
});
For a single-process host (simulations, a device holding several identities) use the in-process bus instead of a relay:
services.AddInMemoryWebRtcSignaling("aether:alice:01")
.AddWebRtcTransport(localUhid: "aether:alice:01");
License
MIT — see the repository root.
| Product | Versions Compatible and additional computed target framework versions. |
|---|---|
| .NET | net9.0 is compatible. net9.0-android was computed. net9.0-browser was computed. net9.0-ios was computed. net9.0-maccatalyst was computed. net9.0-macos was computed. net9.0-tvos was computed. net9.0-windows was computed. net10.0 is compatible. net10.0-android was computed. net10.0-browser was computed. net10.0-ios was computed. net10.0-maccatalyst was computed. net10.0-macos was computed. net10.0-tvos was computed. net10.0-windows was computed. |
-
net10.0
- AetherNet.Core (>= 2.0.0)
- AetherNet.DependencyInjection (>= 2.0.0)
- AetherNet.Transport (>= 2.0.0)
- Microsoft.Extensions.Logging.Abstractions (>= 10.0.7)
- SIPSorcery (>= 10.0.10)
-
net9.0
- AetherNet.Core (>= 2.0.0)
- AetherNet.DependencyInjection (>= 2.0.0)
- AetherNet.Transport (>= 2.0.0)
- Microsoft.Extensions.Logging.Abstractions (>= 10.0.7)
- SIPSorcery (>= 10.0.10)
NuGet packages
This package is not used by any NuGet packages.
GitHub repositories
This package is not used by any popular GitHub repositories.
| Version | Downloads | Last Updated |
|---|---|---|
| 2.0.0 | 0 | 6/27/2026 |