Cliente ICE para Delphi

Execute o algoritmo ICE completo em Delphi/C++Builder — colete candidatos host, server-reflexive e relay, execute verificações de conectividade STUN e nomine o melhor par conforme a RFC 8445.

TsgcICEClient

Implementa a máquina de estados ICE da RFC 8445 — coleta de candidatos, priorização, geração de pares, verificações de conectividade (BindingRequest com USE-CANDIDATE), nomeação e renovação de consentimento.

Classe do componente

TsgcICEClient

Protocolo

ICE (RFC 8445)

Plataformas

Windows, macOS, Linux, iOS, Android

Edição

Enterprise

Configure servidores, colete, troque e verifique

Configure os servidores ICE STUN/TURN, chame GatherCandidates, troque a lista de candidatos com o peer (fora de banda) e depois ProcessCandidates para rodar os checks e nominar um par funcional.

uses
  sgcP2P, sgcP2P_ICE_Classes;

// TFormICE mantém FClient: TsgcICEClient e FLog: TStringList

procedure TFormICE.Gather;
begin
  FClient := TsgcICEClient.Create(nil);
  FClient.ICEServers.AddURL('stun:stun.l.google.com:19302');
  FClient.ICEServers.AddURL('turn:turn.example.com', 'alice', 'secret');

  FClient.OnICECandidate := OnICECandidate;
  FClient.OnICECandidatePairNominated := OnICECandidatePairNominated;

  FClient.GatherCandidates;
end;

procedure TFormICE.OnICECandidate(Sender: TObject;
  const aCandidate: TsgcICE_Candidate);
begin
  // AsString é a linha do candidato, pronta para o seu canal de sinalização
  SignalToPeer(aCandidate.AsString);
end;

// os candidatos remotos chegam pelo seu canal de sinalização
procedure TFormICE.AddRemoteCandidate(const aCandidate: string);
begin
  FClient.AddRTCIceCandidate(aCandidate);
  FClient.ProcessCandidates;
end;

procedure TFormICE.OnICECandidatePairNominated(Sender: TObject;
  const aCandidatePair: TsgcICE_CandidatePair);
begin
  FLog.Add('nominated: ' + aCandidatePair.Local.Address + ' -> ' +
    aCandidatePair.Remote.Address);
end;
// includes: sgcP2P.hpp, sgcP2P_ICE_Classes.hpp
TsgcICEClient *Client = new TsgcICEClient(this);
Client->ICEServers->AddURL("stun:stun.l.google.com:19302");
Client->OnICECandidate = OnICECandidate;
Client->GatherCandidates();

O que tem por dentro

Um motor ICE reutilizável que funciona abaixo do TsgcRTCPeerConnection — ou de forma independente para P2P não-WebRTC.

Coleta de candidatos

Enumera candidatos host de cada interface local, candidatos server-reflexive de cada servidor STUN e candidatos relay de cada servidor TURN — tudo em paralelo.

Geração e priorização de pares

Calcula as prioridades dos pares de candidatos conforme a RFC 8445 §6.1.2 e ordena a lista de verificação. Pares congelados descongelam conforme sua base avança.

Verificações de conectividade

Envia STUN BindingRequests com os atributos PRIORITY, ICE-CONTROLLING / ICE-CONTROLLED e USE-CANDIDATE conforme o padrão. Verificações disparadas ocorrem em resposta a estímulos de entrada.

Nomeação

Quando um par tem sucesso e o agente controlador sinaliza USE-CANDIDATE, o componente dispara OnICECandidatePairNominated com o par vencedor, e aCandidatePair.Local / Remote informam quais dois endereços foram escolhidos.

Renovação de consentimento

Implementa probes de consent-freshness da RFC 7675: uma requisição Binding no par nominado a cada ConsentInterval milissegundos, e OnICECandidatePairFailed com o motivo Consent Freshness Timeout assim que ConsentTimeout se esgota sem resposta.

Independente de sinalização

O componente não assume nenhum canal de sinalização específico. Você coloca aCandidate.AsString na sua sinalização WebSocket, SIP ou HTTP, e alimenta o que voltar em AddRTCIceCandidate, seguido de ProcessCandidates.

Especificações e referências

Fontes autoritativas do protocolo que este componente implementa.

Documentação e demos

Acesse a referência do componente, obtenha o projeto demo pronto para executar e baixe a versão de avaliação.

Ajuda online — TsgcICEClient Referência completa de propriedades, métodos e eventos deste componente.
Projeto de demonstração — Demos\35.P2P\04.ICE Projeto de exemplo pronto para executar. Acompanha o pacote sgcWebSockets — baixe a versão de avaliação abaixo.
Documento técnico (PDF) Recursos, início rápido, exemplos de código para Delphi & C++ Builder e referências de fontes 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 ICE em Delphi?

Baixe a versão de avaliação gratuita e adicione coleta completa de candidatos ICE e verificações de conectividade às suas aplicações Delphi.