Как начать сбор кандидатов ICE для однорангового подключения

Я разрабатываю систему сигнализации между двумя одноранговыми узлами и заметил, что событие RTCPeerConnection.onicecandidate не запускается. Я проверил iceGatheringState, и он всегда возвращается как «новый», что означает, что одноранговое соединение не начало поиск ледяных кандидатов.

Как инициировать сбор ледяных объектов-кандидатов с локального компьютера для отправки одноранговому узлу?

а также

Если я не хочу собирать кандидатов, как я смогу отправить их через sdp после того, как их соберут?

Это мой текущий код, я могу успешно получать данные sdp и захватывать их для отправки, поэтому единственные проблемы - лед и проверка, подключены ли два клиента.

var peerConn = new webkitRTCPeerConnection(
    {'iceServers':[{'url':'stun:stun.1.google.com:19302'}]}
);
var remoteConn = new webkitRTCPeerConnection(
    {'iceServers':[{'url':'stun:stun.1.google.com:19302'}]}
);

alert(peerConn.iceGatheringState);

///Event Handlers//
//will be called when each event occurs

//onicecandidate
//returns local ice candidates (when gathered) to be sent to peer
//peerConn.onicecandidate = onicecandidate;
peerConn.onicecandidate = function(iceEvent){ //not firing
    if(iceEvent.candidate === null){
        alert(peerConn.iceConnectionState);
        alert(iceEvent.candidate);

        //send to peer or put in with sdp data
    }
}

person Pj Rigor    schedule 22.07.2016    source источник


Ответы (1)


Сбор ICE начинается после того, как вы вызываете setLocalDescription с SDP, созданным с помощью createOffer или createAnswer.

Если вы не хотите использовать тонкую струйку льда, дождитесь нулевого кандидата, а затем отправьте содержимое peerConn.localDescription.sdp, которое затем должно включать кандидатов.

person Philipp Hancke    schedule 22.07.2016
comment
Итак, в решении без просачивания функции для генерации sdp и локальной настройки дешифрования будут вызываться только после получения нулевого кандидата, что означает, что если я вызову их раньше, то ледяные кандидаты не будут добавлены? - person Pj Rigor; 22.07.2016
comment
нет. Вы просто не сигнализируете SDP перед нулевым кандидатом. Вы должны сгенерировать SDP и вызвать setLocalDescription, чтобы начать сбор. Попробуйте эту скрипку - person Philipp Hancke; 22.07.2016
comment
Я не открывал ни каналов данных, ни потоков. Это может быть моей проблемой, я пытаюсь реализовать скрипку, я посмотрю, сработает ли она. - person Pj Rigor; 22.07.2016
comment
Оно работает! порядок, в котором я выполнял процесс, был неправильным - person Pj Rigor; 23.07.2016
comment
@PjRigor, можете ли вы показать код, по какой-то причине я устанавливаю localdescription, и на стороне ответа нет льда, может быть, что-то связано с добавлением потока? - person Muhammad Umer; 03.10.2017