为 Delphi 带来浏览器级别的 P2P——无需捆绑 Chromium。
Delphi WebRTC 库让两个 Delphi 进程(或一个 Delphi 进程与一个浏览器)建立直接的、穿越 NAT 的、端到端加密的通道,而无需通过中央服务器路由负载。sgcWebSockets 将每个 WebRTC 构建块都作为 Pascal 组件提供:TsgcWSPClient_WebRTC 镜像 JavaScript 的 RTCPeerConnection API,TsgcSTUNClient / TsgcSTUNServer 实现 RFC 5389,TsgcTURNClient / TsgcTURNServer 实现 RFC 5766,完整的 ICE 代理将它们绑定在一起。
与基于浏览器的栈(需要 Chromium 或 libwebrtc——数十兆原生代码和复杂的构建)不同,sgcWebSockets 的实现是基于 OpenSSL 的纯 Pascal,编译进您的二进制文件。它可在 Delphi 7 至 Delphi 13 上运行,并为 Win32/Win64、Linux64、macOS、iOS 和 Android 提供原生二进制文件。
TsgcWSPClient_WebRTC
RFC 8825 / 5245 / 5389 / 5766 / 6347 / 4960
Enterprise
对等连接是头条,但支持部件也是一流的组件。
TsgcWSPClient_WebRTC 镜像 JavaScript API:CreateOffer、CreateAnswer、SetLocalDescription、SetRemoteDescription、AddIceCandidate、CreateDataChannel。请参阅 RTCPeerConnection。
内置 SDP 序列化器和解析器。使用 Chrome 和 Firefox 产生的相同线格式生成 offer、接受 answer、trickle ICE 候选。
完整的候选收集:主机、服务器自反(STUN 发现)、中继(TURN 分配)。按 RFC 5245 进行配对、优先级排序和连通性检查。ICE 页面。
强制性的 WebRTC 密钥协商协议。在相同的 ICE 协商 UDP 路径上进行 DTLS 1.2 握手,为 SRTP 导出密钥材料。
在 WebRTC 媒体传输上的可靠/不可靠、有序/无序消息——这是发送任意应用数据点对点的标准方式。
使用捆绑的 TsgcWebSocketClient / TsgcWebSocketHTTPServer 作为信令通道——一个库搞定一切。
WebRTC 不定义信令协议——您需要自己提供。传统选择是一个携带三种消息类型的 WebSocket 通道:offer(来自呼叫者的 SDP)、answer(来自被呼叫者的 SDP)和 ice-candidate(任何一方 trickle 的候选)。sgcWebSockets 已经包含信令服务器的两端:TsgcWebSocketHTTPServer 带有一个 Channels 实现,可在匹配的对等方之间路由 JSON 消息。
由于对等连接组件和信令服务器存在于同一个库中,您可以建立一个完整的 WebRTC 应用程序——协调发现、NAT 穿越、加密的 P2P 负载——而无需集成单个第三方 SDK。
浏览器使用的相同 IceServers 集合——同时支持公共服务器和您自己的私有 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');
大多数团队从公共的 Google STUN 和第三方 TURN 服务(Twilio、Xirsys、coturn)开始。当流量增长时,中继带宽账单也会增长——而实际上,TURN 是 WebRTC 中唯一按字节付费的部分。该库让您可以自托管:TsgcSTUNServer 和 TsgcTURNServer 放入控制台应用程序或 Windows 服务中,在 UDP 3478 (STUN) 以及可配置端口的 TCP/UDP/TLS (TURN) 上提供协议服务。长期凭据、IPv4 和 IPv6 双栈、分配配额和每用户带宽限制都内置其中。
每个点对点组件的着陆页。
详细的组件参考。
候选收集和连通性检查。
Delphi 到 Delphi 数据通道的端到端演练。
在 Delphi 中自托管您自己的 STUN/TURN 基础设施。
与参考 C 实现交叉引用以进行互操作性测试。