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.
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.
Native Delphi WebRTC-peer — weerspiegelt het W3C RTCPeerConnection-oppervlak (CreateOffer / CreateAnswer / SetRemoteDescription / AddIceCandidate / DataChannel), aangedreven door de meegeleverde ICE-, DTLS-, SRTP- en SCTP-stacks.
TsgcRTCPeerConnection
Windows, macOS, Linux, iOS, Android
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.
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
Een native WebRTC-peer die ICE, DTLS, SRTP en SCTP bundelt in één component — spiegelt de W3C RTCPeerConnection-API.
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.
Gebruikt intern TsgcICEClient voor het verzamelen van kandidaten en connectiviteitscontroles; AddIceCandidate voert remote kandidaten in zodra ze via signalling binnenkomen.
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.
CreateDataChannel opent een SCTP-stream gemultiplext over DTLS — reliable / partial-reliable, geordend / ongeordend, met backpressure via BufferedAmount.
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.
Werkt samen met browser-RTCPeerConnection — getest tegen Chromium / Firefox / Safari. Dezelfde SDP-semantiek, dezelfde ICE-kandidaten, hetzelfde DataChannel-wire-format.
Gezaghebbende bronnen voor het protocol dat deze component implementeert.
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. | Openen | |
| Demoproject — Demos\35.P2P\05.RTCPeerConnection Kant-en-klaar voorbeeldproject. Wordt meegeleverd in de sgcWebSockets-package — download hieronder de proefversie. | Openen | |
| Technisch document (PDF) Functies, snelstart, codevoorbeelden voor Delphi & C++ Builder en primaire bronverwijzingen — alleen voor deze component. | Openen | |
| Gebruikershandleiding (PDF) Uitgebreide handleiding die elke component in de bibliotheek behandelt. | Openen |