【问题标题】:I get an stream.getTracks is not a function error in PeerJS. How do i fix this?我得到一个 stream.getTracks 不是 PeerJS 中的函数错误。我该如何解决?
【发布时间】:2021-04-03 00:59:01
【问题描述】:

所以我一直在使用 PeerJS 制作一个 p2p 聊天应用程序,它在尝试聊天时可以工作,但是当我尝试使用以下功能呼叫某人时:

function callEm(id){
  call = peer.call(id,
    navigator.mediaDevices.getUserMedia({video: false, audio: true})
    );

  call.on('stream', function(stream) { // B
      window.remoteAudio.srcObject = stream; // C
      window.remoteAudio.autoplay = true; // D
      window.peerStream = stream; //E
      showConnectedContent(); //F    });
  })
  }

我从 PeerJS 收到一个错误,说 e.getTracks is not a function e.getTracks是peerJS库中的代码:https://unpkg.com/peerjs@1.3.1/dist/peerjs.min.js

我一直在尝试我在互联网上找到的所有内容,但仍然出现此错误。我希望有人能够帮助我。

编辑:我尝试了更简洁的库版本(https://unpkg.com/peerjs@1.3.1/dist/peerjs.js),但我得到了错误 stream.getTracks() is not a function

【问题讨论】:

    标签: webrtc call peerjs


    【解决方案1】:

    所以我找到了解决方案,问题是我的代码错误:P

    所以我创建了一个调用具有 Id 的人的函数。 之前是:

    function callEm(id){
      console.log(id);
      console.log(navigator.mediaDevices.getUserMedia({video: false, audio: true}));
    
      call = peer.call(id,
        // window.localStream
        navigator.mediaDevices.getUserMedia({video: false, audio: true})
        );
    
      call.on('stream', function(stream) { // B
          window.remoteAudio.srcObject = stream; // C
          window.remoteAudio.autoplay = true; // D
          window.peerStream = stream; //E
          showConnectedContent(); //F    });
      })
      }
    

    问题是我提供了一个作为 MediaStream 而不是实际值的承诺。 我知道的愚蠢错误

    所以在一个不和谐的朋友向我指出并帮助我改变它之后, 函数变成了:

    function callEm(id){
      navigator.mediaDevices.getUserMedia({video: false, audio: true})
      .then(function(stream) {
            call = peer.call(id, stream);
            call.on('stream', function(stream) { // B
              window.remoteAudio.srcObject = stream; // C
              window.remoteAudio.autoplay = true; // D
              window.peerStream = stream; //E
              showConnectedContent(); //F    });
            })
        })
        .catch(function(err) {
          console.log("error: " + err);
        })
      );
      }
    

    然后解决了它。我还没准备好接听电话,但这发出了一个没有任何错误的电话!

    我希望有人觉得这很有用。

    【讨论】:

    • 我也有同样的问题。我使用 socket.io 和 peerJS。 Socket.io 将 peerJs ID 广播给房间里的每个人。您可以通过在浏览器上快速刷新来重现此问题。这也是 peerJs 版本 1.3.1 稳定版。
    • 这个答案没有帮助吗?错误是因为我传递的是承诺而不是结果。也许尝试做我在答案中所做的事情。祝你好运。 :)
    猜你喜欢
    • 2018-03-09
    • 1970-01-01
    • 1970-01-01
    • 2021-09-19
    • 2020-01-22
    • 2022-09-07
    • 2021-03-12
    • 2023-02-22
    • 1970-01-01
    相关资源
    最近更新 更多