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

Uma implementação Pascal nativa da stack peer-to-peer do WebRTC: RTCPeerConnection, coleta de candidatos ICE e checks de conectividade, cliente + servidor STUN e TURN, acordo de chaves DTLS-SRTP e data channels SCTP — com signalling via WebSocket já conectado.

Peer-to-peer para Pascal, de ponta a ponta

Traga P2P em nível de navegador para o Delphi — sem empacotar o Chromium.

Uma biblioteca WebRTC Delphi deixa dois processos Delphi (ou um processo Delphi e um navegador) estabelecerem um canal direto, com NAT traversal e criptografia ponta a ponta, sem rotear o payload por um servidor central. O sgcWebSockets fornece cada bloco de construção do WebRTC como um componente Pascal: TsgcWSPClient_WebRTC espelha a API JavaScript RTCPeerConnection, TsgcSTUNClient / TsgcSTUNServer implementam a RFC 5389, TsgcTURNClient / TsgcTURNServer implementam a RFC 5766, e um agente ICE completo amarra tudo.

Diferente de stacks baseadas em navegador (que exigem Chromium ou libwebrtc — dezenas de megabytes de código nativo e um build complicado), a implementação do sgcWebSockets é Pascal puro sobre OpenSSL e é compilada dentro do seu binário. Roda do Delphi 7 ao Delphi 13 e entrega binários nativos para Win32/Win64, Linux64, macOS, iOS e Android.

Conexão de par

TsgcWSPClient_WebRTC

ICE / STUN / TURN

Componentes P2P

Padrões

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

Edição

Enterprise

Cada componente WebRTC, exposto

A peer connection é o destaque, mas as peças de apoio são componentes de primeira classe também.

RTCPeerConnection

TsgcWSPClient_WebRTC espelha a API JavaScript: CreateOffer, CreateAnswer, SetLocalDescription, SetRemoteDescription, AddIceCandidate, CreateDataChannel. Veja RTCPeerConnection.

Offer / answer SDP

Serializador e parser SDP embutidos. Gere offers, aceite answers, faça trickle de candidatos ICE com o mesmo formato de fio que Chrome e Firefox produzem.

Agente ICE

Coleta completa de candidatos: host, server-reflexive (descoberto por STUN), relayed (alocado por TURN). Pareamento, priorização e checks de conectividade conforme a RFC 5245. Página ICE.

Cliente + servidor STUN

Cliente STUN e servidor STUN standalone para descoberta de NAT e keep-alive. Rode seu próprio endpoint STUN com duas linhas de Pascal.

Cliente + servidor TURN

Cliente TURN para alocação de relay e servidor TURN para self-hosting. Credenciais de longo prazo, IPv4 + IPv6.

DTLS-SRTP

O protocolo obrigatório de acordo de chaves do WebRTC. Handshake DTLS 1.2 sobre o mesmo caminho UDP negociado por ICE, exportando keying material para SRTP.

Data channels SCTP

Mensagens confiáveis / não confiáveis, ordenadas / não ordenadas sobre o transporte de mídia WebRTC — a forma padrão de enviar dados arbitrários da aplicação peer-to-peer.

Signalling WebSocket

Use os TsgcWebSocketClient / TsgcWebSocketHTTPServer inclusos como seu canal de signalling — uma biblioteca para tudo.

Signalling via WebSocket: o padrão

WebRTC não define um protocolo de signalling — você traz o seu. A escolha convencional é um canal WebSocket que carrega três tipos de mensagem: offer (SDP do chamador), answer (SDP do chamado) e ice-candidate (candidatos enviados em trickle por qualquer lado). O sgcWebSockets inclui ambos os lados do servidor de signalling: TsgcWebSocketHTTPServer com uma implementação de Channels que roteia mensagens JSON entre pares casados.

Como o componente de peer connection e o servidor de signalling vivem na mesma biblioteca, você pode subir uma aplicação WebRTC completa — descoberta coordenada, NAT traversal, payload P2P criptografado — sem integrar um único SDK de terceiros.

Configurando servidores ICE

A mesma coleção IceServers que um navegador usa — com servidores públicos e seu próprio TURN privado.

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

Rode seu próprio STUN / TURN em Delphi

A maioria das equipes começa com o Google STUN público e um serviço TURN de terceiros (Twilio, Xirsys, coturn). Quando o tráfego cresce, a conta de banda de relay também cresce — e TURN é, na prática, a única peça do WebRTC em que você paga por byte. A biblioteca permite self-hosting: TsgcSTUNServer e TsgcTURNServer caem em uma aplicação de console ou serviço Windows e servem o protocolo na UDP 3478 (STUN) e em portas configuráveis TCP/UDP/TLS para TURN. Credenciais de longo prazo, dual-stack IPv4 e IPv6, cotas de alocação e limites de banda por usuário são todos embutidos.

Mais sobre P2P no sgcWebSockets

Hub P2P / WebRTC

Landing page de cada componente peer-to-peer.

RTCPeerConnection

Referência detalhada do componente.

Agente ICE

Coleta de candidatos e checks de conectividade.

STUN & TURN

Servidores de descoberta de NAT e relay.

Blog: P2P com RTCPeerConnection

Passo a passo de ponta a ponta de um data channel Delphi-para-Delphi.

Blog: servidor & cliente STUN + TURN

Self-hosting da sua própria infraestrutura STUN/TURN em Delphi.

Blog: coturn no Windows

Referência cruzada com a implementação C de referência para testes de interoperabilidade.

Construa seu primeiro canal P2P

Baixe o trial — as demos WebRTC, STUN e TURN vêm como projetos Delphi compiláveis.