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: TsgcWSPClient_WebRTC odzwierciedla API JavaScript RTCPeerConnection, TsgcSTUNClient / TsgcSTUNServer implementują RFC 5389, TsgcTURNClient / TsgcTURNServer implementują RFC 5766, a 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

TsgcWSPClient_WebRTC

ICE / STUN / TURN

Komponenty P2P

Standardy

RFC 8825 / 5245 / 5389 / 5766 / 6347 / 4960

Edycja

Enterprise

Każdy komponent WebRTC, udostępniony

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

RTCPeerConnection

TsgcWSPClient_WebRTC odzwierciedla API JavaScript: CreateOffer, CreateAnswer, SetLocalDescription, SetRemoteDescription, AddIceCandidate, CreateDataChannel. 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 5245. 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 — 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 trickled przez którąkolwiek stronę). sgcWebSockets zawiera oba końce serwera sygnalizacji już gotowe: TsgcWebSocketHTTPServer z implementacją Channels, która routuje wiadomości JSON między dopasowanymi peerami.

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 kolekcja IceServers, której używa przeglądarka — z publicznymi serwerami i własnym prywatnym TURN.

uses
  sgcWebSocket, sgcWebSocket_Protocol_WebRTC_Client,
  sgcWebSocket_Protocol_WebRTC_Types;

var
  WSClient: TsgcWebSocketClient;
  RTC: TsgcWSPClient_WebRTC;
begin
  WSClient := TsgcWebSocketClient.Create(nil);
  WSClient.URL := 'wss://signal.example.com/rtc';

  RTC := TsgcWSPClient_WebRTC.Create(nil);
  RTC.Client := WSClient;

  // Public Google STUN for NAT discovery
  RTC.IceServers.Add.URL := 'stun:stun.l.google.com:19302';

  // Your own TURN for relay when P2P fails
  with RTC.IceServers.Add do
  begin
    URL        := 'turn:turn.example.com:3478';
    UserName   := 'alice';
    Credential := 's3cret';
  end;

  RTC.OnDataChannelMessage := DoMessage;

  WSClient.Active := True;

  // Create a reliable, ordered data channel
  RTC.CreateDataChannel('chat', True, True);
  RTC.CreateOffer;
end;

procedure TForm1.DoMessage(Sender: TObject;
  const aChannel, aText: string);
begin
  Memo1.Lines.Add(aChannel + ': ' + aText);
end;

// Send a message peer-to-peer
RTC.SendDataChannelMessage('chat', '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 serwują protokół na UDP 3478 (STUN) i TCP/UDP/TLS na konfigurowalnych portach dla TURN. Długoterminowe poświadczenia, IPv4 i IPv6 dual-stack, kwoty alokacji i limity pasma per-użytkownik są wszystkie 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.

Zbuduj swój pierwszy kanał P2P

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