6

这是我提出的另一个问题的后续,但提供了更准确的信息。

我有两个基本相同的网页来演示 WebRTC,一个使用 XSockets 作为后端信号层,一个使用 SignalR 作为后端信号层。

这两个后端基本上是相同的,不同之处仅在于它们(显然)具有不同的方式将数据发送到客户端。同样,两个客户端上的 TypeScript/JavaScript WebRTC 代码完全相同,因为我已经抽象出信号层。

问题是 XSockets 站点始终如一地工作,而 SignalR 站点却失败了(大部分一致,但不完全)。通常调用时会失败peerConnection.setLocalDescription(),但也可以静默失败;或者它(有时)甚至可以工作。

您可以在这里看到两个不同的页面在运行:

XSockets 站点:http: //xsockets.demo.alanta.com/

SignalR 网站:http ://signalr.demo.alanta.com/

两者的源代码都在https://bitbucket.org/smithkl42/xsockets.webrtc,XSockets版本在分支上xsockets,SignalR 版本在signalr分支上。

所以我的问题是:有人知道为什么使用一个信号层而不是另一个信号层会对 WebRTC 产生任何影响吗?例如,是否其中一个或另一个发回 Unicode 字符串而不是 ANSI?还是我误诊了问题,真正的区别在其他地方?

4

1 回答 1

2

弄清楚了。事实证明,SignalR 1.0 RC1 中有一个错误,它将字符串中的任何“+”更改为空格。所以 SDP 中的行看起来像这样:

a=ice-pwd:qZFVvgfnSso1b8UV1SUDd2+z

正在变成这样:

a=ice-pwd:qZFVvgfnSso1b8UV1SUDd2 z

但是因为不是每个 SDP 在关键行上都有一个“+”,所以有时它会起作用。一切都解释了。

该错误已报告给从事 SignalR 工作的好人(请参阅https://github.com/SignalR/SignalR/issues/1194),同时,一个简单的encodeURIComponent()decodeURIComponent()围绕有问题的字符串修复了它。

于 2012-12-21T09:39:46.440 回答