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.
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.
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.
TsgcRTCPeerConnection
Windows, macOS, Linux, iOS, Android
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.
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
Un peer WebRTC nativo que agrupa ICE, DTLS, SRTP y SCTP en un solo componente — replicando la API RTCPeerConnection del W3C.
CreateOffer y CreateAnswer generan SDP de RFC 8866 con los atributos correctos ICE-UFRAG / ICE-PWD / FINGERPRINT / SETUP; SetRemoteDescription ingiere el SDP del par.
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.
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.
CreateDataChannel abre un stream SCTP multiplexado sobre DTLS — fiable / parcialmente fiable, ordenado / no ordenado, con backpressure mediante BufferedAmount.
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.
Interopera con RTCPeerConnection de los navegadores — probado contra Chromium / Firefox / Safari. Mismas semánticas SDP, mismos candidatos ICE, mismo formato de cable DataChannel.
Fuentes autorizadas del protocolo que implementa este componente.
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. | Abrir | |
| Proyecto demo — Demos\35.P2P\05.RTCPeerConnection Proyecto de ejemplo listo para ejecutar. Se incluye dentro del paquete sgcWebSockets — descarga la prueba abajo. | Abrir | |
| 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. | Abrir | |
| Manual de usuario (PDF) Manual completo que cubre cada componente de la biblioteca. | Abrir |