обзор
MetaRTC поддерживает P2P. ICE не идеален, старая версия реализует только оглушение и поворот, отсутствие реализации интерактивного соединения, новая версия реконструирует часть ICE, реализует интерактивное соединение и полностью совместима со спецификациями ICE-FULL/ICE_LITE.
Процесс metaRTC ICE
Собрать адреса кандидатов (Кандидат)
- Перед общением соберите IP-адреса и номера портов нескольких локальных сетевых карт (canidate).
- Соберите кандидатов на оглушение и соответствующие общедоступные IP-адреса и номера портов.
- Посетите сервер TURN, чтобы получить всех кандидатов на ретрансляцию, общедоступный IP-адрес и порт.
- Соберите кандидатов webrtc tcp
- Соберите кандидатов на ретрансляцию TURN для TCP-соединений.
Выполнив описанные выше шаги, вы сможете узнать, к какой сетевой карте принадлежит кандидат, есть ли NAT и является ли она ретранслятором. После сбора кандидатов вам необходимо назначить приоритеты этим кандидатам. Вообще говоря, кандидат очереди имеет самый низкий приоритет.
Многие маршруты не дружат с udp.Когда udp блокируется маршрутом, metaRTC ICE разумно переключится на webrtc tcp или развернет соединение tcp.
Адрес кандидата на обмен
Обмен сигналами кандидатов через MQTT/WEBSOCKET и т. д., а также создание локальной очереди кандидатов и удаленной очереди кандидатов.
обнаружение соединения
Локальный кандидат и удаленный кандидат объединяются в пары для обнаружения многогруппового соединения.После того, как обнаружение соединения завершено, доступная комбинация соединений используется для начала связи через webrtc.
Интерфейс обратного вызова metaRTC ICE
typedef struct{
void* context;
void (*onIceStateChange)(void* context,int32_t uid,YangIceCandidateState iceState);
void (*onConnectionStateChange)(void* context, int32_t uid,YangRtcConnectionState connectionState);
void (*onIceCandidate)(void* context, int32_t uid,char* sdp);
}YangIceCallback;