RTCPeerConnection em Delphi

Use WebRTC a partir do Delphi/C++Builder — ICE para conectividade, DTLS para o handshake de chaves, SRTP para mídia, SCTP-over-DTLS para DataChannels. Sem navegador necessário.

TsgcRTCPeerConnection

Peer WebRTC nativo para Delphi — espelha a superfície W3C RTCPeerConnection (CreateOffer / CreateAnswer / SetRemoteDescription / AddIceCandidate / DataChannel) suportada pelas stacks ICE, DTLS, SRTP e SCTP integradas.

Classe do componente

TsgcRTCPeerConnection

Protocolo

WebRTC (W3C)

Plataformas

Windows, macOS, Linux, iOS, Android

Edição

Enterprise para o componente, mais o pack sgcWebRTC para offer e answer, DataChannels e faixas de mídia. Os dois vêm no All-Access.

O bloco Enterprise do sgcVer.inc define SGC_ICE, SGC_DTLS, SGC_RTCPEERCONNECTION e SGC_TURN, e é isso que coloca o TsgcRTCPeerConnection na paleta e lhe dá transporte ICE e TURN. Os métodos de offer e answer, a API de DataChannel e a API de mídia ficam dentro de SGC_SDP, SGC_DATACHANNEL e SGC_RTP, e só SGC_PACK_WEBRTC define esses. Eles pedem o pack sgcWebRTC sobre o Enterprise, ou o All-Access, que já o habilita.

Offer / Answer / Conectar

Preencha RTCOptions.ICEServers, chame CreateOffer, envie ao par remoto pelo seu canal de sinalização o SDP que OnLocalDescription entrega, defina o answer que volta, e o caminho de dados sobe.

uses
  sgcP2P, sgcP2P_DataChannel;

// TFormPeer guarda FPeer, FChannel, FIncoming: TStringList e os handlers

procedure TFormPeer.CreatePeer;
begin
  FPeer := TsgcRTCPeerConnection.Create(nil);
  FPeer.RTCOptions.ICEServers.AddURL('stun:stun.l.google.com:19302');
  FPeer.RTCOptions.ICE.TURN := False;  // ainda sem servidor TURN

  FPeer.OnLocalDescription := OnLocalDescription;
  FPeer.OnDataChannel      := OnDataChannel;

  // lado de saída. CreateDataChannel liga RTCOptions.DTLS
  FChannel := FPeer.CreateDataChannel('chat');
  FChannel.OnMessage := OnChannelMessage;
  FPeer.CreateOffer;
end;

procedure TFormPeer.OnLocalDescription(Sender: TObject;
  const aType, aSDP: string);
begin
  // aType é 'offer' ou 'answer'
  SignalToPeer(aType, aSDP); // pelo seu canal de sinalização 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
  // dispara em uma thread de trabalho, faça o marshalling antes de tocar um controle
  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;  // ainda sem servidor 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);  // pelo seu canal de sinalização WebSocket
}

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

Exemplo completo: dois aplicativos Delphi de ponta a ponta

O que está incluído

Um peer WebRTC nativo que reúne ICE, DTLS, SRTP e SCTP em um único componente — espelhando a API W3C RTCPeerConnection.

SDP Offer / Answer

CreateOffer e CreateAnswer geram SDP RFC 8866 com os atributos corretos de ICE-UFRAG / ICE-PWD / FINGERPRINT / SETUP; SetRemoteDescription ingere o SDP do peer remoto.

Conectividade via ICE

Usa TsgcICEClient internamente para coleta de candidatos e verificações de conectividade; AddIceCandidate alimenta candidatos remotos conforme chegam do canal de sinalização.

Chaveamento DTLS

Assim que o par ICE selecionado fica gravável, o componente executa um handshake DTLS (RFC 6347) e exporta o material de chaves SRTP com o rótulo EXTRACTOR-dtls_srtp da RFC 5764. RTCOptions.DTLS vale False por padrão, e CreateDataChannel liga isso para você.

DataChannels (SCTP-over-DTLS)

CreateDataChannel abre um stream SCTP multiplexado sobre DTLS — confiável / parcialmente confiável, ordenado / não ordenado, com backpressure via BufferedAmount.

Faixas de mídia

AddTrack publica uma faixa de áudio ou vídeo e OnTrack recebe a remota, ambas sobre SRTP. O componente complementar TsgcWSPServer_RTCPeerConnection é o broker de sinalização WebSocket: ele emparelha quem chama com quem atende e repassa os SDP e os candidatos dos dois.

Compatível com navegadores

Interopera com o RTCPeerConnection do navegador — testado com Chromium / Firefox / Safari. Mesma semântica SDP, mesmos candidatos ICE, mesmo formato de wire do DataChannel.

Especificações & referências

Fontes oficiais do protocolo implementado por este componente.

Documentação & Demos

Acesse a referência do componente, obtenha o projeto de demo pronto para executar e baixe o trial.

Ajuda Online — TsgcRTCPeerConnection Referência completa de propriedades, métodos e eventos deste componente.
Projeto de Demo — Demos\35.P2P\05.RTCPeerConnection Projeto de exemplo pronto para executar. Incluído no pacote sgcWebSockets — baixe o trial abaixo.
Documento Técnico (PDF) Recursos, quick start, exemplos de código para Delphi & C++ Builder e referências primárias — somente este componente.
Manual do Usuário (PDF) Manual abrangente cobrindo todos os componentes da biblioteca.
Melhor custo-benefício: All-AccessTodos os produtos da eSeGeCe, com Suporte Premium incluído, a partir de €1,059/ano.
Ver preços do All-Access

Pronto para Executar WebRTC no Delphi?

Baixe o trial gratuito e adicione RTCPeerConnection nativo às suas aplicações Delphi.