Skip to content

v4.6.0-preview.1 — WebRTC facade (preview) & Voip* config rename

Pre-release
Pre-release

Choose a tag to compare

@BechsteinDigital BechsteinDigital released this 18 Jul 14:47

⚠️ Pre-release. Ships the new WebRTC facade as a preview: it has not yet been
validated against real browsers (Chrome/Firefox) and its API may still change before it is
declared stable. The SIP stack (VoipClient) is unchanged and production-ready.

✨ Highlights

Public WebRTC facade (preview, transport-only) — a signalling-neutral browser/peer surface
in the CalloraVoipSdk.WebRtc namespace, mirroring the four-level design of VoipClient. The app
owns signalling and the codec; the SDK runs ICE, DTLS-SRTP, BUNDLE and RTP/RTCP and moves bytes —
it never encodes or decodes.

  • WebRtcClient / IWebRtcClientnew WebRtcClient() or DI via AddCalloraWebRtc(...);
    CreatePeer() returns an IPeerConnection.
  • Signalling happy pathpeer.ConnectAsync(IWebRtcSignaling, WebRtcRole) drives the full
    RFC 8829 offer/answer over your channel and completes when connected (the WebRTC counterpart to
    DialAndWaitUntilConnectedAsync). Neutral primitives (CreateOffer / SetRemoteDescriptionAsync
    / StartAsync) remain for manual control.
  • W3C track modelTrackReceivedRemoteTrack (Kind, StreamId = remote a=msid,
    TrackId) with EncodedFrame (payload, RTP timestamp, key-frame flag).
  • Multi-peer managerIWebRtcClient.Peers.
  • L3 extension seamsIMediaTap + AttachMediaTap (in/out media for recording/analytics/AI);
    IWebRtcClientModule + IWebRtcClient.Modules (programmatic or DI auto-attached).
  • Two-facade compositionAddCalloraVoip(sip => …).AddWebRtc(rtc => …).
  • SamplesWebRtcPeer, WebRtcRecording, WebRtcDependencyInjection, and a simplest-form
    browser video-call website (WebRtcVideoCall.Web).

💥 Breaking changes

The SIP-facade configuration types were renamed so each facade owns a facade-scoped name (parallel
to WebRtcConfiguration / WebRtcOptions / AddCalloraWebRtc), freeing the Callora* names for the
upcoming composition layer. There are no compatibility aliases.

Before After
SdkConfiguration VoipConfiguration
SdkOptions VoipOptions
AddCallora(...) AddCalloraVoip(...)

Migration — rename these three symbols at your call sites:

// before
services.AddCallora(o => { /* … */ });
var cfg = new SdkConfiguration { /* … */ };

// after
services.AddCalloraVoip(o => { /* … */ });
var cfg = new VoipConfiguration { /* … */ };

VoipClient and all other public types are unchanged; behaviour is identical.

⚠️ Preview limitations

- Not yet validated against real browsers (Chrome/Firefox).
- Both peers need a configured media port until early-bind / trickle ICE lands.
- No data channels (SCTP), TURN relay or simulcast yet.

📦 Targets

net8.0 · net9.0 · net10.0

Full changelog: CHANGELOG.md (https://github.com/BechsteinDigital/CalloraVoipSDK/blob/main/CHANGELOG.md)