#javascript #webrtc
#язык JavaScript #webrtc
Вопрос:
Привет, я попытался использовать следующий код, чтобы включить подключение к WebRTC, когда я нажимаю кнопку «пуск» на веб-сайте. Когда я использую ошеломляющий сервер, он работает безупречно. Я получаю следующие сообщения с сервера:
- Проверяется состояние подключения ICE
- Состояние подключения ICE завершено
Но если я не использую сервер ОГЛУШЕНИЯ (оба одноранговых узла находятся в одной локальной сети), согласно другим сообщениям stackoverflow, я просто не должен передавать адрес сервера ОГЛУШЕНИЯ в конфигурацию. Однако, если я нажму кнопку «Пуск», будет вызвана функция «Пуск», но единственное сообщение, которое я получу, будет:
- Проверяется состояние подключения ICE
и ничего больше. Вот код, который я использую:
var pc = null; function negotiate() { pc.addTransceiver('video', {direction: 'recvonly'}); pc.addTransceiver('audio', {direction: 'recvonly'}); return pc.createOffer().then(function(offer) { return pc.setLocalDescription(offer); }).then(function() { // wait for ICE gathering to complete return new Promise(function(resolve) { if (pc.iceGatheringState === 'complete') { resolve(); } else { function checkState() { if (pc.iceGatheringState === 'complete') { pc.removeEventListener('icegatheringstatechange', checkState); resolve(); } } pc.addEventListener('icegatheringstatechange', checkState); } }); }).then(function() { var offer = pc.localDescription; return fetch('/offer', { body: JSON.stringify({ sdp: offer.sdp, type: offer.type, }), headers: { 'Content-Type': 'application/json' }, method: 'POST' }); }).then(function(response) { return response.json(); }).then(function(answer) { return pc.setRemoteDescription(answer); }).catch(function(e) { alert(e); }); } function start() { var config = { sdpSemantics: 'unified-plan' }; if (document.getElementById('use-stun').checked) { config.iceServers = [{urls: ['stun:stun.l.google.com:19302']}]; } pc = new RTCPeerConnection(config); // connect audio / video pc.addEventListener('track', function(evt) { if (evt.track.kind == 'video') { document.getElementById('video').srcObject = evt.streams[0]; } else { document.getElementById('audio').srcObject = evt.streams[0]; } }); document.getElementById('start').style.display = 'none'; negotiate(); document.getElementById('stop').style.display = 'inline-block'; }
Код, если из следующего репозитория: исходный файл