Client ICE per Delphi
Esegui l'intero algoritmo ICE in Delphi/C++Builder — raccogli candidati host, server-reflexive e relay, esegui verifiche di connettività STUN, esegui la nomination della coppia migliore secondo RFC 8445.
Esegui l'intero algoritmo ICE in Delphi/C++Builder — raccogli candidati host, server-reflexive e relay, esegui verifiche di connettività STUN, esegui la nomination della coppia migliore secondo RFC 8445.
Implementa la macchina a stati ICE di RFC 8445 — raccolta dei candidati, prioritizzazione, generazione delle coppie, verifiche di connettività (BindingRequest con USE-CANDIDATE), nomination e consent freshness.
TsgcICEClient
Windows, macOS, Linux, iOS, Android
Enterprise
Configura i server ICE STUN/TURN, chiama GatherCandidates, scambia la lista dei candidati con il peer (fuori banda), poi ProcessCandidates per eseguire i controlli e nominare una coppia funzionante.
uses
sgcP2P, sgcP2P_ICE_Classes;
// TFormICE contiene 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 è la riga del candidato, pronta per il tuo canale di signalling
SignalToPeer(aCandidate.AsString);
end;
// i candidati remoti arrivano sul tuo canale di signalling
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 engine ICE riutilizzabile che si inserisce sotto TsgcRTCPeerConnection — oppure funziona da solo per P2P non-WebRTC.
Enumera i candidati host da ogni interfaccia locale, i candidati server-reflexive da ogni server STUN, i candidati relayed da ogni server TURN — tutto in parallelo.
Calcola le priorità delle coppie di candidati secondo RFC 8445 §6.1.2 e ordina la check list. Le coppie congelate si sbloccano man mano che il loro foundation progredisce.
Invia STUN BindingRequests con attributi PRIORITY, ICE-CONTROLLING / ICE-CONTROLLED, USE-CANDIDATE secondo lo standard. Le verifiche triggered si attivano su stimolo in ingresso.
Quando una coppia ha successo e l'agent controlling segnala USE-CANDIDATE, il componente emette OnICECandidatePairNominated con la coppia vincente, e aCandidatePair.Local / Remote ti dicono quali due indirizzi ha scelto.
Implementa le sonde di consent-freshness di RFC 7675: una richiesta Binding sulla coppia nominata ogni ConsentInterval millisecondi, e OnICECandidatePairFailed con motivo Consent Freshness Timeout quando passa ConsentTimeout senza risposta.
Il componente non assume un canale di signalling specifico. Tu metti aCandidate.AsString sul tuo signalling WebSocket, SIP o HTTP, e passi quello che torna indietro ad AddRTCIceCandidate seguito da ProcessCandidates.
Collegamenti diretti al riferimento del componente, al progetto demo pronto all'uso e al download della versione di prova.
| Guida online — TsgcICEClient Riferimento completo di proprietà, metodi ed eventi di questo componente. | Apri | |
| Progetto demo — Demos\35.P2P\04.ICE Progetto di esempio pronto all'uso. Incluso nel pacchetto sgcWebSockets — scarica la versione di prova qui sotto. | Apri | |
| Documento tecnico (PDF) Funzionalità, guida rapida, esempi di codice per Delphi e C++ Builder e riferimenti alle fonti primarie — solo per questo componente. | Apri | |
| Manuale utente (PDF) Manuale completo che copre ogni componente della libreria. | Apri |