Нет ледовых кандидатов / Невозможно соединить сверстников Webrtc - PullRequest
0 голосов
/ 02 мая 2020

Я пытался реализовать код webrt c из Webrt c .org руководство по peerconnection . Хотя никаких действительных ледовых кандидатов не генерируется. Я также заметил, что в sdp ihost localhost (127.0.0.1) всегда используется, даже если я запускаю приложение на разных устройствах. В Firefox я получаю ледяное событие. Хотя event.candidate == null.

Что-то я делаю не так?

Вот код:

let socket = io()
let localStream = null;
const configuration = {
    'iceServers': [{
        'urls': 'stun:stun.l.google.com:19302'
    }]
}
let peerConnection = new RTCPeerConnection(configuration)

// init video media
function start() {
    navigator.mediaDevices.getUserMedia({
        audio: true,
        video: true
    }).then(stream => {
        localVideo.srcObject = stream
        localStream = stream
    })
    for (let track of localStream.getTracks()) {
        peerConnection.addTrack(track, localStream)
    }
}

// starts the call
async function call() {
    const offer = await peerConnection.createOffer()
    await peerConnection.setLocalDescription(offer)
    socket.emit('offer', offer)
}

peerConnection.onicecandidate = event => {
    if (event.candidate) {
        socket.emit('newIceCandidate', event.candidate)
    }
}


// Listen for remote ICE candidates and add them to the local RTCPeerConnection

socket.on('newIceCandidate', async candidate => {
    try {
        await peerConnection.addIceCandidate(candidate)
    } catch (e) {
        console.log(e)
    }
})

// Is never called
peerConnection.addEventListener('connectionstatechange', event => {
    if (peerConnection.connectionState === 'connected') {
        console.log('CONNECTED PEER')
    }
})


// user 1 receiving data from other
socket.on('answer', async remoteDescription => {
    const remoteDesc = new RTCSessionDescription(remoteDescription)
    await peerConnection.setRemoteDescription(remoteDesc)
})

// user 2 getting init message
socket.on('offer', async offer => {
    peerConnection.setRemoteDescription(new RTCSessionDescription(offer))
    const answer = await peerConnection.createAnswer()
    await peerConnection.setLocalDescription(answer)
    socket.emit('answer', answer)
})

/////////////// Less relevant /////////////////


peerConnection.oniceconnectionstatechange = state => {
    console.log('ice state change!')
}

peerConnection.ontrack = ({
    streams: [stream]
}) => remoteVideo.srcObject = stream


function stop() {

}

start()

Console output Peer connection contents

1 Ответ

1 голос
/ 11 мая 2020

Прежде чем согласовать webrt c, вы должны добавить свой трек в объект peerconnection.

Но в вашем коде вы этого не сделали.

Функция getUserMedia - Promise.

Так попробуй вот так

// init video media
function start() {
    navigator.mediaDevices.getUserMedia({
        audio: true,
        video: true
    }).then(stream => {
        localVideo.srcObject = stream
        localStream = stream

        for (let track of localStream.getTracks()) {
            peerConnection.addTrack(track, localStream)
        }
    })
}
...