Delphi RTCPeerConnection

Sprich WebRTC aus Delphi/C++Builder — ICE für die Konnektivität, DTLS für den Keying-Handshake, SRTP für Medien, SCTP-over-DTLS für DataChannels. Kein Browser erforderlich.

TsgcRTCPeerConnection

Nativer Delphi-WebRTC-Peer — bildet die W3C-RTCPeerConnection-Oberfläche ab (CreateOffer / CreateAnswer / SetRemoteDescription / AddIceCandidate / DataChannel), gestützt auf die mitgelieferten ICE-, DTLS-, SRTP- und SCTP-Stacks.

Komponentenklasse

TsgcRTCPeerConnection

Protokoll

WebRTC (W3C)

Plattformen

Windows, macOS, Linux, iOS, Android

Edition

Enterprise für die Komponente, dazu das sgcWebRTC-Pack für Offer und Answer, DataChannels und Tracks. Beides ist in All-Access enthalten.

Der Enterprise-Block von sgcVer.inc definiert SGC_ICE, SGC_DTLS, SGC_RTCPEERCONNECTION und SGC_TURN. Das bringt TsgcRTCPeerConnection auf die Palette und gibt ihr einen ICE- und TURN-Transport. Die Offer- und Answer-Methoden, die DataChannel-API und die Medien-API liegen in SGC_SDP, SGC_DATACHANNEL und SGC_RTP, und die definiert nur SGC_PACK_WEBRTC. Sie brauchen das sgcWebRTC-Pack zusätzlich zu Enterprise, oder All-Access, das es bereits aktiviert.

Offer / Answer / Connect

Füllen Sie RTCOptions.ICEServers, rufen Sie CreateOffer auf, senden Sie das SDP, das Ihnen OnLocalDescription übergibt, über Ihren Signalisierungskanal an den Remote-Peer, setzen Sie das zurückkommende Answer, und der Datenpfad steht.

uses
  sgcP2P, sgcP2P_DataChannel;

// TFormPeer hält FPeer, FChannel, FIncoming: TStringList und die Handler

procedure TFormPeer.CreatePeer;
begin
  FPeer := TsgcRTCPeerConnection.Create(nil);
  FPeer.RTCOptions.ICEServers.AddURL('stun:stun.l.google.com:19302');
  FPeer.RTCOptions.ICE.TURN := False;  // noch kein TURN-Server

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

  // ausgehende Seite. CreateDataChannel schaltet RTCOptions.DTLS ein
  FChannel := FPeer.CreateDataChannel('chat');
  FChannel.OnMessage := OnChannelMessage;
  FPeer.CreateOffer;
end;

procedure TFormPeer.OnLocalDescription(Sender: TObject;
  const aType, aSDP: string);
begin
  // aType ist 'offer' oder 'answer'
  SignalToPeer(aType, aSDP); // über Ihren WebSocket-Signalisierungskanal
end;

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

procedure TFormPeer.OnChannelMessage(Sender: TObject;
  const aText: string);
begin
  // feuert in einem Worker-Thread, vor dem Zugriff auf ein Control marshallen
  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;  // noch kein TURN-Server

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);  // über Ihren WebSocket-Signalisierungskanal
}

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

Vollständiges Beispiel: zwei Delphi-Anwendungen von Anfang bis Ende

Was steckt drin

Ein nativer WebRTC-Peer, der ICE, DTLS, SRTP und SCTP in einer einzigen Komponente bündelt — mit gleicher Oberfläche wie die W3C-RTCPeerConnection-API.

SDP Offer / Answer

CreateOffer und CreateAnswer erzeugen RFC-8866-SDP mit den passenden ICE-UFRAG-, ICE-PWD-, FINGERPRINT- und SETUP-Attributen; SetRemoteDescription liest das SDP des Peers ein.

ICE-getriebene Konnektivität

Verwendet intern TsgcICEClient für Kandidatensammlung und Konnektivitätsprüfungen; AddIceCandidate speist Remote-Kandidaten ein, sobald sie aus dem Signalling eintreffen.

DTLS-Keying

Sobald das ausgewählte ICE-Paar schreibbar wird, führt die Komponente einen DTLS-Handshake (RFC 6347) durch und exportiert das SRTP-Schlüsselmaterial mit dem Label EXTRACTOR-dtls_srtp aus RFC 5764. RTCOptions.DTLS ist standardmäßig False, und CreateDataChannel schaltet es für Sie ein.

DataChannels (SCTP-over-DTLS)

CreateDataChannel öffnet einen über DTLS multiplexten SCTP-Stream — reliable / partial-reliable, ordered / unordered, mit Backpressure über BufferedAmount.

Medien-Tracks

AddTrack veröffentlicht einen Audio- oder Video-Track, OnTrack empfängt den entfernten, beide über SRTP. Die begleitende TsgcWSPServer_RTCPeerConnection ist der WebSocket-Signalisierungs-Broker: Sie führt Anrufer und Angerufenen zusammen und leitet deren SDP und Kandidaten weiter.

Browser-kompatibel

Interoperabel mit Browser-RTCPeerConnection — getestet gegen Chromium / Firefox / Safari. Gleiche SDP-Semantik, gleiche ICE-Kandidaten, gleiches DataChannel-Wire-Format.

Spezifikationen & Referenzen

Maßgebliche Quellen für das Protokoll, das diese Komponente implementiert.

Dokumentation & Demos

Springe direkt zur Komponentenreferenz, hole dir das sofort lauffähige Demo-Projekt und lade die Testversion herunter.

Online-Hilfe — TsgcRTCPeerConnection Vollständige Referenz zu Eigenschaften, Methoden und Ereignissen dieser Komponente.
Demo-Projekt — Demos\35.P2P\05.RTCPeerConnection Sofort lauffähiges Beispielprojekt. Wird im sgcWebSockets-Paket mitgeliefert — lade unten die Testversion herunter.
Technisches Dokument (PDF) Funktionen, Schnellstart, Code-Beispiele für Delphi & C++ Builder und Primärquellen-Referenzen — nur diese Komponente.
Benutzerhandbuch (PDF) Umfassendes Handbuch, das jede Komponente der Bibliothek abdeckt.
Bestes Preis-Leistungs-Verhältnis: All-AccessAlle eSeGeCe-Produkte, inklusive Premium-Support, ab €1,059 pro Jahr.
All-Access-Preise ansehen

Bereit, WebRTC in Delphi zu betreiben?

Lade die kostenlose Testversion herunter und ergänze deine Delphi-Anwendungen um native RTCPeerConnection.