Delphi WebRTC Kütüphanesi — P2P, ICE, STUN, TURN, DataChannel

WebRTC eşler arası yığınının yerel Pascal uygulaması: RTCPeerConnection, ICE aday toplama ve bağlantı denetimleri, STUN ve TURN istemci + sunucu, DTLS-SRTP anahtar anlaşması ve SCTP veri kanalları — WebSocket sinyalleşmesi zaten bağlanmış olarak.

Pascal için eşler arası, uçtan uca

Tarayıcı düzeyinde P2P'yi Delphi'ye getirin — Chromium paketlemeden.

Bir Delphi WebRTC kütüphanesi, iki Delphi sürecinin (veya bir Delphi süreci ile bir tarayıcının) yükü merkezi bir sunucu üzerinden yönlendirmeden doğrudan, NAT geçişli, uçtan uca şifreli bir kanal kurmasını sağlar. sgcWebSockets her WebRTC yapı taşını bir Pascal bileşeni olarak sunar: TsgcWSPClient_WebRTC JavaScript RTCPeerConnection API'sini yansıtır, TsgcSTUNClient / TsgcSTUNServer RFC 5389'u uygular, TsgcTURNClient / TsgcTURNServer RFC 5766'yı uygular ve eksiksiz bir ICE aracısı bunları bir araya getirir.

Tarayıcı tabanlı yığınların (Chromium veya libwebrtc gerektiren — onlarca megabaytlık yerel kod ve karmaşık bir derleme) aksine, sgcWebSockets uygulaması OpenSSL üzerinde saf Pascal'dır ve ikili dosyanıza derlenir. Delphi 7'den Delphi 13'e kadar çalışır ve Win32/Win64, Linux64, macOS, iOS ve Android için yerel ikili dosyalar sunar.

Eş bağlantısı

TsgcWSPClient_WebRTC

ICE / STUN / TURN

P2P bileşenleri

Standartlar

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

Sürüm

Enterprise

Her WebRTC bileşeni, açığa çıkarılmış

Eş bağlantısı başlıktır, ancak destekleyici parçalar da birinci sınıf bileşenlerdir.

RTCPeerConnection

TsgcWSPClient_WebRTC JavaScript API'sini yansıtır: CreateOffer, CreateAnswer, SetLocalDescription, SetRemoteDescription, AddIceCandidate, CreateDataChannel. RTCPeerConnection sayfasına bakın.

SDP offer / answer

Yerleşik SDP serileştirici ve ayrıştırıcı. Chrome ve Firefox'un ürettiği aynı iletişim biçimiyle teklifler oluşturun, yanıtları kabul edin, ICE adaylarını aşamalı gönderin.

ICE aracısı

Tam aday toplama: host, server-reflexive (STUN ile keşfedilen), relayed (TURN ile tahsis edilen). RFC 5245'e göre eşleştirme, önceliklendirme ve bağlantı denetimleri. ICE sayfası.

STUN istemci + sunucu

NAT keşfi ve canlı tutma için bağımsız STUN istemcisi ve STUN sunucusu. İki satır Pascal ile kendi STUN uç noktanızı çalıştırın.

TURN istemci + sunucu

Röle tahsisi için TURN istemcisi ve kendi sunucunuzda barındırma için TURN sunucusu. Uzun süreli kimlik bilgileri, IPv4 + IPv6.

DTLS-SRTP

Zorunlu WebRTC anahtar anlaşma protokolü. Aynı ICE ile anlaşılan UDP yolu üzerinden DTLS 1.2 el sıkışması, SRTP için anahtarlama malzemesini dışa aktarır.

SCTP veri kanalları

WebRTC medya taşıması üzerinden güvenilir / güvenilmez, sıralı / sırasız mesajlar — rastgele uygulama verilerini eşler arası göndermenin standart yolu.

WebSocket sinyalleşmesi

Birlikte gelen TsgcWebSocketClient / TsgcWebSocketHTTPServer'ı sinyalleşme kanalınız olarak kullanın — her şey için tek bir kütüphane.

WebSocket sinyalleşmesi: standart desen

WebRTC bir sinyalleşme protokolü tanımlamaz — kendinizinkini getirirsiniz. Geleneksel seçim, üç mesaj türünü taşıyan bir WebSocket kanalıdır: offer (arayan taraftan SDP), answer (aranan taraftan SDP) ve ice-candidate (her iki tarafça aşamalı gönderilen adaylar). sgcWebSockets, sinyalleşme sunucusunun her iki ucunu zaten içerir: eşleşen eşler arasında JSON mesajlarını yönlendiren bir Channels uygulamasıyla TsgcWebSocketHTTPServer.

Eş bağlantı bileşeni ve sinyalleşme sunucusu aynı kütüphanede bulunduğundan, tek bir üçüncü taraf SDK'sı entegre etmeden eksiksiz bir WebRTC uygulaması — koordineli keşif, NAT geçişi, şifreli P2P yükü — kurabilirsiniz.

ICE sunucularını yapılandırma

Bir tarayıcının kullandığı aynı IceServers koleksiyonu — hem genel sunucular hem de kendi özel TURN'ünüzle.

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');

Delphi'de kendi STUN / TURN'ünüzü çalıştırın

Çoğu ekip genel Google STUN ve üçüncü taraf bir TURN hizmetiyle (Twilio, Xirsys, coturn) başlar. Trafik arttığında, röle bant genişliği faturası da artar — ve TURN, pratikte WebRTC'nin bayt başına ödeme yaptığınız tek parçasıdır. Kütüphane kendi sunucunuzda barındırmanıza olanak tanır: TsgcSTUNServer ve TsgcTURNServer bir konsol uygulamasına veya Windows hizmetine yerleşir ve protokolü STUN için UDP 3478 üzerinde ve TURN için yapılandırılabilir bağlantı noktalarında TCP/UDP/TLS üzerinde sunar. Uzun süreli kimlik bilgileri, IPv4 ve IPv6 çift yığını, tahsis kotaları ve kullanıcı başına bant genişliği sınırlarının tümü yerleşiktir.

sgcWebSockets'te P2P hakkında daha fazlası

P2P / WebRTC merkezi

Her eşler arası bileşen için açılış sayfası.

RTCPeerConnection

Ayrıntılı bileşen referansı.

ICE aracısı

Aday toplama ve bağlantı denetimleri.

STUN ve TURN

NAT keşfi ve röle sunucuları.

Blog: RTCPeerConnection P2P

Delphi'den Delphi'ye veri kanalının uçtan uca incelemesi.

Blog: STUN + TURN sunucusu ve istemcisi

Kendi STUN/TURN altyapınızı Delphi'de barındırma.

Blog: Windows'ta coturn

Birlikte çalışabilirlik testleri için referans C uygulamasıyla çapraz referans.

İlk P2P kanalınızı oluşturun

Denemeyi indirin — WebRTC, STUN ve TURN demoları derlenebilir Delphi projeleri olarak gelir.