RTCPeerConnection in Delphi

Comunica via WebRTC da Delphi/C++Builder — ICE per la connettività, DTLS per l'handshake di chiave, SRTP per il media, SCTP-over-DTLS per i DataChannel. Nessun browser richiesto.

TsgcRTCPeerConnection

Peer WebRTC Delphi nativo — rispecchia la superficie W3C RTCPeerConnection (CreateOffer / CreateAnswer / SetRemoteDescription / AddIceCandidate / DataChannel) basata sugli stack inclusi ICE, DTLS, SRTP e SCTP.

Classe componente

TsgcRTCPeerConnection

Protocollo

WebRTC (W3C)

Piattaforme

Windows, macOS, Linux, iOS, Android

Edizione

Enterprise per il componente, più il pack sgcWebRTC per offer e answer, DataChannel e tracce. Entrambi sono inclusi in All-Access.

Il blocco Enterprise di sgcVer.inc definisce SGC_ICE, SGC_DTLS, SGC_RTCPEERCONNECTION e SGC_TURN, ed è questo che mette TsgcRTCPeerConnection nella palette e le dà un trasporto ICE e TURN. I metodi di offer e answer, l'API DataChannel e l'API media stanno dentro SGC_SDP, SGC_DATACHANNEL e SGC_RTP, che solo SGC_PACK_WEBRTC definisce. Richiedono il pack sgcWebRTC sopra Enterprise, oppure All-Access, che lo abilita già.

Offer / Answer / Connect

Riempi RTCOptions.ICEServers, chiama CreateOffer, manda al peer remoto sul tuo canale di segnalazione l'SDP che OnLocalDescription ti consegna, imposta l'answer che torna indietro, e il percorso dati si accende.

uses
  sgcP2P, sgcP2P_DataChannel;

// TFormPeer contiene FPeer, FChannel, FIncoming: TStringList e i gestori

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

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

  // lato uscente. CreateDataChannel attiva RTCOptions.DTLS
  FChannel := FPeer.CreateDataChannel('chat');
  FChannel.OnMessage := OnChannelMessage;
  FPeer.CreateOffer;
end;

procedure TFormPeer.OnLocalDescription(Sender: TObject;
  const aType, aSDP: string);
begin
  // aType è 'offer' oppure 'answer'
  SignalToPeer(aType, aSDP); // sul tuo canale di segnalazione 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
  // scatta su un thread di lavoro, fai il marshalling prima di toccare un controllo
  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;  // nessun server TURN per ora

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);  // sul tuo canale di segnalazione WebSocket
}

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

Esempio completo: due applicazioni Delphi da capo a fine

Cosa c'è all'interno

Un peer WebRTC nativo che riunisce ICE, DTLS, SRTP e SCTP in un unico componente — rispecchiando l'API W3C RTCPeerConnection.

SDP Offer / Answer

CreateOffer e CreateAnswer generano SDP RFC 8866 con i giusti attributi ICE-UFRAG / ICE-PWD / FINGERPRINT / SETUP; SetRemoteDescription assimila l'SDP del peer.

Connettività guidata da ICE

Usa TsgcICEClient internamente per la raccolta dei candidati e le verifiche di connettività; AddIceCandidate fornisce i candidati remoti man mano che arrivano dal signalling.

Keying DTLS

Appena la coppia ICE selezionata diventa scrivibile, il componente esegue un handshake DTLS (RFC 6347) ed esporta il materiale di chiave SRTP con l'etichetta EXTRACTOR-dtls_srtp della RFC 5764. RTCOptions.DTLS vale False per impostazione predefinita e CreateDataChannel lo attiva per te.

DataChannel (SCTP-over-DTLS)

CreateDataChannel apre uno stream SCTP multiplexato su DTLS — reliable / partial-reliable, ordered / unordered, con backpressure tramite BufferedAmount.

Tracce media

AddTrack pubblica una traccia audio o video e OnTrack riceve quella remota, entrambe su SRTP. Il componente complementare TsgcWSPServer_RTCPeerConnection è il broker di segnalazione WebSocket: accoppia un chiamante e un chiamato e inoltra i loro SDP e i loro candidati.

Compatibile con i browser

Interoperabile con RTCPeerConnection dei browser — testato con Chromium / Firefox / Safari. Stessa semantica SDP, stessi candidati ICE, stesso formato di wire dei DataChannel.

Specifiche e riferimenti

Fonti autorevoli per il protocollo implementato da questo componente.

Documentazione e demo

Collegamenti diretti al riferimento del componente, al progetto demo pronto all'uso e al download della versione di prova.

Guida online — TsgcRTCPeerConnection Riferimento completo di proprietà, metodi ed eventi di questo componente.
Progetto demo — Demos\35.P2P\05.RTCPeerConnection Progetto di esempio pronto all'uso. Incluso nel pacchetto sgcWebSockets — scarica la versione di prova qui sotto.
Documento tecnico (PDF) Funzionalità, guida rapida, esempi di codice per Delphi e C++ Builder e riferimenti alle fonti primarie — solo per questo componente.
Manuale utente (PDF) Manuale completo che copre ogni componente della libreria.
La scelta più conveniente: All-AccessTutti i prodotti eSeGeCe, con Supporto Premium incluso, a partire da €1,059/anno.
Vedi i prezzi All-Access

Pronto a eseguire WebRTC in Delphi?

Scarica la versione di prova gratuita e aggiungi RTCPeerConnection nativo alle tue applicazioni Delphi.