Только вызываемый абонент получает удаленный канал в приложении видеочата webrtc - PullRequest
0 голосов
/ 29 января 2019

Я создаю приложение для видео-чата, использующее реагирование, редукс, webrtc и pusher в качестве моего провайдера сигналов, и приложение почти работает без сбоев, за исключением того факта, что вызывающий не получает удаленный поток, а вызываемый получает.Событие ontrack не срабатывает для звонящего.

Я пытался использовать внутреннюю систему webrtc, и мне кажется, что описания и предложения / ответы созданы и успешно установлены, но есть много загадочных сообщений, которые я не совсем понимаю.

const createAnswer = () => {
    caller.createAnswer().then(sdp => {
        const sessionDesc = new RTCSessionDescription(sdp);
        setLocalDescription(sessionDesc);
        channel.trigger("client-answer", {
            sdp: sdp,
            room: room
        });
    });;
}

const addTrack = (track, stream) => {
    caller.addTrack(track, stream);
}


channel.bind("client-sdp", msg => {
    if (msg.room === userId) {
      store.dispatch({type: actionTypes.ON_INCOMING_CALL});
      let answer = window.confirm("You have a call from " + msg.from + ": Would you like to answer?");
      if (!answer) {
        return channel.trigger("client-reject", { room: msg.room, rejected: userId });
      } else {
      room = msg.room;
      let sessionDesc = new RTCSessionDescription(msg.sdp);
      setRemoteDescription(sessionDesc);
      state = 'answerCall';
      getCam();
      createAnswer(); 
        }
    }
});

const getCam = () => {
    getMedia().then(stream => {
        stream.getTracks().forEach(track => addTrack(track, stream));    
        if (!state){
            createOffer();
        }
        store.dispatch(onLocalStream(stream));
    })
    .catch(error => {
      console.log("an error occured", error);
    });
}
export const getCallerReady = () => {
    return dispatch => {
     dispatch(prepareCaller(channel));
    //Listen for ICE Candidates and send them to remote peers
    caller.onicecandidate = evt => {
      if (!evt.candidate) return;
      onIceCandidate(caller, evt);
    };
    //ontrack handler to receive remote feed and show in remoteview video element
    caller.ontrack = evt => {
        dispatch(onTrack(evt));
    };
    }
}
const onTrack = track => {
    return {
        type: actionTypes.ON_TRACK,
        remoteStream: track.streams[0]
    }
}

Это, я думаю, является важной частью кода.Если вам интересно, эти функции находятся в файле создателей избыточных действий, потому что я отправляю из него некоторые действия.

Я ожидал, что обработчик событий caller.ontrack будет вызываться как для вызывающей, так и для вызываемой стороны, но это тольковызывается для вызываемого абонента

...