Librería WebRTC para Delphi — P2P, ICE, STUN, TURN, DataChannel

Implementación Pascal nativa de la pila peer-to-peer WebRTC: RTCPeerConnection, recopilación de candidatos ICE y comprobaciones de conectividad, cliente y servidor STUN y TURN, acuerdo de claves DTLS-SRTP y data channels SCTP — con la señalización WebSocket ya conectada.

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

Lleva P2P de calidad navegador a Delphi — sin empaquetar Chromium.

Una librería WebRTC para Delphi permite a dos procesos Delphi (o a un proceso Delphi y un navegador) establecer un canal directo, atravesado por NAT, cifrado de extremo a extremo, sin enrutar el payload por un servidor central. sgcWebSockets aporta cada bloque de construcción WebRTC como componente Pascal: TsgcWSPClient_WebRTC refleja la API JavaScript RTCPeerConnection, TsgcSTUNClient / TsgcSTUNServer implementan RFC 5389, TsgcTURNClient / TsgcTURNServer implementan RFC 5766, y un agente ICE completo los une.

A diferencia de las pilas basadas en navegador (que requieren Chromium o libwebrtc — decenas de megabytes de código nativo y una compilación complicada), la implementación de sgcWebSockets es Pascal puro sobre OpenSSL y se compila dentro de tu binario. Funciona desde Delphi 7 hasta Delphi 13 y se distribuye con binarios nativos para Win32/Win64, Linux64, macOS, iOS y Android.

Peer connection

TsgcWSPClient_WebRTC

ICE / STUN / TURN

Componentes P2P

Estándares

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

Edición

Enterprise

Cada componente WebRTC, expuesto

La peer connection es la cabecera, pero las piezas de soporte también son componentes de primera clase.

RTCPeerConnection

TsgcWSPClient_WebRTC refleja la API JavaScript: CreateOffer, CreateAnswer, SetLocalDescription, SetRemoteDescription, AddIceCandidate, CreateDataChannel. Ver RTCPeerConnection.

Oferta / respuesta SDP

Serializador y parser SDP integrados. Genera ofertas, acepta respuestas, hace trickle de candidatos ICE con el mismo formato de wire que producen Chrome y Firefox.

Agente ICE

Recopilación completa de candidatos: host, server-reflexive (descubierto por STUN), relayed (asignado por TURN). Emparejamiento, priorización y comprobaciones de conectividad según RFC 5245. Página ICE.

Cliente + servidor STUN

Cliente STUN y servidor STUN autónomos para descubrimiento de NAT y keep-alive. Ejecuta tu propio endpoint STUN con dos líneas de Pascal.

Cliente + servidor TURN

Cliente TURN para asignación de relay y servidor TURN para autoalojarlo. Credenciales de largo plazo, IPv4 + IPv6.

DTLS-SRTP

El protocolo de acuerdo de claves obligatorio de WebRTC. Handshake DTLS 1.2 sobre la misma ruta UDP negociada por ICE, exportando material de claves para SRTP.

Data channels SCTP

Mensajes fiables / no fiables, ordenados / no ordenados sobre el transporte de medios WebRTC — la forma estándar de enviar datos arbitrarios de aplicación peer-to-peer.

Señalización WebSocket

Usa los TsgcWebSocketClient / TsgcWebSocketHTTPServer incluidos como canal de señalización — una sola librería para todo.

Señalización WebSocket: el patrón estándar

WebRTC no define un protocolo de señalización — tienes que aportar el tuyo. La elección convencional es un canal WebSocket que transporta tres tipos de mensaje: offer (SDP del llamante), answer (SDP del llamado) y ice-candidate (candidatos hechos trickle por cualquiera de los lados). sgcWebSockets incluye ya ambos extremos del servidor de señalización: TsgcWebSocketHTTPServer con una implementación de Channels que enruta mensajes JSON entre pares emparejados.

Como el componente de peer connection y el servidor de señalización viven en la misma librería, puedes levantar una aplicación WebRTC completa — descubrimiento coordinado, traversal de NAT, payload P2P cifrado — sin integrar un solo SDK de terceros.

Configurando servidores ICE

La misma colección IceServers que usa un navegador — con servidores públicos y tu propio 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');

Ejecuta tu propio STUN / TURN en Delphi

La mayoría de equipos arrancan con STUN público de Google y un servicio TURN de terceros (Twilio, Xirsys, coturn). Cuando el tráfico crece, la factura de ancho de banda del relay crece también — y TURN es, en la práctica, la única pieza de WebRTC donde pagas por byte. La librería te permite autoalojarlo: TsgcSTUNServer y TsgcTURNServer encajan en una aplicación de consola o servicio Windows y sirven el protocolo en UDP 3478 (STUN) y TCP/UDP/TLS en puertos configurables para TURN. Credenciales de largo plazo, doble pila IPv4 e IPv6, cuotas de asignación y límites de ancho de banda por usuario están todos integrados.

Más sobre P2P en sgcWebSockets

Hub P2P / WebRTC

Página de entrada para cada componente peer-to-peer.

RTCPeerConnection

Referencia detallada del componente.

Agente ICE

Recopilación de candidatos y comprobaciones de conectividad.

STUN y TURN

Servidores de descubrimiento de NAT y de relay.

Blog: RTCPeerConnection P2P

Recorrido de extremo a extremo de un data channel Delphi a Delphi.

Blog: servidor y cliente STUN + TURN

Autoalojando tu propia infraestructura STUN/TURN en Delphi.

Blog: coturn en Windows

Cruzando referencias con la implementación C de referencia para tests de interoperabilidad.

Construye tu primer canal P2P

Descarga la versión de prueba — las demos de WebRTC, STUN y TURN se distribuyen como proyectos Delphi compilables.