Delphi RTCPeerConnection

Delphi/C++Builder에서 WebRTC를 사용하세요 — 연결을 위한 ICE, 키잉 핸드셰이크를 위한 DTLS, 미디어를 위한 SRTP, DataChannel을 위한 SCTP-over-DTLS. 브라우저가 필요 없어요.

TsgcRTCPeerConnection

네이티브 Delphi WebRTC 피어 — W3C RTCPeerConnection 인터페이스(CreateOffer / CreateAnswer / SetRemoteDescription / AddIceCandidate / DataChannel)를 내장된 ICE, DTLS, SRTP 및 SCTP 스택으로 구현합니다.

컴포넌트 클래스

TsgcRTCPeerConnection

프로토콜

WebRTC (W3C)

플랫폼

Windows, macOS, Linux, iOS, Android

에디션

컴포넌트 자체는 Enterprise, offer와 answer, DataChannel, 미디어 트랙은 sgcWebRTC 팩이 추가로 필요합니다. 둘 다 All-Access에 포함됩니다.

sgcVer.inc의 Enterprise 블록은 SGC_ICE, SGC_DTLS, SGC_RTCPEERCONNECTION, SGC_TURN을 정의하며, 이것이 TsgcRTCPeerConnection을 팔레트에 올리고 ICE와 TURN 전송을 제공합니다. offer와 answer 메서드, DataChannel API, 미디어 API는 SGC_SDP, SGC_DATACHANNEL, SGC_RTP 안에 있고 이들은 SGC_PACK_WEBRTC에서만 정의됩니다. 따라서 Enterprise 위에 sgcWebRTC 팩을 더하거나, 그 팩을 이미 활성화하는 All-Access가 필요합니다.

Offer / Answer / 연결

RTCOptions.ICEServers를 채우고 CreateOffer를 호출한 뒤, OnLocalDescription이 건네주는 SDP를 시그널링 채널로 원격 피어에 보내고, 돌아온 answer를 설정하면 데이터 경로가 열립니다.

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.ICE.TURN := False;  // 아직 TURN 서버 없음

  FPeer.OnLocalDescription := OnLocalDescription;
  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); // WebSocket 시그널링 채널로 전송
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;
// includes: sgcP2P.hpp, sgcP2P_DataChannel.hpp

TsgcRTCPeerConnection *Peer = new TsgcRTCPeerConnection(this);
Peer->RTCOptions->ICEServers->AddURL("stun:stun.l.google.com:19302");
Peer->RTCOptions->ICE->TURN = false;  // 아직 TURN 서버 없음

Peer->OnLocalDescription = OnLocalDescription;
Peer->OnDataChannel      = OnDataChannel;

TsgcRTCDataChannel *Channel = Peer->CreateDataChannel("chat");
Peer->CreateOffer();

void __fastcall TFormPeer::OnLocalDescription(TObject *Sender,
  const String aType, const String aSDP)
{
  SignalToPeer(aType, aSDP);  // WebSocket 시그널링 채널로 전송
}

void __fastcall TFormPeer::OnDataChannel(TObject *Sender,
  TsgcRTCDataChannel *aChannel)
{
  aChannel->OnMessage = OnChannelMessage;
}

전체 예제: 두 Delphi 애플리케이션 엔드 투 엔드

내부 구성

ICE, DTLS, SRTP 및 SCTP를 단일 컴포넌트에 번들로 제공하는 네이티브 WebRTC 피어입니다 — W3C RTCPeerConnection API를 반영합니다.

SDP Offer / Answer

CreateOfferCreateAnswer는 올바른 ICE-UFRAG / ICE-PWD / FINGERPRINT / SETUP 속성을 포함한 RFC 8866 SDP를 생성하고, SetRemoteDescription은 피어의 SDP를 수신합니다.

ICE 기반 연결

내부적으로 TsgcICEClient를 사용하여 후보 수집과 연결 확인을 수행합니다. AddIceCandidate는 시그널링에서 수신되는 원격 후보를 처리합니다.

DTLS 키잉

선택된 ICE 쌍이 쓰기 가능해지면 컴포넌트가 DTLS 핸드셰이크(RFC 6347)를 수행하고 RFC 5764의 EXTRACTOR-dtls_srtp 레이블로 SRTP 키 재료를 내보냅니다. RTCOptions.DTLS의 기본값은 False이며 CreateDataChannel이 대신 켜 줍니다.

DataChannel (SCTP-over-DTLS)

CreateDataChannel은 DTLS 위에 다중화된 SCTP 스트림을 엽니다 — 신뢰성/부분 신뢰성, 순서 있음/없음을 지원하며 BufferedAmount를 통한 백프레셔를 갖추고 있어요.

미디어 트랙

AddTrack은 오디오나 비디오 트랙을 게시하고 OnTrack은 원격 트랙을 받으며, 둘 다 SRTP 위로 흐릅니다. 함께 제공되는 TsgcWSPServer_RTCPeerConnection은 WebSocket 시그널링 브로커로, 발신자와 수신자를 짝지어 주고 양쪽의 SDP와 후보를 중계합니다.

브라우저 호환

브라우저 RTCPeerConnection과 상호 운용됩니다 — Chromium / Firefox / Safari에서 테스트 완료. 동일한 SDP 의미론, 동일한 ICE 후보, 동일한 DataChannel 와이어 포맷을 사용합니다.

사양 및 참고문헌

이 컴포넌트가 구현하는 프로토콜의 공식 출처입니다.

문서 및 데모

컴포넌트 레퍼런스로 바로 이동하고, 실행 가능한 데모 프로젝트를 받아보세요.

온라인 도움말 — TsgcRTCPeerConnection 이 컴포넌트의 전체 속성, 메서드 및 이벤트 레퍼런스입니다.
데모 프로젝트 — Demos\35.P2P\05.RTCPeerConnection 실행 가능한 예제 프로젝트입니다. sgcWebSockets 패키지에 포함되어 있습니다.
기술 문서 (PDF) Delphi 및 C++ Builder용 코드 샘플과 기능 설명이 포함된 기술 문서입니다.
사용자 매뉴얼 (PDF) 라이브러리의 모든 컴포넌트를 다루는 종합 매뉴얼입니다.
최고의 가성비: All-Access모든 eSeGeCe 제품과 프리미엄 지원이 포함되어 연 €1,059부터 이용할 수 있어요.
All-Access 가격 보기

Delphi에서 WebRTC를 실행할 준비가 되셨나요?

무료 체험판을 다운로드하고 Delphi 애플리케이션에 네이티브 RTCPeerConnection을 추가해 보세요.