Libreria WebRTC Delphi — P2P, ICE, STUN, TURN, DataChannel

Un'implementazione Pascal nativa dello stack peer-to-peer WebRTC: RTCPeerConnection, raccolta dei candidati ICE e controlli di connettività, client e server STUN e TURN, key agreement DTLS-SRTP e data channel SCTP — con il signalling WebSocket già cablato.

Peer-to-peer per Pascal, end-to-end

Porta P2P di livello browser in Delphi — senza distribuire Chromium.

Una libreria WebRTC Delphi consente a due processi Delphi (o a un processo Delphi e a un browser) di stabilire un canale diretto, attraverso NAT, cifrato end-to-end, senza instradare il payload attraverso un server centrale. sgcWebSockets fornisce ogni mattone WebRTC come componente Pascal: TsgcWSPClient_WebRTC rispecchia l'API JavaScript RTCPeerConnection, TsgcSTUNClient / TsgcSTUNServer implementano RFC 5389, TsgcTURNClient / TsgcTURNServer implementano RFC 5766 e un agente ICE completo li tiene insieme.

A differenza degli stack basati su browser (che richiedono Chromium o libwebrtc — decine di megabyte di codice nativo e una build complicata) l'implementazione sgcWebSockets è puro Pascal sopra OpenSSL e si compila nel tuo binario. Gira da Delphi 7 a Delphi 13 e distribuisce binari nativi per Win32/Win64, Linux64, macOS, iOS e Android.

Peer connection

TsgcWSPClient_WebRTC

ICE / STUN / TURN

Componenti P2P

Standard

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

Edizione

Enterprise

Ogni componente WebRTC, esposto

La peer connection è il titolo, ma anche i pezzi di supporto sono componenti di prima classe.

RTCPeerConnection

TsgcWSPClient_WebRTC rispecchia l'API JavaScript: CreateOffer, CreateAnswer, SetLocalDescription, SetRemoteDescription, AddIceCandidate, CreateDataChannel. Vedi RTCPeerConnection.

SDP offer / answer

Serializer e parser SDP integrati. Genera offer, accetta answer, fai trickle dei candidati ICE con lo stesso formato di rete prodotto da Chrome e Firefox.

Agente ICE

Raccolta completa dei candidati: host, server-reflexive (scoperti via STUN), relayed (allocati via TURN). Pairing, prioritizzazione e controlli di connettività per RFC 5245. Pagina ICE.

Client e server STUN

Client STUN e server STUN standalone per la scoperta NAT e il keep-alive. Esegui il tuo endpoint STUN con due righe di Pascal.

Client e server TURN

Client TURN per l'allocazione del relay e server TURN per il self-hosting. Long-term credential, IPv4 + IPv6.

DTLS-SRTP

Il protocollo di key agreement obbligatorio per WebRTC. Handshake DTLS 1.2 sullo stesso path UDP negoziato da ICE, esportando il keying material per SRTP.

Data channel SCTP

Messaggi affidabili / non affidabili, ordinati / non ordinati sul trasporto media WebRTC — il modo standard di inviare dati applicativi arbitrari peer-to-peer.

Signalling WebSocket

Usa i bundle TsgcWebSocketClient / TsgcWebSocketHTTPServer come canale di signalling — una libreria per tutto.

Signalling WebSocket: il pattern standard

WebRTC non definisce un protocollo di signalling — te lo porti tu. La scelta convenzionale è un canale WebSocket che trasporta tre tipi di messaggio: offer (SDP dal chiamante), answer (SDP dal chiamato) e ice-candidate (candidati inviati a trickle da entrambe le parti). sgcWebSockets include già entrambi i lati del server di signalling: TsgcWebSocketHTTPServer con un'implementazione dei Channels che instrada i messaggi JSON tra peer abbinati.

Poiché il componente peer-connection e il server di signalling vivono nella stessa libreria, puoi mettere in piedi un'applicazione WebRTC completa — scoperta coordinata, NAT traversal, payload P2P cifrato — senza integrare un singolo SDK di terze parti.

Configurazione dei server ICE

La stessa collezione IceServers che usa un browser — con sia server pubblici sia il tuo TURN privato.

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');

Esegui il tuo STUN / TURN in Delphi

La maggior parte dei team inizia con lo STUN pubblico di Google e un servizio TURN di terze parti (Twilio, Xirsys, coturn). Quando il traffico cresce, cresce anche la bolletta per la banda di relay — e TURN è, in pratica, l'unico pezzo di WebRTC in cui paghi al byte. La libreria ti consente il self-host: TsgcSTUNServer e TsgcTURNServer si inseriscono in un'applicazione console o in un servizio Windows e servono il protocollo su UDP 3478 (STUN) e TCP/UDP/TLS su porte configurabili per TURN. Long-term credential, dual-stack IPv4 e IPv6, quote di allocazione e limiti di banda per utente sono tutti integrati.

Altro su P2P in sgcWebSockets

Hub P2P / WebRTC

Pagina di atterraggio per ogni componente peer-to-peer.

RTCPeerConnection

Riferimento dettagliato del componente.

Agente ICE

Raccolta dei candidati e controlli di connettività.

STUN e TURN

Scoperta NAT e server di relay.

Blog: RTCPeerConnection P2P

Guida end-to-end di un data channel Delphi-Delphi.

Blog: server e client STUN + TURN

Self-hosting della tua infrastruttura STUN/TURN in Delphi.

Blog: coturn su Windows

Cross-reference con l'implementazione C di riferimento per test di interoperabilità.

Costruisci il tuo primo canale P2P

Scarica la trial — le demo WebRTC, STUN e TURN sono distribuite come progetti Delphi compilabili.