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: TsgcRTCPeerConnection spiegelt de W3C-RTCPeerConnection-API, TsgcSTUNClient / TsgcSTUNServer implementeren RFC 8489, TsgcTURNClient / TsgcTURNServer implementeren RFC 8656, en TsgcICEClient, een complete ICE-agent, koppelt ze aan elkaar.

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

TsgcRTCPeerConnection

ICE / STUN / TURN

P2P-componenten

Standaarden

RFC 8825 / 8445 / 8489 / 8656 / 6347 / 4960 / 8831

Editie

Enterprise voor de componenten, plus de sgcWebRTC-pack voor offer en answer, DataChannels en tracks. Beide zitten in All-Access.

Elk WebRTC-component, blootgesteld

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

RTCPeerConnection

TsgcRTCPeerConnection spiegelt de W3C-API: CreateOffer, CreateAnswer, SetLocalDescription, SetRemoteDescription, AddIceCandidate, CreateDataChannel, AddTrack. 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 volgens RFC 8445. 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, of het kant-en-klare protocolpaar TsgcWSPClient_RTCPeerConnection en TsgcWSPServer_RTCPeerConnection. Één 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 die door beide kanten worden getrickled). sgcWebSockets bevat beide kanten van dat kanaal al. TsgcWSPServer_RTCPeerConnection koppelt een caller aan een callee en relayt hun descriptions en candidates, TsgcWSPClient_RTCPeerConnection is de bijbehorende client, en TsgcWSPServer_WebRTC doet hetzelfde werk voor browser-peers en pusht de ICE-serverlijst naar elke peer zodra die binnenkomt.

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-lijst die een browser gebruikt, beschikbaar als RTCOptions.ICEServers — met zowel publieke servers als je eigen private TURN.

uses
  sgcP2P, sgcP2P_DataChannel;

// TFormPeer bevat FPeer, FChannel en FIncoming: TStringList

procedure TFormPeer.CreatePeer;
begin
  FPeer := TsgcRTCPeerConnection.Create(nil);
  FPeer.RTCOptions.ICEServers.AddURL('stun:stun.l.google.com:19302');
  FPeer.RTCOptions.ICEServers.AddURL('turn:turn.example.com:3478',
    'alice', 's3cret');

  FPeer.OnLocalDescription := OnLocalDescription;
  FPeer.OnIceCandidate     := OnIceCandidate;
  FPeer.OnDataChannel      := OnDataChannel;

  // uitgaande kant. CreateDataChannel zet RTCOptions.DTLS aan
  FChannel := FPeer.CreateDataChannel('chat');
  FChannel.OnMessage := OnChannelMessage;
  FPeer.CreateOffer;
end;

procedure TFormPeer.OnLocalDescription(Sender: TObject;
  const aType, aSDP: string);
begin
  // aType is 'offer' of 'answer'
  SignalToPeer(aType, aSDP);
end;

procedure TFormPeer.OnIceCandidate(Sender: TObject;
  const aCandidate, aSdpMid: string; aSdpMLineIndex: Integer);
begin
  SignalCandidate(aCandidate, aSdpMid, aSdpMLineIndex);
end;

procedure TFormPeer.OnDataChannel(Sender: TObject;
  aChannel: TsgcRTCDataChannel);
begin
  FChannel := aChannel;
  FChannel.OnMessage := OnChannelMessage;
end;

procedure TFormPeer.OnChannelMessage(Sender: TObject;
  const aText: string);
begin
  // vuurt op een worker thread, marshal voordat je een control aanraakt
  FIncoming.Add(aText);
end;

// stuur een bericht peer to peer
FChannel.Send('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 een Windows-service en antwoorden standaard op UDP 3478, op welke poort en welk adres je ook in Bindings zet. Long-term credentials, IPv4 en IPv6, een relay-poortbereik in TURNOptions.Allocation en een allocatiequotum per gebruiker 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.

De beste deal: All-AccessElk eSeGeCe-product, inclusief Premium-ondersteuning, vanaf €1,059 per jaar.
Bekijk de All-Access-prijzen

Bouw je eerste P2P-kanaal

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