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

Eine native Pascal-Implementierung des WebRTC-Peer-to-Peer-Stacks: RTCPeerConnection, ICE-Candidate-Gathering und Connectivity Checks, STUN- und TURN-Client + -Server, DTLS-SRTP-Schlüsselvereinbarung und SCTP-Data-Channels — mit bereits verdrahteter WebSocket-Signalisierung.

Peer-to-Peer für Pascal, Ende zu Ende

Bring browserreifes P2P nach Delphi — ohne Chromium zu bundeln.

Eine Delphi-WebRTC-Bibliothek erlaubt es zwei Delphi-Prozessen (oder einem Delphi-Prozess und einem Browser), einen direkten, NAT-durchquerenden, Ende-zu-Ende-verschlüsselten Kanal aufzubauen — ohne den Payload über einen zentralen Server zu schicken. sgcWebSockets stellt jeden WebRTC-Baustein als Pascal-Komponente bereit: TsgcWSPClient_WebRTC spiegelt die JavaScript-API RTCPeerConnection, TsgcSTUNClient / TsgcSTUNServer implementieren RFC 5389, TsgcTURNClient / TsgcTURNServer implementieren RFC 5766, und ein vollständiger ICE-Agent verbindet sie.

Im Gegensatz zu browserbasierten Stacks (die Chromium oder libwebrtc erfordern — zig Megabyte nativen Codes plus komplizierter Build) ist die sgcWebSockets-Implementierung reines Pascal auf OpenSSL und wird direkt in deine Binary kompiliert. Sie läuft von Delphi 7 bis Delphi 13 und liefert native Binaries für Win32/Win64, Linux64, macOS, iOS und Android.

Peer Connection

TsgcWSPClient_WebRTC

ICE / STUN / TURN

P2P-Komponenten

Standards

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

Edition

Enterprise

Jede WebRTC-Komponente freigegeben

Die Peer Connection ist die Headline, aber auch die unterstützenden Teile sind erstklassige Komponenten.

RTCPeerConnection

TsgcWSPClient_WebRTC spiegelt die JavaScript-API: CreateOffer, CreateAnswer, SetLocalDescription, SetRemoteDescription, AddIceCandidate, CreateDataChannel. Siehe RTCPeerConnection.

SDP-Offer / -Answer

Eingebauter SDP-Serialisierer und -Parser. Generiere Offers, akzeptiere Answers, trickle ICE-Candidates in genau dem Wire-Format, das Chrome und Firefox erzeugen.

ICE-Agent

Vollständiges Candidate-Gathering: host, server-reflexive (per STUN entdeckt), relayed (per TURN allokiert). Pairing, Priorisierung und Connectivity Checks gemäß RFC 5245. ICE-Seite.

STUN-Client + -Server

Eigenständiger STUN-Client und STUN-Server für NAT-Discovery und Keep-Alive. Betreibe deinen eigenen STUN-Endpunkt mit zwei Zeilen Pascal.

TURN-Client + -Server

TURN-Client für Relay-Allokation und TURN-Server zum Selbsthosten. Long-Term Credentials, IPv4 + IPv6.

DTLS-SRTP

Das verpflichtende Schlüsselvereinbarungsprotokoll für WebRTC. DTLS-1.2-Handshake über denselben ICE-ausgehandelten UDP-Pfad — mit Export des Keying Materials für SRTP.

SCTP-Data-Channels

Zuverlässige/unzuverlässige, geordnete/ungeordnete Nachrichten über den WebRTC-Media-Transport — der Standardweg, beliebige Anwendungsdaten peer-to-peer zu senden.

WebSocket-Signalisierung

Nutze die mitgelieferten TsgcWebSocketClient / TsgcWebSocketHTTPServer als Signalisierungskanal — eine Bibliothek für alles.

WebSocket-Signalisierung: das Standardmuster

WebRTC definiert kein Signalisierungsprotokoll — das bringst du selbst mit. Die übliche Wahl ist ein WebSocket-Kanal, der drei Nachrichtentypen trägt: offer (SDP vom Anrufer), answer (SDP vom Angerufenen) und ice-candidate (Candidates, die von beiden Seiten getrickelt werden). sgcWebSockets enthält bereits beide Enden des Signalisierungsservers: TsgcWebSocketHTTPServer mit einer Channels-Implementierung, die JSON-Nachrichten zwischen gepaarten Peers routet.

Weil Peer-Connection-Komponente und Signalisierungsserver in derselben Bibliothek leben, kannst du eine komplette WebRTC-Anwendung — koordinierte Discovery, NAT-Traversal, verschlüsselter P2P-Payload — aufziehen, ohne ein einziges Drittanbieter-SDK zu integrieren.

ICE-Server konfigurieren

Dieselbe IceServers-Collection, die ein Browser verwendet — mit öffentlichen Servern und deinem eigenen privaten 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');

Eigenes STUN/TURN in Delphi betreiben

Die meisten Teams starten mit dem öffentlichen Google-STUN und einem TURN-Drittanbieterservice (Twilio, Xirsys, coturn). Wenn der Traffic wächst, wächst die Relay-Bandbreitenrechnung mit — und TURN ist in der Praxis das einzige Stück WebRTC, für das du pro Byte zahlst. Die Bibliothek erlaubt das Selbst-Hosting: TsgcSTUNServer und TsgcTURNServer fügen sich in eine Konsolen-Anwendung oder einen Windows-Dienst ein und sprechen das Protokoll auf UDP 3478 (STUN) und auf konfigurierbaren TCP/UDP/TLS-Ports für TURN. Long-Term Credentials, IPv4- und IPv6-Dual-Stack, Allokationsquoten und Bandbreitenlimits pro Benutzer sind alle eingebaut.

Mehr zu P2P in sgcWebSockets

P2P-/WebRTC-Hub

Landing Page für jede Peer-to-Peer-Komponente.

RTCPeerConnection

Detaillierte Komponentenreferenz.

ICE-Agent

Candidate-Gathering und Connectivity Checks.

STUN & TURN

NAT-Discovery und Relay-Server.

Blog: RTCPeerConnection-P2P

End-to-End-Walkthrough eines Delphi-zu-Delphi-Data-Channels.

Blog: STUN- + TURN-Server & -Client

Eigene STUN/TURN-Infrastruktur in Delphi selbst hosten.

Blog: coturn unter Windows

Quervergleich mit der C-Referenzimplementierung für Interoperabilitätstests.

Baue deinen ersten P2P-Kanal

Lade die Testversion — die WebRTC-, STUN- und TURN-Demos werden als kompilierbare Delphi-Projekte ausgeliefert.