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.
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.
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.
TsgcRTCPeerConnection
Windows, macOS, Linux, iOS, Android
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.
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;
}
Um peer WebRTC nativo que reúne ICE, DTLS, SRTP e SCTP em um único componente — espelhando a API W3C RTCPeerConnection.
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.
Usa TsgcICEClient internamente para coleta de candidatos e verificações de conectividade; AddIceCandidate alimenta candidatos remotos conforme chegam do canal de sinalização.
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ê.
CreateDataChannel abre um stream SCTP multiplexado sobre DTLS — confiável / parcialmente confiável, ordenado / não ordenado, com backpressure via BufferedAmount.
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.
Interopera com o RTCPeerConnection do navegador — testado com Chromium / Firefox / Safari. Mesma semântica SDP, mesmos candidatos ICE, mesmo formato de wire do DataChannel.
Fontes oficiais do protocolo implementado por este componente.
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. | Open | |
| Projeto de Demo — Demos\35.P2P\05.RTCPeerConnection Projeto de exemplo pronto para executar. Incluído no pacote sgcWebSockets — baixe o trial abaixo. | Open | |
| Documento Técnico (PDF) Recursos, quick start, exemplos de código para Delphi & C++ Builder e referências primárias — somente este componente. | Open | |
| Manual do Usuário (PDF) Manual abrangente cobrindo todos os componentes da biblioteca. | Open |