Cliente ICE para Delphi
Ejecuta el algoritmo ICE completo en Delphi/C++Builder — recopila candidatos host, server-reflexive y relay, realiza comprobaciones de conectividad STUN y nomina el mejor par según RFC 8445.
Ejecuta el algoritmo ICE completo en Delphi/C++Builder — recopila candidatos host, server-reflexive y relay, realiza comprobaciones de conectividad STUN y nomina el mejor par según RFC 8445.
Implementa la máquina de estados ICE de RFC 8445 — recopilación de candidatos, priorización, generación de pares, comprobaciones de conectividad (BindingRequest con USE-CANDIDATE), nominación y consent freshness.
TsgcICEClient
Windows, macOS, Linux, iOS, Android
Enterprise
Configura los servidores ICE STUN/TURN, llama a GatherCandidates, intercambia la lista de candidatos con el par (fuera de banda) y luego ProcessCandidates para ejecutar las comprobaciones y nominar un par funcional.
uses
sgcP2P, sgcP2P_ICE_Classes;
// TFormICE contiene FClient: TsgcICEClient y 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 es la línea de candidato, lista para tu canal de señalización
SignalToPeer(aCandidate.AsString);
end;
// los candidatos remotos llegan por tu canal de señalización
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();
Un motor ICE reutilizable que se sitúa debajo de TsgcRTCPeerConnection — o funciona por sí solo para P2P sin WebRTC.
Enumera candidatos host de cada interfaz local, candidatos server-reflexive de cada servidor STUN, candidatos relay de cada servidor TURN — todo en paralelo.
Calcula las prioridades de pares de candidatos según RFC 8445 §6.1.2 y ordena la lista de comprobación. Los pares congelados se descongelan a medida que su foundation progresa.
Envía STUN BindingRequests con los atributos PRIORITY, ICE-CONTROLLING / ICE-CONTROLLED y USE-CANDIDATE según el estándar. Las comprobaciones activadas se disparan ante el estímulo entrante.
Cuando un par tiene éxito y el agente controlador marca USE-CANDIDATE, el componente dispara OnICECandidatePairNominated con el par ganador, y aCandidatePair.Local / Remote te indican qué dos direcciones ha elegido.
Implementa los sondeos de consent-freshness de RFC 7675: una petición Binding en el par nominado cada ConsentInterval milisegundos, y OnICECandidatePairFailed con el motivo Consent Freshness Timeout cuando pasa ConsentTimeout sin respuesta.
El componente no asume ningún canal de señalización concreto. Tú pones aCandidate.AsString en tu señalización WebSocket, SIP o HTTP, y pasas lo que llega de vuelta a AddRTCIceCandidate seguido de ProcessCandidates.
Accede a la referencia del componente, descarga el proyecto demo listo para ejecutar y la versión de prueba.
| Ayuda en línea — TsgcICEClient Referencia completa de propiedades, métodos y eventos de este componente. | Abrir | |
| Proyecto demo — Demos\35.P2P\04.ICE Proyecto de ejemplo listo para ejecutar. Se incluye dentro del paquete sgcWebSockets — descarga la prueba abajo. | Abrir | |
| Documento técnico (PDF) Características, inicio rápido, ejemplos de código para Delphi y C++ Builder y referencias a fuentes primarias — solo este componente. | Abrir | |
| Manual de usuario (PDF) Manual completo que cubre cada componente de la biblioteca. | Abrir |