2016-11-22 7 views
0

PeerJSで簡単なビデオチャットをしようとしています。私は、PC上のFirefoxとAndroid上のFirefoxとの間でオーディオを送信したい。私はコールを実行することができます(call.on)と私は地元のビデオを見ることができますが、何らかの理由でメディアはちょうど他のユーザーに通っていません。現在、私はエラーを取得しています:ICEが失敗しました。PeerJSコールは開始されましたが、ビデオ/オーディオはありません。

ICE failed, see about:webrtc for more details

私はその簡易版でそのようにあるサーバーがあります。

:その後、私は2つのクライアント、呼び出しを行うPCのための1つを持っている

var ip = require('ip'); 
    var PeerServer = require('peer').PeerServer; 

    var port = 9000; 
    var server = new PeerServer({port: port, allow_discovery: true}); 

var SERVER_IP = window.location.hostname; 
var SERVER_PORT = 9000; 
var localStream = ""; 
var peerID = "pc" 
var peerConnectionID = "and" 

var remoteVideo = document.querySelector('#rremote-video'); 
var localVideo = document.querySelector('#llocal-video'); 

var peer = new Peer(peerID, {host: SERVER_IP, port: SERVER_PORT}); 
var conn = peer.connect(peerConnectionID); 


var getUserMedia = navigator.mediaDevices.getUserMedia({ video: true, audio: true }) 
        .then(stream => localVideo.srcObject = stream) 
        .then(stream => localStream = stream) 
        .catch(e => console.log(e.name + ": "+ e.message)); 



waitForElement(); 

function waitForElement(){ 
    if(localStream != ""){ 

     conn.on('open', function(){ 
      conn.send('hi from PC!'); 
     }); 

     peer.on('connection', function(conn) { 
      conn.on('data', function(data){ 
      console.log(data); 
      }); 
     }); 

     console.log("we have a stream: "+localStream); 
     var call = peer.call(peerConnectionID, localStream); 
     console.log("Calling "+peerConnectionID); 
     call.on('stream', function(remotestream) { 
      console.log("Call on."); 
      remoteVideo.srcObject = remotestream; 
     }); 
    } 
    else{ 
     setTimeout(function(){ 
      waitForElement(); 
     },750); 
    } 
} 

そして、呼び出しに応答するものである:

var SERVER_IP = window.location.hostname; 
var SERVER_PORT = 9000; 
var localStream = ""; 
var peerID = "and" 
var peerConnectionID = "pc" 

var remoteVideo = document.querySelector('#rremote-video'); 
var localVideo = document.querySelector('#llocal-video'); 
var remoteAudio = document.querySelector('#remote-audio'); 
var localAudio = document.querySelector('#local-audio'); 


var peer = new Peer(peerID, {host: SERVER_IP, port: SERVER_PORT}); 
var conn = peer.connect(peerConnectionID); 


var getUserMedia = navigator.mediaDevices.getUserMedia({ video: true, audio: true }) 
                  .then(stream => localAudio.srcObject = stream) 
                  .then(stream => localVideo.srcObject = stream) 
                  .then(stream => localStream = stream) 
                  .catch(e =>  console.log(e.name + ": "+ e.message)); 

    waitForElement(); 

    function waitForElement(){ 
     if(localStream != ""){ 

     conn.on('open', function(){ 
      conn.send('hi from android!'); 
     }); 

     peer.on('connection', function(conn) { 
      conn.on('data', function(data){ 
      console.log(data); 
      }); 
     }); 

     peer.on('call', function(call) { 
      console.log("Picking up call."); 
      call.answer(localStream); 
      call.on('stream', function(remotestream) { 
       console.log("Call on."); 
       remoteVideo.srcObject = remotestream; 
      }); 
     }); 
    } 
    else{ 
     setTimeout(function(){ 
      waitForElement(); 
     },750); 
    } 
} 

私は間違っていると思っています。私は主にPeerJSウェブサイトの指示に従っています:http://peerjs.com/誰かが変更する必要のあるものを見ることができれば、助けてください!

答えて

0

httpsを使用していますか?非ローカルマシンに電話をかけることは、ブラウザから許可されなくなりました。

これをテストするには、ローカルマシンで両方のコードセットを実行します。あなたがその接続を行うことができれば、それはあなたのコードが大丈夫であることを意味します。

リモート接続を行うには残念ながらhttpsが必要です。つまり、(httpsとして動作するために)独自のpeerjsサーバが必要になります。

他のオプションは、マシンのいずれかが、それはlocalhostの

0

それはお互いに1を通信することができないあなたのICEの候補者のように聞こえると話していると思わせるためにポート転送を使用することです。 STUNサーバーを使用する必要があります。まだ動作しない場合は、TURNサーバーが必要です。 PeerJSドキュメントから

var peer = new Peer({ 
    config: {'iceServers': [ 
    { url: 'stun:stun.l.google.com:19302' }, 
    { url: 'turn:[email protected]:80', credential: 'homeo' } 
    ]} /* Sample servers, please use appropriate ones */ 
}); 

このlinkは、あなた自身のTURNサーバーを展開する方法を提供します。

+0

返信いただきありがとうございます、うまくいけば私はこれでどこかに行くことができます。だから私は私のubuntuにTURNサーバを設定し、私は悪魔を実行しています。私は新しいピアを次のように変更しました: 'var peer = new Peer { config:{'iceServers':[ {urls: 'stun:stun.l.google.com:19302'}、 {URL: https://myurl.com:3478 '、資格情報:' test '、ユーザ名:' test '} }} });と私のローカルpeer.jsをhttps://cdnjs.cloudflare.com/にスワップしましたajax/libs/peerjs/0.3.14/peer.jsのように、https/httpの不一致について不平を言っていましたが、今は "ReferenceError:Peer is not defined"となっています。 – suppp111

+0

自分のピアサーバーをまだ稼働させる必要がありますか?私は本当にもう呼び出さないので、私は思っていませんでした...もう一つの選択肢は、私が "urlへの変更"エラーを受け取っているので、このpeer.jsは実際にはもう機能していないということです。 – suppp111

+0

自分のネットワーク内で完全に操作している場合を除いて、peerjs、stun、およびturnサーバーはすべて自分のマシンではなく、インターネットに接続する必要があります – Mikkel

関連する問題