Technology · Protocol

WebSocket

One authenticated WebSocket per call carries the binary audio link between Teams and my voice engine, and survives a mid-call reconnect.

HelixTeams call audio linkBinary media protocol
Teams to my own GPUs, one socket per call
Windows bridgemedia driver
Voice engine
  • 2implementations held to byte-identical output
  • 20 msaudio pacing the media SDK expects
  • 30 minsoak with a forced mid-call reconnect

A media driver on Windows, the intelligence on my side

Helix answers Microsoft Teams calls with a voice engine on my own GPUs under Linux, and Teams hands raw call audio only to a Windows application built on Microsoft's real-time media SDK. I kept all intelligence on my side and made the Windows piece a media driver, joined to the engine by a WebSocket link carrying a binary media protocol I designed.

Windows on Azure · .NET media bridge
one WebSocket
Linux, my GPUs · the voice engine

One socket per call, admitted by identity

Each call gets one authenticated, full-duplex secure WebSocket between the bridge and the engine, so a call's lifetime equals its socket's. On the Linux side an Axum endpoint admits a session only when its tenant, persona and identity fingerprint match what the engine expects.

It then presents the call as one more implementation of the engine's sealed audio source and sink, the interfaces the local microphone and speaker already use, so the conversation engine runs unchanged whether it is talking to a desk microphone or a Teams call. Audio and video travel as fixed binary frames tagged with their persona and session.

Desk microphone
Teams call
Sealed source and sink
The conversation engine reads only the bottom lane.

Two implementations, one set of bytes

I implemented the protocol in C# and in Rust against shared golden test vectors, so a one-byte change on either side fails a test before it reaches a call. On Windows, the SDK's receive callbacks copy their buffer and return at once, as its lifetime rules require, and a paced sender transmits at the SDK's expected rhythm only while the socket is up.

If the link drops, the bridge reconnects inside the same Teams call with fresh credentials and discards microphone audio captured during the gap, because late speech confuses a conversation more than a short silence does. The whole account is A self-hosted colleague in a Teams call. WebSocket is the standard transport; the media protocol, session admission and reconnect behaviour are mine.

I can design a real-time protocol across two languages, two clouds and a vendor SDK with strict rules, and prove it under soak and fault before I call it finished.

C# frame
Rust frame
Mid-call reconnect
Teams call
Socket
Microphone audio
dropped
Byte pattern is illustrative.