RTCPeerConnection pour Delphi

Parle WebRTC depuis Delphi/C++Builder — ICE pour la connectivité, DTLS pour la poignée de main de clés, SRTP pour le média, SCTP-over-DTLS pour les DataChannels. Aucun navigateur requis.

TsgcRTCPeerConnection

Pair WebRTC Delphi natif — reflète la surface W3C RTCPeerConnection (CreateOffer / CreateAnswer / SetRemoteDescription / AddIceCandidate / DataChannel) soutenue par les piles ICE, DTLS, SRTP et SCTP intégrées.

Classe du composant

TsgcRTCPeerConnection

Protocole

WebRTC (W3C)

Plateformes

Windows, macOS, Linux, iOS, Android

Édition

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

Le bloc Enterprise de sgcVer.inc définit SGC_ICE, SGC_DTLS, SGC_RTCPEERCONNECTION et SGC_TURN, ce qui place TsgcRTCPeerConnection sur la palette et lui donne un transport ICE et TURN. Les méthodes offer et answer, l'API DataChannel et l'API média se trouvent dans SGC_SDP, SGC_DATACHANNEL et SGC_RTP, que seul SGC_PACK_WEBRTC définit. Elles réclament le pack sgcWebRTC en plus d'Enterprise, ou All-Access, qui l'active pour vous.

Offre / Réponse / Connexion

Remplissez RTCOptions.ICEServers, appelez CreateOffer, envoyez au pair distant, par votre canal de signalisation, le SDP que OnLocalDescription vous remet, posez l'answer qui revient, et le chemin de données s'ouvre.

uses
  sgcP2P, sgcP2P_DataChannel;

// TFormPeer contient FPeer, FChannel, FIncoming : TStringList et les gestionnaires

procedure TFormPeer.CreatePeer;
begin
  FPeer := TsgcRTCPeerConnection.Create(nil);
  FPeer.RTCOptions.ICEServers.AddURL('stun:stun.l.google.com:19302');
  FPeer.RTCOptions.ICE.TURN := False;  // pas encore de serveur TURN

  FPeer.OnLocalDescription := OnLocalDescription;
  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); // via votre canal de signalisation 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 déclenche sur un thread de travail, marshalez avant de toucher un contrôle
  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;  // pas encore de serveur 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);  // via votre canal de signalisation WebSocket
}

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

Exemple complet : deux applications Delphi de bout en bout

Sous le capot

Un pair WebRTC natif qui regroupe ICE, DTLS, SRTP et SCTP dans un seul composant — reflétant l'API W3C RTCPeerConnection.

SDP Offer / Answer

CreateOffer et CreateAnswer génèrent du SDP RFC 8866 avec les bons attributs ICE-UFRAG / ICE-PWD / FINGERPRINT / SETUP ; SetRemoteDescription ingère le SDP du pair.

Connectivité pilotée par ICE

Utilise TsgcICEClient en interne pour la collecte de candidats et les vérifications de connectivité ; AddIceCandidate injecte les candidats distants à mesure qu'ils arrivent via le signalling.

Keying DTLS

Dès que la paire ICE sélectionnée devient inscriptible, le composant exécute une poignée de main DTLS (RFC 6347) et exporte le matériel de clés SRTP avec l'étiquette EXTRACTOR-dtls_srtp de la RFC 5764. RTCOptions.DTLS vaut False par défaut, et CreateDataChannel l'active pour vous.

DataChannels (SCTP-over-DTLS)

CreateDataChannel ouvre un flux SCTP multiplexé sur DTLS — fiable / partiellement fiable, ordonné / non ordonné, avec contre-pression via BufferedAmount.

Pistes média

AddTrack publie une piste audio ou vidéo et OnTrack reçoit celle du pair distant, toutes deux sur SRTP. Le composant compagnon TsgcWSPServer_RTCPeerConnection est le courtier de signalisation WebSocket : il apparie un appelant et un appelé et relaie leurs SDP et leurs candidats.

Compatible navigateur

Interopère avec RTCPeerConnection des navigateurs — testé sur Chromium / Firefox / Safari. Même sémantique SDP, mêmes candidats ICE, même format DataChannel sur le câble.

Spécifications et références

Sources de référence pour le protocole implémenté par ce composant.

Documentation et démos

Lien direct vers la référence du composant, projet de démo prêt à l'emploi et téléchargement de l'essai.

Aide en ligne — TsgcRTCPeerConnection Référence complète des propriétés, méthodes et événements de ce composant.
Projet de démo — Demos\35.P2P\05.RTCPeerConnection Projet d'exemple prêt à l'emploi. Livré dans le package sgcWebSockets — télécharge l'essai ci-dessous.
Document technique (PDF) Fonctionnalités, démarrage rapide, exemples de code Delphi et C++ Builder et références primaires — ce composant uniquement.
Manuel utilisateur (PDF) Manuel complet couvrant tous les composants de la bibliothèque.
Meilleur rapport qualité-prix : All-AccessTous les produits eSeGeCe, Support Premium inclus, à partir de €1,059/an.
Voir les tarifs All-Access

Prêt à exécuter WebRTC en Delphi ?

Télécharge l'essai gratuit et ajoute RTCPeerConnection natif à tes applications Delphi.