Delphi WebRTC-bibliotheek — P2P, ICE, STUN, TURN, DataChannel

Een native Pascal-implementatie van de WebRTC peer-to-peer-stack: RTCPeerConnection, ICE-candidate-gathering en connectivity checks, STUN- en TURN-client + server, DTLS-SRTP-key-agreement en SCTP-data-channels — met WebSocket-signalling al ingericht.

Peer-to-peer voor Pascal, end to end

Breng browser-grade P2P naar Delphi — zonder Chromium mee te bundelen.

Een Delphi WebRTC-bibliotheek laat twee Delphi-processen (of een Delphi-proces en een browser) een direct, NAT-getraverseerd, end-to-end-versleuteld kanaal opzetten zonder payload door een centrale server te routeren. sgcWebSockets levert elke WebRTC-bouwsteen als een Pascal-component: TsgcWSPClient_WebRTC spiegelt de JavaScript RTCPeerConnection-API, TsgcSTUNClient / TsgcSTUNServer implementeren RFC 5389, TsgcTURNClient / TsgcTURNServer implementeren RFC 5766, en een complete ICE-agent koppelt ze.

In tegenstelling tot browser-gebaseerde stacks (die Chromium of libwebrtc vereisen — tientallen megabytes native code en een ingewikkelde build) is de sgcWebSockets-implementatie pure Pascal bovenop OpenSSL en wordt in je binary gecompileerd. Het draait op Delphi 7 t/m Delphi 13 en levert native binaries voor Win32/Win64, Linux64, macOS, iOS en Android.

Peer-connection

TsgcWSPClient_WebRTC

ICE / STUN / TURN

P2P-componenten

Standaarden

RFC 8825 / 5245 / 5389 / 5766 / 6347 / 4960

Editie

Enterprise

Elk WebRTC-component, blootgesteld

De peer-connection is de hoofdrolspeler, maar de ondersteunende stukken zijn ook first-class-componenten.

RTCPeerConnection

TsgcWSPClient_WebRTC spiegelt de JavaScript-API: CreateOffer, CreateAnswer, SetLocalDescription, SetRemoteDescription, AddIceCandidate, CreateDataChannel. Zie RTCPeerConnection.

SDP offer / answer

Ingebouwde SDP-serializer en -parser. Genereer offers, accepteer answers, trickle ICE-candidates met hetzelfde wire-format dat Chrome en Firefox produceren.

ICE-agent

Volledige candidate-gathering: host, server-reflexive (STUN-ontdekt), relayed (TURN-toegewezen). Pairing, prioritisering en connectivity checks per RFC 5245. ICE-pagina.

STUN-client + server

Standalone STUN-client en STUN-server voor NAT-discovery en keep-alive. Draai je eigen STUN-endpoint met twee regels Pascal.

TURN-client + server

TURN-client voor relay-allocatie en TURN-server voor self-hosting. Long-term credentials, IPv4 + IPv6.

DTLS-SRTP

Het verplichte WebRTC-key-agreement-protocol. DTLS 1.2-handshake over hetzelfde ICE-onderhandelde UDP-pad, met export van keying-materiaal voor SRTP.

SCTP-data-channels

Reliable / unreliable, ordered / unordered berichten over het WebRTC-media-transport — de standaardmanier om willekeurige applicatiedata peer-to-peer te versturen.

WebSocket-signalling

Gebruik de meegeleverde TsgcWebSocketClient / TsgcWebSocketHTTPServer als signalling-kanaal — een bibliotheek voor alles.

WebSocket-signalling: het standaardpatroon

WebRTC definieert geen signalling-protocol — je brengt je eigen mee. De gangbare keuze is een WebSocket-kanaal dat drie berichttypen draagt: offer (SDP van de caller), answer (SDP van de callee) en ice-candidate (candidates getrickled door beide kanten). sgcWebSockets bevat al beide kanten van de signalling-server: TsgcWebSocketHTTPServer met een Channels-implementatie die JSON-berichten routeert tussen gekoppelde peers.

Omdat het peer-connection-component en de signalling-server in dezelfde bibliotheek wonen, kun je een complete WebRTC-applicatie — gecoordineerde discovery, NAT-traversal, versleutelde P2P-payload — opzetten zonder een enkele third-party SDK te integreren.

ICE-servers configureren

Dezelfde IceServers-collectie die een browser gebruikt — met zowel publieke servers als je eigen private TURN.

uses
  sgcWebSocket, sgcWebSocket_Protocol_WebRTC_Client,
  sgcWebSocket_Protocol_WebRTC_Types;

var
  WSClient: TsgcWebSocketClient;
  RTC: TsgcWSPClient_WebRTC;
begin
  WSClient := TsgcWebSocketClient.Create(nil);
  WSClient.URL := 'wss://signal.example.com/rtc';

  RTC := TsgcWSPClient_WebRTC.Create(nil);
  RTC.Client := WSClient;

  // Public Google STUN for NAT discovery
  RTC.IceServers.Add.URL := 'stun:stun.l.google.com:19302';

  // Your own TURN for relay when P2P fails
  with RTC.IceServers.Add do
  begin
    URL        := 'turn:turn.example.com:3478';
    UserName   := 'alice';
    Credential := 's3cret';
  end;

  RTC.OnDataChannelMessage := DoMessage;

  WSClient.Active := True;

  // Create a reliable, ordered data channel
  RTC.CreateDataChannel('chat', True, True);
  RTC.CreateOffer;
end;

procedure TForm1.DoMessage(Sender: TObject;
  const aChannel, aText: string);
begin
  Memo1.Lines.Add(aChannel + ': ' + aText);
end;

// Send a message peer-to-peer
RTC.SendDataChannelMessage('chat', 'Hello from Delphi');

Draai je eigen STUN / TURN in Delphi

De meeste teams beginnen met publieke Google STUN en een third-party TURN-service (Twilio, Xirsys, coturn). Wanneer het verkeer toeneemt, neemt ook de relay-bandbreedterekening toe — en TURN is in de praktijk het enige stuk WebRTC waar je per byte betaalt. De bibliotheek laat je self-hosten: TsgcSTUNServer en TsgcTURNServer passen in een console-applicatie of Windows-service en serveren het protocol op UDP 3478 (STUN) en TCP/UDP/TLS op configureerbare poorten voor TURN. Long-term credentials, IPv4- en IPv6-dual-stack, allocatie-quota en per-user bandbreedte-limieten zijn allemaal ingebouwd.

Meer over P2P in sgcWebSockets

P2P- / WebRTC-hub

Landingspagina voor elk peer-to-peer-component.

RTCPeerConnection

Gedetailleerde componentreferentie.

ICE-agent

Candidate-gathering en connectivity checks.

STUN & TURN

NAT-discovery- en relay-servers.

Blog: RTCPeerConnection P2P

End-to-end-doorloop van een Delphi-naar-Delphi data channel.

Blog: STUN- + TURN-server & client

Self-hosting je eigen STUN/TURN-infrastructuur in Delphi.

Blog: coturn op Windows

Cross-referentie van de referentie-C-implementatie voor interoperabiliteitstests.

Bouw je eerste P2P-kanaal

Download de proefversie — de WebRTC-, STUN- en TURN-demo’s worden geleverd als compileerbare Delphi-projecten.