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: TsgcRTCPeerConnection W3C RTCPeerConnection API'sini yansıtır, TsgcSTUNClient / TsgcSTUNServer RFC 8489'u uygular, TsgcTURNClient / TsgcTURNServer RFC 8656'yı uygular ve eksiksiz bir ICE aracısı olan TsgcICEClient 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ı

TsgcRTCPeerConnection

ICE / STUN / TURN

P2P bileşenleri

Standartlar

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

Sürüm

Bileşenler için Enterprise, ayrıca offer ve answer, DataChannel'lar ve track'ler için sgcWebRTC paketi. İkisi de All-Access ile gelir.

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

TsgcRTCPeerConnection W3C API'sini yansıtır: CreateOffer, CreateAnswer, SetLocalDescription, SetRemoteDescription, AddIceCandidate, CreateDataChannel, AddTrack. 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 ayrılan). RFC 8445'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 bileşenlerini sinyalleşme kanalınız olarak kullanın veya hazır TsgcWSPClient_RTCPeerConnection ve TsgcWSPServer_RTCPeerConnection protokol çiftini tercih edin. 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 bu kanalın her iki ucunu zaten içerir. TsgcWSPServer_RTCPeerConnection bir arayanı bir aranan ile eşleştirir ve açıklamalarını ve adaylarını aktarır, TsgcWSPClient_RTCPeerConnection ona karşılık gelen istemcidir, TsgcWSPServer_WebRTC ise aynı işi tarayıcı eşleri için yapar ve katılan her eşe ICE sunucu listesini gönderir.

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 listesi, RTCOptions.ICEServers olarak sunulur — hem genel sunucularla hem de kendi özel TURN'ünüzle.

uses
  sgcP2P, sgcP2P_DataChannel;

// TFormPeer, FPeer, FChannel ve FIncoming: TStringList tutar

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;

  // giden taraf. CreateDataChannel, RTCOptions.DTLS seçeneğini açar
  FChannel := FPeer.CreateDataChannel('chat');
  FChannel.OnMessage := OnChannelMessage;
  FPeer.CreateOffer;
end;

procedure TFormPeer.OnLocalDescription(Sender: TObject;
  const aType, aSDP: string);
begin
  // aType değeri 'offer' veya 'answer' olur
  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
  // bir çalışan iş parçacığında tetiklenir, bir denetime dokunmadan önce yönlendirin
  FIncoming.Add(aText);
end;

// mesajı eşler arası gönderin
FChannel.Send('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 bir Windows hizmetine yerleşir ve varsayılan olarak UDP 3478 üzerinde, Bindings içine koyduğunuz port ve adres neyse onun üzerinde yanıt verir. Uzun süreli kimlik bilgileri, IPv4 ve IPv6, TURNOptions.Allocation içinde bir röle port aralığı ve kullanıcı başına ayırma kotası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.

En avantajlı seçenek: All-AccessTüm eSeGeCe ürünleri, Premium Destek dahil, yılda €1,059'dan itibaren.
All-Access fiyatlarına bakın

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

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