Delphi WebRTC 라이브러리 — P2P, ICE, STUN, TURN, DataChannel
WebRTC 피어-투-피어 스택의 네이티브 Pascal 구현: RTCPeerConnection, ICE 후보 수집 및 연결 검사, STUN 및 TURN 클라이언트 + 서버, DTLS-SRTP 키 합의 및 SCTP 데이터 채널 — WebSocket 시그널링이 이미 연결되어 있어요.
WebRTC 피어-투-피어 스택의 네이티브 Pascal 구현: RTCPeerConnection, ICE 후보 수집 및 연결 검사, STUN 및 TURN 클라이언트 + 서버, DTLS-SRTP 키 합의 및 SCTP 데이터 채널 — WebSocket 시그널링이 이미 연결되어 있어요.
Chromium을 번들로 묶지 않고 브라우저 등급 P2P를 Delphi에 가져오세요.
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가 생성하는 동일한 와이어 형식으로 오퍼를 생성하고, 앤서를 수락하고, ICE 후보를 트리클하세요.
전체 후보 수집: 호스트, 서버 리플렉시브(STUN으로 발견됨), 릴레이됨(TURN 할당됨). RFC 5245에 따른 페어링, 우선순위 지정 및 연결 검사. ICE 페이지.
NAT 발견 및 킵얼라이브를 위한 독립형 STUN 클라이언트 및 STUN 서버. 두 줄의 Pascal로 자체 STUN 엔드포인트를 실행하세요.
릴레이 할당용 TURN 클라이언트 및 자체 호스팅용 TURN 서버. 장기 자격 증명, IPv4 + IPv6.
필수 WebRTC 키 합의 프로토콜. 동일한 ICE 협상 UDP 경로를 통한 DTLS 1.2 핸드셰이크, SRTP용 키 자료 내보내기.
WebRTC 미디어 전송을 통한 신뢰할 수 있는 / 신뢰할 수 없는, 순서가 있는 / 순서가 없는 메시지 — 임의의 애플리케이션 데이터를 피어-투-피어로 보내는 표준 방법.
번들된 TsgcWebSocketClient / TsgcWebSocketHTTPServer를 시그널링 채널로 사용하세요 — 모든 것을 위한 하나의 라이브러리.
WebRTC는 시그널링 프로토콜을 정의하지 않아요 — 자체적으로 가져와요. 일반적인 선택은 세 가지 메시지 타입을 운반하는 WebSocket 채널이에요: offer(호출자의 SDP), answer(피호출자의 SDP) 및 ice-candidate(어느 한쪽에 의해 트리클되는 후보). sgcWebSockets는 이미 시그널링 서버의 양쪽 끝을 포함해요: 일치하는 피어 간에 JSON 메시지를 라우팅하는 Channels 구현이 있는 TsgcWebSocketHTTPServer.
피어 연결 컴포넌트와 시그널링 서버가 동일한 라이브러리에 있기 때문에 단일 서드파티 SDK를 통합하지 않고도 완전한 WebRTC 애플리케이션 — 조정된 발견, NAT 통과, 암호화된 P2P 페이로드 — 을 구축할 수 있어요.
브라우저가 사용하는 동일한 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) 및 TURN용으로 구성 가능한 포트에서 TCP/UDP/TLS에서 프로토콜을 제공해요. 장기 자격 증명, IPv4 및 IPv6 듀얼 스택, 할당 할당량 및 사용자별 대역폭 제한이 모두 내장되어 있어요.
모든 피어-투-피어 컴포넌트의 랜딩 페이지.
상세한 컴포넌트 참조.
후보 수집 및 연결 검사.
Delphi-to-Delphi 데이터 채널의 종단 간 워크스루.
Delphi에서 자체 STUN/TURN 인프라 자체 호스팅.
상호 운용성 테스트를 위해 참조 C 구현 교차 참조.