前提・実現したいこと
日本と東南アジアの間で、ブラウザ上のWebRTCでのビデオチャットを行いました。シグナリングサーバーへの接続→チャットルームへの参加→あとから来たPeerとの1対1データ通信→同じPeerとのビデオコール→数分話して終了、ということをしたく、いくつかの場所(現地間で最大3kmほど離れた候補地)と日本とで接続をしました。
先方が「雨だから安定しないのかも」と言っているのですが、実際にそんなことがあるのでしょうか? また低速・不安定なケースではだいたいデータ通信までは行っていて音信不通になりタイムアウトというパターンでしたが、今回はその手前なので何かこれがヒントになったりするでしょうか?
発生している問題・エラーメッセージ
前日に接続・会話のできた回線・ブラウザ、日本-東南アジアの間で、朝から雨が降っている日に行ったところまったく繋がりませんでした。
下記のようなコードでエラーはコンソールログに出すようにしていますが特にエラーメッセージはなく、お互いチャットルームに入ったのに`Peer#peerJoin`が発生しなかったり、`Peer.call`または`Peer#call`のタイミングで切れたりしました
該当のソースコード
js
1// 長いので簡略化して書きます: SkyWayを使っています 2const peer = new Peer({...}); 3let globalCall; 4// チャットルームで待ち合わせ 5const room = peer.joinRoom('entrance'); 6// Peerが来たら1-1でデータ通信で申し合わせをしてビデオコール 7room.on('peerJoin', remotePeer => { 8 const dc = peer.connect(remotePeer); 9 dc.on('data', data => { 10 // 申し合わせ内容は省略 11 globalCall = peer.call(remotePeer, mediaStream); 12 }); 13 dc.on('error', e => { 14 console.log(e); 15 }); 16}); 17// 退場したらビデオコールは強制終了 18room.on('peerLeave', _ => { 19 call.close(); 20}); 21// あとから来た方が申し合わせデータを送る 22peer.on('connection', dc => { 23 dc.on('error', e => { 24 console.log(e); 25 }); 26 dc.send('test'); 27}); 28// ビデオコールの始まり 29peer.on('call', call => { 30 call.answer(mediaStream); 31 globalCall = call; 32}); 33// 全部終わります 34peer.on('close', _ => { 35 peer.destroy(); 36}); 37// エラーは全部コンソールログに出ます 38peer.on('error', e => { 39 console.log(e); 40}); 41room.on('error', e => { 42 console.log(e); 43});
試したこと
上記ソースコードは簡易版ですが、接続失敗後に毎回コードのバグを排除するためにブラウザを再読み込みしていました。
複数の場所(数kmほど離れている複数の地域)で同様の試みがあったのですが、いずれも同じ状態でした。ひとつでも繋がればよかったのですが、すべてダメでした。
またひとつの場所でいくつか回線を変えてみたのですが、状況は変わりませんでした。
日本同士は繋がりました。
SkyWayのdebug
は3
です。ときおりSkyWay TURN Server is unavailable
と出ますが、TURNサーバーはすべて自分のものを使用し、SkyWayが出すログでもそのうちのひとつのサーバーが候補になっていることを確認できています。
補足情報(FW/ツールのバージョンなど)
- SkyWay JavaScript SDK
- Chrome 65.0.3325.146
- TURNサーバーはシンガポールに3台 (TURN-TCP (ポート80のみ使用))
- Chromeのコンソール画面で
console.log
のエラー出力をチェック
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/03/09 09:31
2018/03/09 09:39