Delphi RTCPeerConnection

Spreek WebRTC vanuit Delphi/C++Builder — ICE voor connectiviteit, DTLS voor de keying-handshake, SRTP voor media, SCTP-over-DTLS voor DataChannels. Geen browser nodig.

TsgcRTCPeerConnection

Native Delphi WebRTC-peer — weerspiegelt het W3C RTCPeerConnection-oppervlak (CreateOffer / CreateAnswer / SetRemoteDescription / AddIceCandidate / DataChannel), aangedreven door de meegeleverde ICE-, DTLS-, SRTP- en SCTP-stacks.

Componentklasse

TsgcRTCPeerConnection

Protocol

WebRTC (W3C)

Platforms

Windows, macOS, Linux, iOS, Android

Editie

Enterprise voor de component, plus het sgcWebRTC-pack voor offer en answer, DataChannels en tracks. Beide zitten in All-Access.

Het Enterprise-blok van sgcVer.inc definieert SGC_ICE, SGC_DTLS, SGC_RTCPEERCONNECTION en SGC_TURN, en dat is wat TsgcRTCPeerConnection op het palet zet en haar een ICE- en TURN-transport geeft. De offer- en answer-methoden, de DataChannel-API en de media-API zitten in SGC_SDP, SGC_DATACHANNEL en SGC_RTP, en alleen SGC_PACK_WEBRTC definieert die. Ze vragen het sgcWebRTC-pack bovenop Enterprise, of All-Access, dat het pack al inschakelt.

Offer / Answer / Connect

Vul RTCOptions.ICEServers, roep CreateOffer aan, stuur de SDP die OnLocalDescription je geeft via je signaleringskanaal naar de externe peer, zet het answer dat terugkomt, en het datapad komt op.

uses
  sgcP2P, sgcP2P_DataChannel;

// TFormPeer bevat FPeer, FChannel, FIncoming: TStringList en de handlers

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

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

  // uitgaande kant. CreateDataChannel zet RTCOptions.DTLS aan
  FChannel := FPeer.CreateDataChannel('chat');
  FChannel.OnMessage := OnChannelMessage;
  FPeer.CreateOffer;
end;

procedure TFormPeer.OnLocalDescription(Sender: TObject;
  const aType, aSDP: string);
begin
  // aType is 'offer' of 'answer'
  SignalToPeer(aType, aSDP); // via je WebSocket-signaleringskanaal
end;

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

procedure TFormPeer.OnChannelMessage(Sender: TObject;
  const aText: string);
begin
  // vuurt op een worker-thread, marshal voordat je een control aanraakt
  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;  // nog geen 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);  // via je WebSocket-signaleringskanaal
}

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

Uitgewerkt voorbeeld: twee Delphi-applicaties van begin tot eind

Wat zit erin

Een native WebRTC-peer die ICE, DTLS, SRTP en SCTP bundelt in één component — spiegelt de W3C RTCPeerConnection-API.

SDP Offer / Answer

CreateOffer en CreateAnswer genereren RFC 8866-SDP met de juiste ICE-UFRAG-, ICE-PWD-, FINGERPRINT- en SETUP-attributen; SetRemoteDescription verwerkt de SDP van de peer.

ICE-gestuurde connectiviteit

Gebruikt intern TsgcICEClient voor het verzamelen van kandidaten en connectiviteitscontroles; AddIceCandidate voert remote kandidaten in zodra ze via signalling binnenkomen.

DTLS-keying

Zodra het geselecteerde ICE-paar beschrijfbaar wordt, voert de component een DTLS-handshake (RFC 6347) uit en exporteert het SRTP-sleutelmateriaal met het label EXTRACTOR-dtls_srtp uit RFC 5764. RTCOptions.DTLS staat standaard op False, en CreateDataChannel zet het voor je aan.

DataChannels (SCTP-over-DTLS)

CreateDataChannel opent een SCTP-stream gemultiplext over DTLS — reliable / partial-reliable, geordend / ongeordend, met backpressure via BufferedAmount.

Mediatracks

AddTrack publiceert een audio- of videotrack en OnTrack ontvangt de externe, beide over SRTP. De bijbehorende TsgcWSPServer_RTCPeerConnection is de WebSocket-signaleringsbroker: die koppelt een beller aan een gebelde en geeft hun SDP en hun kandidaten door.

Browsercompatibel

Werkt samen met browser-RTCPeerConnection — getest tegen Chromium / Firefox / Safari. Dezelfde SDP-semantiek, dezelfde ICE-kandidaten, hetzelfde DataChannel-wire-format.

Specificaties & referenties

Gezaghebbende bronnen voor het protocol dat deze component implementeert.

Documentatie & demo's

Deep-link naar de componentreferentie, pak het kant-en-klare demoproject en download de proefversie.

Online help — TsgcRTCPeerConnection Volledige referentie van eigenschappen, methoden en events voor deze component.
Demoproject — Demos\35.P2P\05.RTCPeerConnection Kant-en-klaar voorbeeldproject. Wordt meegeleverd in de sgcWebSockets-package — download hieronder de proefversie.
Technisch document (PDF) Functies, snelstart, codevoorbeelden voor Delphi & C++ Builder en primaire bronverwijzingen — alleen voor deze component.
Gebruikershandleiding (PDF) Uitgebreide handleiding die elke component in de bibliotheek behandelt.
De beste deal: All-AccessElk eSeGeCe-product, inclusief Premium-ondersteuning, vanaf €1,059 per jaar.
Bekijk de All-Access-prijzen

Klaar om WebRTC in Delphi te draaien?

Download de gratis proefversie en voeg native RTCPeerConnection toe aan je Delphi-applicaties.