Delphi WebRTC 라이브러리 — P2P, ICE, STUN, TURN, DataChannel

WebRTC 피어-투-피어 스택의 네이티브 Pascal 구현: RTCPeerConnection, ICE 후보 수집 및 연결 검사, STUN 및 TURN 클라이언트 + 서버, DTLS-SRTP 키 합의 및 SCTP 데이터 채널 — WebSocket 시그널링이 이미 연결되어 있어요.

Pascal을 위한 P2P, 종단 간

Chromium을 번들로 묶지 않고 브라우저 등급 P2P를 Delphi에 가져오세요.

Delphi WebRTC 라이브러리는 두 Delphi 프로세스(또는 Delphi 프로세스와 브라우저)가 중앙 서버로 페이로드를 라우팅하지 않고 직접, NAT를 통과하는 종단 간 암호화 채널을 맺을 수 있게 해줘요. sgcWebSockets는 모든 WebRTC 구성 요소를 Pascal 컴포넌트로 제공해요: TsgcRTCPeerConnection은 W3C RTCPeerConnection API를 미러링하고, TsgcSTUNClient / TsgcSTUNServer는 RFC 8489를, TsgcTURNClient / TsgcTURNServer는 RFC 8656을 구현하며, 완전한 ICE 에이전트인 TsgcICEClient가 이들을 하나로 묶어요.

브라우저 기반 스택(Chromium 또는 libwebrtc — 수십 메가바이트의 네이티브 코드와 복잡한 빌드 필요)과 달리 sgcWebSockets 구현은 OpenSSL 위의 순수 Pascal이며 바이너리로 컴파일돼요. Delphi 7부터 Delphi 13까지 실행되며 Win32/Win64, Linux64, macOS, iOS 및 Android용 네이티브 바이너리를 제공해요.

피어 연결

TsgcRTCPeerConnection

ICE / STUN / TURN

P2P 컴포넌트

표준

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

에디션

컴포넌트는 Enterprise, offer와 answer, DataChannels, 트랙에는 sgcWebRTC 팩이 필요해요. 둘 다 All-Access에 포함돼요.

모든 WebRTC 컴포넌트, 노출됨

피어 연결이 헤드라인이지만 지원 부품들도 일류 컴포넌트예요.

RTCPeerConnection

TsgcRTCPeerConnection은 W3C API를 미러링해요: CreateOffer, CreateAnswer, SetLocalDescription, SetRemoteDescription, AddIceCandidate, CreateDataChannel, AddTrack. RTCPeerConnection을 참조하세요.

SDP 오퍼 / 앤서

내장 SDP 직렬화기 및 파서. Chrome 및 Firefox가 생성하는 동일한 와이어 형식으로 오퍼를 생성하고, 앤서를 수락하고, ICE 후보를 트리클하세요.

ICE 에이전트

전체 후보 수집: 호스트, 서버 리플렉시브(STUN으로 발견), 릴레이(TURN으로 할당). RFC 8445에 따른 페어링과 우선순위 지정, 연결 검사를 지원해요. ICE 페이지.

STUN 클라이언트 + 서버

NAT 발견 및 킵얼라이브를 위한 독립형 STUN 클라이언트STUN 서버. 두 줄의 Pascal로 자체 STUN 엔드포인트를 실행하세요.

TURN 클라이언트 + 서버

릴레이 할당용 TURN 클라이언트 및 자체 호스팅용 TURN 서버. 장기 자격 증명, IPv4 + IPv6.

DTLS-SRTP

필수 WebRTC 키 합의 프로토콜. 동일한 ICE 협상 UDP 경로를 통한 DTLS 1.2 핸드셰이크, SRTP용 키 자료 내보내기.

SCTP 데이터 채널

WebRTC 미디어 전송을 통한 신뢰할 수 있는 / 신뢰할 수 없는, 순서가 있는 / 순서가 없는 메시지 — 임의의 애플리케이션 데이터를 피어-투-피어로 보내는 표준 방법.

WebSocket 시그널링

번들된 TsgcWebSocketClient / TsgcWebSocketHTTPServer를 시그널링 채널로 사용하거나, 바로 쓸 수 있는 TsgcWSPClient_RTCPeerConnectionTsgcWSPServer_RTCPeerConnection 프로토콜 쌍을 사용하세요. 모든 것을 하나의 라이브러리로 해결해요.

WebSocket 시그널링: 표준 패턴

WebRTC는 시그널링 프로토콜을 정의하지 않아요 — 직접 준비해야 해요. 일반적인 선택은 세 가지 메시지 타입을 운반하는 WebSocket 채널이에요: offer(호출자의 SDP), answer(피호출자의 SDP), ice-candidate(양쪽에서 트리클되는 후보). sgcWebSockets에는 이미 그 채널의 양쪽 끝이 들어 있어요. TsgcWSPServer_RTCPeerConnection은 호출자와 피호출자를 짝지어 서로의 설명과 후보를 중계하고, TsgcWSPClient_RTCPeerConnection은 그에 맞는 클라이언트이며, TsgcWSPServer_WebRTC는 브라우저 피어를 상대로 같은 일을 하면서 접속하는 피어마다 ICE 서버 목록을 전달해요.

피어 연결 컴포넌트와 시그널링 서버가 동일한 라이브러리에 있기 때문에 단일 서드파티 SDK를 통합하지 않고도 완전한 WebRTC 애플리케이션 — 조정된 발견, NAT 통과, 암호화된 P2P 페이로드 — 을 구축할 수 있어요.

ICE 서버 구성하기

브라우저가 사용하는 것과 동일한 iceServers 목록을 RTCOptions.ICEServers로 제공해요 — 공용 서버와 직접 운영하는 프라이빗 TURN을 모두 담을 수 있어요.

uses
  sgcP2P, sgcP2P_DataChannel;

// TFormPeer는 FPeer, FChannel, FIncoming: TStringList를 보유

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;

  // 발신 측. CreateDataChannel이 RTCOptions.DTLS를 켬
  FChannel := FPeer.CreateDataChannel('chat');
  FChannel.OnMessage := OnChannelMessage;
  FPeer.CreateOffer;
end;

procedure TFormPeer.OnLocalDescription(Sender: TObject;
  const aType, aSDP: string);
begin
  // aType은 'offer' 또는 'answer'
  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
  // 워커 스레드에서 발생하므로 컨트롤을 다루기 전에 마샬링하세요
  FIncoming.Add(aText);
end;

// 피어 간에 직접 메시지를 전송
FChannel.Send('Hello from Delphi');

Delphi에서 자체 STUN / TURN 실행

대부분의 팀은 공용 Google STUN과 서드파티 TURN 서비스(Twilio, Xirsys, coturn)로 시작해요. 트래픽이 늘어나면 릴레이 대역폭 비용도 함께 늘어나요 — 실제로 WebRTC에서 바이트 단위로 비용을 내는 부분은 TURN뿐이에요. 이 라이브러리는 자체 호스팅을 지원해요: TsgcSTUNServerTsgcTURNServer는 콘솔 애플리케이션이나 Windows 서비스에 넣기만 하면 기본적으로 UDP 3478에서, 그리고 Bindings에 지정한 포트와 주소에서 응답해요. 장기 자격 증명, IPv4와 IPv6, TURNOptions.Allocation의 중계 포트 범위, 사용자별 할당량이 모두 내장되어 있어요.

sgcWebSockets의 P2P 자세히 알아보기

P2P / WebRTC 허브

모든 피어-투-피어 컴포넌트의 랜딩 페이지.

RTCPeerConnection

상세한 컴포넌트 참조.

ICE 에이전트

후보 수집 및 연결 검사.

STUN & TURN

NAT 발견 및 릴레이 서버.

블로그: RTCPeerConnection P2P

Delphi-to-Delphi 데이터 채널의 종단 간 워크스루.

블로그: STUN + TURN 서버 & 클라이언트

Delphi에서 자체 STUN/TURN 인프라 자체 호스팅.

블로그: Windows의 coturn

상호 운용성 테스트를 위해 참조 C 구현 교차 참조.

최고의 가성비: All-Access모든 eSeGeCe 제품과 프리미엄 지원이 포함되어 연 €1,059부터 이용할 수 있어요.
All-Access 가격 보기

첫 P2P 채널 구축하기

체험판을 다운로드하세요 — WebRTC, STUN 및 TURN 데모가 컴파일 가능한 Delphi 프로젝트로 제공돼요.