Потоковое видео и аудио не работает одновременно в RTCPeerConnection в приложении webrt c реакции - PullRequest
0 голосов
/ 10 апреля 2020

Я работаю над приложением для видеозвонков и совместного использования экрана React. но звук не работает во время видеовызова и общего доступа к экрану.

Я добавил видео и аудио дорожки в RTCPeerConnection, оба добавили к нему, но работает только индекс 0, то есть когда я сначала добавляю голосовую дорожку, а затем работает и когда видео то видео работает

  addMediaStreamTrack = async () => {
    const { localMediaStream, rtcPeerConnection } = this.props
    if (localMediaStream) {
      await localMediaStream.getTracks().reverse().forEach((mediaStreamTrack) => {
        rtcPeerConnection.addTrack(mediaStreamTrack);
      });
    }
  }
this.rtcPeerConnection = new RTCPeerConnection({
    iceServers: this.state.iceServers,
});
// here stun and turn server is used

Вот код для mediaSteam conf.

openCamera = async (fromHandleOffer) => {
    const { mediaConstraints, localMediaStream } = this.state;
    try {
      if (!localMediaStream) {
        let mediaStream;
        if (this.wantCamera)
          mediaStream = await navigator.mediaDevices.getUserMedia(
            mediaConstraints
          );
        else
          mediaStream = await navigator.mediaDevices.getDisplayMedia(
            mediaConstraints
          );
        console.log(mediaStream.getTracks());
        return fromHandleOffer === true
          ? mediaStream
          : this.setState({ localMediaStream: mediaStream });
      }
    } catch (error) {
      console.error("getUserMedia Error: ", error);
    }
  };

// and here is for handleOffer and handleAnswer

  handleOffer = async (data) => {
    const { localMediaStream, roomKey, socketID } = this.state;
    const { payload } = data;
    await this.rtcPeerConnection.setRemoteDescription(payload.message);

    let mediaStream = localMediaStream;

    if (!mediaStream) mediaStream = await this.openCamera(true);
    // console.log(mediaStream.getTracks())
    this.setState(
      { connectionStarted: true, localMediaStream: mediaStream },
      async function () {
        const answer = await this.rtcPeerConnection.createAnswer();
        console.log(answer);
        await this.rtcPeerConnection.setLocalDescription(answer);
        const payload = await createPayload(roomKey, socketID, answer);
        const answerMessage = await createMessage(TYPE_ANSWER, payload);
        this.socket.send(JSON.stringify(answerMessage));
        console.log(JSON.stringify(answerMessage));
      }
    );
  };

  handleAnswer = async (data) => {
    const { payload } = data;
    await this.rtcPeerConnection.setRemoteDescription(payload.message);
  };

запутался, где мне не хватает и что?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...