Biblioteka WebRTC dla Delphi — P2P, ICE, STUN, TURN, DataChannel

Natywna implementacja Pascala stosu peer-to-peer WebRTC: RTCPeerConnection, zbieranie kandydatów ICE i sprawdzanie łączności, klient i serwer STUN i TURN, uzgadnianie kluczy DTLS-SRTP i kanały danych SCTP — z już podłączoną sygnalizacją WebSocket.

Peer-to-peer dla Pascala, end to end

Przynieś P2P klasy przeglądarki do Delphi — bez paczkowania Chromium.

Biblioteka WebRTC dla Delphi pozwala dwóm procesom Delphi (lub procesowi Delphi i przeglądarce) ustanowić bezpośredni, traversujący NAT, szyfrowany end-to-end kanał bez routingu ładunku przez centralny serwer. sgcWebSockets dostarcza każdy klocek WebRTC jako komponent Pascala: TsgcRTCPeerConnection odzwierciedla API RTCPeerConnection według W3C, TsgcSTUNClient / TsgcSTUNServer implementują RFC 8489, TsgcTURNClient / TsgcTURNServer implementują RFC 8656, a TsgcICEClient, kompletny agent ICE, wiąże je razem.

W przeciwieństwie do stosów opartych na przeglądarce (które wymagają Chromium lub libwebrtc — dziesiątki megabajtów natywnego kodu i skomplikowanej kompilacji), implementacja sgcWebSockets to czysty Pascal na bazie OpenSSL i jest skompilowana do Twojego binarnego. Działa na Delphi 7 do Delphi 13 i dostarcza natywne binaria dla Win32/Win64, Linux64, macOS, iOS i Android.

Peer connection

TsgcRTCPeerConnection

ICE / STUN / TURN

Komponenty P2P

Standardy

RFC 8825 / 8445 / 8489 / 8656 / 6347 / 4960 / 8831

Edycja

Enterprise dla komponentów oraz pakiet sgcWebRTC dla offer i answer, DataChannels i ścieżek. Oba są dostępne w All-Access.

Każdy komponent WebRTC, udostępniony

Peer connection jest nagłówkiem, ale wspierające części są również komponentami pierwszej klasy.

RTCPeerConnection

TsgcRTCPeerConnection odzwierciedla API W3C: CreateOffer, CreateAnswer, SetLocalDescription, SetRemoteDescription, AddIceCandidate, CreateDataChannel, AddTrack. Zobacz RTCPeerConnection.

SDP offer / answer

Wbudowany serializator i parser SDP. Generuj oferty, akceptuj odpowiedzi, trickle kandydatów ICE w tym samym formacie wire, który produkują Chrome i Firefox.

Agent ICE

Pełne zbieranie kandydatów: host, server-reflexive (odkryte przez STUN), relayed (zaalokowane przez TURN). Parowanie, priorytetyzacja i sprawdzenia łączności według RFC 8445. Strona ICE.

Klient i serwer STUN

Samodzielny klient STUN i serwer STUN dla odkrywania NAT i keep-alive. Uruchom własny endpoint STUN w dwóch liniach Pascala.

Klient i serwer TURN

Klient TURN dla alokacji relayu i serwer TURN do samohostingu. Długoterminowe poświadczenia, IPv4 + IPv6.

DTLS-SRTP

Obowiązkowy protokół uzgadniania kluczy WebRTC. Handshake DTLS 1.2 nad tą samą ścieżką UDP wynegocjowaną przez ICE, eksportujący materiał kluczowy dla SRTP.

Kanały danych SCTP

Wiadomości niezawodne / niewiarygodne, uporządkowane / nieuporządkowane nad transportem mediów WebRTC — standardowy sposób wysyłania dowolnych danych aplikacji peer-to-peer.

Sygnalizacja WebSocket

Użyj dołączonych TsgcWebSocketClient / TsgcWebSocketHTTPServer jako kanału sygnalizacji albo gotowej pary protokołów TsgcWSPClient_RTCPeerConnection i TsgcWSPServer_RTCPeerConnection. Jedna biblioteka do wszystkiego.

Sygnalizacja WebSocket: standardowy wzorzec

WebRTC nie definiuje protokołu sygnalizacji — przynosisz własny. Konwencjonalnym wyborem jest kanał WebSocket, który niesie trzy typy wiadomości: offer (SDP od dzwoniącego), answer (SDP od wywoływanego) i ice-candidate (kandydaci przesyłani stopniowo przez którąkolwiek stronę). sgcWebSockets zawiera już oba końce tego kanału. TsgcWSPServer_RTCPeerConnection paruje dzwoniącego z wywoływanym i przekazuje ich opisy oraz kandydatów, TsgcWSPClient_RTCPeerConnection to odpowiadający mu klient, a TsgcWSPServer_WebRTC wykonuje to samo zadanie dla peerów przeglądarkowych, wysyłając do każdego z nich listę serwerów ICE w chwili dołączenia.

Ponieważ komponent peer-connection i serwer sygnalizacji żyją w tej samej bibliotece, możesz postawić kompletną aplikację WebRTC — skoordynowane odkrywanie, traversal NAT, szyfrowany ładunek P2P — bez integrowania pojedynczego SDK strony trzeciej.

Konfigurowanie serwerów ICE

Ta sama lista iceServers, której używa przeglądarka, udostępniona jako RTCOptions.ICEServers — z publicznymi serwerami i własnym prywatnym TURN.

uses
  sgcP2P, sgcP2P_DataChannel;

// TFormPeer zawiera FPeer, FChannel oraz FIncoming: TStringList

procedure TFormPeer.CreatePeer;
begin
  FPeer := TsgcRTCPeerConnection.Create(nil);
  FPeer.RTCOptions.ICEServers.AddURL('stun:stun.l.google.com:19302');
  FPeer.RTCOptions.ICEServers.AddURL('turn:turn.example.com:3478',
    'alice', 's3cret');

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

  // strona wychodząca. CreateDataChannel włącza RTCOptions.DTLS
  FChannel := FPeer.CreateDataChannel('chat');
  FChannel.OnMessage := OnChannelMessage;
  FPeer.CreateOffer;
end;

procedure TFormPeer.OnLocalDescription(Sender: TObject;
  const aType, aSDP: string);
begin
  // aType to 'offer' albo 'answer'
  SignalToPeer(aType, aSDP);
end;

procedure TFormPeer.OnIceCandidate(Sender: TObject;
  const aCandidate, aSdpMid: string; aSdpMLineIndex: Integer);
begin
  SignalCandidate(aCandidate, aSdpMid, aSdpMLineIndex);
end;

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

procedure TFormPeer.OnChannelMessage(Sender: TObject;
  const aText: string);
begin
  // wywoływane w wątku roboczym, wykonaj marshaling zanim dotkniesz kontrolki
  FIncoming.Add(aText);
end;

// wyślij wiadomość peer-to-peer
FChannel.Send('Hello from Delphi');

Uruchom własny STUN / TURN w Delphi

Większość zespołów zaczyna od publicznego Google STUN i usługi TURN strony trzeciej (Twilio, Xirsys, coturn). Gdy ruch rośnie, rachunek za pasmo relayu też rośnie — a TURN to w praktyce jedyna część WebRTC, w której płacisz per-bajt. Biblioteka pozwala samohostować: TsgcSTUNServer i TsgcTURNServer wpadają do aplikacji konsolowej lub usługi Windows i domyślnie odpowiadają na UDP 3478, na dowolnym porcie i adresie, który wpiszesz do Bindings. Poświadczenia long-term, IPv4 i IPv6, zakres portów relayu w TURNOptions.Allocation oraz limit alokacji na użytkownika są wbudowane.

Więcej o P2P w sgcWebSockets

Hub P2P / WebRTC

Landing page dla każdego komponentu peer-to-peer.

RTCPeerConnection

Szczegółowa referencja komponentu.

Agent ICE

Zbieranie kandydatów i sprawdzenia łączności.

STUN i TURN

Serwery odkrywania NAT i relayu.

Blog: RTCPeerConnection P2P

Przewodnik end-to-end po kanale danych Delphi-do-Delphi.

Blog: Serwer i klient STUN + TURN

Samohosting własnej infrastruktury STUN/TURN w Delphi.

Blog: coturn na Windows

Cross-referencja referencyjnej implementacji C dla testów interoperacyjności.

Najkorzystniejsza oferta: All-AccessWszystkie produkty eSeGeCe, ze wsparciem Premium w cenie, już od €1,059 rocznie.
Zobacz cennik All-Access

Zbuduj swój pierwszy kanał P2P

Pobierz wersję próbną — dema WebRTC, STUN i TURN są dostarczane jako kompilowalne projekty Delphi.