RTCPeerConnection en Delphi

Habla WebRTC desde Delphi/C++Builder — ICE para conectividad, DTLS para el handshake de claves, SRTP para media, SCTP-sobre-DTLS para DataChannels. Sin necesidad de navegador.

TsgcRTCPeerConnection

Peer WebRTC nativo en Delphi — replica la superficie de RTCPeerConnection del W3C (CreateOffer / CreateAnswer / SetRemoteDescription / AddIceCandidate / DataChannel) respaldada por las pilas ICE, DTLS, SRTP y SCTP incluidas.

Clase del componente

TsgcRTCPeerConnection

Protocolo

WebRTC (W3C)

Plataformas

Windows, macOS, Linux, iOS, Android

Edición

Enterprise para el componente, más el pack sgcWebRTC para offer y answer, DataChannels y pistas. Los dos vienen en All-Access.

El bloque Enterprise de sgcVer.inc define SGC_ICE, SGC_DTLS, SGC_RTCPEERCONNECTION y SGC_TURN, que es lo que pone TsgcRTCPeerConnection en la paleta y le da transporte ICE y TURN. Los métodos de offer y answer, la API de DataChannel y la API de media están dentro de SGC_SDP, SGC_DATACHANNEL y SGC_RTP, y solo SGC_PACK_WEBRTC los define. Necesitan el pack sgcWebRTC sobre Enterprise, o All-Access, que ya lo habilita.

Offer / Answer / Conectar

Rellena RTCOptions.ICEServers, llama a CreateOffer, envía el SDP que te entrega OnLocalDescription al par remoto por tu canal de señalización, establece el answer que vuelve, y la ruta de datos se activa.

uses
  sgcP2P, sgcP2P_DataChannel;

// TFormPeer contiene FPeer, FChannel, FIncoming: TStringList y los manejadores

procedure TFormPeer.CreatePeer;
begin
  FPeer := TsgcRTCPeerConnection.Create(nil);
  FPeer.RTCOptions.ICEServers.AddURL('stun:stun.l.google.com:19302');
  FPeer.RTCOptions.ICE.TURN := False;  // aún sin servidor TURN

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

  // lado saliente. CreateDataChannel activa RTCOptions.DTLS
  FChannel := FPeer.CreateDataChannel('chat');
  FChannel.OnMessage := OnChannelMessage;
  FPeer.CreateOffer;
end;

procedure TFormPeer.OnLocalDescription(Sender: TObject;
  const aType, aSDP: string);
begin
  // aType es 'offer' o 'answer'
  SignalToPeer(aType, aSDP); // por tu canal de señalización WebSocket
end;

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

procedure TFormPeer.OnChannelMessage(Sender: TObject;
  const aText: string);
begin
  // se dispara en un hilo de trabajo, marshalea antes de tocar un control
  FIncoming.Add(aText);
end;
// includes: sgcP2P.hpp, sgcP2P_DataChannel.hpp

TsgcRTCPeerConnection *Peer = new TsgcRTCPeerConnection(this);
Peer->RTCOptions->ICEServers->AddURL("stun:stun.l.google.com:19302");
Peer->RTCOptions->ICE->TURN = false;  // aún sin servidor TURN

Peer->OnLocalDescription = OnLocalDescription;
Peer->OnDataChannel      = OnDataChannel;

TsgcRTCDataChannel *Channel = Peer->CreateDataChannel("chat");
Peer->CreateOffer();

void __fastcall TFormPeer::OnLocalDescription(TObject *Sender,
  const String aType, const String aSDP)
{
  SignalToPeer(aType, aSDP);  // por tu canal de señalización WebSocket
}

void __fastcall TFormPeer::OnDataChannel(TObject *Sender,
  TsgcRTCDataChannel *aChannel)
{
  aChannel->OnMessage = OnChannelMessage;
}

Ejemplo completo: dos aplicaciones Delphi de extremo a extremo

Qué incluye

Un peer WebRTC nativo que agrupa ICE, DTLS, SRTP y SCTP en un solo componente — replicando la API RTCPeerConnection del W3C.

SDP Offer / Answer

CreateOffer y CreateAnswer generan SDP de RFC 8866 con los atributos correctos ICE-UFRAG / ICE-PWD / FINGERPRINT / SETUP; SetRemoteDescription ingiere el SDP del par.

Conectividad por ICE

Usa TsgcICEClient internamente para la recopilación de candidatos y comprobaciones de conectividad; AddIceCandidate alimenta los candidatos remotos a medida que llegan por la señalización.

Cifrado de claves DTLS

En cuanto el par ICE seleccionado se vuelve escribible, el componente realiza un handshake DTLS (RFC 6347) y exporta el material de claves SRTP con la etiqueta EXTRACTOR-dtls_srtp de la RFC 5764. RTCOptions.DTLS vale False por defecto y CreateDataChannel lo activa por ti.

DataChannels (SCTP-sobre-DTLS)

CreateDataChannel abre un stream SCTP multiplexado sobre DTLS — fiable / parcialmente fiable, ordenado / no ordenado, con backpressure mediante BufferedAmount.

Pistas de media

AddTrack publica una pista de audio o vídeo y OnTrack recibe la remota, ambas sobre SRTP. El componente complementario TsgcWSPServer_RTCPeerConnection es el broker de señalización WebSocket: empareja a quien llama con quien responde y retransmite su SDP y sus candidatos.

Compatible con navegadores

Interopera con RTCPeerConnection de los navegadores — probado contra Chromium / Firefox / Safari. Mismas semánticas SDP, mismos candidatos ICE, mismo formato de cable DataChannel.

Especificaciones y referencias

Fuentes autorizadas del protocolo que implementa este componente.

Documentación y demos

Accede a la referencia del componente, descarga el proyecto demo listo para ejecutar y la versión de prueba.

Ayuda en línea — TsgcRTCPeerConnection Referencia completa de propiedades, métodos y eventos de este componente.
Proyecto demo — Demos\35.P2P\05.RTCPeerConnection Proyecto de ejemplo listo para ejecutar. Se incluye dentro del paquete sgcWebSockets — descarga la prueba abajo.
Documento técnico (PDF) Características, inicio rápido, ejemplos de código para Delphi y C++ Builder y referencias a fuentes primarias — solo este componente.
Manual de usuario (PDF) Manual completo que cubre cada componente de la biblioteca.
La mejor opción: All-AccessTodos los productos de eSeGeCe, con Premium Support incluido, desde €1,059 al año.
Ver precios de All-Access

¿Listo para ejecutar WebRTC en Delphi?

Descarga la prueba gratuita y añade RTCPeerConnection nativo a tus aplicaciones Delphi.