9

我使用 ejabberd + stanza io 来构建一个实时消息和音频呼叫网站。我设法打了我的第一个音频电话

from chrome(on PC) -> chrome(on mac) with no errors

当我尝试拨打电话时出现问题

from chrome(on mac) to firefox(on pc) or vice versa

chrome浏览器日志显示 Could not process WebRTC answer

通过使用chrome://webrtc-internals调试器工具,我发现setremotedescription失败并出现错误:

`Failed to set remote answer sdp: Called with SDP without ice-ufrag and ice-pwd`

这就是我用来开始通话的方法:

var session = client.jingle.createMediaSession('full JID');
  session.addStream(localAudio_stream); // getUserMedia stream
  session.start();

我究竟做错了什么?firefox如何成功建立呼叫但chrome无法(在opera上测试结果相同(失败))

完整的JS代码

4

1 回答 1

4

我通过在client.js(stanza.io)中包含npm包sdpparser解决了这个问题,然后再次构建它,并在stanza.io.bundle中我调整了PeerConnection.prototype.handleAnswer如下:

var sdp = client.SdpParser.parse(answer.sdp);
sdp.media.forEach(function(media){
  if(media.type === 'video' && media.inactive ) {
    delete media.fingerprint;
    media.port = 0;
  }
});
answer.sdp = client.SdpParser.format(sdp);

这可能不是最好的方法,但它绝对可以解决问题。

调整后的 stanza.io 的 github 链接

jingle.js repo 上有用的 github 问题

于 2017-12-18T22:50:49.160 回答