Bibliothèque WebRTC Delphi — P2P, ICE, STUN, TURN, DataChannel

Une implémentation Pascal native de la pile peer-to-peer WebRTC : RTCPeerConnection, gathering de candidats ICE et checks de connectivité, client + serveur STUN et TURN, accord de clés DTLS-SRTP et canaux de données SCTP — avec la signalisation WebSocket déjà câblée.

Peer-to-peer pour Pascal, de bout en bout

Apportez du P2P de qualité navigateur à Delphi — sans embarquer Chromium.

Une bibliothèque WebRTC Delphi permet à deux processus Delphi (ou un processus Delphi et un navigateur) d'établir un canal direct, traversant le NAT, chiffré de bout en bout sans router le payload via un serveur central. sgcWebSockets fournit chaque brique WebRTC sous forme de composant Pascal : TsgcRTCPeerConnection reflète l'API W3C RTCPeerConnection, TsgcSTUNClient / TsgcSTUNServer implémentent la RFC 8489, TsgcTURNClient / TsgcTURNServer implémentent la RFC 8656, et TsgcICEClient, un agent ICE complet, les lie ensemble.

Contrairement aux piles basées sur navigateur (qui nécessitent Chromium ou libwebrtc — des dizaines de mégaoctets de code natif et un build compliqué) l'implémentation sgcWebSockets est du Pascal pur au-dessus d'OpenSSL et est compilée dans votre binaire. Elle tourne de Delphi 7 à Delphi 13 et livre des binaires natifs pour Win32/Win64, Linux64, macOS, iOS et Android.

Peer connection

TsgcRTCPeerConnection

ICE / STUN / TURN

Composants P2P

Standards

RFC 8825 / 8445 / 8489 / 8656 / 6347 / 4960 / 8831

Édition

Enterprise pour les composants, plus le pack sgcWebRTC pour l'offer et l'answer, les DataChannels et les tracks. Les deux sont inclus dans All-Access.

Chaque composant WebRTC, exposé

La peer connection est la vedette, mais les pièces de support sont aussi des composants de premier ordre.

RTCPeerConnection

TsgcRTCPeerConnection reflète l'API W3C : CreateOffer, CreateAnswer, SetLocalDescription, SetRemoteDescription, AddIceCandidate, CreateDataChannel, AddTrack. Voir RTCPeerConnection.

Offer / answer SDP

Sérialiseur et parseur SDP intégrés. Générez des offres, acceptez des answers, trickle ICE candidates avec le même format wire que Chrome et Firefox produisent.

Agent ICE

Gathering complet de candidats : host, server-reflexive (découverts par STUN), relayed (alloués par TURN). Appariement, priorisation et checks de connectivité selon la RFC 8445. Page ICE.

Client + serveur STUN

Client STUN et serveur STUN autonomes pour la découverte NAT et le keep-alive. Faites tourner votre propre endpoint STUN avec deux lignes de Pascal.

Client + serveur TURN

Client TURN pour l'allocation de relais et serveur TURN pour l'auto-hébergement. Identifiants long terme, IPv4 + IPv6.

DTLS-SRTP

Le protocole d'accord de clés WebRTC obligatoire. Handshake DTLS 1.2 sur le même chemin UDP négocié par ICE, exportant du matériel de clés pour SRTP.

Canaux de données SCTP

Messages fiables / non fiables, ordonnés / non ordonnés sur le transport média WebRTC — la façon standard d'envoyer des données applicatives arbitraires peer-to-peer.

Signalisation WebSocket

Utilisez les TsgcWebSocketClient / TsgcWebSocketHTTPServer livrés comme canal de signalisation, ou la paire de protocoles prête à l'emploi TsgcWSPClient_RTCPeerConnection et TsgcWSPServer_RTCPeerConnection. Une bibliothèque pour tout.

Signalisation WebSocket : le pattern standard

WebRTC ne définit pas de protocole de signalisation — vous apportez le vôtre. Le choix conventionnel est un canal WebSocket qui porte trois types de messages : offer (SDP de l'appelant), answer (SDP de l'appelé) et ice-candidate (candidats trickle par l'un ou l'autre côté). sgcWebSockets inclut déjà les deux extrémités de ce canal. TsgcWSPServer_RTCPeerConnection apparie un appelant avec un appelé et relaie leurs descriptions et leurs candidats, TsgcWSPClient_RTCPeerConnection est le client correspondant, et TsgcWSPServer_WebRTC fait le même travail pour les pairs navigateur, en poussant la liste des serveurs ICE à chacun dès qu'il rejoint.

Parce que le composant peer-connection et le serveur de signalisation vivent dans la même bibliothèque, vous pouvez monter une application WebRTC complète — découverte coordonnée, traversée NAT, payload P2P chiffré — sans intégrer un seul SDK tiers.

Configurer les serveurs ICE

La même liste iceServers qu'utilise un navigateur, exposée comme RTCOptions.ICEServers — avec à la fois des serveurs publics et votre propre TURN privé.

uses
  sgcP2P, sgcP2P_DataChannel;

// TFormPeer contient FPeer, FChannel et FIncoming: TStringList

procedure TFormPeer.CreatePeer;
begin
  FPeer := TsgcRTCPeerConnection.Create(nil);
  FPeer.RTCOptions.ICEServers.AddURL('stun:stun.l.google.com:19302');
  FPeer.RTCOptions.ICEServers.AddURL('turn:turn.example.com:3478',
    'alice', 's3cret');

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

  // côté sortant. CreateDataChannel active RTCOptions.DTLS
  FChannel := FPeer.CreateDataChannel('chat');
  FChannel.OnMessage := OnChannelMessage;
  FPeer.CreateOffer;
end;

procedure TFormPeer.OnLocalDescription(Sender: TObject;
  const aType, aSDP: string);
begin
  // aType vaut 'offer' ou 'answer'
  SignalToPeer(aType, aSDP);
end;

procedure TFormPeer.OnIceCandidate(Sender: TObject;
  const aCandidate, aSdpMid: string; aSdpMLineIndex: Integer);
begin
  SignalCandidate(aCandidate, aSdpMid, aSdpMLineIndex);
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 déclenche sur un thread de travail, synchronise avant de toucher un contrôle
  FIncoming.Add(aText);
end;

// envoie un message de pair à pair
FChannel.Send('Hello from Delphi');

Faites tourner votre propre STUN / TURN en Delphi

La plupart des équipes commencent avec le STUN public Google et un service TURN tiers (Twilio, Xirsys, coturn). Quand le trafic monte, la facture de bande passante relais monte aussi — et TURN est, en pratique, la seule pièce de WebRTC où vous payez à l'octet. La bibliothèque vous laisse l'auto-héberger : TsgcSTUNServer et TsgcTURNServer se déposent dans une application console ou un service Windows et répondent par défaut sur UDP 3478, sur le port et l'adresse que vous placez dans Bindings. Identifiants long terme, IPv4 et IPv6, une plage de ports de relais dans TURNOptions.Allocation et un quota d'allocations par utilisateur sont tous intégrés.

Plus sur P2P dans sgcWebSockets

Hub P2P / WebRTC

Page d'atterrissage pour chaque composant peer-to-peer.

RTCPeerConnection

Référence détaillée du composant.

Agent ICE

Gathering de candidats et checks de connectivité.

STUN et TURN

Serveurs de découverte NAT et de relais.

Blog : RTCPeerConnection P2P

Marche à suivre de bout en bout d'un data channel Delphi-à-Delphi.

Blog : Serveur et client STUN + TURN

Auto-héberger votre propre infrastructure STUN/TURN en Delphi.

Blog : coturn sous Windows

Référence croisée avec l'implémentation C de référence pour les tests d'interopérabilité.

Meilleur rapport qualité-prix : All-AccessTous les produits eSeGeCe, Support Premium inclus, à partir de €1,059/an.
Voir les tarifs All-Access

Construisez votre premier canal P2P

Téléchargez l'essai — les démos WebRTC, STUN et TURN sont livrées comme projets Delphi compilables.