使用SignalR作为WebRTC的服务层

Ken*_*ith 6 signalr webrtc xsockets.net

这是我提出的另一个问题的后续行动,但有更准确的信息.

我有两个基本相同的Web页面演示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吗?或者我误解了这个问题,真正的区别在于其他地方?

Ken*_*ith 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()有问题的字符串修复了该错误。