Stanza.io 无法创建 WebRTC 答案

Posted

技术标签:

【中文标题】Stanza.io 无法创建 WebRTC 答案【英文标题】:Stanza.io Could not create WebRTC answer 【发布时间】:2017-12-09 10:00:56 【问题描述】:

我正在使用 ejabberd + stanza.io 制作一个实时消息传递网站, 一切正常。 现在我愿意使用 jingle protocole 来实现 Webrtc 音频/视频。 这是我用来连接的 JS 代码:

var client = XMPP.createClient(
  jid: xmpp_user+'@'+XMPP_DOMAIN,
  password: cu.auth.user_password,
  transport: 'websocket',
  wsURL: "ws://"+xms+":5280/websocket/"
);


client.jingle.config.debug = true;


client.on('session:started', function () 
  client.enableCarbons();
  client.getRoster(function (err, resp) 
    client.updateCaps();
    client.sendPresence(
      caps: client.disco.caps
    );
  );
);

client.connect();

问题是当我从其他应用程序(AstraChat:支持 Jingle 的 ios 应用程序)呼叫用户时,我在浏览器日志中得到了这个:

Jingle: 67bzrsog243: session-initiate undefined undefined
Jingle: 67bzrsog243: Could not create WebRTC answer undefined undefined

这是 astrachat 发送的 xml:

<iq xmlns='jabber:client' xml:lang='en' to='c4ca4238a0b923820dcc509a6f75849b@h2745110.stratoserver.net/352555070032013318140962' from='med@h2745110.stratoserver.net/AstraChat-iOS-21820150' type='get' id='3e8kjajc22'><query xmlns='http://jabber.org/protocol/disco#info'/></iq>
<r xmlns='urn:xmpp:sm:3'/>
<a h='1' xmlns='urn:xmpp:sm:3'/>
<a h='2' xmlns='urn:xmpp:sm:3'/>
jingle:created
iq:set:jingle
<iq xmlns='jabber:client' xml:lang='en' to='c4ca4238a0b923820dcc509a6f75849b@h2745110.stratoserver.net/352555070032013318140962' from='med@h2745110.stratoserver.net/AstraChat-iOS-21820150' type='set' id='3e8kjajc23'><jingle xmlns='urn:xmpp:jingle:1' action='session-initiate' initiator='med@h2745110.stratoserver.net/AstraChat-iOS-21820150' responder='c4ca4238a0b923820dcc509a6f75849b@h2745110.stratoserver.net/352555070032013318140962' sid='3e8kjajc24'><content creator='initiator' name='voice'><description xmlns='urn:xmpp:jingle:apps:rtp:1' media='audio'><payload-type id='101' name='speex' clockrate='8000'/></description><transport xmlns='urn:xmpp:jingle:transports:ice-udp:1' pwd='TC5NsD6IEQGXeDO8d5/3OU' ufrag='yA0z'/></content></jingle></iq>
<r xmlns='urn:xmpp:sm:3'/>
Jingle: 3e8kjajc24: session-initiate undefined undefined
Could not create WebRTC answer undefined undefined

我真的不知道如何解决这个问题,任何帮助将不胜感激。

【问题讨论】:

你能显示 astrachat 正在发送的叮当会话启动节的 xml 吗?它的 voip 内容可能与 WebRTC 不兼容。 @PhilippHancke 我更新了我的答案以涵盖 astrachat 发送的节 【参考方案1】:

根据您的日志,来自 Astra 聊天的会话发起是这样的: <iq xmlns="jabber:client" xml:lang="en" to="c4ca4238a0b923820dcc509a6f75849b@h2745110.stratoserver.net/352555070032013318140962" from="med@h2745110.stratoserver.net/AstraChat-iOS-21820150" type="set" id="3e8kjajc23"> <jingle xmlns="urn:xmpp:jingle:1" action="session-initiate" initiator="med@h2745110.stratoserver.net/AstraChat-iOS-21820150" responder="c4ca4238a0b923820dcc509a6f75849b@h2745110.stratoserver.net/352555070032013318140962" sid="3e8kjajc24"> <content creator="initiator" name="voice"> <description xmlns="urn:xmpp:jingle:apps:rtp:1" media="audio"> <payload-type id="101" name="speex" clockrate="8000" /> </description> <transport xmlns="urn:xmpp:jingle:transports:ice-udp:1" pwd="TC5NsD6IEQGXeDO8d5/3OU" ufrag="yA0z" /> </content> </jingle> </iq> 它只提供 WebRTC 不支持的 speex 音频编解码器(opus 或 G.711 是强制性的)。 WebRTC 中也没有强制加密。

【讨论】:

你知道任何支持 opus 的 jingle 客户端吗?加密是指使用 SSL 吗? 好吧,事实证明,使用letsencrypt证书和其他webrtc实例(在另一台计算机上解决了我的问题)谢谢4你的帮助

以上是关于Stanza.io 无法创建 WebRTC 答案的主要内容,如果未能解决你的问题,请参考以下文章

Stanza.io 插件 XEP-0012:上次活动

使用stanza.io将自定义属性添加到不在服务器上的存档表中存储消息的消息

如何使用 stanza.io 客户端和 ejabberd 服务器在线显示?

Firefox 中的 WebRTC 直播流(H264)错误,无法生成有效的 SDP 答案

WebRTC 错误:无法创建远程会话描述。在错误的状态下调用

如何在 Nativescript 中实现 XMPP 通信?