3

このチュートリアルに従って、WebRTC の簡単な例を作成します。ただし、リモート ビデオはどのブラウザにも表示されず、Chrome にはエラーが表示されません。

キャッチされていない (約束された) DOMException: ICE 候補の処理中にエラーが発生しました

setRemoteDescription メソッドではないログを作成しました。

peerConn.setRemoteDescription(new RTCSessionDescription(signal.sdp), function(){
       alert('success')
    }, function(e){ console.log(e); alert(e)});

そして、次のエラーが表示されます。

OperationError: リモート オファー sdp の設定に失敗しました: 間違った状態で呼び出されました: STATE_SENTOFFER

問題のチュートリアルでは、著者は、すべてを正しく行うことができ、エラーは私の側にあるはずであると主張しています。誰もこれを経験したことがありますか?

(私の英語でごめんなさい)


編集:(コードを含める)

私はまだこの件に関して素人です。最初に引用されたチュートリアルのリンクは、私が楽しみ始めるために見つけた最もクリーンなものでした。重要だと思うソースを載せておきます:

バックエンド - server.js

/** successful connection */
wss.on('connection', function (client) {
  console.log("A new WebSocket client was connected.");
  /** incomming message */
  client.on('message', function (message) {
    /** broadcast message to all clients */
    wss.broadcast(message, client);
  });
});
// broadcasting the message to all WebSocket clients.
wss.broadcast = function (data, exclude) {
  var i = 0, n = this.clients ? this.clients.length : 0, client = null;
  if (n < 1) return;
  console.log("Broadcasting message to all " + n + " WebSocket clients.");
  for (; i < n; i++) {
    client = this.clients[i];
    // don't send the message to the sender...
    if (client === exclude) continue;
    if (client.readyState === client.OPEN) client.send(data);
    else console.error('Error: the client state is ' + client.readyState);
  }
};

フロントエンド - webrtc.js

wsc.onmessage = function (evt) {
  var signal = null;
  if (!peerConn) answerCall();
  signal = JSON.parse(evt.data);
  if (signal.sdp) {
    console.log("Received SDP from remote peer.");
    peerConn.setRemoteDescription(new RTCSessionDescription(signal.sdp), 
      function(){}, 
      function(e){ console.log(e); 
    });
  }
  else if (signal.candidate) {
    console.log("Received ICECandidate from remote peer.");
    peerConn.addIceCandidate(new RTCIceCandidate(signal.candidate));
  } else if ( signal.closeConnection){
    console.log("Received 'close call' signal from remote peer.");
    endCall();
  }
};

すべてのフォント:この github リポジトリから取得したコード。

4

1 に答える 1